20099eb68f19dedafb71fedd547658eb6b904e78
[platform/core/uifw/dali-adaptor.git] / dali / public-api / adaptor-framework / application.cpp
1 /*
2  * Copyright (c) 2022 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 // CLASS HEADER
19 #include <dali/public-api/adaptor-framework/application.h>
20
21 // EXTERNAL INCLUDES
22 #include <dali/integration-api/debug.h>
23 #include <dali/public-api/object/object-registry.h>
24
25 // INTERNAL INCLUDES
26 #include <dali/internal/adaptor/common/application-impl.h>
27
28 namespace Dali
29 {
30 Application Application::New()
31 {
32   return New(NULL, NULL);
33 }
34
35 Application Application::New(int* argc, char** argv[])
36 {
37   Internal::Adaptor::ApplicationPtr internal = Internal::Adaptor::Application::GetPreInitializedApplication();
38   if(internal)
39   {
40     // pre-initialized application
41     internal->SetCommandLineOptions(argc, argv);
42     if(argc && (*argc > 0))
43     {
44       internal->GetWindow().SetClass((*argv)[0], "");
45     }
46   }
47   else
48   {
49     internal = Internal::Adaptor::Application::New(argc, argv, "", OPAQUE, PositionSize(), Internal::Adaptor::Framework::NORMAL, WindowType::NORMAL, false);
50   }
51   return Application(internal.Get());
52 }
53
54 Application Application::New(int* argc, char** argv[], const std::string& stylesheet)
55 {
56   Internal::Adaptor::ApplicationPtr internal = Internal::Adaptor::Application::GetPreInitializedApplication();
57   if(internal)
58   {
59     // pre-initialized application
60     internal->SetCommandLineOptions(argc, argv);
61     if(argc && (*argc > 0))
62     {
63       internal->GetWindow().SetClass((*argv)[0], "");
64     }
65     internal->SetStyleSheet(stylesheet);
66   }
67   else
68   {
69     internal = Internal::Adaptor::Application::New(argc, argv, stylesheet, OPAQUE, PositionSize(), Internal::Adaptor::Framework::NORMAL, WindowType::NORMAL, false);
70   }
71   return Application(internal.Get());
72 }
73
74 Application Application::New(int* argc, char** argv[], const std::string& stylesheet, WINDOW_MODE windowMode)
75 {
76   Internal::Adaptor::ApplicationPtr internal = Internal::Adaptor::Application::GetPreInitializedApplication();
77   if(internal)
78   {
79     // pre-initialized application
80     internal->SetCommandLineOptions(argc, argv);
81     if(argc && (*argc > 0))
82     {
83       internal->GetWindow().SetClass((*argv)[0], "");
84     }
85     internal->SetStyleSheet(stylesheet);
86
87     internal->GetWindow().SetTransparency((windowMode == Application::OPAQUE ? false : true));
88   }
89   else
90   {
91     internal = Internal::Adaptor::Application::New(argc, argv, stylesheet, windowMode, PositionSize(), Internal::Adaptor::Framework::NORMAL, WindowType::NORMAL, false);
92   }
93   return Application(internal.Get());
94 }
95
96 Application Application::New(int* argc, char** argv[], const std::string& stylesheet, Application::WINDOW_MODE windowMode, PositionSize positionSize)
97 {
98   Internal::Adaptor::ApplicationPtr internal = Internal::Adaptor::Application::GetPreInitializedApplication();
99   if(internal)
100   {
101     // pre-initialized application
102     internal->SetCommandLineOptions(argc, argv);
103     if(argc && (*argc > 0))
104     {
105       internal->GetWindow().SetClass((*argv)[0], "");
106     }
107     internal->SetStyleSheet(stylesheet);
108
109     internal->GetWindow().SetTransparency((windowMode == Application::OPAQUE ? false : true));
110
111     //Store only the value before adaptor is created
112     internal->StoreWindowPositionSize(positionSize);
113   }
114   else
115   {
116     internal = Internal::Adaptor::Application::New(argc, argv, stylesheet, windowMode, positionSize, Internal::Adaptor::Framework::NORMAL, WindowType::NORMAL, false);
117   }
118   return Application(internal.Get());
119 }
120
121 Application Application::New(int* argc, char** argv[], const std::string& stylesheet, Application::WINDOW_MODE windowMode, PositionSize positionSize, bool useUiThread)
122 {
123   Internal::Adaptor::ApplicationPtr internal = Internal::Adaptor::Application::GetPreInitializedApplication();
124   if(internal)
125   {
126     // pre-initialized application
127     internal->SetCommandLineOptions(argc, argv);
128     if(argc && (*argc > 0))
129     {
130       internal->GetWindow().SetClass((*argv)[0], "");
131     }
132     internal->SetStyleSheet(stylesheet);
133
134     internal->GetWindow().SetTransparency((windowMode == Application::OPAQUE ? false : true));
135
136     //Store only the value before adaptor is created
137     internal->StoreWindowPositionSize(positionSize);
138   }
139   else
140   {
141     internal = Internal::Adaptor::Application::New(argc, argv, stylesheet, windowMode, positionSize, Internal::Adaptor::Framework::NORMAL, WindowType::NORMAL, useUiThread);
142   }
143   return Application(internal.Get());
144 }
145
146 Application::~Application()
147 {
148 }
149
150 Application::Application()
151 {
152 }
153
154 Application::Application(const Application& copy) = default;
155
156 Application& Application::operator=(const Application& rhs) = default;
157
158 Application::Application(Application&& rhs) = default;
159
160 Application& Application::operator=(Application&& rhs) = default;
161
162 void Application::MainLoop()
163 {
164   Internal::Adaptor::GetImplementation(*this).MainLoop();
165 }
166
167 void Application::Lower()
168 {
169   Internal::Adaptor::GetImplementation(*this).Lower();
170 }
171
172 void Application::Quit()
173 {
174   Internal::Adaptor::GetImplementation(*this).Quit();
175 }
176
177 bool Application::AddIdle(CallbackBase* callback)
178 {
179   return Internal::Adaptor::GetImplementation(*this).AddIdle(callback, false);
180 }
181
182 Window Application::GetWindow()
183 {
184   return Internal::Adaptor::GetImplementation(*this).GetWindow();
185 }
186
187 std::string Application::GetResourcePath()
188 {
189   return Internal::Adaptor::Application::GetResourcePath();
190 }
191
192 std::string Application::GetRegion() const
193 {
194   return Internal::Adaptor::GetImplementation(*this).GetRegion();
195 }
196
197 std::string Application::GetLanguage() const
198 {
199   return Internal::Adaptor::GetImplementation(*this).GetLanguage();
200 }
201
202 ObjectRegistry Application::GetObjectRegistry() const
203 {
204   return Internal::Adaptor::GetImplementation(*this).GetObjectRegistry();
205 }
206
207 Application::AppSignalType& Application::InitSignal()
208 {
209   return Internal::Adaptor::GetImplementation(*this).InitSignal();
210 }
211
212 Application::AppSignalType& Application::TerminateSignal()
213 {
214   return Internal::Adaptor::GetImplementation(*this).TerminateSignal();
215 }
216
217 Application::AppSignalType& Application::PauseSignal()
218 {
219   return Internal::Adaptor::GetImplementation(*this).PauseSignal();
220 }
221
222 Application::AppSignalType& Application::ResumeSignal()
223 {
224   return Internal::Adaptor::GetImplementation(*this).ResumeSignal();
225 }
226
227 Application::AppSignalType& Application::ResetSignal()
228 {
229   return Internal::Adaptor::GetImplementation(*this).ResetSignal();
230 }
231
232 Application::AppControlSignalType& Application::AppControlSignal()
233 {
234   return Internal::Adaptor::GetImplementation(*this).AppControlSignal();
235 }
236
237 Application::AppSignalType& Application::LanguageChangedSignal()
238 {
239   return Internal::Adaptor::GetImplementation(*this).LanguageChangedSignal();
240 }
241
242 Application::AppSignalType& Application::RegionChangedSignal()
243 {
244   return Internal::Adaptor::GetImplementation(*this).RegionChangedSignal();
245 }
246
247 Application::LowBatterySignalType& Application::LowBatterySignal()
248 {
249   return Internal::Adaptor::GetImplementation(*this).LowBatterySignal();
250 }
251
252 Application::LowMemorySignalType& Application::LowMemorySignal()
253 {
254   return Internal::Adaptor::GetImplementation(*this).LowMemorySignal();
255 }
256
257 Application::AppSignalType& Application::TaskInitSignal()
258 {
259   return Internal::Adaptor::GetImplementation(*this).TaskInitSignal();
260 }
261
262 Application::AppSignalType& Application::TaskTerminateSignal()
263 {
264   return Internal::Adaptor::GetImplementation(*this).TaskTerminateSignal();
265 }
266
267 Application::AppControlSignalType& Application::TaskAppControlSignal()
268 {
269   return Internal::Adaptor::GetImplementation(*this).TaskAppControlSignal();
270 }
271
272 Application::AppSignalType& Application::TaskLanguageChangedSignal()
273 {
274   return Internal::Adaptor::GetImplementation(*this).TaskLanguageChangedSignal();
275 }
276
277 Application::AppSignalType& Application::TaskRegionChangedSignal()
278 {
279   return Internal::Adaptor::GetImplementation(*this).TaskRegionChangedSignal();
280 }
281
282 Application::LowBatterySignalType& Application::TaskLowBatterySignal()
283 {
284   return Internal::Adaptor::GetImplementation(*this).TaskLowBatterySignal();
285 }
286
287 Application::LowMemorySignalType& Application::TaskLowMemorySignal()
288 {
289   return Internal::Adaptor::GetImplementation(*this).TaskLowMemorySignal();
290 }
291
292 Application::Application(Internal::Adaptor::Application* application)
293 : BaseHandle(application)
294 {
295 }
296
297 } // namespace Dali