Merge branch 'devel/master' into sandbox/dkdk/tizen
[platform/core/uifw/dali-adaptor.git] / dali / public-api / adaptor-framework / timer.h
1 #ifndef DALI_TIMER_H
2 #define DALI_TIMER_H
3
4 /*
5  * Copyright (c) 2020 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22
23 #include <dali/public-api/object/base-handle.h>
24 #include <dali/public-api/signals/dali-signal.h>
25
26 // INTERNAL INCLUDES
27 #include <dali/public-api/dali-adaptor-common.h>
28
29 namespace Dali
30 {
31 /**
32  * @addtogroup dali_adaptor_framework
33  * @{
34  */
35
36 namespace Internal DALI_INTERNAL
37 {
38 namespace Adaptor
39 {
40 class Timer;
41 }
42 } // namespace DALI_INTERNAL
43
44 /**
45  * @brief Mechanism to issue simple periodic or one-shot events.
46  *
47  * Timer is provided for application developers to be able to issue
48  * simple periodic or one-shot events.  Please note that timer
49  * callback functions should return as soon as possible, because they
50  * block the next SignalTick.  Please note that timer signals are not
51  * in sync with Dali's render timer.
52  *
53  * This class is a handle class so it can be stack allocated and used
54  * as a member.
55  * @SINCE_1_0.0
56  */
57 class DALI_ADAPTOR_API Timer : public BaseHandle
58 {
59 public:                                   // Signal typedefs
60   typedef Signal<bool()> TimerSignalType; ///< Timer finished signal callback type @SINCE_1_0.0
61
62 public: // API
63   /**
64    * @brief Constructor, creates an uninitialized timer.
65    *
66    * Call New to fully construct a timer.
67    * @SINCE_1_0.0
68    */
69   Timer();
70
71   /**
72    * @brief Creates a tick Timer that emits periodic signal.
73    *
74    * @SINCE_1_0.0
75    * @param[in] milliSec Interval in milliseconds
76    * @return A new timer
77    */
78   static Timer New(unsigned int milliSec);
79
80   /**
81    * @brief Copy constructor.
82    *
83    * @SINCE_1_0.0
84    * @param[in] timer The handle to copy. The copied handle will point at the same implementation
85    */
86   Timer(const Timer& timer);
87
88   /**
89    * @brief Assignment operator.
90    *
91    * @SINCE_1_0.0
92    * @param[in] timer The handle to copy. This handle will point at the same implementation
93    * as the copied handle
94    * @return Reference to this timer handle
95    */
96   Timer& operator=(const Timer& timer);
97
98   /**
99    * @brief Move constructor.
100    *
101    * @SINCE_1_9.24
102    * @param[in] rhs A reference to the moved handle
103    */
104   Timer(Timer&& rhs);
105
106   /**
107    * @brief Move assignment operator.
108    *
109    * @SINCE_1_9.24
110    * @param[in] rhs A reference to the moved handle
111    * @return A reference to this handle
112    */
113   Timer& operator=(Timer&& rhs);
114
115   /**
116    * @brief Destructor.
117    *
118    * This is non-virtual since derived Handle types must not contain data or virtual methods.
119    * @SINCE_1_0.0
120    */
121   ~Timer();
122
123   /**
124    * @brief Downcasts a handle to Timer handle.
125    *
126    * If handle points to a Timer object, the downcast produces a valid handle.
127    * If not, the returned handle is left uninitialized.
128    *
129    * @SINCE_1_0.0
130    * @param[in] handle to An object
131    * @return handle to a Timer object or an uninitialized handle
132    */
133   static Timer DownCast(BaseHandle handle);
134
135   /**
136    * @brief Starts timer.
137    *
138    * In case a Timer is already running, its time is reset and timer is restarted.
139    * @SINCE_1_0.0
140    */
141   void Start();
142
143   /**
144    * @brief Stops timer.
145    * @SINCE_1_0.0
146    */
147   void Stop();
148
149   /**
150    * @brief Pauses timer.
151    * @SINCE_1_3.41
152    */
153   void Pause();
154
155   /**
156    * @brief Resumes timer.
157    * @SINCE_1_3.41
158    */
159   void Resume();
160
161   /**
162    * @brief Sets a new interval on the timer and starts the timer.
163    *
164    * Cancels the previous timer.
165    * @SINCE_1_0.0
166    * @param[in] milliSec Interval in milliseconds
167    */
168   void SetInterval(unsigned int milliSec);
169
170   /**
171    * @brief Sets a new interval on the timer with option to restart the timer.
172    *
173    * Cancels the previous timer.
174    * @SINCE_1_3.41
175    * @param[in] milliSec Interval in milliseconds
176    * @param[in] restart Flag to set enabled to restart or not.
177    */
178   void SetInterval(unsigned int milliSec, bool restart);
179
180   /**
181    * @brief Gets the interval of timer.
182    *
183    * @SINCE_1_0.0
184    * @return Interval in milliseconds
185    */
186   unsigned int GetInterval() const;
187
188   /**
189    * @brief Tells whether timer is running.
190    * @SINCE_1_0.0
191    * @return Whether Timer is started or not
192    */
193   bool IsRunning() const;
194
195 public: // Signals
196   /**
197    * @brief Signal emitted after specified time interval.
198    *
199    * The return of the callback decides whether signal emission stops or continues.
200    * If the callback function returns false, emission will stop and if true, it will continue.
201    * This return value is ignored for one-shot events, which will always stop after the first execution.
202    * @return The signal to Connect() with
203    * @SINCE_1_0.0
204    */
205   TimerSignalType& TickSignal();
206
207 public: // Not intended for application developers
208   explicit DALI_INTERNAL Timer(Internal::Adaptor::Timer* timer);
209 };
210
211 /**
212  * @}
213  */
214 } // namespace Dali
215
216 #endif // DALI_TIMER_H