2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
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
9 // http://floralicense.org/license/
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.
18 * @file FUiCtrl_DatePickerImpl.cpp
19 * @brief This is the implementation file for the _DatePickerImpl class.
22 #include <FSysSystemTime.h>
23 #include <FBaseSysLog.h>
24 #include "FUiCtrl_DatePickerImpl.h"
25 #include "FUiCtrl_FrameImpl.h"
26 #include "FUiCtrl_DateTimePicker.h"
27 #include "FUi_ControlImplManager.h"
28 #include "FUi_ResourceSizeInfo.h"
29 #include "FUi_ResourceManager.h"
30 #include "FUiCtrl_Form.h"
32 using namespace Tizen::Ui::Animations;
33 using namespace Tizen::Ui::Controls;
34 using namespace Tizen::Base;
35 using namespace Tizen::System;
36 using namespace Tizen::Graphics;
39 namespace Tizen { namespace Ui { namespace Controls
43 _DatePickerImpl::DatePickerSizeInfo::GetDefaultMinimumSize(_ControlOrientation orientation) const
45 Dimension pickerSize(0, 0);
46 Dimension screenSize(0, 0);
48 screenSize = _ControlManager::GetInstance()->GetScreenSize();
49 pickerSize = screenSize;
50 if (orientation == _CONTROL_ORIENTATION_LANDSCAPE)
52 pickerSize.width = screenSize.height;
53 pickerSize.height = screenSize.width;
60 _DatePickerImpl::DatePickerSizeInfo::GetDefaultMaximumSize(_ControlOrientation orientation) const
62 Dimension pickerSize(0, 0);
63 Dimension screenSize(0, 0);
65 screenSize = _ControlManager::GetInstance()->GetScreenSize();
66 pickerSize = screenSize;
67 if (orientation == _CONTROL_ORIENTATION_LANDSCAPE)
69 pickerSize.width = screenSize.height;
70 pickerSize.height = screenSize.width;
76 _DatePickerImpl::_DatePickerImpl(DatePicker* pPublic, _DateTimePicker* pCore)
77 : _WindowImpl(pPublic, pCore)
78 , __pPublicDateTimeChangeEvent(null)
82 _DatePickerImpl::~_DatePickerImpl(void)
84 if (__pPublicDateTimeChangeEvent != null)
86 delete __pPublicDateTimeChangeEvent;
87 __pPublicDateTimeChangeEvent = null;
92 _DatePickerImpl::CreateDatePickerImplN(DatePicker* pControl, const String& title)
98 _DateTimePicker* pCore = _DateTimePicker::CreateDateTimePickerN(DATETIME_OUTPUT_STYLE_DATE, title);
99 SysTryReturn(NID_UI_CTRL, (pCore != null), null, r, "[%s] Propagating.", GetErrorMessage(GetLastResult()));
101 _DatePickerImpl* pPickerImpl = new (std::nothrow) _DatePickerImpl(pControl, pCore);
102 r = CheckConstruction(pCore, pPickerImpl);
103 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), null, r, "[%s] Propagating.", GetErrorMessage(r));
105 pPickerImpl->__pPublicDateTimeChangeEvent = new (std::nothrow) _PublicDateTimeChangeEvent(*pControl);
106 SysTryCatch(NID_UI_CTRL, (pPickerImpl->__pPublicDateTimeChangeEvent != null), , E_OUT_OF_MEMORY,
107 "[E_OUT_OF_MEMORY] Memory allocation failed.");
109 r = pPickerImpl->InitializeBoundsProperties(GET_SIZE_INFO(DatePicker), pCore->GetOrientation());
110 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
112 r = pCore->AddDateTimeChangeEventListener(*pPickerImpl);
113 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
124 _DatePickerImpl::GetPublicClassName(void) const
126 return "Tizen::Ui::Controls::DatePicker";
130 _DatePickerImpl::GetPublic(void) const
132 return static_cast <const DatePicker&>(_ControlImpl::GetPublic());
136 _DatePickerImpl::GetPublic(void)
138 return static_cast <DatePicker&>(_ControlImpl::GetPublic());
141 const _DateTimePicker&
142 _DatePickerImpl::GetCore(void) const
144 return static_cast <const _DateTimePicker&>(_ControlImpl::GetCore());
148 _DatePickerImpl::GetCore(void)
150 return static_cast <_DateTimePicker&>(_ControlImpl::GetCore());
154 _DatePickerImpl::GetInstance(DatePicker& datePicker)
156 return static_cast<_DatePickerImpl*> (_ControlImpl::GetInstance(datePicker));
159 const _DatePickerImpl*
160 _DatePickerImpl::GetInstance(const DatePicker& datePicker)
162 return static_cast<const _DatePickerImpl*> (_ControlImpl::GetInstance(datePicker));
166 _DatePickerImpl::AddDateChangeEventListener(Tizen::Ui::IDateChangeEventListener& listener)
170 SysTryReturnResult(NID_UI_CTRL, (__pPublicDateTimeChangeEvent != null), E_SYSTEM,
171 "A system error has occurred. The _PublicDateTimeChangeEvent instance is null.");
173 result r = __pPublicDateTimeChangeEvent->AddListener(listener);
174 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
180 _DatePickerImpl::RemoveDateChangeEventListener(Tizen::Ui::IDateChangeEventListener& listener)
184 SysTryReturnResult(NID_UI_CTRL, (__pPublicDateTimeChangeEvent != null), E_SYSTEM,
185 "A system error has occurred. The _PublicDateTimeChangeEvent instance is null.");
187 result r = __pPublicDateTimeChangeEvent->RemoveListener(listener);
188 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
194 _DatePickerImpl::GetDate(void) const
199 dateTime.SetValue(GetYear(), GetMonth(), GetDay(), 0, 0, 0);
204 _DatePickerImpl::GetDay(void) const
208 Variant dayValue = GetCore().GetPropertyDay();
210 return dayValue.ToInt();
214 _DatePickerImpl::GetMonth(void) const
218 Variant monthValue = GetCore().GetPropertyMonth();
220 return monthValue.ToInt();
224 _DatePickerImpl::GetYear(void) const
228 Variant yearValue = GetCore().GetPropertyYear();
230 return yearValue.ToInt();
234 _DatePickerImpl::SetDate(const DateTime& date)
238 SetYear(date.GetYear());
239 SetMonth(date.GetMonth());
240 SetDay(date.GetDay());
244 _DatePickerImpl::SetCurrentDate(void)
249 SystemTime::GetCurrentTime(WALL_TIME, dateTime);
254 _DatePickerImpl::SetYear(int year)
258 Variant yearValue(year);
260 return GetCore().SetPropertyYear(yearValue);
264 _DatePickerImpl::SetMonth(int month)
268 Variant monthValue(month);
270 return GetCore().SetPropertyMonth(monthValue);
274 _DatePickerImpl::SetDay(int day)
278 Variant dayValue(day);
280 return GetCore().SetPropertyDay(dayValue);
284 _DatePickerImpl::SetYearRange(int minYear, int maxYear)
288 result r = E_SUCCESS;
290 Variant currentMinYearValue = GetCore().GetPropertyMinYearRange();
291 Variant minYearValue(minYear);
292 Variant maxYearValue(maxYear);
294 r = GetCore().SetPropertyMinYearRange(minYearValue);
295 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.", GetErrorMessage(r));
297 r = GetCore().SetPropertyMaxYearRange(maxYearValue);
300 // rollback minYearValue
301 GetCore().SetPropertyMinYearRange(minYearValue);
302 SysLogException(NID_UI_CTRL, r, "[%s] Propagating.", GetErrorMessage(r));
309 _DatePickerImpl::GetYearRange(int& minYear, int& maxYear) const
313 Variant minYearValue = GetCore().GetPropertyMinYearRange();
314 Variant maxYearValue = GetCore().GetPropertyMaxYearRange();
316 minYear = minYearValue.ToInt();
317 maxYear = maxYearValue.ToInt();
323 _DatePickerImpl::OnDateTimeChanged(const Tizen::Ui::_Control& source, int year, int month, int day, int hour, int minute)
327 if (__pPublicDateTimeChangeEvent == null)
332 _PublicDateTimeChangeEventArg* pEventArg = new (std::nothrow) _PublicDateTimeChangeEventArg(DATE_PUBLIC_CHANGE_SAVED);
333 SysTryReturnVoidResult(NID_UI_CTRL, (pEventArg != null), E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
335 pEventArg->SetDate(year, month, day);
336 pEventArg->SetTime(hour, minute);
338 __pPublicDateTimeChangeEvent->Fire(*pEventArg);
342 _DatePickerImpl::OnDateTimeChangeCanceled(const Tizen::Ui::_Control& source)
346 if (__pPublicDateTimeChangeEvent == null)
351 _PublicDateTimeChangeEventArg* pEventArg = new (std::nothrow) _PublicDateTimeChangeEventArg(DATE_PUBLIC_CHANGE_CANCELED);
352 SysTryReturnVoidResult(NID_UI_CTRL, (pEventArg != null), E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
354 __pPublicDateTimeChangeEvent->Fire(*pEventArg);
358 _DatePickerImpl::OnChangeLayout(Tizen::Ui::_ControlOrientation orientation)
362 InitializeBoundsProperties(GET_SIZE_INFO(DatePicker), orientation);
363 _ControlImpl::OnChangeLayout(orientation);
367 _DatePickerImpl::OnAttachedToMainTree(void)
369 result r = E_SUCCESS;
371 if (GetOwner() == null)
373 _FrameImpl* pFrameImpl = dynamic_cast <_FrameImpl*>(_ControlImplManager::GetInstance()->GetCurrentFrame());
374 SysTryReturn(NID_UI_CTRL, pFrameImpl != null, E_SYSTEM,
375 E_SYSTEM, "[E_SYSTEM] This instance is not constructed.");
377 _Form* pForm = pFrameImpl->GetCore().GetCurrentForm();
380 GetCore().SetOwner(pForm);
384 GetCore().SetOwner(&pFrameImpl->GetCore());
387 SetVisibleState(true);
389 _WindowImpl::OnAttachedToMainTree();
393 }}} // Tizen::Ui::Controls