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_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 delete __pPublicDateChangeEvent;
52 __pPublicDateChangeEvent = null;
58 _EditDateImpl::GetInstance(EditDate& editDate)
60 return static_cast<_EditDateImpl*>(editDate._pControlImpl);
64 _EditDateImpl::GetInstance(const EditDate& editDate)
66 return static_cast<const _EditDateImpl*>(editDate._pControlImpl);
70 _EditDateImpl::CreateEditDateImplN(EditDate* pControl, const Point& point, const String& title)
72 return CreateEditDateImplFN(pControl, _CoordinateSystemUtils::ConvertToFloat(point), title);
76 _EditDateImpl::CreateEditDateImplFN(EditDate* pControl, const FloatPoint& point, const String& title)
81 _EditDate* pCore = _EditDate::CreateEditDateN(title);
82 SysTryReturn(NID_UI_CTRL, pCore, null, E_SYSTEM, "[%s] Propagating.", GetErrorMessage(GetLastResult()));
84 _EditDateImpl* pImpl = new (std::nothrow) _EditDateImpl(pControl, pCore);
86 r = CheckConstruction(pCore, pImpl);
87 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
89 r = pCore->AddDateChangeEventListener(*pImpl);
90 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
92 GET_SHAPE_CONFIG(EDITDATE::WIDTH, pCore->GetOrientation(), dim.width);
93 GET_SHAPE_CONFIG(EDITDATE::HEIGHT, pCore->GetOrientation(), dim.height);
95 r = pImpl->InitializeBoundsPropertiesF(GET_SIZE_INFO(EditDate), FloatRectangle(point.x, point.y, dim.width, dim.height), pCore->GetOrientation());
107 _EditDateImpl::GetPublicClassName(void) const
109 return "Tizen::Ui::Controls::EditDate";
113 _EditDateImpl::GetPublic(void) const
115 return static_cast <const EditDate&>(_ControlImpl::GetPublic());
119 _EditDateImpl::GetPublic(void)
121 return static_cast <EditDate&>(_ControlImpl::GetPublic());
125 _EditDateImpl::GetCore(void) const
127 return static_cast <const _EditDate&>(_ControlImpl::GetCore());
131 _EditDateImpl::GetCore(void)
133 return static_cast <_EditDate&>(_ControlImpl::GetCore());
137 _EditDateImpl::OnAttachedToMainTree(void)
139 return _ControlImpl::OnAttachedToMainTree();
143 _EditDateImpl::AddDateChangeEventListener(IDateChangeEventListener& listener)
147 if (__pPublicDateChangeEvent == null)
149 __pPublicDateChangeEvent = new (std::nothrow) _PublicDateTimeChangeEvent(GetPublic());
151 SysTryReturn(NID_UI_CTRL, __pPublicDateChangeEvent,
152 E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
155 result r = __pPublicDateChangeEvent->AddListener(listener);
156 SysTryReturnResult(NID_UI_CTRL, r != E_OBJ_ALREADY_EXIST, E_SYSTEM, "The IDateChangeEventListener instance already exists.");
162 _EditDateImpl::RemoveDateChangeEventListener(IDateChangeEventListener& listener)
166 result r = E_OBJ_NOT_FOUND;
168 if (__pPublicDateChangeEvent != null)
170 r = __pPublicDateChangeEvent->RemoveListener(listener);
173 SysTryReturnResult(NID_UI_CTRL, r != E_OBJ_NOT_FOUND, E_SYSTEM, "IDateChangeEventListener instance is not found.");
179 _EditDateImpl::GetDate(void) const
183 Variant date = GetCore().GetPropertyDate();
185 return date.ToDateTime();
189 _EditDateImpl::GetDay(void) const
193 Variant day = GetCore().GetPropertyDay();
199 _EditDateImpl::GetMonth(void) const
203 Variant month = GetCore().GetPropertyMonth();
205 return month.ToInt();
209 _EditDateImpl::GetYear(void) const
213 Variant year = GetCore().GetPropertyYear();
219 _EditDateImpl::SetDate(const DateTime& date)
222 SysTryReturnVoidResult(NID_UI_CTRL, (date.GetYear() >= DATETIME_YEAR_MIN && date.GetYear() <= DATETIME_YEAR_MAX), E_INVALID_ARG,
223 "[E_INVALID_ARG] Invalid argument is used. year (%d).", date.GetYear());
228 GetYearRange(minYear, maxYear);
232 if (date.GetYear() < minYear)
234 dateTime.SetValue(minYear, date.GetMonth(), date.GetDay(), date.GetHour(), date.GetMinute(), date.GetSecond());
236 else if (date.GetYear() > maxYear)
238 dateTime.SetValue(maxYear, date.GetMonth(), date.GetDay(), date.GetHour(), date.GetMinute(), date.GetSecond());
242 dateTime.SetValue(date);
245 GetCore().SetPropertyDate(Variant(dateTime));
250 _EditDateImpl::SetCurrentDate(void)
254 GetCore().SetCurrentDate();
259 _EditDateImpl::SetYear(int year)
261 result r = ValidateYear(year);
262 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r,
263 "[E_INVALID_ARG] Invalid argument is used. year (%d).", year);
265 r = GetCore().SetPropertyYear(Variant(year));
266 SysTryLog(NID_UI_CTRL, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
272 _EditDateImpl::ValidateYear(int year)
275 SysTryReturn(NID_UI_CTRL, (year >= DATETIME_YEAR_MIN && year <= DATETIME_YEAR_MAX), E_INVALID_ARG, E_INVALID_ARG,
276 "[E_INVALID_ARG] Invalid argument is used. year (%d).", year);
281 GetYearRange(minYear,maxYear);
283 SysTryReturn(NID_UI_CTRL, (year >= minYear && year <= maxYear), E_INVALID_ARG, E_INVALID_ARG,
284 "[E_INVALID_ARG] Invalid argument is used. year (%d).", year);
290 _EditDateImpl::SetMonth(int month)
293 SysTryReturn(NID_UI_CTRL, (month >= DATETIME_MONTH_MIN && month <= DATETIME_MONTH_MAX), E_INVALID_ARG, E_INVALID_ARG,
294 "[E_INVALID_ARG] Invalid argument is used. month (%d).", month);
296 result r = GetCore().SetPropertyMonth(Variant(month));
298 SysTryLog(NID_UI_CTRL, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
304 _EditDateImpl::SetDay(int day)
307 SysTryReturn(NID_UI_CTRL, (day >= DATETIME_DAY_MIN && day <= DATETIME_DAY_MAX), E_INVALID_ARG, E_INVALID_ARG,
308 "[E_INVALID_ARG] Invalid argument is used. day (%d).", day);
311 _DateTimeUtils dateTimeUtils;
312 maxValue = dateTimeUtils.CalculateMaxDay(GetYear(), GetMonth());
314 SysTryReturn(NID_UI_CTRL, (day <= maxValue), E_INVALID_ARG, E_INVALID_ARG,
315 "[E_INVALID_ARG] Invalid argument is used. day (%d), month (%d)", day, GetMonth());
317 result r = GetCore().SetPropertyDay(Variant(day));
318 SysTryLog(NID_UI_CTRL, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
324 _EditDateImpl::SetDatePickerEnabled(bool enable)
328 GetCore().SetPropertyDatePickerEnabled(Variant(enable));
333 _EditDateImpl::IsDatePickerEnabled(void) const
337 Variant enable = GetCore().GetPropertyDatePickerEnabled();
339 return enable.ToBool();
343 _EditDateImpl::SetYearRange(int minYear, int maxYear)
347 result r = E_SUCCESS;
349 SysTryReturn(NID_UI_CTRL, (maxYear >= DATETIME_YEAR_MIN && maxYear <= DATETIME_YEAR_MAX), E_INVALID_ARG, E_INVALID_ARG,
350 "[E_INVALID_ARG] maxYear (%d) must be greater than or equal to %d and less than or equal to %d.",
351 maxYear, DATETIME_YEAR_MIN, DATETIME_YEAR_MAX);
353 SysTryReturn(NID_UI_CTRL, (minYear >= DATETIME_YEAR_MIN && minYear <= DATETIME_YEAR_MAX), E_INVALID_ARG, E_INVALID_ARG,
354 "[E_INVALID_ARG] minYear (%d) must be greater than or equal to %d and less than or equal to %d.",
355 minYear, DATETIME_YEAR_MIN, DATETIME_YEAR_MAX);
357 SysTryReturn(NID_UI_CTRL, (maxYear >= minYear), E_INVALID_ARG, E_INVALID_ARG,
358 "[E_INVALID_ARG] maxYear (%d) must be greater than or equal to minYear (%d).", maxYear, minYear);
360 Variant oldMinYear = GetCore().GetPropertyMinYearRange();
362 r = GetCore().SetPropertyMinYearRange(Variant(minYear));
363 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
365 r = GetCore().SetPropertyMaxYearRange(Variant(maxYear));
368 GetCore().SetPropertyMinYearRange(oldMinYear);
369 SysLogException(NID_UI_CTRL, r, "[%s] Propagating", GetErrorMessage(r));
376 _EditDateImpl::GetYearRange(int& minYear, int& maxYear) const
380 Variant tempMinYear = GetCore().GetPropertyMinYearRange();
381 Variant tempMaxYear = GetCore().GetPropertyMaxYearRange();
383 minYear = tempMinYear.ToInt();
384 maxYear = tempMaxYear.ToInt();
386 return GetLastResult();
390 _EditDateImpl::OnDateTimeChanged(const _Control& source, int year, int month, int day, int hour, int minute)
394 if (__pPublicDateChangeEvent == null)
399 _PublicDateTimeChangeEventArg* pEventArg = new (std::nothrow) _PublicDateTimeChangeEventArg(DATE_PUBLIC_CHANGE_SAVED);
400 SysTryReturnVoidResult(NID_UI_CTRL, pEventArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
402 pEventArg->SetDate(year, month, day);
403 pEventArg->SetTime(hour, minute);
404 __pPublicDateChangeEvent->Fire(*pEventArg);
410 _EditDateImpl::OnDateTimeChangeCanceled(const _Control& source)
414 if (__pPublicDateChangeEvent == null)
419 _PublicDateTimeChangeEventArg* pEventArg = new (std::nothrow) _PublicDateTimeChangeEventArg(DATE_PUBLIC_CHANGE_CANCELED);
420 SysTryReturnVoidResult(NID_UI_CTRL, pEventArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
422 __pPublicDateChangeEvent->Fire(*pEventArg);
428 _EditDateImpl::IsXmlBoundsExist(void)
430 FloatRectangle builderBounds;
431 _ControlOrientation controlOrientation = _CONTROL_ORIENTATION_PORTRAIT;
432 bool exist = GetBuilderBoundsF(controlOrientation, builderBounds);
438 controlOrientation = GetCore().GetOrientation();
440 if (controlOrientation == _CONTROL_ORIENTATION_LANDSCAPE)
442 exist = GetBuilderBoundsF(controlOrientation, builderBounds);
454 _EditDateImpl::OnChangeLayout(_ControlOrientation orientation)
456 GetCore().SetXmlBoundsExist(IsXmlBoundsExist());
458 return _ControlImpl::OnChangeLayout(orientation);
462 : public _UiBuilderControlMaker
465 _EditDateMaker(_UiBuilder* uibuilder)
466 : _UiBuilderControlMaker(uibuilder){}
467 virtual ~_EditDateMaker(void){}
468 static _UiBuilderControlMaker* GetInstance(_UiBuilder* pUiBuilder)
470 _EditDateMaker* pEditDateMaker = new (std::nothrow) _EditDateMaker(pUiBuilder);
471 return pEditDateMaker;
475 virtual Control* Make(_UiBuilderControl* pControl)
477 result r = E_SUCCESS;
480 Tizen::Base::String elementStringOne;
481 Tizen::Base::String elementStringTwo;
482 bool titleEnable = false;
484 _UiBuilderControlLayout* pControlProperty = null;
485 EditDate* pEditDate = null;
491 GetProperty(pControl, &pControlProperty);
492 if (pControlProperty == null)
497 rect = pControlProperty->GetRectF();
500 if (pControl->GetElement(L"titleText", elementStringOne))
504 pEditDate = new (std::nothrow) EditDate;
505 if (pEditDate == null)
512 r = pEditDate->Construct(point, elementStringOne);
516 r = pEditDate->Construct(point);
526 if (pControl->GetElement(L"minYearRange", elementStringOne) && pControl->GetElement(L"maxYearRange", elementStringTwo))
528 Base::Integer::Parse(elementStringOne, tempMin);
529 Base::Integer::Parse(elementStringTwo, tempMax);
531 if (tempMin > tempMax)
538 r = pEditDate->SetYearRange(tempMin, tempMax);
541 if (pControl->GetElement(L"accessibilityHint", elementStringOne))
543 AccessibilityContainer* pContainer = pEditDate->GetAccessibilityContainer();
544 if (pContainer != null)
546 AccessibilityElement* pElement = pContainer->GetElement("EditDateText");
547 if (pElement != null)
549 pElement->SetHint(elementStringOne);
558 _EditDateRegister::_EditDateRegister(void)
560 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
561 pUiBuilderControlTableManager->RegisterControl(L"EditDate", _EditDateMaker::GetInstance);
564 _EditDateRegister::~_EditDateRegister(void)
566 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
567 pUiBuilderControlTableManager->UnregisterControl(L"EditDate");
569 static _EditDateRegister EditDateRegisterToUiBuilder;
570 }}} // Tizen::Ui::Controls