summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/gui/skin/SkinTimer.cpp
blob: c4e88b772f7e1e59d9564daed635675544878e38 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
 *  Copyright (C) 2022 Team Kodi
 *  This file is part of Kodi - https://kodi.tv
 *
 *  SPDX-License-Identifier: GPL-2.0-or-later
 *  See LICENSES/README.md for more information.
 */
#include "SkinTimer.h"

#include "interfaces/info/Info.h"

CSkinTimer::CSkinTimer(const std::string& name,
                       const INFO::InfoPtr& startCondition,
                       const INFO::InfoPtr& resetCondition,
                       const INFO::InfoPtr& stopCondition,
                       const CGUIAction& startActions,
                       const CGUIAction& stopActions,
                       bool resetOnStart)
  : m_name{name},
    m_startCondition{startCondition},
    m_resetCondition{resetCondition},
    m_stopCondition{stopCondition},
    m_startActions{startActions},
    m_stopActions{stopActions},
    m_resetOnStart{resetOnStart}
{
}

void CSkinTimer::Start()
{
  if (m_resetOnStart)
  {
    CStopWatch::StartZero();
  }
  else
  {
    CStopWatch::Start();
  }
  OnStart();
}

void CSkinTimer::Reset()
{
  CStopWatch::Reset();
}

void CSkinTimer::Stop()
{
  CStopWatch::Stop();
  OnStop();
}

bool CSkinTimer::VerifyStartCondition() const
{
  return m_startCondition && m_startCondition->Get(INFO::DEFAULT_CONTEXT);
}

bool CSkinTimer::VerifyResetCondition() const
{
  return m_resetCondition && m_resetCondition->Get(INFO::DEFAULT_CONTEXT);
}

bool CSkinTimer::VerifyStopCondition() const
{
  return m_stopCondition && m_stopCondition->Get(INFO::DEFAULT_CONTEXT);
}

INFO::InfoPtr CSkinTimer::GetStartCondition() const
{
  return m_startCondition;
}

INFO::InfoPtr CSkinTimer::GetResetCondition() const
{
  return m_resetCondition;
}

INFO::InfoPtr CSkinTimer::GetStopCondition() const
{
  return m_stopCondition;
}

void CSkinTimer::OnStart()
{
  if (m_startActions.HasAnyActions())
  {
    m_startActions.ExecuteActions();
  }
}

void CSkinTimer::OnStop()
{
  if (m_stopActions.HasAnyActions())
  {
    m_stopActions.ExecuteActions();
  }
}