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