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