Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / controls / FUiCtrl_TimePickerImpl.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
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
8 //
9 //     http://floralicense.org/license/
10 //
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.
16 //
17 /**
18  * @file                FUiCtrl_TimePickerImpl.cpp
19  * @brief               This is the implementation file for the _TimePickerImpl class.
20  */
21
22 #include <FBaseSysLog.h>
23 #include "FUiCtrl_DateTimePicker.h"
24 #include "FUiCtrl_TimePickerImpl.h"
25 #include "FUiCtrl_FrameImpl.h"
26 #include "FUi_ControlImplManager.h"
27 #include "FUi_ResourceSizeInfo.h"
28 #include "FUi_ResourceManager.h"
29 #include "FUiCtrl_Form.h"
30
31 using namespace Tizen::Base;
32 using namespace Tizen::Graphics;
33
34 namespace Tizen { namespace Ui { namespace Controls
35 {
36
37 Dimension
38 _TimePickerImpl::TimePickerSizeInfo::GetDefaultMinimumSize(_ControlOrientation orientation) const
39 {
40         Dimension pickerSize(0, 0);
41         Dimension screenSize(0, 0);
42
43         screenSize = _ControlManager::GetInstance()->GetScreenSize();
44         pickerSize = screenSize;
45         if (orientation == _CONTROL_ORIENTATION_LANDSCAPE)
46         {
47                 pickerSize.width = screenSize.height;
48                 pickerSize.height = screenSize.width;
49         }
50
51         return pickerSize;
52 }
53
54 Dimension
55 _TimePickerImpl::TimePickerSizeInfo::GetDefaultMaximumSize(_ControlOrientation orientation) const
56 {
57         Dimension pickerSize(0, 0);
58         Dimension screenSize(0, 0);
59
60         screenSize = _ControlManager::GetInstance()->GetScreenSize();
61         pickerSize = screenSize;
62         if (orientation == _CONTROL_ORIENTATION_LANDSCAPE)
63         {
64                 pickerSize.width = screenSize.height;
65                 pickerSize.height = screenSize.width;
66         }
67
68         return pickerSize;
69 }
70
71 _TimePickerImpl::_TimePickerImpl(TimePicker* pPublic, _DateTimePicker* pCore)
72         : _WindowImpl(pPublic, pCore)
73         , __pPublicDateTimeChangeEvent(null)
74 {
75 }
76
77 _TimePickerImpl::~_TimePickerImpl(void)
78 {
79         if (__pPublicDateTimeChangeEvent != null)
80         {
81                 delete __pPublicDateTimeChangeEvent;
82                 __pPublicDateTimeChangeEvent = null;
83         }
84 }
85
86 _TimePickerImpl*
87 _TimePickerImpl::CreateTimePickerImplN(TimePicker* pControl, const String& title)
88 {
89         ClearLastResult();
90
91         result r = E_SUCCESS;
92
93         _DateTimePicker* pCore = _DateTimePicker::CreateDateTimePickerN(DATETIME_OUTPUT_STYLE_TIME, title);
94         SysTryReturn(NID_UI_CTRL, (pCore != null), null, r, "[%s] Propagating.", GetErrorMessage(GetLastResult()));
95
96         _TimePickerImpl* pPickerImpl = new (std::nothrow) _TimePickerImpl(pControl, pCore);
97         r = CheckConstruction(pCore, pPickerImpl);
98         SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), null, r, "[%s] Propagating.", GetErrorMessage(r));
99
100         pPickerImpl->__pPublicDateTimeChangeEvent = new (std::nothrow) _PublicDateTimeChangeEvent(*pControl);
101         SysTryCatch(NID_UI_CTRL, (pPickerImpl->__pPublicDateTimeChangeEvent != null), , E_OUT_OF_MEMORY,
102                            "[E_OUT_OF_MEMORY] Memory allocation failed.");
103
104         r = pPickerImpl->InitializeBoundsProperties(GET_SIZE_INFO(TimePicker), pCore->GetOrientation());
105         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
106
107         r = pCore->AddDateTimeChangeEventListener(*pPickerImpl);
108         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
109
110         return pPickerImpl;
111
112 CATCH:
113         delete pPickerImpl;
114
115         return null;
116 }
117
118 const char*
119 _TimePickerImpl::GetPublicClassName(void) const
120 {
121         return "Tizen::Ui::Controls::TimePicker";
122 }
123
124 const TimePicker&
125 _TimePickerImpl::GetPublic(void) const
126 {
127         return static_cast <const TimePicker&>(_ControlImpl::GetPublic());
128 }
129
130 TimePicker&
131 _TimePickerImpl::GetPublic(void)
132 {
133         return static_cast <TimePicker&>(_ControlImpl::GetPublic());
134 }
135
136 const _DateTimePicker&
137 _TimePickerImpl::GetCore(void) const
138 {
139         return static_cast <const _DateTimePicker&>(_ControlImpl::GetCore());
140 }
141
142 _DateTimePicker&
143 _TimePickerImpl::GetCore(void)
144 {
145         return static_cast <_DateTimePicker&>(_ControlImpl::GetCore());
146 }
147
148 _TimePickerImpl*
149 _TimePickerImpl::GetInstance(TimePicker& timePicker)
150 {
151         return static_cast<_TimePickerImpl*> (_ControlImpl::GetInstance(timePicker));
152 }
153
154 const _TimePickerImpl*
155 _TimePickerImpl::GetInstance(const TimePicker& timePicker)
156 {
157         return static_cast<const _TimePickerImpl*> (_ControlImpl::GetInstance(timePicker));
158 }
159
160 result
161 _TimePickerImpl::AddTimeChangeEventListener(Tizen::Ui::ITimeChangeEventListener& listener)
162 {
163         ClearLastResult();
164
165         SysTryReturnResult(NID_UI_CTRL, (__pPublicDateTimeChangeEvent != null), E_SYSTEM,
166                                            "A system error has occurred. The _PublicDateTimeChangeEvent instance is null.");
167
168         result r = __pPublicDateTimeChangeEvent->AddListener(listener);
169         SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
170
171         return r;
172 }
173
174 result
175 _TimePickerImpl::RemoveTimeChangeEventListener(Tizen::Ui::ITimeChangeEventListener& listener)
176 {
177         ClearLastResult();
178
179         SysTryReturnResult(NID_UI_CTRL, (__pPublicDateTimeChangeEvent != null), E_SYSTEM,
180                                            "A system error has occurred. The _PublicDateTimeChangeEvent instance is null.");
181
182         result r = __pPublicDateTimeChangeEvent->RemoveListener(listener);
183         SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
184
185         return r;
186 }
187
188 int
189 _TimePickerImpl::GetHour(void) const
190 {
191         ClearLastResult();
192
193         Variant hourValue = GetCore().GetPropertyHour();
194
195         return hourValue.ToInt();
196 }
197
198 int
199 _TimePickerImpl::GetMinute(void) const
200 {
201         ClearLastResult();
202
203         Variant minuteValue = GetCore().GetPropertyMinute();
204
205         return minuteValue.ToInt();
206 }
207
208 DateTime
209 _TimePickerImpl::GetTime(void) const
210 {
211         ClearLastResult();
212
213         Variant dateTimeValue = GetCore().GetPropertyDateTime();
214
215         return dateTimeValue.ToDateTime();
216 }
217
218 void
219 _TimePickerImpl::Set24HourNotationEnabled(bool enable)
220 {
221         ClearLastResult();
222
223         Variant envaluedValue(enable);
224
225         GetCore().SetProperty24HourNotation(envaluedValue);
226 }
227
228 result
229 _TimePickerImpl::SetHour(int hour)
230 {
231         ClearLastResult();
232
233         Variant hourValue(hour);
234
235         return GetCore().SetPropertyHour(hourValue);
236 }
237
238
239 result
240 _TimePickerImpl::SetMinute(int minute)
241 {
242         ClearLastResult();
243
244         Variant minuteValue(minute);
245
246         return GetCore().SetPropertyMinute(minuteValue);
247 }
248
249 void
250 _TimePickerImpl::SetTime(const DateTime& time)
251 {
252         ClearLastResult();
253
254         Variant dateTimeValue(time);
255
256         GetCore().SetPropertyDateTime(dateTimeValue);
257
258         SetYear(0);
259         SetMonth(0);
260         SetDay(0);
261 }
262
263 void
264 _TimePickerImpl::SetCurrentTime(void)
265 {
266         ClearLastResult();
267
268         GetCore().SetCurrentDateTime();
269
270         SetYear(0);
271         SetMonth(0);
272         SetDay(0);
273 }
274
275 result
276 _TimePickerImpl::SetYear(int year)
277 {
278         Variant yearValue(year);
279
280         return GetCore().SetPropertyYear(yearValue);
281 }
282
283 result
284 _TimePickerImpl::SetMonth(int month)
285 {
286         Variant monthValue(month);
287
288         return GetCore().SetPropertyMonth(monthValue);
289 }
290
291 result
292 _TimePickerImpl::SetDay(int day)
293 {
294         Variant dayValue(day);
295
296         return GetCore().SetPropertyDay(dayValue);
297 }
298
299 void
300 _TimePickerImpl::OnDateTimeChanged(const Tizen::Ui::_Control& source, int year, int month, int day, int hour, int minute)
301 {
302         ClearLastResult();
303
304         if (__pPublicDateTimeChangeEvent == null)
305         {
306                 return;
307         }
308
309         _PublicDateTimeChangeEventArg* pEventArg = new (std::nothrow) _PublicDateTimeChangeEventArg(TIME_PUBLIC_CHANGE_SAVED);
310         SysTryReturnVoidResult(NID_UI_CTRL, (pEventArg != null), E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
311
312         pEventArg->SetDate(year, month, day);
313         pEventArg->SetTime(hour, minute);
314
315         __pPublicDateTimeChangeEvent->Fire(*pEventArg);
316 }
317
318 void
319 _TimePickerImpl::OnDateTimeChangeCanceled(const Tizen::Ui::_Control& source)
320 {
321         ClearLastResult();
322
323         if (__pPublicDateTimeChangeEvent == null)
324         {
325                 return;
326         }
327
328         _PublicDateTimeChangeEventArg* pEventArg = new (std::nothrow) _PublicDateTimeChangeEventArg(TIME_PUBLIC_CHANGE_CANCELED);
329         SysTryReturnVoidResult(NID_UI_CTRL, (pEventArg != null), E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
330
331         __pPublicDateTimeChangeEvent->Fire(*pEventArg);
332 }
333
334 void
335 _TimePickerImpl::OnChangeLayout(Tizen::Ui::_ControlOrientation orientation)
336 {
337         ClearLastResult();
338
339         InitializeBoundsProperties(GET_SIZE_INFO(TimePicker), orientation);
340         _ControlImpl::OnChangeLayout(orientation);
341 }
342
343 result
344 _TimePickerImpl::OnAttachedToMainTree(void)
345 {
346         result r = E_SUCCESS;
347
348         if (GetOwner() == null)
349         {
350                 _FrameImpl* pFrameImpl = dynamic_cast <_FrameImpl*>(_ControlImplManager::GetInstance()->GetCurrentFrame());
351                 SysTryReturn(NID_UI_CTRL, (pFrameImpl != null), E_SYSTEM, E_SYSTEM,
352                                 "[E_SYSTEM] A system error has occurred. Failed to get frame instance.");
353
354                 _Form* pForm = pFrameImpl->GetCore().GetCurrentForm();
355                 if (pForm != null)
356                 {
357                         GetCore().SetOwner(pForm);
358                 }
359                 else
360                 {
361                         GetCore().SetOwner(&pFrameImpl->GetCore());
362                 }
363         }
364         SetVisibleState(true);
365
366         _WindowImpl::OnAttachedToMainTree();
367         return r;
368 }
369
370 }}} // Tizen::Ui::Controls