Fork for IVI: mesa fixing
[profile/ivi/uifw.git] / src / ui / controls / FUiCtrlCheckButton.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         FUiCtrlCheckButton.cpp
19 * @brief        This file contains implementation of CheckButton class
20 */
21
22 #include <FUiCtrlCheckButton.h>
23 #include <FBaseSysLog.h>
24 #include "FUiCtrl_CheckButtonImpl.h"
25
26 #define CONTROL_MINIMUM_LENGTH_LIMIT                                    0
27 #define CONTROL_MAXIMUM_LENGTH_LIMIT                                    0xFFFF
28 #define CONTROL_MINIMUM_SIZE_LIMIT                                              0, 0
29 #define CONTROL_MAXIMUM_SIZE_LIMIT                                              0xFFFF, 0xFFFF
30
31 #define PROPERTY_CHECKBUTTON_MIN_WIDTH                                  0
32 #define PROPERTY_CHECKBUTTON_MIN_HEIGHT                                 0
33 #define PROPERTY_CHECKBUTTON_MIN_WIDTH_WITH_TITLE               0
34 #define PROPERTY_CHECKBUTTON_MIN_HEIGHT_WITH_TITLE      0
35 #define PROPERTY_CHECKBUTTON_MIN_WIDTH_WITH_DIVIDER             0
36 #define PROPERTY_CHECKBUTTON_MIN_WIDTH_ONOFF_SLIDING    0
37 #define PROPERTY_CHECKBUTTON_MIN_WIDTH_WITH_DETAILED    0
38 #define PROPERTY_CHECK_MARK_REGION_CONFIG                               108
39 int checkMinWidth, checkMinHeight = 0;
40
41 using namespace Tizen::Base;
42 using namespace Tizen::Graphics;
43
44 namespace Tizen { namespace Ui { namespace Controls
45 {
46
47 CheckButton::CheckButton(void)
48 {
49
50 }
51
52 CheckButton::~CheckButton(void)
53 {
54
55 }
56
57 result
58 CheckButton::Construct(const Rectangle& rect, CheckButtonStyle style, BackgroundStyle backgroundStyle,
59                                            bool showTitle, const String& text,  GroupStyle groupStyle)
60 {
61         switch (style)
62         {
63         case CHECK_BUTTON_STYLE_MARK_WITH_DIVIDER:
64                 // fall through
65         case CHECK_BUTTON_STYLE_ONOFF_WITH_DIVIDER:
66                 // fall through
67         case CHECK_BUTTON_STYLE_RADIO_WITH_DIVIDER:
68                 checkMinWidth = PROPERTY_CHECKBUTTON_MIN_WIDTH_WITH_DIVIDER;
69                 break;
70
71         case CHECK_BUTTON_STYLE_MARK_WITH_DETAILED_BUTTON:
72                 // fall through
73         case CHECK_BUTTON_STYLE_RADIO_WITH_DETAILED_BUTTON:
74                 checkMinWidth = PROPERTY_CHECKBUTTON_MIN_WIDTH_WITH_DETAILED;
75                 break;
76
77         case CHECK_BUTTON_STYLE_ONOFF_SLIDING:
78                 checkMinWidth = PROPERTY_CHECKBUTTON_MIN_WIDTH_ONOFF_SLIDING;
79                 break;
80
81         default:     //CHECK_BUTTON_STYLE_MARK , CHECK_BUTTON_STYLE_ONOFF, CHECK_BUTTON_STYLE_RADIO
82                 checkMinWidth = showTitle ? PROPERTY_CHECKBUTTON_MIN_WIDTH_WITH_TITLE : PROPERTY_CHECKBUTTON_MIN_WIDTH;
83         }
84
85         checkMinHeight = showTitle ? PROPERTY_CHECKBUTTON_MIN_HEIGHT_WITH_TITLE : PROPERTY_CHECKBUTTON_MIN_HEIGHT;
86
87         SysTryReturn(NID_UI_CTRL, (rect.width >= checkMinWidth && rect.width <= CONTROL_MAXIMUM_LENGTH_LIMIT),
88                         E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The width error occurred");
89
90         SysTryReturn(NID_UI_CTRL, (rect.height >= checkMinHeight && rect.height <= CONTROL_MAXIMUM_LENGTH_LIMIT),
91                         E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The height error occurred");
92
93         SysTryReturn(NID_UI_CTRL, !(backgroundStyle == BACKGROUND_STYLE_NONE && groupStyle != GROUP_STYLE_NONE),
94                         E_INVALID_OPERATION, E_INVALID_OPERATION, "[E_INVALID_OPERATION] Unable to set group style.");
95
96         result r = E_SUCCESS;
97         _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
98
99         SysAssertf(pCheckButtonImpl == null,
100                                 "Already constructed. Calling Construct() twice or more on a same instance is not allowed for this class.");
101
102         pCheckButtonImpl = _CheckButtonImpl::CreateCheckButtonImplN(this, rect);
103         r = GetLastResult();
104         SysTryReturn(NID_UI_CTRL, pCheckButtonImpl, r, r, "[%s] Propagating.", GetErrorMessage(r));
105
106
107         r = pCheckButtonImpl->SetCheckButtonStyle(style);
108         SysAssert(r == E_SUCCESS); // [ToDo] Exception. Which exception can occur?
109
110         r = pCheckButtonImpl->SetBackgroundStyle(backgroundStyle);
111         SysAssert(r == E_SUCCESS); // [ToDo] Exception. Which exception can occur?
112
113         r = pCheckButtonImpl->SetShowTitle(showTitle);
114         SysAssert(r == E_SUCCESS); // [ToDo] Exception. Which exception can occur?
115
116         r = pCheckButtonImpl->SetText(text);
117         SysAssert(r == E_SUCCESS); // [ToDo] Exception. Which exception can occur?
118
119         r = pCheckButtonImpl->SetGroupStyle(groupStyle);
120         SysAssert(r == E_SUCCESS); // [ToDo] Exception. Which exception can occur?
121
122         r = pCheckButtonImpl->SetMinimumSize(Dimension(checkMinWidth, checkMinHeight));
123         SysAssert(r == E_SUCCESS); // [ToDo] Exception. Which exception can occur?
124
125         _pControlImpl = pCheckButtonImpl;
126
127         return E_SUCCESS;
128 }
129
130 void
131 CheckButton::SetSelected(bool select)
132 {
133         _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
134         SysAssertf(pCheckButtonImpl != null,
135                                 "Not yet constructed. Construct() should be called before use.");
136
137         pCheckButtonImpl->SetSelected(select);
138
139         return;
140 }
141
142 bool
143 CheckButton::IsSelected(void) const
144 {
145         const _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
146         SysAssertf(pCheckButtonImpl != null,
147                                         "Not yet constructed. Construct() should be called before use.");
148
149         return pCheckButtonImpl->IsSelected();
150 }
151
152 void
153 CheckButton::AddActionEventListener(IActionEventListener& listener)
154 {
155         _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
156         SysAssertf(pCheckButtonImpl != null,
157                                         "Not yet constructed. Construct() should be called before use.");
158
159         result r = pCheckButtonImpl->AddActionEventListener(listener);
160         SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
161
162         return;
163 }
164
165 void
166 CheckButton::RemoveActionEventListener(IActionEventListener& listener)
167 {
168         _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
169         SysAssertf(pCheckButtonImpl != null,
170                                         "Not yet constructed. Construct() should be called before use.");
171
172         result r = pCheckButtonImpl->RemoveActionEventListener(listener);
173         SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
174
175         return;
176 }
177
178 void
179 CheckButton::SetActionId(int checkedActionId, int uncheckedActionId, int selectedActionId)
180 {
181         _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
182         SysAssertf(pCheckButtonImpl != null,
183                                         "Not yet constructed. Construct() should be called before use.");
184
185         pCheckButtonImpl->SetActionId(checkedActionId, uncheckedActionId, selectedActionId);
186
187         return;
188 }
189
190 int
191 CheckButton::GetCheckedActionId(void) const
192 {
193         const _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
194         SysAssertf(pCheckButtonImpl != null,
195                                         "Not yet constructed. Construct() should be called before use.");
196
197         return pCheckButtonImpl->GetCheckedActionId();
198 }
199
200 int
201 CheckButton::GetUncheckedActionId(void) const
202 {
203         const _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
204         SysAssertf(pCheckButtonImpl != null,
205                                         "Not yet constructed. Construct() should be called before use.");
206
207         return pCheckButtonImpl->GetUncheckedActionId();
208 }
209
210 int
211 CheckButton::GetSelectedActionId(void) const
212 {
213         const _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
214         SysAssertf(pCheckButtonImpl != null,
215                                         "Not yet constructed. Construct() should be called before use.");
216
217         return pCheckButtonImpl->GetSelectedActionId();
218 }
219
220 void
221 CheckButton::SetText(const String& text)
222 {
223         _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
224         SysAssertf(pCheckButtonImpl != null,
225                                         "Not yet constructed. Construct() should be called before use.");
226
227         pCheckButtonImpl->SetText(text);
228
229         return;
230 }
231
232 String
233 CheckButton::GetText(void) const
234 {
235         const _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
236         SysAssertf(pCheckButtonImpl != null,
237                                         "Not yet constructed. Construct() should be called before use.");
238
239         return pCheckButtonImpl->GetText();
240 }
241
242 result
243 CheckButton::SetTitleText(const String& title)
244 {
245         _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
246         SysAssertf(pCheckButtonImpl != null,
247                                         "Not yet constructed. Construct() should be called before use.");
248
249         result r = pCheckButtonImpl->SetTitleText(title);
250         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
251
252         return E_SUCCESS;
253 }
254
255 String
256 CheckButton::GetTitleText(void) const
257 {
258         const _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
259         SysAssertf(pCheckButtonImpl != null,
260                                         "Not yet constructed. Construct() should be called before use.");
261
262         return pCheckButtonImpl->GetTitleText();
263 }
264
265 void
266 CheckButton::SetTextHorizontalAlignment(HorizontalAlignment alignment)
267 {
268         _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
269         SysAssertf(pCheckButtonImpl != null,
270                                         "Not yet constructed. Construct() should be called before use.");
271
272         pCheckButtonImpl->SetTextHorizontalAlignment(alignment);
273
274         return;
275 }
276
277 HorizontalAlignment
278 CheckButton::GetTextHorizontalAlignment(void) const
279 {
280         const _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
281         SysAssertf(pCheckButtonImpl != null,
282                                         "Not yet constructed. Construct() should be called before use.");
283
284         return pCheckButtonImpl->GetTextHorizontalAlignment();
285 }
286
287 void
288 CheckButton::SetTextVerticalAlignment(VerticalAlignment alignment)
289 {
290         _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
291         SysAssertf(pCheckButtonImpl != null,
292                                         "Not yet constructed. Construct() should be called before use.");
293
294         pCheckButtonImpl->SetTextVerticalAlignment(alignment);
295
296         return;
297 }
298
299 VerticalAlignment
300 CheckButton::GetTextVerticalAlignment(void) const
301 {
302         const _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
303         SysAssertf(pCheckButtonImpl != null,
304                                         "Not yet constructed. Construct() should be called before use.");
305
306         return pCheckButtonImpl->GetTextVerticalAlignment();
307 }
308
309 void
310 CheckButton::SetTextColor(const Color& color)
311 {
312         _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
313         SysAssertf(pCheckButtonImpl != null,
314                                         "Not yet constructed. Construct() should be called before use.");
315
316         pCheckButtonImpl->SetTextColor(color);
317
318         return;
319 }
320
321 Color
322 CheckButton::GetTextColor(void) const
323 {
324         const _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
325         SysAssertf(pCheckButtonImpl != null,
326                                         "Not yet constructed. Construct() should be called before use.");
327
328         return pCheckButtonImpl->GetTextColor();
329 }
330
331 result
332 CheckButton::SetDisabledTextColor(const Color& color)
333 {
334         _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
335         SysAssertf(pCheckButtonImpl != null,
336                                         "Not yet constructed. Construct() should be called before use.");
337
338         result r = pCheckButtonImpl->SetDisabledTextColor(color);
339         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
340
341         return E_SUCCESS;
342 }
343
344 Color
345 CheckButton::GetDisabledTextColor(void) const
346 {
347         const _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
348         SysAssertf(pCheckButtonImpl != null,
349                                         "Not yet constructed. Construct() should be called before use.");
350
351         return pCheckButtonImpl->GetDisabledTextColor();
352 }
353
354 result
355 CheckButton::SetPressedTextColor(const Color& color)
356 {
357         _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
358         SysAssertf(pCheckButtonImpl != null,
359                                         "Not yet constructed. Construct() should be called before use.");
360
361         result r = pCheckButtonImpl->SetPressedTextColor(color);
362         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
363
364         return E_SUCCESS;
365 }
366
367 Color
368 CheckButton::GetPressedTextColor(void) const
369 {
370         const _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
371         SysAssertf(pCheckButtonImpl != null,
372                                         "Not yet constructed. Construct() should be called before use.");
373
374         return pCheckButtonImpl->GetPressedTextColor();
375 }
376
377 result
378 CheckButton::SetHighlightedTextColor(const Color& color)
379 {
380         _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
381         SysAssertf(pCheckButtonImpl != null,
382                                         "Not yet constructed. Construct() should be called before use.");
383
384         result r = pCheckButtonImpl->SetHighlightedTextColor(color);
385         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
386
387         return E_SUCCESS;
388 }
389
390 Color
391 CheckButton::GetHighlightedTextColor(void) const
392 {
393         const _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
394         SysAssertf(pCheckButtonImpl != null,
395                                         "Not yet constructed. Construct() should be called before use.");
396
397         return pCheckButtonImpl->GetHighlightedTextColor();
398 }
399
400 void
401 CheckButton::SetTitleTextColor(const Color& color)
402 {
403         _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
404         SysAssertf(pCheckButtonImpl != null,
405                                         "Not yet constructed. Construct() should be called before use.");
406
407         pCheckButtonImpl->SetTitleTextColor(color);
408
409         return;
410 }
411
412 Color
413 CheckButton::GetTitleTextColor(void) const
414 {
415         const _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
416         SysAssertf(pCheckButtonImpl != null,
417                                         "Not yet constructed. Construct() should be called before use.");
418
419         return pCheckButtonImpl->GetTitleTextColor();
420 }
421
422 result
423 CheckButton::SetDisabledTitleTextColor(const Color& color)
424 {
425         _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
426         SysAssertf(pCheckButtonImpl != null,
427                                         "Not yet constructed. Construct() should be called before use.");
428
429         result r = pCheckButtonImpl->SetDisabledTitleTextColor(color);
430         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
431
432         return E_SUCCESS;
433 }
434
435 Color
436 CheckButton::GetDisabledTitleTextColor(void) const
437 {
438         const _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
439         SysAssertf(pCheckButtonImpl != null,
440                                         "Not yet constructed. Construct() should be called before use.");
441
442         return pCheckButtonImpl->GetDisabledTitleTextColor();
443 }
444
445 result
446 CheckButton::SetPressedTitleTextColor(const Color& color)
447 {
448         _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
449         SysAssertf(pCheckButtonImpl != null,
450                                         "Not yet constructed. Construct() should be called before use.");
451
452         result r = pCheckButtonImpl->SetPressedTitleTextColor(color);
453         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
454
455         return E_SUCCESS;
456 }
457
458 Color
459 CheckButton::GetPressedTitleTextColor(void) const
460 {
461         const _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
462         SysAssertf(pCheckButtonImpl != null,
463                                         "Not yet constructed. Construct() should be called before use.");
464
465         return pCheckButtonImpl->GetPressedTitleTextColor();
466 }
467
468 result
469 CheckButton::SetHighlightedTitleTextColor(const Color& color)
470 {
471         _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
472         SysAssertf(pCheckButtonImpl != null,
473                                         "Not yet constructed. Construct() should be called before use.");
474
475         result r = pCheckButtonImpl->SetHighlightedTitleTextColor(color);
476         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
477
478         return E_SUCCESS;
479 }
480
481 Color
482 CheckButton::GetHighlightedTitleTextColor(void) const
483 {
484         const _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
485         SysAssertf(pCheckButtonImpl != null,
486                                         "Not yet constructed. Construct() should be called before use.");
487
488         return pCheckButtonImpl->GetHighlightedTitleTextColor();
489 }
490
491 result
492 CheckButton::SetColor(CheckButtonStatus status, const Color& color)
493 {
494         _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
495         SysAssertf(pCheckButtonImpl != null,
496                                         "Not yet constructed. Construct() should be called before use.");
497
498         result r = pCheckButtonImpl->SetColor(status, color);
499         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
500
501         return E_SUCCESS;;
502 }
503
504 Color
505 CheckButton::GetColor(CheckButtonStatus status) const
506 {
507         const _CheckButtonImpl* pCheckButtonImpl = _CheckButtonImpl::GetInstance(*this);
508         SysAssertf(pCheckButtonImpl != null,
509                                         "Not yet constructed. Construct() should be called before use.");
510
511         return pCheckButtonImpl->GetColor(status);
512 }
513
514 }}} // Tizen::Ui::Controls