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_EditTimeImpl.cpp
20 * @brief This is the implementation file for the _EditTimeImpl class.
23 #include <FBaseInternalTypes.h>
24 #include <FBaseSysLog.h>
25 #include <FUiAccessibilityContainer.h>
26 #include <FUiAccessibilityElement.h>
27 #include <FApp_AppInfo.h>
28 #include "FUi_CoordinateSystemUtils.h"
29 #include "FUi_UiBuilder.h"
30 #include "FUi_ResourceManager.h"
31 #include "FUi_ResourceSizeInfo.h"
32 #include "FUiCtrl_EditTimeImpl.h"
33 #include "FUiCtrl_DateTimeDefine.h"
35 using namespace Tizen::Graphics;
36 using namespace Tizen::Base::Runtime;
37 using namespace Tizen::Base;
38 using namespace Tizen::App;
40 namespace Tizen { namespace Ui { namespace Controls
43 _EditTimeImpl::_EditTimeImpl(EditTime* pPublic, _EditTime* pCore)
44 : _ControlImpl(pPublic, pCore)
45 , __pPublicTimeChangeEvent(null)
50 _EditTimeImpl::~_EditTimeImpl(void)
52 if (__pPublicTimeChangeEvent)
54 delete __pPublicTimeChangeEvent;
55 __pPublicTimeChangeEvent = null;
62 _EditTimeImpl::GetInstance(EditTime& editTime)
64 return static_cast<_EditTimeImpl*> (editTime._pControlImpl);
68 _EditTimeImpl::GetInstance(const EditTime& editTime)
70 return static_cast<const _EditTimeImpl*> (editTime._pControlImpl);
74 _EditTimeImpl::CreateEditTimeImplN(EditTime* pControl, const Point& point, const String& title)
76 return CreateEditTimeImplFN(pControl, _CoordinateSystemUtils::ConvertToFloat(point), title);
80 _EditTimeImpl::CreateEditTimeImplFN(EditTime* pControl, const FloatPoint& point, const String& title)
85 _EditTime* pCore = _EditTime::CreateEditTimeN(title);
86 SysTryReturn(NID_UI_CTRL, pCore, null, E_SYSTEM, "[%s] Propagating.", GetErrorMessage(GetLastResult()));
88 _EditTimeImpl* pImpl = new (std::nothrow) _EditTimeImpl(pControl, pCore);
90 r = CheckConstruction(pCore, pImpl);
91 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
93 r = pCore->AddTimeChangeEventListener(*pImpl);
94 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
96 GET_SHAPE_CONFIG(EDITTIME::WIDTH, pCore->GetOrientation(), dim.width);
97 GET_SHAPE_CONFIG(EDITTIME::HEIGHT, pCore->GetOrientation(), dim.height);
99 r = pImpl->InitializeBoundsPropertiesF(GET_SIZE_INFO(EditTime), FloatRectangle(point.x, point.y, dim.width, dim.height), pCore->GetOrientation());
111 _EditTimeImpl::GetPublicClassName(void) const
113 return "Tizen::Ui::Controls::EditTime";
117 _EditTimeImpl::GetPublic(void) const
119 return static_cast <const EditTime&>(_ControlImpl::GetPublic());
123 _EditTimeImpl::GetPublic(void)
125 return static_cast <EditTime&>(_ControlImpl::GetPublic());
129 _EditTimeImpl::GetCore(void) const
131 return static_cast <const _EditTime&>(_ControlImpl::GetCore());
135 _EditTimeImpl::GetCore(void)
137 return static_cast <_EditTime&>(_ControlImpl::GetCore());
141 _EditTimeImpl::OnAttachedToMainTree(void)
143 return _ControlImpl::OnAttachedToMainTree();
147 _EditTimeImpl::AddTimeChangeEventListener(ITimeChangeEventListener& listener)
151 if (__pPublicTimeChangeEvent == null)
153 __pPublicTimeChangeEvent = new (std::nothrow) _PublicDateTimeChangeEvent(GetPublic());
155 SysTryReturn(NID_UI_CTRL, __pPublicTimeChangeEvent,
156 E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
159 result r = __pPublicTimeChangeEvent->AddListener(listener);
160 SysTryReturnResult(NID_UI_CTRL, r != E_OBJ_ALREADY_EXIST, E_SYSTEM, "The ITimeChangeEventListener instance already exists.");
166 _EditTimeImpl::RemoveTimeChangeEventListener(ITimeChangeEventListener& listener)
170 result r = E_OBJ_NOT_FOUND;
172 if (__pPublicTimeChangeEvent)
174 r = __pPublicTimeChangeEvent->RemoveListener(listener);
177 SysTryReturnResult(NID_UI_CTRL, r != E_OBJ_NOT_FOUND, E_SYSTEM, "ITimeChangeEventListener instance is not found.");
183 _EditTimeImpl::GetTime(void) const
187 Variant time = GetCore().GetPropertyTime();
189 return time.ToDateTime();
193 _EditTimeImpl::GetHour(void) const
197 Variant hour = GetCore().GetPropertyHour();
203 _EditTimeImpl::GetMinute(void) const
207 Variant minute = GetCore().GetPropertyMinute();
209 return minute.ToInt();
213 _EditTimeImpl::SetTime(const DateTime& time)
217 GetCore().SetPropertyTime(Variant(time));
222 _EditTimeImpl::SetCurrentTime(void)
226 GetCore().SetCurrentTime();
231 _EditTimeImpl::SetHour(int hour)
234 SysTryReturn(NID_UI_CTRL, (hour >= DATETIME_HOUR_MIN && hour <= DATETIME_HOUR_MAX), E_INVALID_ARG, E_INVALID_ARG,
235 "[E_INVALID_ARG] Invalid argument is used. hour (%d).", hour);
237 result r = GetCore().SetPropertyHour(Variant(hour));
238 SysTryLog(NID_UI_CTRL, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
244 _EditTimeImpl::SetMinute(int minute)
247 SysTryReturn(NID_UI_CTRL, (minute >= DATETIME_MINUTE_MIN && minute <= DATETIME_MINUTE_MAX), E_INVALID_ARG, E_INVALID_ARG,
248 "[E_INVALID_ARG] Invalid argument is used. minute (%d).", minute);
250 result r = GetCore().SetPropertyMinute(Variant(minute));
251 SysTryLog(NID_UI_CTRL, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
257 _EditTimeImpl::SetTimePickerEnabled(bool enable)
261 GetCore().SetPropertyTimePickerEnabled(Variant(enable));
266 _EditTimeImpl::IsTimePickerEnabled(void) const
270 Variant enable = GetCore().GetPropertyTimePickerEnabled();
272 return enable.ToBool();
276 _EditTimeImpl::Set24HourNotationEnabled(bool enable)
280 GetCore().Set24HourNotationEnabled(enable);
285 _EditTimeImpl::OnDateTimeChanged(const _Control& source, int year, int month, int day, int hour, int minute)
289 if (__pPublicTimeChangeEvent == null)
294 _PublicDateTimeChangeEventArg* pEventArg = new (std::nothrow) _PublicDateTimeChangeEventArg(TIME_PUBLIC_CHANGE_SAVED);
295 SysTryReturnVoidResult(NID_UI_CTRL, pEventArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
297 pEventArg->SetDate(year, month, day);
298 pEventArg->SetTime(hour, minute);
299 __pPublicTimeChangeEvent->Fire(*pEventArg);
305 _EditTimeImpl::OnDateTimeChangeCanceled(const _Control& source)
309 if (__pPublicTimeChangeEvent == null)
314 _PublicDateTimeChangeEventArg* pEventArg = new (std::nothrow) _PublicDateTimeChangeEventArg(TIME_PUBLIC_CHANGE_CANCELED);
315 SysTryReturnVoidResult(NID_UI_CTRL, pEventArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
317 __pPublicTimeChangeEvent->Fire(*pEventArg);
323 _EditTimeImpl::IsXmlBoundsExist(void)
325 FloatRectangle builderBounds;
326 _ControlOrientation controlOrientation = _CONTROL_ORIENTATION_PORTRAIT;
327 bool exist = GetBuilderBoundsF(controlOrientation, builderBounds);
333 controlOrientation = GetCore().GetOrientation();
335 if (controlOrientation == _CONTROL_ORIENTATION_LANDSCAPE)
337 exist = GetBuilderBoundsF(controlOrientation, builderBounds);
349 _EditTimeImpl::OnChangeLayout(_ControlOrientation orientation)
351 GetCore().SetXmlBoundsExist(IsXmlBoundsExist());
353 return _ControlImpl::OnChangeLayout(orientation);
357 : public _UiBuilderControlMaker
360 _EditTimeMaker(_UiBuilder* uibuilder)
361 : _UiBuilderControlMaker(uibuilder){}
362 virtual ~_EditTimeMaker(void){}
363 static _UiBuilderControlMaker* GetInstance(_UiBuilder* pUiBuilder)
365 _EditTimeMaker* pEditTimeMaker = new (std::nothrow) _EditTimeMaker(pUiBuilder);
366 return pEditTimeMaker;
370 virtual Control* Make(_UiBuilderControl* pControl)
372 result r = E_SUCCESS;
374 _UiBuilderControlLayout* pControlProperty = null;
375 EditTime* pEditTime = null;
378 Tizen::Base::String elementString;
379 bool titleEnable = false;
380 bool hourNotationEnable = false;
383 GetProperty(pControl, &pControlProperty);
384 if (pControlProperty == null)
389 rect = pControlProperty->GetRectF();
393 if (pControl->GetElement(L"titleText", elementString))
398 pEditTime = new (std::nothrow) EditTime;
399 if (pEditTime == null)
406 r = pEditTime->Construct(point, elementString);
410 r = pEditTime->Construct(point);
420 if (pControl->GetElement(L"b24HourNotationEnabled", elementString))
422 if (elementString.Equals(L"true", false))
424 hourNotationEnable = true;
425 pEditTime->Set24HourNotationEnabled(hourNotationEnable);
429 if (pControl->GetElement(L"accessibilityHint", elementString))
431 AccessibilityContainer* pContainer = pEditTime->GetAccessibilityContainer();
434 AccessibilityElement* pElement = pContainer->GetElement(L"EditTimeText");
437 pElement->SetHint(elementString);
447 _EditTimeRegister::_EditTimeRegister(void)
449 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
450 pUiBuilderControlTableManager->RegisterControl(L"EditTime", _EditTimeMaker::GetInstance);
453 _EditTimeRegister::~_EditTimeRegister(void)
455 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
456 pUiBuilderControlTableManager->UnregisterControl(L"EditTime");
458 static _EditTimeRegister EditTimeRegisterToUiBuilder;
459 }}} // Tizen::Ui::Controls