725ffe5b405587f9c783230c38de08a301f60297
[platform/core/uifw/dali-adaptor.git] / adaptors / wearable / watch / watch-application.h
1 #ifndef __DALI_WATCH_APPLICATION_H__
2 #define __DALI_WATCH_APPLICATION_H__
3
4 /*
5  * Copyright (c) 2016 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 #include <string>
23 #include <dali/public-api/object/base-handle.h>
24 #include <dali/public-api/signals/callback.h>
25
26 // INTERNAL INCLUDES
27 #include <public-api/adaptor-framework/application.h>
28 #include "watch-time.h"
29
30 namespace Dali
31 {
32 /**
33  * @addtogroup dali_adaptor_framework
34  * @{
35  */
36 namespace Internal DALI_INTERNAL
37 {
38 namespace Adaptor
39 {
40 class WatchApplication;
41 }
42 }
43
44 /**
45  * @brief A WatchApplication class object should be created by every watch application
46  * that wishes to use Dali.
47  *
48  * It provides a means for initialising the resources required by the Dali::Core.
49  * Like Application class, the WatchApplication class manages Tizen watch application life cycle.
50  *
51  * The WatchApplication class emits additional signals which are availalble only in the watch application
52  * (TimeTick, AmbientTick, AmbientChanged)
53  *
54  * This feature is supported in wearable applications only.
55  *
56  * WatchApplication should follow the example below:
57  *
58  * @code
59  * class ExampleController: public ConnectionTracker
60  * {
61  * public:
62  *   ExampleController( WatchApplication& application )
63  *   : mApplication( application )
64  *   {
65  *     mApplication.InitSignal().Connect( this, &ExampleController::Create );
66  *   }
67  *
68  *   void Create( Application& application )
69  *   {
70  *     // Create Dali components...
71  *   }
72  *  ...
73  * private:
74  *   WatchApplication&  mApplication;
75  * };
76  *
77  * int DALI_EXPORT_API main (int argc, char **argv)
78  * {
79  *   WatchApplication app = WatchApplication::New(&argc, &argv);
80  *   ExampleController example( app );
81  *   app.MainLoop();
82  * }
83  * @endcode
84  *
85  * If required, you can also connect class member functions to a signal:
86  *
87  * @code
88  * MyApplication app;
89  * app.ResumeSignal().Connect(&app, &MyApplication::Resume);
90  * @endcode
91  *
92  * When the above options are found, they are stripped from argv, and argc is updated appropriately.
93  * @SINCE_1_1.37
94  */
95
96 class DALI_IMPORT_API WatchApplication : public Application
97 {
98 public:
99   typedef Signal< void (Application&, const WatchTime &) > WatchTimeSignal; ///< Watch pointer signal callback type @SINCE_1_1.37
100   typedef Signal< void (Application&, bool) > WatchBoolSignal; ///< Watch bool signal callback type @SINCE_1_1.37
101
102 public:
103
104   /**
105    * @brief This is the constructor for applications without an argument list.
106    * @SINCE_1_1.37
107    * @return A handle to the WatchApplication
108    */
109   static WatchApplication New();
110
111   /**
112    * @brief This is the constructor for applications.
113    *
114    * @SINCE_1_1.37
115    * @param[in,out]  argc        A pointer to the number of arguments
116    * @param[in,out]  argv        A pointer the the argument list
117    * @return A handle to the WatchApplication
118    */
119   static WatchApplication New( int* argc, char **argv[] );
120
121   /**
122    * @brief This is the constructor for applications with a name
123    *
124    * @SINCE_1_1.37
125    * @param[in,out]  argc        A pointer to the number of arguments
126    * @param[in,out]  argv        A pointer the the argument list
127    * @param[in]      stylesheet  The path to user defined theme file
128    * @return A handle to the WatchApplication
129    */
130   static WatchApplication New( int* argc, char **argv[], const std::string& stylesheet );
131
132   /**
133    * @brief Construct an empty handle
134    * @SINCE_1_1.37
135    */
136   WatchApplication();
137
138   /**
139    * @brief Copy Constructor
140    * @SINCE_1_1.37
141    * @param[in] implementation The WatchApplication implementation
142    */
143   WatchApplication( const WatchApplication& implementation );
144
145   /**
146    * @brief Assignment operator
147    * @SINCE_1_1.37
148    * @param[in] application Handle to an object
149    * @return A reference to this
150    */
151   WatchApplication& operator=( const WatchApplication& application );
152
153   /**
154    * @brief Destructor
155    *
156    * This is non-virtual since derived Handle types must not contain data or virtual methods.
157    * @SINCE_1_1.37
158    */
159   ~WatchApplication();
160
161 public:
162   /**
163    * @brief This signal is emitted at every second
164    * A callback of the following type may be connected:
165    * @code
166    *   void YourCallbackName(Application& application, WatchTimeSignal &time);
167    * @endcode
168    * time(watch time handle) will not be available after returning this callback. It will be freed by the framework.
169    * @SINCE_1_1.37
170    * @return The signal to connect to
171    */
172   WatchTimeSignal& TimeTickSignal();
173
174   /**
175    * @brief This signal is emitted at each minute in ambient mode
176    * A callback of the following type may be connected:
177    * @code
178    *   void YourCallbackName(Application& application, WatchTimeSignal &time);
179    * @endcode
180    * time(watch time handle) will not be available after returning this callback. It will be freed by the framework.
181    * @SINCE_1_1.37
182    * @remarks http://tizen.org/privilege/alarm.set privilege is needed to receive ambient ticks at each minute.
183    * The AmbientTickSignal() will be ignored if your app doesn't have the privilege
184    * @return The signal to connect to
185    */
186   WatchTimeSignal& AmbientTickSignal();
187
188   /**
189    * @brief This signal is emitted when the device enters or exits ambient mode
190    * A callback of the following type may be connected:
191    * @code
192    *   void YourCallbackName(Application& application, bool ambient);
193    * @endcode
194    * ambient_mode If true the device enters the ambient mode, otherwise false
195    * @SINCE_1_1.37
196    * @return The signal to connect to
197    */
198   WatchBoolSignal& AmbientChangedSignal();
199
200 public: // Not intended for application developers
201   /// @cond internal
202   /**
203    * @brief Internal constructor
204    * @SINCE_1_1.37
205    */
206   explicit DALI_INTERNAL WatchApplication(Internal::Adaptor::WatchApplication* implementation);
207   /// @endcond
208 };
209
210 /**
211  * @}
212  */
213 } // namespace Dali
214
215 #endif // __DALI_WATCH_APPLICATION_H__