Fix build error.
[platform/core/uifw/dali-adaptor.git] / adaptors / common / application-impl.h
1 #ifndef __DALI_INTERNAL_APPLICATION_H__
2 #define __DALI_INTERNAL_APPLICATION_H__
3
4 /*
5  * Copyright (c) 2017 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 <dali/public-api/math/rect.h>
23 #include <dali/public-api/object/base-object.h>
24
25 // INTERNAL INCLUDES
26 #include <application.h>
27 #include <singleton-service.h>
28
29 #include <framework.h>
30 #include <window-impl.h>
31 #include <base/environment-options.h>
32
33 namespace Dali
34 {
35 class Adaptor;
36 class Window;
37
38 namespace Internal
39 {
40
41 namespace Adaptor
42 {
43
44 namespace Launchpad
45 {
46
47 /**
48  * @brief Launchpad is used to improve application launch performance.
49  * When an application is pre-initialized, so files are preloaded, some functions are initialized and a window is made in advance.
50  */
51 enum State
52 {
53   NONE,              ///< The default state
54   PRE_INITIALIZED    ///< Application is pre-initialized.
55 };
56
57 } // namespace Launchpad
58
59 class CommandLineOptions;
60 class EventLoop;
61
62 typedef Dali::Rect<int> PositionSize;
63
64 class Application;
65 typedef IntrusivePtr<Application> ApplicationPtr;
66
67 /**
68  * Implementation of the Application class.
69  */
70 class Application : public BaseObject, public Framework::Observer
71 {
72 public:
73
74   typedef Dali::Application::LowBatterySignalType LowBatterySignalType;
75   typedef Dali::Application::LowMemorySignalType LowMemorySignalType;
76   typedef Dali::Application::AppSignalType AppSignalType;
77   typedef Dali::Application::AppControlSignalType AppControlSignalType;
78   typedef Dali::Application::WINDOW_MODE WINDOW_MODE;
79
80   /**
81    * Create a new application
82    * @param[in]  argc         A pointer to the number of arguments
83    * @param[in]  argv         A pointer to the argument list
84    * @param[in]  stylesheet   The path to user defined theme file
85    * @param[in]  windowMode   A member of Dali::Application::WINDOW_MODE
86    * @param[in]  positionSize A position and a size of the window
87    * @param[in]  applicationType  A member of Dali::Framework::Type
88    */
89   static ApplicationPtr New( int* argc, char **argv[], const std::string& stylesheet,
90     WINDOW_MODE windowMode, const PositionSize& positionSize, Framework::Type applicationType );
91
92   /**
93    * @copydoc Dali::DevelApplication::PreInitialize()
94    */
95   static void PreInitialize( int* argc, char** argv[] );
96
97 public:
98
99   /**
100    * @copydoc Dali::Application::MainLoop()
101    */
102   void MainLoop(Dali::Configuration::ContextLoss configuration);
103
104   /**
105    * @copydoc Dali::Application::Lower()
106    */
107   void Lower();
108
109   /**
110    * @copydoc Dali::Application::Quit()
111    */
112   void Quit();
113
114   /**
115    * @copydoc Dali::Application::AddIdle()
116    */
117   bool AddIdle( CallbackBase* callback );
118
119   /**
120    * @copydoc Dali::Application::GetAdaptor();
121    */
122   Dali::Adaptor& GetAdaptor();
123
124   /**
125    * @copydoc Dali::Application::GetWindow();
126    */
127   Dali::Window GetWindow();
128
129   /**
130    * @copydoc Dali::Application::GetRegion();
131    */
132   std::string GetRegion() const;
133
134   /**
135    * @copydoc Dali::Application::GetLanguage();
136    */
137   std::string GetLanguage() const;
138
139   /**
140    * @copydoc Dali::Application::ReplaceWindow();
141    */
142   void ReplaceWindow( const PositionSize& positionSize, const std::string& name);
143
144   /**
145    * @copydoc Dali::Application::GetResourcePath();
146    */
147   static std::string GetResourcePath();
148
149   /**
150    * Retrieves the pre-initialized application.
151    *
152    * @return A pointer to the pre-initialized application
153    */
154   static ApplicationPtr GetPreInitializedApplication();
155
156 public: // Stereoscopy
157
158   /**
159    * @copydoc Dali::Application::SetViewMode()
160    */
161   void SetViewMode( ViewMode viewMode );
162
163   /**
164    * @copydoc Dali::Application::GetViewMode()
165    */
166   ViewMode GetViewMode() const;
167
168   /**
169    * @copydoc Dali::Application::SetStereoBase()
170    */
171   void SetStereoBase( float stereoBase );
172
173   /**
174    * @copydoc Dali::Application::GetStereoBase()
175    */
176   float GetStereoBase() const;
177
178 public: // Lifecycle functionality
179
180   /**
181    * Called when OnInit is called or the framework is initialised.
182    */
183   void DoInit();
184
185   /**
186    * Called after OnInit is called or the framework is started.
187    */
188   void DoStart();
189
190   /**
191    * Called when OnTerminate is called or the framework is terminated.
192    */
193   void DoTerminate();
194
195   /**
196    * Called when OnPause is called or the framework is paused.
197    */
198   void DoPause();
199
200   /**
201    * Called when OnResume is called or the framework resumes from a paused state.
202    */
203   void DoResume();
204
205   /**
206    * Called when OnLanguageChanged is called or the framework informs the application that the language of the device has changed.
207    */
208   void DoLanguageChange();
209
210 public: // From Framework::Observer
211
212   /**
213    * Called when the framework is initialised.
214    */
215   virtual void OnInit();
216
217   /**
218    * Called when the framework is terminated.
219    */
220   virtual void OnTerminate();
221
222   /**
223    * Called when the framework is paused.
224    */
225   virtual void OnPause();
226
227   /**
228    * Called when the framework resumes from a paused state.
229    */
230   virtual void OnResume();
231
232   /**
233   * Called when the framework received AppControlSignal.
234   * @param[in] The bundle data of AppControl event.
235   */
236   virtual void OnAppControl(void *data);
237
238   /**
239    * Called when the framework informs the application that it should reset itself.
240    */
241   virtual void OnReset();
242
243   /**
244    * Called when the framework informs the application that the language of the device has changed.
245    */
246   virtual void OnLanguageChanged();
247
248   /**
249   * Called when the framework informs the application that the region of the device has changed.
250   */
251   virtual void OnRegionChanged();
252
253   /**
254   * Called when the framework informs the application that the battery level of the device is low.
255   */
256   virtual void OnBatteryLow( Dali::DeviceStatus::Battery::Status status );
257
258   /**
259   * Called when the framework informs the application that the memory level of the device is low.
260   */
261   virtual void OnMemoryLow( Dali::DeviceStatus::Memory::Status status );
262
263 public:
264
265   /**
266    * Signal handler when the adaptor's window resizes itself.
267    * @param[in]  adaptor  The adaptor
268    */
269   void OnResize(Dali::Adaptor& adaptor);
270
271   /**
272    * Sets a user defined theme file.
273    * This should be called before initialization.
274    * @param[in] stylesheet The path to user defined theme file
275    */
276   void SetStyleSheet( const std::string& stylesheet );
277
278 public:  // Signals
279
280   /**
281    * @copydoc Dali::Application::InitSignal()
282    */
283   Dali::Application::AppSignalType& InitSignal() { return mInitSignal; }
284
285   /**
286    * @copydoc Dali::Application::TerminateSignal()
287    */
288   Dali::Application::AppSignalType& TerminateSignal() { return mTerminateSignal; }
289
290   /**
291    * @copydoc Dali::Application::PauseSignal()
292    */
293   Dali::Application::AppSignalType& PauseSignal() { return mPauseSignal; }
294
295   /**
296    * @copydoc Dali::Application::ResumeSignal()
297    */
298   Dali::Application::AppSignalType& ResumeSignal() { return mResumeSignal; }
299
300   /**
301    * @copydoc Dali::Application::ResetSignal()
302    */
303   Dali::Application::AppSignalType& ResetSignal() { return mResetSignal; }
304
305   /**
306   * @copydoc Dali::Application::AppControlSignal()
307   */
308   Dali::Application::AppControlSignalType& AppControlSignal() { return mAppControlSignal; }
309
310   /**
311    * @copydoc Dali::Application::ResizeSignal()
312    */
313   Dali::Application::AppSignalType& ResizeSignal() { return mResizeSignal; }
314
315   /**
316    * @copydoc Dali::Application::LanguageChangedSignal()
317    */
318   Dali::Application::AppSignalType& LanguageChangedSignal() { return mLanguageChangedSignal; }
319
320   /**
321   * @copydoc Dali::Application::RegionChangedSignal()
322   */
323   Dali::Application::AppSignalType& RegionChangedSignal() { return mRegionChangedSignal; }
324
325   /**
326   * @copydoc Dali::Application::BatteryLowSignal()
327   */
328   Dali::Application::AppSignalType& BatteryLowSignal() { return mBatteryLowSignal; }
329
330   /**
331   * @copydoc Dali::Application::MemoryLowSignal()
332   */
333   Dali::Application::AppSignalType& MemoryLowSignal() { return mMemoryLowSignal; }
334
335   /**
336   * @copydoc Dali::Application::LowBatterySignal()
337   */
338   Dali::Application::LowBatterySignalType& LowBatterySignal() { return mLowBatterySignal; }
339
340   /**
341   * @copydoc Dali::Application:::LowMemorySignal()
342   */
343   Dali::Application::LowMemorySignalType& LowMemorySignal() { return mLowMemorySignal; }
344
345 protected:
346
347   /**
348    * Private Constructor
349    * @param[in]  argc         A pointer to the number of arguments
350    * @param[in]  argv         A pointer to the argument list
351    * @param[in]  stylesheet   The path to user defined theme file
352    * @param[in]  windowMode   A member of Dali::Application::WINDOW_MODE
353    * @param[in]  positionSize A position and a size of the window
354    * @param[in]  applicationType  A member of Dali::Framework::Type
355    */
356   Application( int* argc, char **argv[], const std::string& stylesheet,
357       WINDOW_MODE windowMode, const PositionSize& positionSize, Framework::Type applicationType );
358
359   /**
360    * Destructor
361    */
362   virtual ~Application();
363
364   // Undefined
365   Application(const Application&);
366   Application& operator=(Application&);
367
368   /**
369    * Creates the window
370    */
371   void CreateWindow();
372
373   /**
374    * Creates the adaptor
375    */
376   void CreateAdaptor();
377
378   /**
379    * Quits from the main loop
380    */
381   void QuitFromMainLoop();
382
383 private:
384
385   AppSignalType                         mInitSignal;
386   AppSignalType                         mTerminateSignal;
387   AppSignalType                         mPauseSignal;
388   AppSignalType                         mResumeSignal;
389   AppSignalType                         mResetSignal;
390   AppSignalType                         mResizeSignal;
391   AppControlSignalType                  mAppControlSignal;
392   AppSignalType                         mLanguageChangedSignal;
393   AppSignalType                         mRegionChangedSignal;
394   AppSignalType                         mBatteryLowSignal;
395   AppSignalType                         mMemoryLowSignal;
396   LowBatterySignalType                  mLowBatterySignal;
397   LowMemorySignalType                   mLowMemorySignal;
398
399   EventLoop*                            mEventLoop;
400   Framework*                            mFramework;
401
402   Dali::Configuration::ContextLoss      mContextLossConfiguration;
403   CommandLineOptions*                   mCommandLineOptions;
404
405   Dali::SingletonService                mSingletonService;
406   Dali::Adaptor*                        mAdaptor;
407   Dali::Window                          mWindow;
408   Dali::Application::WINDOW_MODE        mWindowMode;
409   std::string                           mName;
410   std::string                           mStylesheet;
411   EnvironmentOptions                    mEnvironmentOptions;
412   PositionSize                          mWindowPositionSize;
413   Launchpad::State                      mLaunchpadState;
414   bool                                  mUseRemoteSurface;
415
416   SlotDelegate< Application >           mSlotDelegate;
417
418   static ApplicationPtr                 gPreInitializedApplication;
419 };
420
421 inline Application& GetImplementation(Dali::Application& application)
422 {
423   DALI_ASSERT_ALWAYS(application && "application handle is empty");
424
425   BaseObject& handle = application.GetBaseObject();
426
427   return static_cast<Internal::Adaptor::Application&>(handle);
428 }
429
430 inline const Application& GetImplementation(const Dali::Application& application)
431 {
432   DALI_ASSERT_ALWAYS(application && "Timre handle is empty");
433
434   const BaseObject& handle = application.GetBaseObject();
435
436   return static_cast<const Internal::Adaptor::Application&>(handle);
437 }
438
439
440 } // namespace Adaptor
441
442 } // namespace Internal
443
444 } // namespace Dali
445
446 #endif // __DALI_INTERNAL_APPLICATION_H__