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.
19 * @file FUiCtrl_EditDateImpl.cpp
20 * @brief This is the implementation file for the _EditDateImpl class.
23 #include <FBaseSysLog.h>
24 #include <FUiAccessibilityContainer.h>
25 #include <FUiAccessibilityElement.h>
26 #include "FUi_CoordinateSystemUtils.h"
27 #include "FUi_UiBuilder.h"
28 #include "FUi_ResourceManager.h"
29 #include "FUi_ResourceSizeInfo.h"
30 #include "FUiCtrl_EditDateImpl.h"
31 #include "FUiCtrl_DateTimeDefine.h"
32 #include "FUiCtrl_DateTimeUtils.h"
34 using namespace Tizen::Graphics;
35 using namespace Tizen::Base;
36 using namespace Tizen::Base::Runtime;
37 using namespace Tizen::Ui;
39 namespace Tizen { namespace Ui { namespace Controls
42 _EditDateImpl::_EditDateImpl(EditDate* pPublic, _EditDate* pCore)
43 : _ControlImpl(pPublic, pCore)
44 , __pPublicDateChangeEvent(null)
49 _EditDateImpl::~_EditDateImpl(void)
51 if (__pPublicDateChangeEvent)
53 delete __pPublicDateChangeEvent;
54 __pPublicDateChangeEvent = null;
61 _EditDateImpl::GetInstance(EditDate& editDate)
63 return static_cast<_EditDateImpl*>(editDate._pControlImpl);
67 _EditDateImpl::GetInstance(const EditDate& editDate)
69 return static_cast<const _EditDateImpl*>(editDate._pControlImpl);
73 _EditDateImpl::CreateEditDateImplN(EditDate* pControl, const Point& point, const String& title)
75 return CreateEditDateImplFN(pControl, _CoordinateSystemUtils::ConvertToFloat(point), title);
79 _EditDateImpl::CreateEditDateImplFN(EditDate* pControl, const FloatPoint& point, const String& title)
84 _EditDate* pCore = _EditDate::CreateEditDateN(title);
85 SysTryReturn(NID_UI_CTRL, pCore, null, E_SYSTEM, "[%s] Propagating.", GetErrorMessage(GetLastResult()));
87 _EditDateImpl* pImpl = new (std::nothrow) _EditDateImpl(pControl, pCore);
89 r = CheckConstruction(pCore, pImpl);
90 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
92 r = pCore->AddDateChangeEventListener(*pImpl);
93 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
95 GET_SHAPE_CONFIG(EDITDATE::WIDTH, pCore->GetOrientation(), dim.width);
96 GET_SHAPE_CONFIG(EDITDATE::HEIGHT, pCore->GetOrientation(), dim.height);
98 r = pImpl->InitializeBoundsPropertiesF(GET_SIZE_INFO(EditDate), FloatRectangle(point.x, point.y, dim.width, dim.height), pCore->GetOrientation());
110 _EditDateImpl::GetPublicClassName(void) const
112 return "Tizen::Ui::Controls::EditDate";
116 _EditDateImpl::GetPublic(void) const
118 return static_cast <const EditDate&>(_ControlImpl::GetPublic());
122 _EditDateImpl::GetPublic(void)
124 return static_cast <EditDate&>(_ControlImpl::GetPublic());
128 _EditDateImpl::GetCore(void) const
130 return static_cast <const _EditDate&>(_ControlImpl::GetCore());
134 _EditDateImpl::GetCore(void)
136 return static_cast <_EditDate&>(_ControlImpl::GetCore());
140 _EditDateImpl::OnAttachedToMainTree(void)
142 return _ControlImpl::OnAttachedToMainTree();
146 _EditDateImpl::AddDateChangeEventListener(IDateChangeEventListener& listener)
150 if (__pPublicDateChangeEvent == null)
152 __pPublicDateChangeEvent = new (std::nothrow) _PublicDateTimeChangeEvent(GetPublic());
154 SysTryReturn(NID_UI_CTRL, __pPublicDateChangeEvent,
155 E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
158 result r = __pPublicDateChangeEvent->AddListener(listener);
159 SysTryReturnResult(NID_UI_CTRL, r != E_OBJ_ALREADY_EXIST, E_SYSTEM, "The IDateChangeEventListener instance already exists.");
165 _EditDateImpl::RemoveDateChangeEventListener(IDateChangeEventListener& listener)
169 result r = E_OBJ_NOT_FOUND;
171 if (__pPublicDateChangeEvent)
173 r = __pPublicDateChangeEvent->RemoveListener(listener);
176 SysTryReturnResult(NID_UI_CTRL, r != E_OBJ_NOT_FOUND, E_SYSTEM, "IDateChangeEventListener instance is not found.");
182 _EditDateImpl::GetDate(void) const
186 Variant date = GetCore().GetPropertyDate();
188 return date.ToDateTime();
192 _EditDateImpl::GetDay(void) const
196 Variant day = GetCore().GetPropertyDay();
202 _EditDateImpl::GetMonth(void) const
206 Variant month = GetCore().GetPropertyMonth();
208 return month.ToInt();
212 _EditDateImpl::GetYear(void) const
216 Variant year = GetCore().GetPropertyYear();
222 _EditDateImpl::SetDate(const DateTime& date)
224 result r = ValidateYear(date.GetYear());
225 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[E_INVALID_ARG] Invalid argument is used. year (%d)", date.GetYear());
227 GetCore().SetPropertyDate(Variant(date));
232 _EditDateImpl::SetCurrentDate(void)
236 GetCore().SetCurrentDate();
241 _EditDateImpl::SetYear(int year)
243 result r = ValidateYear(year);
244 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r,
245 "[E_INVALID_ARG] Invalid argument is used. year (%d).", year);
247 r = GetCore().SetPropertyYear(Variant(year));
248 SysTryLog(NID_UI_CTRL, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
254 _EditDateImpl::ValidateYear(int year)
257 SysTryReturn(NID_UI_CTRL, (year >= DATETIME_YEAR_MIN && year <= DATETIME_YEAR_MAX), E_INVALID_ARG, E_INVALID_ARG,
258 "[E_INVALID_ARG] Invalid argument is used. year (%d).", year);
263 GetYearRange(minYear,maxYear);
265 SysTryReturn(NID_UI_CTRL, (year >= minYear && year <= maxYear), E_INVALID_ARG, E_INVALID_ARG,
266 "[E_INVALID_ARG] Invalid argument is used. year (%d).", year);
272 _EditDateImpl::SetMonth(int month)
275 SysTryReturn(NID_UI_CTRL, (month >= DATETIME_MONTH_MIN && month <= DATETIME_MONTH_MAX), E_INVALID_ARG, E_INVALID_ARG,
276 "[E_INVALID_ARG] Invalid argument is used. month (%d).", month);
278 result r = GetCore().SetPropertyMonth(Variant(month));
280 SysTryLog(NID_UI_CTRL, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
286 _EditDateImpl::SetDay(int day)
289 SysTryReturn(NID_UI_CTRL, (day >= DATETIME_DAY_MIN && day <= DATETIME_DAY_MAX), E_INVALID_ARG, E_INVALID_ARG,
290 "[E_INVALID_ARG] Invalid argument is used. day (%d).", day);
293 _DateTimeUtils dateTimeUtils;
294 maxValue = dateTimeUtils.CalculateMaxDay(GetYear(), GetMonth());
296 SysTryReturn(NID_UI_CTRL, (day <= maxValue), E_INVALID_ARG, E_INVALID_ARG,
297 "[E_INVALID_ARG] Invalid argument is used. day (%d), month (%d)", day, GetMonth());
299 result r = GetCore().SetPropertyDay(Variant(day));
300 SysTryLog(NID_UI_CTRL, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
306 _EditDateImpl::SetDatePickerEnabled(bool enable)
310 GetCore().SetPropertyDatePickerEnabled(Variant(enable));
315 _EditDateImpl::IsDatePickerEnabled(void) const
319 Variant enable = GetCore().GetPropertyDatePickerEnabled();
321 return enable.ToBool();
325 _EditDateImpl::SetYearRange(int minYear, int maxYear)
329 result r = E_SUCCESS;
331 SysTryReturn(NID_UI_CTRL, (maxYear >= DATETIME_YEAR_MIN && maxYear <= DATETIME_YEAR_MAX), E_INVALID_ARG, E_INVALID_ARG,
332 "[E_INVALID_ARG] maxYear (%d) must be greater than or equal to %d and less than or equal to %d.",
333 maxYear, DATETIME_YEAR_MIN, DATETIME_YEAR_MAX);
335 SysTryReturn(NID_UI_CTRL, (minYear >= DATETIME_YEAR_MIN && minYear <= DATETIME_YEAR_MAX), E_INVALID_ARG, E_INVALID_ARG,
336 "[E_INVALID_ARG] minYear (%d) must be greater than or equal to %d and less than or equal to %d.",
337 minYear, DATETIME_YEAR_MIN, DATETIME_YEAR_MAX);
339 SysTryReturn(NID_UI_CTRL, (maxYear >= minYear), E_INVALID_ARG, E_INVALID_ARG,
340 "[E_INVALID_ARG] maxYear (%d) must be greater than or equal to minYear (%d).", maxYear, minYear);
342 Variant oldMinYear = GetCore().GetPropertyMinYearRange();
344 r = GetCore().SetPropertyMinYearRange(Variant(minYear));
345 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
347 r = GetCore().SetPropertyMaxYearRange(Variant(maxYear));
350 GetCore().SetPropertyMinYearRange(oldMinYear);
351 SysLogException(NID_UI_CTRL, r, "[%s] Propagating", GetErrorMessage(r));
358 _EditDateImpl::GetYearRange(int& minYear, int& maxYear) const
362 Variant tempMinYear = GetCore().GetPropertyMinYearRange();
363 Variant tempMaxYear = GetCore().GetPropertyMaxYearRange();
365 minYear = tempMinYear.ToInt();
366 maxYear = tempMaxYear.ToInt();
368 return GetLastResult();
372 _EditDateImpl::OnDateTimeChanged(const _Control& source, int year, int month, int day, int hour, int minute)
376 if (__pPublicDateChangeEvent == null)
381 _PublicDateTimeChangeEventArg* pEventArg = new (std::nothrow) _PublicDateTimeChangeEventArg(DATE_PUBLIC_CHANGE_SAVED);
382 SysTryReturnVoidResult(NID_UI_CTRL, pEventArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
384 pEventArg->SetDate(year, month, day);
385 pEventArg->SetTime(hour, minute);
386 __pPublicDateChangeEvent->Fire(*pEventArg);
392 _EditDateImpl::OnDateTimeChangeCanceled(const _Control& source)
396 if (__pPublicDateChangeEvent == null)
401 _PublicDateTimeChangeEventArg* pEventArg = new (std::nothrow) _PublicDateTimeChangeEventArg(DATE_PUBLIC_CHANGE_CANCELED);
402 SysTryReturnVoidResult(NID_UI_CTRL, pEventArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
404 __pPublicDateChangeEvent->Fire(*pEventArg);
410 : public _UiBuilderControlMaker
413 _EditDateMaker(_UiBuilder* uibuilder)
414 : _UiBuilderControlMaker(uibuilder){}
415 virtual ~_EditDateMaker(void){}
416 static _UiBuilderControlMaker* GetInstance(_UiBuilder* pUiBuilder)
418 _EditDateMaker* pEditDateMaker = new (std::nothrow) _EditDateMaker(pUiBuilder);
419 return pEditDateMaker;
423 virtual Control* Make(_UiBuilderControl* pControl)
425 result r = E_SUCCESS;
428 Tizen::Base::String elementStringOne;
429 Tizen::Base::String elementStringTwo;
430 bool titleEnable = false;
432 _UiBuilderControlLayout* pControlProperty = null;
433 EditDate* pEditDate = null;
439 GetProperty(pControl, &pControlProperty);
440 if (pControlProperty == null)
445 rect = pControlProperty->GetRectF();
448 if (pControl->GetElement(L"titleText", elementStringOne))
452 pEditDate = new (std::nothrow) EditDate;
453 if (pEditDate == null)
460 r = pEditDate->Construct(point, elementStringOne);
464 r = pEditDate->Construct(point);
474 if (pControl->GetElement(L"minYearRange", elementStringOne) && pControl->GetElement(L"maxYearRange", elementStringTwo))
476 Base::Integer::Parse(elementStringOne, tempMin);
477 Base::Integer::Parse(elementStringTwo, tempMax);
479 if (tempMin > tempMax)
486 r = pEditDate->SetYearRange(tempMin, tempMax);
489 if (pControl->GetElement(L"accessibilityHint", elementStringOne))
491 AccessibilityContainer* pContainer = pEditDate->GetAccessibilityContainer();
494 AccessibilityElement* pElement = pContainer->GetElement("EditDateText");
497 pElement->SetHint(elementStringOne);
506 _EditDateRegister::_EditDateRegister(void)
508 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
509 pUiBuilderControlTableManager->RegisterControl(L"EditDate", _EditDateMaker::GetInstance);
512 _EditDateRegister::~_EditDateRegister(void)
514 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
515 pUiBuilderControlTableManager->UnregisterControl(L"EditDate");
517 static _EditDateRegister EditDateRegisterToUiBuilder;
518 }}} // Tizen::Ui::Controls