1 #ifndef __DALI_INTERNAL_APPLICATION_H__
2 #define __DALI_INTERNAL_APPLICATION_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.
22 #include <boost/bind.hpp>
23 #include <boost/function.hpp>
24 #include <boost/thread.hpp>
26 #include <dali/public-api/math/rect.h>
27 #include <dali/public-api/object/base-object.h>
30 #include <application.h>
32 #include <framework.h>
33 #include <window-impl.h>
45 class CommandLineOptions;
48 typedef Dali::Rect<int> PositionSize;
51 typedef IntrusivePtr<Application> ApplicationPtr;
54 * Implementation of the Application class.
56 class Application : public BaseObject, public Framework::Observer
60 typedef Dali::Application::AppSignalV2 AppSignalV2;
64 * @param[in] app The public instance of the Application
65 * @param[in] argc A pointer to the number of arguments
66 * @param[in] argv A pointer to the argument list
67 * @param[in] name A name of application
68 * @param[in] baseLayout The base layout that the application has been written for
69 * @param[in] windowMode A member of Dali::Application::WINDOW_MODE
71 static ApplicationPtr New(int* argc, char **argv[], const std::string& name,
72 const DeviceLayout& baseLayout,
73 Dali::Application::WINDOW_MODE windowMode);
75 Application(int* argc, char **argv[], const std::string& name, const DeviceLayout& baseLayout, Dali::Application::WINDOW_MODE windowMode );
80 virtual ~Application();
85 * @copydoc Dali::Application::MainLoop()
90 * @copydoc Dali::Application::Lower()
95 * @copydoc Dali::Application::Quit()
100 * @copydoc Dali::Application::AddIdle()
102 bool AddIdle(boost::function<void(void)> callBack);
105 * @copydoc Dali::Application::GetAdaptor();
107 Dali::Adaptor& GetAdaptor();
110 * @copydoc Dali::Application::GetWindow();
112 Dali::Window GetWindow();
115 * @copydoc Dali::Application::Get();
117 static Dali::Application Get();
120 * @copydoc Dali::Application::GetTheme();
122 const std::string& GetTheme();
125 * @copydoc Dali::Application::SetTheme();
127 void SetTheme(const std::string& themeFilePath);
129 public: // Stereoscopy
132 * @copydoc Dali::Application::SetViewMode()
134 void SetViewMode( ViewMode viewMode );
137 * @copydoc Dali::Application::GetViewMode()
139 ViewMode GetViewMode() const;
142 * @copydoc Dali::Application::SetStereoBase()
144 void SetStereoBase( float stereoBase );
147 * @copydoc Dali::Application::GetStereoBase()
149 float GetStereoBase() const;
151 public: // From Framework::Observer
154 * Called when the framework is initialised.
156 virtual void OnInit();
159 * Called when the framework is terminated.
161 virtual void OnTerminate();
164 * Called when the framework is paused.
166 virtual void OnPause();
169 * Called when the framework resumes from a paused state.
171 virtual void OnResume();
174 * Called when the framework informs the application that it should reset itself.
176 virtual void OnReset();
179 * Called when the framework informs the application that the language of the device has changed.
181 virtual void OnLanguageChanged();
186 * Signal handler when the adaptor's window resizes itself.
187 * @param[in] adaptor The adaptor
189 void OnResize(Dali::Adaptor& adaptor);
194 * @copydoc Dali::Application::InitSignal()
196 Dali::Application::AppSignalV2& InitSignal() { return mInitSignalV2; }
199 * @copydoc Dali::Application::TerminateSignal()
201 Dali::Application::AppSignalV2& TerminateSignal() { return mTerminateSignalV2; }
204 * @copydoc Dali::Application::PauseSignal()
206 Dali::Application::AppSignalV2& PauseSignal() { return mPauseSignalV2; }
209 * @copydoc Dali::Application::ResumeSignal()
211 Dali::Application::AppSignalV2& ResumeSignal() { return mResumeSignalV2; }
214 * @copydoc Dali::Application::ResetSignal()
216 Dali::Application::AppSignalV2& ResetSignal() { return mResetSignalV2; }
219 * @copydoc Dali::Application::ResizeSignal()
221 Dali::Application::AppSignalV2& ResizeSignal() { return mResizeSignalV2; }
224 * @copydoc Dali::Application::LanguageChangedSignal()
226 Dali::Application::AppSignalV2& LanguageChangedSignal() { return mLanguageChangedSignalV2; }
231 Application(const Application&);
232 Application& operator=(Application&);
241 * Creates the adaptor
243 void CreateAdaptor();
246 * Quits from the main loop
248 void QuitFromMainLoop();
252 AppSignalV2 mInitSignalV2;
253 AppSignalV2 mTerminateSignalV2;
254 AppSignalV2 mPauseSignalV2;
255 AppSignalV2 mResumeSignalV2;
256 AppSignalV2 mResetSignalV2;
257 AppSignalV2 mResizeSignalV2;
258 AppSignalV2 mLanguageChangedSignalV2;
260 EventLoop* mEventLoop;
261 Framework* mFramework;
263 CommandLineOptions* mCommandLineOptions;
265 Dali::Adaptor* mAdaptor;
266 Dali::Window mWindow;
267 Dali::Application::WINDOW_MODE mWindowMode;
271 DeviceLayout mBaseLayout;
273 SlotDelegate< Application > mSlotDelegate;
276 inline Application& GetImplementation(Dali::Application& application)
278 DALI_ASSERT_ALWAYS(application && "application handle is empty");
280 BaseObject& handle = application.GetBaseObject();
282 return static_cast<Internal::Adaptor::Application&>(handle);
285 inline const Application& GetImplementation(const Dali::Application& application)
287 DALI_ASSERT_ALWAYS(application && "Timre handle is empty");
289 const BaseObject& handle = application.GetBaseObject();
291 return static_cast<const Internal::Adaptor::Application&>(handle);
295 } // namespace Adaptor
297 } // namespace Internal
301 #endif // __DALI_INTERNAL_APPLICATION_H__