Changed indicator bg color.
[platform/framework/native/uifw.git] / src / ui / controls / FUiCtrl_DateTimePickerImpl.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0/
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 /**
19  * @file                FUiCtrl_DateTimePickerImpl.cpp
20  * @brief               This is the implementation file for the _DateTimePickerImpl class.
21  */
22
23 #include <FBaseErrorDefine.h>
24 #include <FBaseSysLog.h>
25 #include "FUiCtrl_DateTimePickerImpl.h"
26 #include "FUiCtrl_DateTimePicker.h"
27 #include "FUiCtrl_FrameImpl.h"
28 #include "FUi_ControlImplManager.h"
29 #include "FUi_ResourceSizeInfo.h"
30 #include "FUi_ResourceManager.h"
31 #include "FUiCtrl_Form.h"
32
33 using namespace Tizen::Ui::Animations;
34
35 using namespace Tizen::Base;
36 using namespace Tizen::Graphics;
37
38
39 namespace Tizen { namespace Ui { namespace Controls
40 {
41
42 FloatDimension
43 _DateTimePickerImpl::DateTimePickerSizeInfo::GetDefaultMinimumSizeF(_ControlOrientation orientation) const
44 {
45         FloatDimension pickerSize(0.0f, 0.0f);
46         FloatDimension screenSize(0.0f, 0.0f);
47
48         screenSize = _ControlManager::GetInstance()->GetScreenSizeF();
49         pickerSize = screenSize;
50         if (orientation == _CONTROL_ORIENTATION_LANDSCAPE)
51         {
52                 pickerSize.width = screenSize.height;
53                 pickerSize.height = screenSize.width;
54         }
55
56         return pickerSize;
57 }
58
59 FloatDimension
60 _DateTimePickerImpl::DateTimePickerSizeInfo::GetDefaultMaximumSizeF(_ControlOrientation orientation) const
61 {
62         FloatDimension pickerSize(0, 0);
63         FloatDimension screenSize(0, 0);
64
65         screenSize = _ControlManager::GetInstance()->GetScreenSizeF();
66         pickerSize = screenSize;
67         if (orientation == _CONTROL_ORIENTATION_LANDSCAPE)
68         {
69                 pickerSize.width = screenSize.height;
70                 pickerSize.height = screenSize.width;
71         }
72
73         return pickerSize;
74 }
75
76 _DateTimePickerImpl::_DateTimePickerImpl(DateTimePicker* pPublic, _DateTimePicker* pCore)
77         : _WindowImpl(pPublic, pCore)
78         , __pPublicDateTimeChangeEvent(null)
79 {
80 }
81
82 _DateTimePickerImpl::~_DateTimePickerImpl(void)
83 {
84         if (__pPublicDateTimeChangeEvent != null)
85         {
86                 delete __pPublicDateTimeChangeEvent;
87                 __pPublicDateTimeChangeEvent = null;
88         }
89 }
90
91 _DateTimePickerImpl*
92 _DateTimePickerImpl::CreateDateTimePickerImplN(DateTimePicker* pControl, const String& title)
93 {
94         ClearLastResult();
95
96         result r = E_SUCCESS;
97
98         _DateTimePicker* pCore = _DateTimePicker::CreateDateTimePickerN(DATETIME_OUTPUT_STYLE_DATE | DATETIME_OUTPUT_STYLE_TIME, title);
99         SysTryReturn(NID_UI_CTRL, (pCore != null), null, r, "[%s] Propagating.", GetErrorMessage(GetLastResult()));
100
101         _DateTimePickerImpl* pDateTimePickerImpl = new (std::nothrow) _DateTimePickerImpl(pControl, pCore);
102         r = CheckConstruction(pCore, pDateTimePickerImpl);
103         SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), null, r, "[%s] Propagating.", GetErrorMessage(r));
104
105         pDateTimePickerImpl->__pPublicDateTimeChangeEvent = new (std::nothrow) _PublicDateTimeChangeEvent(*pControl);
106         SysTryCatch(NID_UI_CTRL, (pDateTimePickerImpl->__pPublicDateTimeChangeEvent != null), , E_OUT_OF_MEMORY,
107                            "[E_OUT_OF_MEMORY] Memory allocation failed.");
108
109         r = pDateTimePickerImpl->InitializeBoundsProperties(GET_SIZE_INFO(DateTimePicker), pCore->GetOrientation());
110         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
111
112         r = pCore->AddDateTimeChangeEventListener(*pDateTimePickerImpl);
113         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
114
115         return pDateTimePickerImpl;
116
117 CATCH:
118         delete pDateTimePickerImpl;
119
120         return null;
121 }
122
123 const char*
124 _DateTimePickerImpl::GetPublicClassName(void) const
125 {
126         return "Tizen::Ui::Controls::DateTimePicker";
127 }
128
129 const DateTimePicker&
130 _DateTimePickerImpl::GetPublic(void) const
131 {
132         return static_cast <const DateTimePicker&>(_ControlImpl::GetPublic());
133 }
134
135 DateTimePicker&
136 _DateTimePickerImpl::GetPublic(void)
137 {
138         return static_cast <DateTimePicker&>(_ControlImpl::GetPublic());
139 }
140
141 const _DateTimePicker&
142 _DateTimePickerImpl::GetCore(void) const
143 {
144         return static_cast <const _DateTimePicker&>(_ControlImpl::GetCore());
145 }
146
147 _DateTimePicker&
148 _DateTimePickerImpl::GetCore(void)
149 {
150         return static_cast <_DateTimePicker&>(_ControlImpl::GetCore());
151 }
152
153 _DateTimePickerImpl*
154 _DateTimePickerImpl::GetInstance(DateTimePicker& dateTimePicker)
155 {
156         return static_cast<_DateTimePickerImpl*> (_ControlImpl::GetInstance(dateTimePicker));
157 }
158
159 const _DateTimePickerImpl*
160 _DateTimePickerImpl::GetInstance(const DateTimePicker& dateTimePicker)
161 {
162         return static_cast<const _DateTimePickerImpl*> (_ControlImpl::GetInstance(dateTimePicker));
163 }
164
165 result
166 _DateTimePickerImpl::AddDateTimeChangeEventListener(Tizen::Ui::IDateTimeChangeEventListener& listener)
167 {
168         ClearLastResult();
169
170         SysTryReturnResult(NID_UI_CTRL, (__pPublicDateTimeChangeEvent != null), E_SYSTEM,
171                                            "A system error has occurred. The _PublicDateTimeChangeEvent instance is null.");
172
173         result r = __pPublicDateTimeChangeEvent->AddListener(listener);
174         SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
175
176         return r;
177 }
178
179 result
180 _DateTimePickerImpl::RemoveDateTimeChangeEventListener(Tizen::Ui::IDateTimeChangeEventListener& listener)
181 {
182         ClearLastResult();
183
184         SysTryReturnResult(NID_UI_CTRL, (__pPublicDateTimeChangeEvent != null), E_SYSTEM,
185                                            "A system error has occurred. The _PublicDateTimeChangeEvent instance is null.");
186
187         result r = __pPublicDateTimeChangeEvent->RemoveListener(listener);
188         SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
189
190         return r;
191 }
192
193 void
194 _DateTimePickerImpl::SetDateTime(const DateTime& dateTime)
195 {
196         ClearLastResult();
197
198         Variant dateTimeValue(dateTime);
199
200         GetCore().SetPropertyDateTime(dateTimeValue);
201 }
202
203 void
204 _DateTimePickerImpl::SetCurrentDateTime(void)
205 {
206         ClearLastResult();
207
208         GetCore().SetCurrentDateTime();
209 }
210
211 result
212 _DateTimePickerImpl::SetYear(int year)
213 {
214         ClearLastResult();
215
216         Variant yearValue(year);
217
218         return GetCore().SetPropertyYear(yearValue);
219 }
220
221 result
222 _DateTimePickerImpl::SetMonth(int month)
223 {
224         ClearLastResult();
225
226         Variant monthValue(month);
227
228         return GetCore().SetPropertyMonth(monthValue);
229 }
230
231 result
232 _DateTimePickerImpl::SetDay(int day)
233 {
234         ClearLastResult();
235
236         Variant dayValue(day);
237
238         return GetCore().SetPropertyDay(dayValue);
239 }
240
241 result
242 _DateTimePickerImpl::SetHour(int hour)
243 {
244         ClearLastResult();
245
246         Variant hourValue(hour);
247
248         return GetCore().SetPropertyHour(hourValue);
249 }
250
251 result
252 _DateTimePickerImpl::SetMinute(int minute)
253 {
254         ClearLastResult();
255
256         Variant minuteValue(minute);
257
258         return GetCore().SetPropertyMinute(minuteValue);
259 }
260
261 DateTime
262 _DateTimePickerImpl::GetDateTime(void) const
263 {
264         ClearLastResult();
265
266         Variant dateTimeValue = GetCore().GetPropertyDateTime();
267
268         return dateTimeValue.ToDateTime();
269 }
270
271 int
272 _DateTimePickerImpl::GetYear(void) const
273 {
274         ClearLastResult();
275
276         Variant yearValue = GetCore().GetPropertyYear();
277
278         return yearValue.ToInt();
279 }
280
281 int
282 _DateTimePickerImpl::GetMonth(void) const
283 {
284         ClearLastResult();
285
286         Variant monthValue = GetCore().GetPropertyMonth();
287
288         return monthValue.ToInt();
289 }
290
291 int
292 _DateTimePickerImpl::GetDay(void) const
293 {
294         ClearLastResult();
295
296         Variant dayValue = GetCore().GetPropertyDay();
297
298         return dayValue.ToInt();
299 }
300
301 int
302 _DateTimePickerImpl::GetHour(void) const
303 {
304         ClearLastResult();
305
306         Variant hourValue = GetCore().GetPropertyHour();
307
308         return hourValue.ToInt();
309 }
310
311 int
312 _DateTimePickerImpl::GetMinute(void) const
313 {
314         ClearLastResult();
315
316         Variant minuteValue = GetCore().GetPropertyMinute();
317
318         return minuteValue.ToInt();
319 }
320
321 void
322 _DateTimePickerImpl::Set24HourNotationEnabled(bool enable)
323 {
324         ClearLastResult();
325
326         Variant enabledValue(enable);
327
328         GetCore().SetProperty24HourNotation(enabledValue);
329 }
330
331 bool
332 _DateTimePickerImpl::Is24HourNotationEnabled(void) const
333 {
334         ClearLastResult();
335
336         Variant enabledValue = GetCore().GetProperty24HourNotation();
337
338         return enabledValue.ToBool();
339 }
340
341 result
342 _DateTimePickerImpl::SetYearRange(int minYear, int maxYear)
343 {
344         ClearLastResult();
345
346         result r = E_SUCCESS;
347
348         Variant currentMinYearValue = GetCore().GetPropertyMinYearRange();
349         Variant minYearValue(minYear);
350         Variant maxYearValue(maxYear);
351
352         r = GetCore().SetPropertyMinYearRange(minYearValue);
353         SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
354
355         r = GetCore().SetPropertyMaxYearRange(maxYearValue);
356         if (r != E_SUCCESS)
357         {
358                 // rollback minYearValue
359                 GetCore().SetPropertyMinYearRange(minYearValue);
360                 SysLogException(NID_UI_CTRL, r, "[%s] Propagating.", GetErrorMessage(r));
361         }
362
363         return r;
364 }
365
366 result
367 _DateTimePickerImpl::GetYearRange(int& minYear, int& maxYear) const
368 {
369         ClearLastResult();
370
371         Variant minYearValue = GetCore().GetPropertyMinYearRange();
372         Variant maxYearValue = GetCore().GetPropertyMaxYearRange();
373
374         minYear = minYearValue.ToInt();
375         maxYear = maxYearValue.ToInt();
376
377         return E_SUCCESS;
378 }
379
380 void
381 _DateTimePickerImpl::OnDateTimeChanged(const Tizen::Ui::_Control& source, int year, int month, int day, int hour, int minute)
382 {
383         ClearLastResult();
384
385         if (__pPublicDateTimeChangeEvent == null)
386         {
387                 return;
388         }
389
390         _PublicDateTimeChangeEventArg* pEventArg = new (std::nothrow) _PublicDateTimeChangeEventArg(DATETIME_PUBLIC_CHANGE_SAVED);
391         SysTryReturnVoidResult(NID_UI_CTRL, (pEventArg != null), E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
392
393         pEventArg->SetDate(year, month, day);
394         pEventArg->SetTime(hour, minute);
395
396         __pPublicDateTimeChangeEvent->Fire(*pEventArg);
397 }
398
399 void
400 _DateTimePickerImpl::OnDateTimeChangeCanceled(const Tizen::Ui::_Control& source)
401 {
402         ClearLastResult();
403
404         if (__pPublicDateTimeChangeEvent == null)
405         {
406                 return;
407         }
408
409         _PublicDateTimeChangeEventArg* pEventArg = new (std::nothrow) _PublicDateTimeChangeEventArg(DATETIME_PUBLIC_CHANGE_CANCELED);
410         SysTryReturnVoidResult(NID_UI_CTRL, (pEventArg != null), E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
411
412         __pPublicDateTimeChangeEvent->Fire(*pEventArg);
413 }
414
415 void
416 _DateTimePickerImpl::OnChangeLayout(Tizen::Ui::_ControlOrientation orientation)
417 {
418         ClearLastResult();
419
420         InitializeBoundsProperties(GET_SIZE_INFO(DateTimePicker), orientation);
421         _ControlImpl::OnChangeLayout(orientation);
422 }
423
424 result
425 _DateTimePickerImpl::OnAttachedToMainTree(void)
426 {
427         result r = E_SUCCESS;
428
429         if (GetOwner() == null)
430         {
431                 _FrameImpl* pFrameImpl = dynamic_cast <_FrameImpl*>(_ControlImplManager::GetInstance()->GetCurrentFrame());
432                 SysTryReturn(NID_UI_CTRL, pFrameImpl != null, E_SYSTEM,
433                         E_SYSTEM, "[E_SYSTEM] This instance is not constructed.");
434
435                 _Form* pForm = pFrameImpl->GetCore().GetCurrentForm();
436
437                 if (pForm != null)
438                 {
439                         GetCore().SetOwner(pForm);
440                 }
441                 else
442                 {
443                         GetCore().SetOwner(&pFrameImpl->GetCore());
444                 }
445         }
446         SetVisibleState(true);
447         _WindowImpl::OnAttachedToMainTree();
448         return r;
449 }
450
451 }}} // Tizen::Ui::Controls