2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
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
9 // http://floralicense.org/license/
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.
18 * @file FUiCtrl_CheckButtonPresenter.cpp
19 * @brief This is the implementation file for the _CheckButtonPresenter class.
22 #include <FBaseErrorDefine.h>
23 #include <FBaseSysLog.h>
24 #include <FGrp_BitmapImpl.h>
25 #include <FGrp_CanvasImpl.h>
26 #include <FGrp_FontImpl.h>
27 #include <FGrp_TextTextObject.h>
28 #include <FGrp_TextTextSimple.h>
29 #include "FUi_ResourceManager.h"
30 #include "FUi_UiTouchEvent.h"
31 #include "FUiAnim_VisualElement.h"
32 #include "FUiCtrl_CheckButtonPresenter.h"
33 #include "FUiCtrl_CheckButtonModel.h"
34 #include "FUiCtrl_CheckButton.h"
36 using namespace Tizen::Base;
37 using namespace Tizen::Graphics;
38 using namespace Tizen::Graphics::_Text;
39 using namespace Tizen::Base::Runtime;
41 namespace Tizen { namespace Ui { namespace Controls
44 _CheckButtonPresenter::_CheckButtonPresenter(void)
45 : __pCheckButton(null)
46 , __pCheckButtonModel(null)
47 , __previousEnabledState(false)
48 , __touchMoveHandled(false)
50 , __pTitleTextFont(null)
52 , __pTitleTextObject(null)
53 , __titleTextBounds(Rectangle())
54 , __textBounds(Rectangle())
55 , __defaultButtonBounds(Rectangle())
56 , __onOffSlidingButtonBounds(Rectangle())
57 , __detailedButtonBounds(Rectangle())
60 , __pCheckAnimationTimer(null)
66 _CheckButtonPresenter::~_CheckButtonPresenter(void)
68 if (__pCheckButtonModel)
70 delete __pCheckButtonModel;
71 __pCheckButtonModel = null;
80 if (__pTitleTextObject)
82 delete __pTitleTextObject;
83 __pTitleTextObject = null;
86 if (__pCheckAnimationTimer)
88 delete __pCheckAnimationTimer;
89 __pCheckAnimationTimer = null;
94 _CheckButtonPresenter::Construct(const _CheckButton& checkButton)
98 __pCheckButton = const_cast <_CheckButton*>(&checkButton);
100 __fontStyle = FONT_STYLE_PLAIN;
102 __pTextObject = new (std::nothrow) TextObject();
103 SysTryCatch(NID_UI_CTRL, __pTextObject != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
105 __pTitleTextObject = new (std::nothrow) TextObject();
106 SysTryCatch(NID_UI_CTRL, __pTitleTextObject != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
108 __pTextObject->Construct();
109 __pTextObject->SetWrap(TEXT_OBJECT_WRAP_TYPE_WORD);
110 __pTextObject->SetAction(TEXT_OBJECT_ACTION_TYPE_ABBREV);
112 __pTitleTextObject->Construct();
113 __pTitleTextObject->SetWrap(TEXT_OBJECT_WRAP_TYPE_WORD);
114 __pTitleTextObject->SetAction(TEXT_OBJECT_ACTION_TYPE_ABBREV);
116 CalculateTextBounds();
117 CalculateTitleTextBounds();
118 CalculateButtonBounds();
124 delete __pTextObject;
125 __pTextObject = null;
127 delete __pTitleTextObject;
128 __pTitleTextObject = null;
134 _CheckButtonPresenter::Install(void)
136 result r = E_SUCCESS;
138 _CheckButtonModel* pModel = new (std::nothrow) _CheckButtonModel();
139 SysTryReturn(NID_UI_CTRL, pModel, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
141 r = SetModel(*pModel);
142 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
144 r = pModel->Construct();
145 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
155 _CheckButtonPresenter::SetModel(const _CheckButtonModel& checkButtonModel)
157 __pCheckButtonModel = const_cast <_CheckButtonModel*>(&checkButtonModel);
163 _CheckButtonPresenter::OnFontChanged(Font* pFont)
166 __pTitleTextFont = pFont;
172 _CheckButtonPresenter::OnFontInfoRequested(unsigned long& style, int& size)
181 _CheckButtonPresenter::SetFontInfo(unsigned long style, int size)
190 _CheckButtonPresenter::Draw(void)
200 _CheckButtonPresenter::DrawBackground(void)
202 Canvas* pCanvas = __pCheckButton->GetCanvasN();
205 SysLog(NID_UI_CTRL, "Cannot get a canvas.");
210 Bitmap* pReplacementColorBackgroundBitmap = null;
211 Bitmap* pBackgroundBitmap = __pCheckButton->GetBackgroundBitmap(__pCheckButton->GetGroupStyle());
212 Bitmap* pBackgroundNormalEffectBitmap = __pCheckButton->GetBackgroundNormalEffectBitmap(__pCheckButton->GetGroupStyle());
213 Bitmap* pBackgroundPressedEffectBitmap = __pCheckButton->GetBackgroundPressedEffectBitmap(__pCheckButton->GetGroupStyle());
215 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
218 Rectangle bounds(0, 0, __pCheckButton->GetBounds().width, __pCheckButton->GetBounds().height);
219 CheckButtonStatus checkStatus = __pCheckButton->GetCheckButtonStatus();
220 BackgroundStyle backgroundStyle = __pCheckButton->GetBackgroundStyle();
222 if (checkStatus == CHECK_BUTTON_STATUS_NORMAL)
224 if (backgroundStyle == BACKGROUND_STYLE_NONE)
226 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
231 if (pBackgroundBitmap && pBackgroundBitmap->IsNinePatchedBitmap())
233 pReplacementColorBackgroundBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pBackgroundBitmap, Color::GetColor(COLOR_ID_MAGENTA),
234 __pCheckButton->GetColor(CHECK_BUTTON_STATUS_NORMAL));
235 if (pReplacementColorBackgroundBitmap)
237 pCanvas->DrawNinePatchedBitmap(bounds, *pReplacementColorBackgroundBitmap);
239 if (pBackgroundNormalEffectBitmap)
241 pCanvas->DrawNinePatchedBitmap(bounds, *pBackgroundNormalEffectBitmap);
246 if (pBackgroundBitmap)
248 pCanvas->DrawBitmap(Rectangle(0, 0, bounds.width, bounds.height), *pBackgroundBitmap);
253 else if (checkStatus == CHECK_BUTTON_STATUS_DISABLED)
255 if (backgroundStyle == BACKGROUND_STYLE_NONE)
257 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
262 if (pBackgroundBitmap && pBackgroundBitmap->IsNinePatchedBitmap())
264 pReplacementColorBackgroundBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pBackgroundBitmap, Color::GetColor(COLOR_ID_MAGENTA),
265 __pCheckButton->GetColor(CHECK_BUTTON_STATUS_DISABLED));
266 if (pReplacementColorBackgroundBitmap)
268 pCanvas->DrawNinePatchedBitmap(bounds, *pReplacementColorBackgroundBitmap);
270 if (pBackgroundNormalEffectBitmap)
272 pCanvas->DrawNinePatchedBitmap(bounds, *pBackgroundNormalEffectBitmap);
277 if (pBackgroundBitmap)
279 pCanvas->DrawBitmap(Rectangle(0, 0, bounds.width, bounds.height), *pBackgroundBitmap);
284 else if (checkStatus == CHECK_BUTTON_STATUS_PRESSED)
286 if (backgroundStyle == BACKGROUND_STYLE_NONE)
288 pCanvas->SetBackgroundColor(__pCheckButton->GetColor(CHECK_BUTTON_STATUS_PRESSED));
293 if (pBackgroundBitmap && pBackgroundBitmap->IsNinePatchedBitmap())
295 pReplacementColorBackgroundBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pBackgroundBitmap, Color::GetColor(COLOR_ID_MAGENTA),
296 __pCheckButton->GetColor(CHECK_BUTTON_STATUS_PRESSED));
297 if (pReplacementColorBackgroundBitmap)
299 pCanvas->DrawNinePatchedBitmap(bounds, *pReplacementColorBackgroundBitmap);
301 if (pBackgroundPressedEffectBitmap)
303 pCanvas->DrawNinePatchedBitmap(bounds, *pBackgroundPressedEffectBitmap);
308 if (pBackgroundBitmap)
310 pCanvas->DrawBitmap(Rectangle(0, 0, bounds.width, bounds.height), *pBackgroundBitmap);
317 if (backgroundStyle == BACKGROUND_STYLE_NONE)
319 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
324 if (pBackgroundBitmap && pBackgroundBitmap->IsNinePatchedBitmap())
326 pReplacementColorBackgroundBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pBackgroundBitmap, Color::GetColor(COLOR_ID_MAGENTA),
327 __pCheckButton->GetColor(CHECK_BUTTON_STATUS_HIGHLIGHTED));
328 if (pReplacementColorBackgroundBitmap)
330 pCanvas->DrawNinePatchedBitmap(bounds, *pReplacementColorBackgroundBitmap);
332 if (pBackgroundNormalEffectBitmap)
334 pCanvas->DrawNinePatchedBitmap(bounds, *pBackgroundNormalEffectBitmap);
339 if (pBackgroundBitmap)
341 pCanvas->DrawBitmap(Rectangle(0, 0, bounds.width, bounds.height), *pBackgroundBitmap);
348 delete pReplacementColorBackgroundBitmap;
354 _CheckButtonPresenter::DrawCheckBitmap(void)
356 Canvas* pCanvas = __pCheckButton->GetCanvasN();
359 SysLog(NID_UI_CTRL, "Cannot get a canvas.");
364 Color detailedNormalBackgroundColor;
365 Color detailedPressedBackgroundColor;
366 Color detailedNormalTextColor;
367 Color detailedPressedTextColor;
369 GET_COLOR_CONFIG(CHECKBUTTON::DETAILED_ICON_BG_NORMAL, detailedNormalBackgroundColor);
370 GET_COLOR_CONFIG(CHECKBUTTON::DETAILED_ICON_BG_PRESSED, detailedPressedBackgroundColor);
371 GET_COLOR_CONFIG(CHECKBUTTON::DETAILED_ICON_TEXT_NORMAL, detailedNormalTextColor);
372 GET_COLOR_CONFIG(CHECKBUTTON::DETAILED_ICON_TEXT_PRESSED, detailedPressedTextColor);
374 Bitmap* pReplacementColorBackgroundBitmap = null;
375 Bitmap* pReplacementColorTextBitmap = null;
376 Bitmap* pOnOffBitmap = __pCheckButton->GetOnOffBitmap();
377 Bitmap* pCircleBitmap = __pCheckButton->GetCircleBitmap();
378 Bitmap* pDetailedBitmap = __pCheckButton->GetDetailedBitmap();
379 Bitmap* pCircleNormalEffectBitmap = __pCheckButton->GetCircleNormalEffectBitmap();
380 Bitmap* pCirclePressedEffectBitmap = __pCheckButton->GetCirclePressedEffectBitmap();
382 CheckButtonStatus checkStatus = __pCheckButton->GetCheckButtonStatus();
383 CheckButtonStyle checkStyle = __pCheckButton->GetCheckButtonStyle();
385 CalculateButtonBounds();
387 if (checkStyle == CHECK_BUTTON_STYLE_MARK || checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DIVIDER || checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DETAILED_BUTTON)
389 if (checkStatus == CHECK_BUTTON_STATUS_NORMAL || checkStatus == CHECK_BUTTON_STATUS_DISABLED)
391 Bitmap* pMarkBgNormalBitmap = __pCheckButton->GetMarkBgNormalBitmap();
393 if (pMarkBgNormalBitmap)
395 pCanvas->DrawBitmap(Point(__defaultButtonBounds.x, __defaultButtonBounds.y), *pMarkBgNormalBitmap);
398 if (checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DETAILED_BUTTON)
400 pReplacementColorBackgroundBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedNormalBackgroundColor);
401 pReplacementColorTextBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedNormalTextColor);
403 if (pReplacementColorBackgroundBitmap)
405 pCanvas->DrawBitmap(Point(__detailedButtonBounds.x, __detailedButtonBounds.y), *pReplacementColorBackgroundBitmap);
407 if (pCircleNormalEffectBitmap)
409 pCanvas->DrawBitmap(Point(__detailedButtonBounds.x, __detailedButtonBounds.y), *pCircleNormalEffectBitmap);
411 if (pReplacementColorTextBitmap)
413 pCanvas->DrawBitmap(Point(__detailedButtonBounds.x, __detailedButtonBounds.y), *pReplacementColorTextBitmap);
417 else if (checkStatus == CHECK_BUTTON_STATUS_PRESSED)
419 Bitmap* pMarkBgPressedBitmap = __pCheckButton->GetMarkBgPressedBitmap();
421 if (pMarkBgPressedBitmap)
423 pCanvas->DrawBitmap(Point(__defaultButtonBounds.x, __defaultButtonBounds.y), *pMarkBgPressedBitmap);
426 if (checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DETAILED_BUTTON)
428 pReplacementColorBackgroundBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedPressedBackgroundColor);
429 pReplacementColorTextBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedPressedTextColor);
431 if (pReplacementColorBackgroundBitmap)
433 pCanvas->DrawBitmap(Point(__detailedButtonBounds.x, __detailedButtonBounds.y), *pReplacementColorBackgroundBitmap);
435 if (pCirclePressedEffectBitmap)
437 pCanvas->DrawBitmap(Point(__detailedButtonBounds.x, __detailedButtonBounds.y), *pCirclePressedEffectBitmap);
439 if (pReplacementColorTextBitmap)
441 pCanvas->DrawBitmap(Point(__detailedButtonBounds.x, __detailedButtonBounds.y), *pReplacementColorTextBitmap);
448 else if (checkStyle == CHECK_BUTTON_STYLE_RADIO || checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DIVIDER || checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DETAILED_BUTTON)
450 if (checkStatus == CHECK_BUTTON_STATUS_NORMAL || checkStatus == CHECK_BUTTON_STATUS_DISABLED)
452 if (checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DETAILED_BUTTON)
454 pReplacementColorBackgroundBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedNormalBackgroundColor);
455 pReplacementColorTextBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedNormalTextColor);
457 if (pReplacementColorBackgroundBitmap)
459 pCanvas->DrawBitmap(Point(__detailedButtonBounds.x, __detailedButtonBounds.y), *pReplacementColorBackgroundBitmap);
461 if (pCircleNormalEffectBitmap)
463 pCanvas->DrawBitmap(Point(__detailedButtonBounds.x, __detailedButtonBounds.y), *pCircleNormalEffectBitmap);
465 if (pReplacementColorTextBitmap)
467 pCanvas->DrawBitmap(Point(__detailedButtonBounds.x, __detailedButtonBounds.y), *pReplacementColorTextBitmap);
471 else if (checkStatus == CHECK_BUTTON_STATUS_PRESSED)
473 if (checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DETAILED_BUTTON)
475 pReplacementColorBackgroundBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedPressedBackgroundColor);
476 pReplacementColorTextBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedPressedTextColor);
478 if (pReplacementColorBackgroundBitmap)
480 pCanvas->DrawBitmap(Point(__detailedButtonBounds.x, __detailedButtonBounds.y), *pReplacementColorBackgroundBitmap);
482 if (pCirclePressedEffectBitmap)
484 pCanvas->DrawBitmap(Point(__detailedButtonBounds.x, __detailedButtonBounds.y), *pCirclePressedEffectBitmap);
486 if (pReplacementColorTextBitmap)
488 pCanvas->DrawBitmap(Point(__detailedButtonBounds.x, __detailedButtonBounds.y), *pReplacementColorTextBitmap);
495 else if (checkStyle == CHECK_BUTTON_STYLE_ONOFF || checkStyle == CHECK_BUTTON_STYLE_ONOFF_WITH_DIVIDER)
497 if (checkStatus == CHECK_BUTTON_STATUS_NORMAL || checkStatus == CHECK_BUTTON_STATUS_DISABLED)
499 Bitmap* pOnOffBgNormalBitmap = __pCheckButton->GetOnOffBgNormalBitmap();
501 if (pOnOffBgNormalBitmap)
503 pCanvas->DrawBitmap(Point(__defaultButtonBounds.x, __defaultButtonBounds.y), *pOnOffBgNormalBitmap);
506 else if (checkStatus == CHECK_BUTTON_STATUS_PRESSED)
508 Bitmap* pOnOffBgPressedBitmap = __pCheckButton->GetOnOffBgPressedBitmap();
510 if (pOnOffBgPressedBitmap)
512 pCanvas->DrawBitmap(Point(__defaultButtonBounds.x, __defaultButtonBounds.y), *pOnOffBgPressedBitmap);
516 if (__pCheckButton->IsSelected() && pOnOffBitmap)
518 pCanvas->DrawBitmap(Point(__defaultButtonBounds.x, __defaultButtonBounds.y), *pOnOffBitmap);
521 else if (checkStyle == CHECK_BUTTON_STYLE_ONOFF_SLIDING)
523 if (__pCheckButton->IsSelected())
525 Bitmap* pOnOffSlidingOnBitmap = __pCheckButton->GetOnOffSlidingOnBitmap();
527 if (pOnOffSlidingOnBitmap)
529 pCanvas->DrawBitmap(Point(__onOffSlidingButtonBounds.x, __onOffSlidingButtonBounds.y), *pOnOffSlidingOnBitmap);
534 Bitmap* pOnOffSlidingOffBitmap = __pCheckButton->GetOnOffSlidingOffBitmap();
536 if (pOnOffSlidingOffBitmap)
538 pCanvas->DrawBitmap(Point(__onOffSlidingButtonBounds.x, __onOffSlidingButtonBounds.y), *pOnOffSlidingOffBitmap);
544 delete pReplacementColorBackgroundBitmap;
545 delete pReplacementColorTextBitmap;
551 _CheckButtonPresenter::DrawText(void)
553 result r = E_SUCCESS;
555 TextSimple* pSimpleText = null;
556 TextSimple* pSimpleTitleText = null;
557 TextObjectAlignment horizontalAlign = TEXT_OBJECT_ALIGNMENT_CENTER;
558 TextObjectAlignment verticalAlign = TEXT_OBJECT_ALIGNMENT_MIDDLE;
560 CheckButtonStatus checkStatus = __pCheckButton->GetCheckButtonStatus();
561 bool showTitle = __pCheckButton->GetShowTitle();
563 Canvas* pCanvas = __pCheckButton->GetCanvasN();
566 SysLog(NID_UI_CTRL, "Cannot get a canvas.");
571 __pTextObject->RemoveAll();
572 pSimpleText = new (std::nothrow) TextSimple(const_cast<wchar_t*>(__pCheckButton->GetText().GetPointer()), __pCheckButton->GetText().GetLength());
573 __pTextObject->AppendElement(*pSimpleText);
575 __pTitleTextObject->RemoveAll();
576 pSimpleTitleText = new (std::nothrow) TextSimple(const_cast<wchar_t*>(__pCheckButton->GetTitleText().GetPointer()), __pCheckButton->GetTitleText().GetLength());
577 __pTitleTextObject->AppendElement(*pSimpleTitleText);
579 if (checkStatus == CHECK_BUTTON_STATUS_NORMAL)
581 __pTextObject->SetForegroundColor(__pCheckButton->GetTextColor(), 0, __pTextObject->GetTextLength());
582 __pTitleTextObject->SetForegroundColor(__pCheckButton->GetTitleTextColor(), 0, __pTitleTextObject->GetTextLength());
584 else if (checkStatus == CHECK_BUTTON_STATUS_DISABLED)
586 __pTextObject->SetForegroundColor(__pCheckButton->GetDisabledTextColor(), 0, __pTextObject->GetTextLength());
587 __pTitleTextObject->SetForegroundColor(__pCheckButton->GetDisabledTitleTextColor(), 0, __pTitleTextObject->GetTextLength());
589 else if (checkStatus == CHECK_BUTTON_STATUS_HIGHLIGHTED)
591 __pTextObject->SetForegroundColor(__pCheckButton->GetHighlightedTextColor(), 0, __pTextObject->GetTextLength());
592 __pTitleTextObject->SetForegroundColor(__pCheckButton->GetHighlightedTitleTextColor(), 0, __pTitleTextObject->GetTextLength());
596 __pTextObject->SetForegroundColor(__pCheckButton->GetPressedTextColor(), 0, __pTextObject->GetTextLength());
597 __pTitleTextObject->SetForegroundColor(__pCheckButton->GetPressedTitleTextColor(), 0, __pTitleTextObject->GetTextLength());
600 CalculateTextBounds();
601 CalculateTitleTextBounds();
603 __pTextObject->SetWrap(TEXT_OBJECT_WRAP_TYPE_NONE);
604 __pTextObject->SetAction(TEXT_OBJECT_ACTION_TYPE_ABBREV);
605 __pTextObject->SetBounds(GetTextBounds());
606 __pTextObject->Compose();
608 __pTitleTextObject->SetWrap(TEXT_OBJECT_WRAP_TYPE_NONE);
609 __pTitleTextObject->SetAction(TEXT_OBJECT_ACTION_TYPE_ABBREV);
610 __pTitleTextObject->SetBounds(GetTitleTextBounds());
611 __pTitleTextObject->Compose();
613 switch (__pCheckButton->GetTextHorizontalAlignment())
616 horizontalAlign = TEXT_OBJECT_ALIGNMENT_LEFT;
618 case ALIGNMENT_CENTER:
619 horizontalAlign = TEXT_OBJECT_ALIGNMENT_CENTER;
622 horizontalAlign = TEXT_OBJECT_ALIGNMENT_RIGHT;
625 switch (__pCheckButton->GetTextVerticalAlignment())
628 verticalAlign = TEXT_OBJECT_ALIGNMENT_TOP;
630 case ALIGNMENT_MIDDLE:
631 verticalAlign = TEXT_OBJECT_ALIGNMENT_MIDDLE;
634 verticalAlign = TEXT_OBJECT_ALIGNMENT_BOTTOM;
637 __fontSize = __pCheckButton->GetTextSize();
638 __pTextFont = __pCheckButton->GetFallbackFont();
640 SysTryReturnVoidResult(NID_UI_CTRL, __pTextFont, r, "[%s] Propagating.", GetErrorMessage(r));
642 __pTextObject->SetAlignment(horizontalAlign | verticalAlign);
643 __pTextObject->SetFont(__pTextFont, 0, __pTextObject->GetTextLength());
644 __pTextObject->Draw(*_CanvasImpl::GetInstance(*pCanvas));
646 __fontSize = __pCheckButton->GetTitleTextSize();
647 __pTitleTextFont = __pCheckButton->GetFallbackFont();
649 SysTryReturnVoidResult(NID_UI_CTRL, __pTitleTextFont, r, "[%s] Propagating.", GetErrorMessage(r));
651 __pTitleTextObject->SetAlignment(TEXT_OBJECT_ALIGNMENT_LEFT | TEXT_OBJECT_ALIGNMENT_MIDDLE);
652 __pTitleTextObject->SetFont(__pTitleTextFont, 0, __pTitleTextObject->GetTextLength());
656 __pTitleTextObject->Draw(*_CanvasImpl::GetInstance(*pCanvas));
665 _CheckButtonPresenter::OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
667 if (&source != __pCheckButton)
672 if (!__pCheckButton->IsEnabled())
677 __touchMoveHandled = false;
679 __pCheckButton->SetCheckButtonStatus(CHECK_BUTTON_STATUS_PRESSED);
681 __pCheckButton->Invalidate();
687 _CheckButtonPresenter::OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo)
689 int checkButtonLeftMargin = 0;
690 int checkButtonDetailedBitmapWidth = 0;
692 GET_SHAPE_CONFIG(CHECKBUTTON::LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, checkButtonLeftMargin);
693 GET_SHAPE_CONFIG(CHECKBUTTON::DETAILED_BITMAP_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, checkButtonDetailedBitmapWidth);
695 if (&source != __pCheckButton)
700 if (!__pCheckButton->IsEnabled())
705 CheckButtonStatus status = __pCheckButton->GetCheckButtonStatus();
706 CheckButtonStyle checkStyle = __pCheckButton->GetCheckButtonStyle();
708 if (status == CHECK_BUTTON_STATUS_NORMAL)
713 if (checkStyle == CHECK_BUTTON_STYLE_MARK || checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DIVIDER || checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DETAILED_BUTTON
714 || checkStyle == CHECK_BUTTON_STYLE_RADIO || checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DIVIDER || checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DETAILED_BUTTON)
716 StartCheckAnimationTimer();
720 Point touchPoint = touchinfo.GetCurrentPosition();
722 touchPoint.x += source.GetClientBounds().x;
723 touchPoint.y += source.GetClientBounds().y;
725 Rectangle bounds = __pCheckButton->GetClientBounds();
726 Rectangle detailedBounds = __pCheckButton->GetClientBounds();
727 detailedBounds.width = detailedBounds.width - checkButtonLeftMargin - checkButtonDetailedBitmapWidth;
729 __pCheckButton->SetCheckButtonStatus(CHECK_BUTTON_STATUS_NORMAL);
730 __pCheckButton->Invalidate();
732 if (checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DETAILED_BUTTON || checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DETAILED_BUTTON)
734 if (detailedBounds.Contains(touchPoint))
736 __pCheckButton->FireActionEvent();
738 if (__pCheckButton->GetRadioGroup() != null)
740 __pCheckButton->SendTouchReleasedEvent(*__pCheckButton);
746 if (bounds.Contains(touchPoint))
748 __pCheckButton->FireActionEvent();
750 if (__pCheckButton->GetRadioGroup() != null)
752 __pCheckButton->SendTouchReleasedEvent(*__pCheckButton);
761 _CheckButtonPresenter::OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo)
763 if (&source != __pCheckButton)
768 if (!__pCheckButton->IsEnabled())
773 Point touchPoint = touchinfo.GetCurrentPosition();
775 touchPoint.x += source.GetClientBounds().x;
776 touchPoint.y += source.GetClientBounds().y;
778 Rectangle bounds = __pCheckButton->GetClientBounds();
779 bool isInCheckButtonArea = bounds.Contains(touchPoint);
781 if (isInCheckButtonArea && (__touchMoveHandled != true))
783 __pCheckButton->SetCheckButtonStatus(CHECK_BUTTON_STATUS_PRESSED);
787 __pCheckButton->SetCheckButtonStatus(CHECK_BUTTON_STATUS_NORMAL);
790 __pCheckButton->Invalidate();
796 _CheckButtonPresenter::OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo)
798 if (&source != __pCheckButton)
803 if (!__pCheckButton->IsEnabled())
808 __pCheckButton->SetCheckButtonStatus(CHECK_BUTTON_STATUS_NORMAL);
809 __pCheckButton->Invalidate();
815 _CheckButtonPresenter::OnTouchMoveHandled(const _Control& control)
817 __touchMoveHandled = true;
818 __pCheckButton->SetCheckButtonStatus(CHECK_BUTTON_STATUS_NORMAL);
819 __pCheckButton->Invalidate();
825 _CheckButtonPresenter::IsEnabledStateChanged(void)
827 bool __currentEnabledState = __pCheckButton->GetEnableState();
829 if (__currentEnabledState != __previousEnabledState)
831 __previousEnabledState = __currentEnabledState;
841 _CheckButtonPresenter::CalculateTitleTextBounds(void)
843 int checkButtonLeftMargin = 0;
844 int checkButtonTopMargin = 0;
845 int checkButtonBitmapWidth = 0;
846 int checkButtonOnOffSlidingBitmappWidth = 0;
847 int checkButtonDetailedBitmapWidth = 0;
848 int checkButtonTitleTextHeight = 0;
849 int checkButtonTextHeight = 0;
851 GET_SHAPE_CONFIG(CHECKBUTTON::LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, checkButtonLeftMargin);
852 GET_SHAPE_CONFIG(CHECKBUTTON::TOP_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, checkButtonTopMargin);
853 GET_SHAPE_CONFIG(CHECKBUTTON::MARK_BITMAP_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, checkButtonBitmapWidth);
854 GET_SHAPE_CONFIG(CHECKBUTTON::ONOFF_SLIDING_BITMAP_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, checkButtonOnOffSlidingBitmappWidth);
855 GET_SHAPE_CONFIG(CHECKBUTTON::DETAILED_BITMAP_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, checkButtonDetailedBitmapWidth);
856 GET_SHAPE_CONFIG(CHECKBUTTON::TITLE_TEXT_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, checkButtonTitleTextHeight);
857 GET_SHAPE_CONFIG(CHECKBUTTON::TEXT_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, checkButtonTextHeight);
859 CheckButtonStyle checkStyle = __pCheckButton->GetCheckButtonStyle();
861 if (checkStyle == CHECK_BUTTON_STYLE_ONOFF_SLIDING)
863 __titleTextBounds.x = checkButtonLeftMargin;
864 __titleTextBounds.y = checkButtonTopMargin;
865 __titleTextBounds.width = __pCheckButton->GetBounds().width - checkButtonLeftMargin * 3 - checkButtonOnOffSlidingBitmappWidth;
866 __titleTextBounds.height = __pCheckButton->GetBounds().height - checkButtonTopMargin * 2 - __textBounds.height;
870 if (checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DETAILED_BUTTON || checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DETAILED_BUTTON)
872 __titleTextBounds.x = checkButtonLeftMargin * 2 + checkButtonBitmapWidth;
873 __titleTextBounds.y = checkButtonTopMargin;
874 __titleTextBounds.width = __pCheckButton->GetBounds().width - checkButtonLeftMargin * 4 - checkButtonBitmapWidth - checkButtonDetailedBitmapWidth;
875 __titleTextBounds.height = __pCheckButton->GetBounds().height - checkButtonTopMargin * 2 - __textBounds.height;
879 __titleTextBounds.x = checkButtonLeftMargin * 2 + checkButtonBitmapWidth;
880 __titleTextBounds.y = checkButtonTopMargin;
881 __titleTextBounds.width = __pCheckButton->GetBounds().width - checkButtonLeftMargin * 3 - checkButtonBitmapWidth;
882 __titleTextBounds.height = __pCheckButton->GetBounds().height - checkButtonTopMargin * 2 - __textBounds.height;
890 _CheckButtonPresenter::CalculateTextBounds(void)
892 int checkButtonLeftMargin = 0;
893 int checkButtonTopMargin = 0;
894 int checkButtonBitmapWidth = 0;
895 int checkButtonOnOffSlidingBitmapWidth = 0;
896 int checkButtonDetailedBitmapWidth = 0;
897 int checkButtonTitleTextHeight = 0;
898 int checkButtonTextHeight = 0;
900 GET_SHAPE_CONFIG(CHECKBUTTON::LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, checkButtonLeftMargin);
901 GET_SHAPE_CONFIG(CHECKBUTTON::TOP_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, checkButtonTopMargin);
902 GET_SHAPE_CONFIG(CHECKBUTTON::MARK_BITMAP_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, checkButtonBitmapWidth);
903 GET_SHAPE_CONFIG(CHECKBUTTON::ONOFF_SLIDING_BITMAP_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, checkButtonOnOffSlidingBitmapWidth);
904 GET_SHAPE_CONFIG(CHECKBUTTON::DETAILED_BITMAP_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, checkButtonDetailedBitmapWidth);
905 GET_SHAPE_CONFIG(CHECKBUTTON::TITLE_TEXT_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, checkButtonTitleTextHeight);
906 GET_SHAPE_CONFIG(CHECKBUTTON::TEXT_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, checkButtonTextHeight);
908 CheckButtonStyle checkStyle = __pCheckButton->GetCheckButtonStyle();
909 bool showTitle = __pCheckButton->GetShowTitle();
911 if (checkStyle == CHECK_BUTTON_STYLE_ONOFF_SLIDING)
915 __textBounds.x = checkButtonLeftMargin;
916 __textBounds.y = checkButtonTopMargin + checkButtonTitleTextHeight;
917 __textBounds.width = __pCheckButton->GetBounds().width - checkButtonLeftMargin * 3 - checkButtonOnOffSlidingBitmapWidth;
918 __textBounds.height = __pCheckButton->GetBounds().height - checkButtonTopMargin * 2 - checkButtonTitleTextHeight;
922 __textBounds.x = checkButtonLeftMargin;
923 __textBounds.y = checkButtonTopMargin;
924 __textBounds.width = __pCheckButton->GetBounds().width - checkButtonLeftMargin * 3 - checkButtonOnOffSlidingBitmapWidth;
925 __textBounds.height = __pCheckButton->GetBounds().height - checkButtonTopMargin * 2;
930 if (checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DETAILED_BUTTON || checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DETAILED_BUTTON)
934 __textBounds.x = checkButtonLeftMargin * 2 + checkButtonBitmapWidth;
935 __textBounds.y = checkButtonTopMargin + checkButtonTitleTextHeight;
936 __textBounds.width = __pCheckButton->GetBounds().width - checkButtonLeftMargin * 4 - checkButtonBitmapWidth - checkButtonDetailedBitmapWidth;
937 __textBounds.height = __pCheckButton->GetBounds().height - checkButtonTopMargin * 2 - checkButtonTitleTextHeight;
941 __textBounds.x = checkButtonLeftMargin * 2 + checkButtonBitmapWidth;
942 __textBounds.y = checkButtonTopMargin;
943 __textBounds.width = __pCheckButton->GetBounds().width - checkButtonLeftMargin * 4 - checkButtonBitmapWidth - checkButtonDetailedBitmapWidth;
944 __textBounds.height = __pCheckButton->GetBounds().height - checkButtonTopMargin * 2;
951 __textBounds.x = checkButtonLeftMargin * 2 + checkButtonBitmapWidth;
952 __textBounds.y = checkButtonTopMargin + checkButtonTitleTextHeight;
953 __textBounds.width = __pCheckButton->GetBounds().width - checkButtonLeftMargin * 3 - checkButtonBitmapWidth;
954 __textBounds.height = __pCheckButton->GetBounds().height - checkButtonTopMargin * 2 - checkButtonTitleTextHeight;
958 __textBounds.x = checkButtonLeftMargin * 2 + checkButtonBitmapWidth;
959 __textBounds.y = checkButtonTopMargin;
960 __textBounds.width = __pCheckButton->GetBounds().width - checkButtonLeftMargin * 3 - checkButtonBitmapWidth;
961 __textBounds.height = __pCheckButton->GetBounds().height - checkButtonTopMargin * 2;
970 _CheckButtonPresenter::CalculateButtonBounds(void)
972 int checkButtonLeftMargin = 0;
973 int checkButtonBitmapWidth = 0;
974 int checkButtonBitmapHeight = 0;
975 int checkButtonOnOffSlidingBitmapWidth = 0;
976 int checkButtonOnOffSlidingBitmapHeight = 0;
977 int checkButtonDetaieldBitmapWidth = 0;
978 int checkButtonDetaieldBitmapHeight = 0;
980 GET_SHAPE_CONFIG(CHECKBUTTON::LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, checkButtonLeftMargin);
981 GET_SHAPE_CONFIG(CHECKBUTTON::MARK_BITMAP_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, checkButtonBitmapWidth);
982 GET_SHAPE_CONFIG(CHECKBUTTON::MARK_BITMAP_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, checkButtonBitmapHeight);
983 GET_SHAPE_CONFIG(CHECKBUTTON::ONOFF_SLIDING_BITMAP_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, checkButtonOnOffSlidingBitmapWidth);
984 GET_SHAPE_CONFIG(CHECKBUTTON::ONOFF_SLIDING_BITMAP_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, checkButtonOnOffSlidingBitmapHeight);
985 GET_SHAPE_CONFIG(CHECKBUTTON::DETAILED_BITMAP_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, checkButtonDetaieldBitmapWidth);
986 GET_SHAPE_CONFIG(CHECKBUTTON::DETAILED_BITMAP_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, checkButtonDetaieldBitmapHeight);
988 __defaultButtonBounds.x = checkButtonLeftMargin;
989 __defaultButtonBounds.y = (__pCheckButton->GetBounds().height - checkButtonBitmapHeight) / 2;
990 __defaultButtonBounds.width = checkButtonBitmapWidth;
991 __defaultButtonBounds.height = checkButtonBitmapHeight;
993 __onOffSlidingButtonBounds.x = __pCheckButton->GetBounds().width - checkButtonLeftMargin - checkButtonOnOffSlidingBitmapWidth;
994 __onOffSlidingButtonBounds.y = (__pCheckButton->GetBounds().height - checkButtonOnOffSlidingBitmapHeight) / 2;
995 __onOffSlidingButtonBounds.width = checkButtonOnOffSlidingBitmapWidth;
996 __onOffSlidingButtonBounds.height = checkButtonOnOffSlidingBitmapHeight;
998 __detailedButtonBounds.x = __pCheckButton->GetBounds().width - checkButtonLeftMargin - checkButtonDetaieldBitmapWidth;
999 __detailedButtonBounds.y = (__pCheckButton->GetBounds().height - checkButtonDetaieldBitmapHeight) / 2;
1000 __detailedButtonBounds.width = checkButtonDetaieldBitmapWidth;
1001 __detailedButtonBounds.height = checkButtonDetaieldBitmapHeight;
1007 _CheckButtonPresenter::GetTitleTextBounds(void) const
1009 return __titleTextBounds;
1013 _CheckButtonPresenter::GetTextBounds(void) const
1015 return __textBounds;
1019 _CheckButtonPresenter::GetDefaultButtonBounds(void) const
1021 return __defaultButtonBounds;
1024 _CheckButtonPresenter::GetOnOffSlidingButtonBounds(void) const
1026 return __onOffSlidingButtonBounds;
1029 _CheckButtonPresenter::GetDetailedButtonBounds(void) const
1031 return __detailedButtonBounds;
1035 _CheckButtonPresenter::StartCheckAnimationTimer(void)
1037 result r = E_SUCCESS;
1038 if (__pCheckAnimationTimer == null)
1040 __pCheckAnimationTimer = new (std::nothrow) Timer;
1041 SysTryReturn(NID_UI_CTRL, (__pCheckAnimationTimer != null), E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memroy allocation failed.");
1043 r = __pCheckAnimationTimer->Construct(*this);
1044 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1048 __pCheckAnimationTimer->Cancel();
1051 __pCheckAnimationTimer->Start(CHECK_ACTION_TIMER_PERIOD);
1052 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1056 ResetCheckAnimationTimer();
1061 _CheckButtonPresenter::ResetCheckAnimationTimer(void)
1063 delete __pCheckAnimationTimer;
1064 __pCheckAnimationTimer = null;
1070 _CheckButtonPresenter::OnTimerExpired(Timer& timer)
1074 if (__ratio <= RATIO_MAX)
1076 StartCheckAnimationTimer();
1077 DrawMarkAnimation();
1081 ResetCheckAnimationTimer();
1089 _CheckButtonPresenter::DrawMarkAnimation(void)
1091 Canvas* pCanvas = __pCheckButton->GetCanvasN();
1092 if (pCanvas == null)
1094 SysLog(NID_UI_CTRL, "Cannot get a canvas.");
1099 Bitmap* pMarkBitmap = __pCheckButton->GetMarkBitmap();
1100 //CheckButtonStyle checkStyle = __pCheckButton->GetCheckButtonStyle();
1102 //if (checkStyle == CHECK_BUTTON_STYLE_MARK || checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DIVIDER || checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DETAILED_BUTTON
1103 // || checkStyle == CHECK_BUTTON_STYLE_RADIO || checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DIVIDER || checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DETAILED_BUTTON)
1105 if (__pCheckButton->IsSelected() && pMarkBitmap)
1107 Rectangle sourceRect(0, 0, pMarkBitmap->GetWidth() * __ratio * 0.1, pMarkBitmap->GetHeight());
1108 Rectangle destRect(__defaultButtonBounds.x, __defaultButtonBounds.y, pMarkBitmap->GetWidth() * __ratio * 0.1, pMarkBitmap->GetHeight());
1110 pCanvas->DrawBitmap(destRect, *pMarkBitmap, sourceRect);
1119 }}} // Tizen::Ui::Controls