2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
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
9 // http://www.apache.org/licenses/LICENSE-2.0/
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.
19 * @file FUiCtrl_DatePickerImpl.cpp
20 * @brief This is the implementation file for the _DatePickerImpl class.
23 #include <FSysSystemTime.h>
24 #include <FBaseSysLog.h>
25 #include "FUiCtrl_DatePickerImpl.h"
26 #include "FUiCtrl_FrameImpl.h"
27 #include "FUiCtrl_DateTimePicker.h"
28 #include "FUi_ControlImplManager.h"
29 #include "FUi_ResourceSizeInfo.h"
30 #include "FUi_ResourceManager.h"
31 #include "FUiCtrl_Form.h"
33 using namespace Tizen::Ui::Animations;
34 using namespace Tizen::Ui::Controls;
35 using namespace Tizen::Base;
36 using namespace Tizen::System;
37 using namespace Tizen::Graphics;
40 namespace Tizen { namespace Ui { namespace Controls
44 _DatePickerImpl::DatePickerSizeInfo::GetDefaultMinimumSizeF(_ControlOrientation orientation) const
46 FloatDimension pickerSize(0.0f, 0.0f);
47 FloatDimension screenSize(0.0f, 0.0f);
49 screenSize = _ControlManager::GetInstance()->GetScreenSizeF();
50 pickerSize = screenSize;
51 if (orientation == _CONTROL_ORIENTATION_LANDSCAPE)
53 pickerSize.width = screenSize.height;
54 pickerSize.height = screenSize.width;
61 _DatePickerImpl::DatePickerSizeInfo::GetDefaultMaximumSizeF(_ControlOrientation orientation) const
63 FloatDimension pickerSize(0.0f, 0.0f);
64 FloatDimension screenSize(0.0f, 0.0f);
66 screenSize = _ControlManager::GetInstance()->GetScreenSizeF();
67 pickerSize = screenSize;
68 if (orientation == _CONTROL_ORIENTATION_LANDSCAPE)
70 pickerSize.width = screenSize.height;
71 pickerSize.height = screenSize.width;
77 _DatePickerImpl::_DatePickerImpl(DatePicker* pPublic, _DateTimePicker* pCore)
78 : _WindowImpl(pPublic, pCore)
79 , __pPublicDateTimeChangeEvent(null)
83 _DatePickerImpl::~_DatePickerImpl(void)
85 if (__pPublicDateTimeChangeEvent != null)
87 delete __pPublicDateTimeChangeEvent;
88 __pPublicDateTimeChangeEvent = null;
93 _DatePickerImpl::CreateDatePickerImplN(DatePicker* pControl, const String& title)
99 _DateTimePicker* pCore = _DateTimePicker::CreateDateTimePickerN(DATETIME_OUTPUT_STYLE_DATE, title);
100 SysTryReturn(NID_UI_CTRL, (pCore != null), null, r, "[%s] Propagating.", GetErrorMessage(GetLastResult()));
102 _DatePickerImpl* pPickerImpl = new (std::nothrow) _DatePickerImpl(pControl, pCore);
103 r = CheckConstruction(pCore, pPickerImpl);
104 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), null, r, "[%s] Propagating.", GetErrorMessage(r));
106 pPickerImpl->__pPublicDateTimeChangeEvent = new (std::nothrow) _PublicDateTimeChangeEvent(*pControl);
107 SysTryCatch(NID_UI_CTRL, (pPickerImpl->__pPublicDateTimeChangeEvent != null), , E_OUT_OF_MEMORY,
108 "[E_OUT_OF_MEMORY] Memory allocation failed.");
110 r = pPickerImpl->InitializeBoundsProperties(GET_SIZE_INFO(DatePicker), pCore->GetOrientation());
111 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
113 r = pCore->AddDateTimeChangeEventListener(*pPickerImpl);
114 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
125 _DatePickerImpl::GetPublicClassName(void) const
127 return "Tizen::Ui::Controls::DatePicker";
131 _DatePickerImpl::GetPublic(void) const
133 return static_cast <const DatePicker&>(_ControlImpl::GetPublic());
137 _DatePickerImpl::GetPublic(void)
139 return static_cast <DatePicker&>(_ControlImpl::GetPublic());
142 const _DateTimePicker&
143 _DatePickerImpl::GetCore(void) const
145 return static_cast <const _DateTimePicker&>(_ControlImpl::GetCore());
149 _DatePickerImpl::GetCore(void)
151 return static_cast <_DateTimePicker&>(_ControlImpl::GetCore());
155 _DatePickerImpl::GetInstance(DatePicker& datePicker)
157 return static_cast<_DatePickerImpl*> (_ControlImpl::GetInstance(datePicker));
160 const _DatePickerImpl*
161 _DatePickerImpl::GetInstance(const DatePicker& datePicker)
163 return static_cast<const _DatePickerImpl*> (_ControlImpl::GetInstance(datePicker));
167 _DatePickerImpl::AddDateChangeEventListener(Tizen::Ui::IDateChangeEventListener& listener)
171 SysTryReturnResult(NID_UI_CTRL, (__pPublicDateTimeChangeEvent != null), E_SYSTEM,
172 "A system error has occurred. The _PublicDateTimeChangeEvent instance is null.");
174 result r = __pPublicDateTimeChangeEvent->AddListener(listener);
175 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
181 _DatePickerImpl::RemoveDateChangeEventListener(Tizen::Ui::IDateChangeEventListener& listener)
185 SysTryReturnResult(NID_UI_CTRL, (__pPublicDateTimeChangeEvent != null), E_SYSTEM,
186 "A system error has occurred. The _PublicDateTimeChangeEvent instance is null.");
188 result r = __pPublicDateTimeChangeEvent->RemoveListener(listener);
189 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
195 _DatePickerImpl::GetDate(void) const
200 dateTime.SetValue(GetYear(), GetMonth(), GetDay(), 0, 0, 0);
205 _DatePickerImpl::GetDay(void) const
209 Variant dayValue = GetCore().GetPropertyDay();
211 return dayValue.ToInt();
215 _DatePickerImpl::GetMonth(void) const
219 Variant monthValue = GetCore().GetPropertyMonth();
221 return monthValue.ToInt();
225 _DatePickerImpl::GetYear(void) const
229 Variant yearValue = GetCore().GetPropertyYear();
231 return yearValue.ToInt();
235 _DatePickerImpl::SetDate(const DateTime& date)
239 SetYear(date.GetYear());
240 SetMonth(date.GetMonth());
241 SetDay(date.GetDay());
245 _DatePickerImpl::SetCurrentDate(void)
250 SystemTime::GetCurrentTime(WALL_TIME, dateTime);
255 _DatePickerImpl::SetYear(int year)
259 Variant yearValue(year);
261 return GetCore().SetPropertyYear(yearValue);
265 _DatePickerImpl::SetMonth(int month)
269 Variant monthValue(month);
271 return GetCore().SetPropertyMonth(monthValue);
275 _DatePickerImpl::SetDay(int day)
279 Variant dayValue(day);
281 return GetCore().SetPropertyDay(dayValue);
285 _DatePickerImpl::SetYearRange(int minYear, int maxYear)
289 result r = E_SUCCESS;
291 Variant currentMinYearValue = GetCore().GetPropertyMinYearRange();
292 Variant minYearValue(minYear);
293 Variant maxYearValue(maxYear);
295 r = GetCore().SetPropertyMinYearRange(minYearValue);
296 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.", GetErrorMessage(r));
298 r = GetCore().SetPropertyMaxYearRange(maxYearValue);
301 // rollback minYearValue
302 GetCore().SetPropertyMinYearRange(minYearValue);
303 SysLogException(NID_UI_CTRL, r, "[%s] Propagating.", GetErrorMessage(r));
310 _DatePickerImpl::GetYearRange(int& minYear, int& maxYear) const
314 Variant minYearValue = GetCore().GetPropertyMinYearRange();
315 Variant maxYearValue = GetCore().GetPropertyMaxYearRange();
317 minYear = minYearValue.ToInt();
318 maxYear = maxYearValue.ToInt();
324 _DatePickerImpl::OnDateTimeChanged(const Tizen::Ui::_Control& source, int year, int month, int day, int hour, int minute)
328 if (__pPublicDateTimeChangeEvent == null)
333 _PublicDateTimeChangeEventArg* pEventArg = new (std::nothrow) _PublicDateTimeChangeEventArg(DATE_PUBLIC_CHANGE_SAVED);
334 SysTryReturnVoidResult(NID_UI_CTRL, (pEventArg != null), E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
336 pEventArg->SetDate(year, month, day);
337 pEventArg->SetTime(hour, minute);
339 __pPublicDateTimeChangeEvent->Fire(*pEventArg);
343 _DatePickerImpl::OnDateTimeChangeCanceled(const Tizen::Ui::_Control& source)
347 if (__pPublicDateTimeChangeEvent == null)
352 _PublicDateTimeChangeEventArg* pEventArg = new (std::nothrow) _PublicDateTimeChangeEventArg(DATE_PUBLIC_CHANGE_CANCELED);
353 SysTryReturnVoidResult(NID_UI_CTRL, (pEventArg != null), E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
355 __pPublicDateTimeChangeEvent->Fire(*pEventArg);
359 _DatePickerImpl::OnChangeLayout(Tizen::Ui::_ControlOrientation orientation)
363 InitializeBoundsProperties(GET_SIZE_INFO(DatePicker), orientation);
364 _ControlImpl::OnChangeLayout(orientation);
368 _DatePickerImpl::OnAttachedToMainTree(void)
370 result r = E_SUCCESS;
372 if (GetOwner() == null)
374 _FrameImpl* pFrameImpl = dynamic_cast <_FrameImpl*>(_ControlImplManager::GetInstance()->GetCurrentFrame());
375 SysTryReturn(NID_UI_CTRL, pFrameImpl != null, E_SYSTEM,
376 E_SYSTEM, "[E_SYSTEM] This instance is not constructed.");
378 _Form* pForm = pFrameImpl->GetCore().GetCurrentForm();
381 GetCore().SetOwner(pForm);
385 GetCore().SetOwner(&pFrameImpl->GetCore());
388 SetVisibleState(true);
390 _WindowImpl::OnAttachedToMainTree();
394 }}} // Tizen::Ui::Controls