1 #ifndef __DALI_TIMER_H__
2 #define __DALI_TIMER_H__
5 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
23 #include <dali/public-api/object/base-handle.h>
24 #include <dali/public-api/signals/dali-signal-v2.h>
26 namespace Dali DALI_IMPORT_API
29 namespace Internal DALI_INTERNAL
38 * @brief Mechanism to issue simple periodic or one-shot events.
40 * Timer is provided for application developers to be able to issue
41 * simple periodic or one-shot events. Please note that timer
42 * callback functions should return as soon as possible, because they
43 * block the next SignalTick. Please note that timer signals are not
44 * in sync with Dali's render timer.
46 * This class is a handle class so it can be stack allocated and used
49 class Timer : public BaseHandle
51 public: // Signal typedefs
53 typedef SignalV2< bool () > TimerSignalV2; ///< Timer finished signal callback type
58 * @brief Constructor, creates an uninitialized timer.
60 * Call New to fully construct a timer.
65 * @brief Create an tick Timer that emits periodic signal.
67 * @param[in] milliSec Interval in milliseconds.
70 static Timer New( unsigned int milliSec );
73 * @brief Copy constructor.
75 * @param[in] timer The handle to copy. The copied handle will point at the same implementation
77 Timer( const Timer& timer );
80 * @brief Assignment operator.
82 * @param[in] timer The handle to copy. This handle will point at the same implementation
83 * as the copied handle.
84 * @return Reference to this timer handle
86 Timer& operator=( const Timer& timer );
89 * @brief This method is defined to allow assignment of the NULL value,
90 * and will throw an exception if passed any other value.
92 * Assigning to NULL is an alias for Reset().
93 * @param [in] rhs A NULL pointer
94 * @return A reference to this handle
96 Timer& operator=(BaseHandle::NullType* rhs);
101 * This is non-virtual since derived Handle types must not contain data or virtual methods.
106 * @brief Downcast an Object handle to Timer handle.
108 * If handle points to a Timer object the downcast produces a valid
109 * handle. If not the returned handle is left uninitialized.
111 * @param[in] handle to An object
112 * @return handle to a Timer object or an uninitialized handle
114 static Timer DownCast( BaseHandle handle );
117 * @brief Start timer.
119 * In case a Timer is already running it's time is reset and timer is restarted.
129 * @brief Sets a new interval on the timer and starts the timer.
131 * Cancels the previous timer.
132 * @param milliSec Interval in milliseconds.
134 void SetInterval( unsigned int milliSec );
137 * @brief Get the interval of timer.
138 * @returns Interval in milliseconds.
140 unsigned int GetInterval() const;
143 * @brief Tells whether timer is running.
144 * @return Whether Timer is started or not.
146 bool IsRunning() const;
151 * @brief Signal emitted after specified time interval.
153 * The return of the callback decides whether signal emission stops or continues.
154 * If the callback function returns false emission will stop, if true it will continue
155 * This return value is ignored for one-shot events, which will always stop after the first execution.
156 * @returns The signal to Connect() with.
158 TimerSignalV2& TickSignal();
160 public: // Not intended for application developers
161 explicit DALI_INTERNAL Timer(Internal::Adaptor::Timer* timer);
166 #endif // __DALI_TIMER_H__