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