apply v5.0 gui and fix N_SE-46379,46416
[platform/framework/native/uifw.git] / src / ui / controls / FUiCtrl_CheckButtonPresenter.cpp
index abcb88b..50b7d54 100644 (file)
@@ -62,6 +62,8 @@ _CheckButtonPresenter::_CheckButtonPresenter(void)
        , __onOffHandlerPosition(0.0f)
        , __onOffHandlerPressed(false)
        , __onOffHandlerMoved(false)
+       , __highlightedIndex(0)
+       , __detailedPressed(false)
 {
 
 }
@@ -446,6 +448,24 @@ _CheckButtonPresenter::DrawBackground(void)
                {
                        pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
                        pCanvas->Clear();
+
+                       pHighlightedBgBitmap = __pCheckButton->GetBackgroundBitmap(__pCheckButton->GetGroupStyle(), _CHECK_BUTTON_STATUS_HIGHLIGHTED);
+
+                       pHighlightedReColorBgBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pHighlightedBgBitmap,
+                                       Color::GetColor(COLOR_ID_MAGENTA), __pCheckButton->GetColor(_CHECK_BUTTON_STATUS_HIGHLIGHTED));
+
+                       if (pHighlightedReColorBgBitmap && __highlightedIndex == 0)
+                       {
+                               if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pHighlightedReColorBgBitmap))
+                               {
+                                       pCanvas->DrawNinePatchedBitmap(bounds, *pHighlightedReColorBgBitmap);
+                               }
+                               else
+                               {
+                                       pCanvas->DrawBitmap(bounds, *pHighlightedReColorBgBitmap,
+                                                       FloatRectangle(0.0f, 0.0f, pHighlightedReColorBgBitmap->GetWidthF(), pHighlightedReColorBgBitmap->GetHeightF()));
+                               }
+                       }
                }
                else
                {
@@ -502,7 +522,7 @@ _CheckButtonPresenter::DrawBackground(void)
                        pHighlightedReColorBgBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pHighlightedBgBitmap,
                                        Color::GetColor(COLOR_ID_MAGENTA), __pCheckButton->GetColor(_CHECK_BUTTON_STATUS_HIGHLIGHTED));
 
-                       if (pHighlightedReColorBgBitmap)
+                       if (pHighlightedReColorBgBitmap && __highlightedIndex == 0)
                        {
                                if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pHighlightedReColorBgBitmap))
                                {
@@ -641,14 +661,29 @@ _CheckButtonPresenter::DrawCheckBitmap(void)
                                Bitmap* pCircleNormalBitmap = __pCheckButton->GetCircleBitmap(_CHECK_BUTTON_STATUS_NORMAL);
                                Bitmap* pDetailedRightNormalBitmap = __pCheckButton->GetDetailedRightBitmap(_CHECK_BUTTON_STATUS_NORMAL);
 
-                               if (pCircleNormalBitmap)
+                               if (__detailedPressed == true)
                                {
-                                       pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedNormalBgColor);
-                               }
+                                       if (pCircleNormalBitmap)
+                                       {
+                                               pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedPressedBgColor);
+                                       }
 
-                               if (pDetailedRightNormalBitmap)
+                                       if (pDetailedRightNormalBitmap)
+                                       {
+                                               pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightPressedColor);
+                                       }
+                               }
+                               else
                                {
-                                       pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightNormalColor);
+                                       if (pCircleNormalBitmap)
+                                       {
+                                               pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedNormalBgColor);
+                                       }
+
+                                       if (pDetailedRightNormalBitmap)
+                                       {
+                                               pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightNormalColor);
+                                       }
                                }
 
                                if (pReColorCircleBitmap)
@@ -743,14 +778,29 @@ _CheckButtonPresenter::DrawCheckBitmap(void)
                                Bitmap* pCirclePressedBitmap = __pCheckButton->GetCircleBitmap(_CHECK_BUTTON_STATUS_PRESSED);
                                Bitmap* pDetailedRightPressedBitmap = __pCheckButton->GetDetailedRightBitmap(_CHECK_BUTTON_STATUS_PRESSED);
 
-                               if (pCirclePressedBitmap)
+                               if (__detailedPressed == true)
                                {
-                                       pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCirclePressedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedPressedBgColor);
-                               }
+                                       if (pCirclePressedBitmap)
+                                       {
+                                               pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCirclePressedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedPressedBgColor);
+                                       }
 
-                               if (pDetailedRightPressedBitmap)
+                                       if (pDetailedRightPressedBitmap)
+                                       {
+                                               pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightPressedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightPressedColor);
+                                       }
+                               }
+                               else
                                {
-                                       pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightPressedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightPressedColor);
+                                       if (pCirclePressedBitmap)
+                                       {
+                                               pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCirclePressedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedNormalBgColor);
+                                       }
+
+                                       if (pDetailedRightPressedBitmap)
+                                       {
+                                               pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightPressedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightNormalColor);
+                                       }
                                }
 
                                if (pReColorCircleBitmap)
@@ -798,7 +848,7 @@ _CheckButtonPresenter::DrawCheckBitmap(void)
                                                Color::GetColor(COLOR_ID_MAGENTA), detailedHighlightedBgColor);
                        }
 
-                       if (pReColorMarkBgHighlightedBitmap)
+                       if (pReColorMarkBgHighlightedBitmap && __highlightedIndex == 1)
                        {
                                pCanvas->DrawBitmap(FloatPoint(__defaultButtonBounds.x, __defaultButtonBounds.y), *pReColorMarkBgHighlightedBitmap);
                        }
@@ -811,14 +861,29 @@ _CheckButtonPresenter::DrawCheckBitmap(void)
                                Bitmap* pCircleHighlightedBitmap = __pCheckButton->GetCircleBitmap(_CHECK_BUTTON_STATUS_HIGHLIGHTED);
                                Bitmap* pDetailedRightHighlightedBitmap = __pCheckButton->GetDetailedRightBitmap(_CHECK_BUTTON_STATUS_HIGHLIGHTED);
 
-                               if (pCircleNormalBitmap)
+                               if (__detailedPressed == true)
                                {
-                                       pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedNormalBgColor);
-                               }
+                                       if (pCircleNormalBitmap)
+                                       {
+                                               pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedPressedBgColor);
+                                       }
 
-                               if (pDetailedRightHighlightedBitmap)
+                                       if (pDetailedRightHighlightedBitmap)
+                                       {
+                                               pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightHighlightedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightPressedColor);
+                                       }
+                               }
+                               else
                                {
-                                       pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightHighlightedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightHighlightedColor);
+                                       if (pCircleNormalBitmap)
+                                       {
+                                               pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedNormalBgColor);
+                                       }
+
+                                       if (pDetailedRightHighlightedBitmap)
+                                       {
+                                               pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightHighlightedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightHighlightedColor);
+                                       }
                                }
 
                                if (pReColorCircleBitmap)
@@ -854,7 +919,7 @@ _CheckButtonPresenter::DrawCheckBitmap(void)
                                        pReColorCircleHighlightedBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleHighlightedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedHighlightedBgColor);
                                }
 
-                               if (pReColorCircleHighlightedBitmap)
+                               if (pReColorCircleHighlightedBitmap && __highlightedIndex == 2)
                                {
                                        pCanvas->DrawBitmap(FloatPoint(__detailedButtonBounds.x, __detailedButtonBounds.y), *pReColorCircleHighlightedBitmap);
                                }
@@ -876,14 +941,29 @@ _CheckButtonPresenter::DrawCheckBitmap(void)
                                Bitmap* pCircleSelectedBitmap = __pCheckButton->GetCircleBitmap(_CHECK_BUTTON_STATUS_SELECTED);
                                Bitmap* pDetailedRightSelectedBitmap = __pCheckButton->GetDetailedRightBitmap(_CHECK_BUTTON_STATUS_SELECTED);
 
-                               if (pCircleSelectedBitmap)
+                               if (__detailedPressed == true)
                                {
-                                       pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleSelectedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedSelectedBgColor);
-                               }
+                                       if (pCircleSelectedBitmap)
+                                       {
+                                               pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleSelectedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedPressedBgColor);
+                                       }
 
-                               if (pDetailedRightSelectedBitmap)
+                                       if (pDetailedRightSelectedBitmap)
+                                       {
+                                               pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightSelectedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightPressedColor);
+                                       }
+                               }
+                               else
                                {
-                                       pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightSelectedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightSelectedColor);
+                                       if (pCircleSelectedBitmap)
+                                       {
+                                               pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleSelectedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedSelectedBgColor);
+                                       }
+
+                                       if (pDetailedRightSelectedBitmap)
+                                       {
+                                               pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightSelectedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightSelectedColor);
+                                       }
                                }
 
                                if (pReColorCircleBitmap)
@@ -925,14 +1005,29 @@ _CheckButtonPresenter::DrawCheckBitmap(void)
                                Bitmap* pCircleNormalBitmap = __pCheckButton->GetCircleBitmap(_CHECK_BUTTON_STATUS_NORMAL);
                                Bitmap* pDetailedRightNormalBitmap = __pCheckButton->GetDetailedRightBitmap(_CHECK_BUTTON_STATUS_NORMAL);
 
-                               if (pCircleNormalBitmap)
+                               if (__detailedPressed == true)
                                {
-                                       pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedNormalBgColor);
-                               }
+                                       if (pCircleNormalBitmap)
+                                       {
+                                               pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedPressedBgColor);
+                                       }
 
-                               if (pDetailedRightNormalBitmap)
+                                       if (pDetailedRightNormalBitmap)
+                                       {
+                                               pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightPressedColor);
+                                       }
+                               }
+                               else
                                {
-                                       pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightNormalColor);
+                                       if (pCircleNormalBitmap)
+                                       {
+                                               pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedNormalBgColor);
+                                       }
+
+                                       if (pDetailedRightNormalBitmap)
+                                       {
+                                               pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightNormalColor);
+                                       }
                                }
 
                                if (pReColorCircleBitmap)
@@ -1013,14 +1108,29 @@ _CheckButtonPresenter::DrawCheckBitmap(void)
                                Bitmap* pCirclePressedBitmap = __pCheckButton->GetCircleBitmap(_CHECK_BUTTON_STATUS_PRESSED);
                                Bitmap* pDetailedRightPressedBitmap = __pCheckButton->GetDetailedRightBitmap(_CHECK_BUTTON_STATUS_PRESSED);
 
-                               if (pCirclePressedBitmap)
+                               if (__detailedPressed == true)
                                {
-                                       pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCirclePressedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedPressedBgColor);
-                               }
+                                       if (pCirclePressedBitmap)
+                                       {
+                                               pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCirclePressedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedPressedBgColor);
+                                       }
 
-                               if (pDetailedRightPressedBitmap)
+                                       if (pDetailedRightPressedBitmap)
+                                       {
+                                               pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightPressedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightPressedColor);
+                                       }
+                               }
+                               else
                                {
-                                       pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightPressedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightPressedColor);
+                                       if (pCirclePressedBitmap)
+                                       {
+                                               pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCirclePressedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedNormalBgColor);
+                                       }
+
+                                       if (pDetailedRightPressedBitmap)
+                                       {
+                                               pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightPressedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightNormalColor);
+                                       }
                                }
 
                                if (pReColorCircleBitmap)
@@ -1058,14 +1168,29 @@ _CheckButtonPresenter::DrawCheckBitmap(void)
                                Bitmap* pCircleHighlightedBitmap = __pCheckButton->GetCircleBitmap(_CHECK_BUTTON_STATUS_HIGHLIGHTED);
                                Bitmap* pDetailedRightHighlightedBitmap = __pCheckButton->GetDetailedRightBitmap(_CHECK_BUTTON_STATUS_HIGHLIGHTED);
 
-                               if (pCircleNormalBitmap)
+                               if (__detailedPressed == true)
                                {
-                                       pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedNormalBgColor);
-                               }
+                                       if (pCircleNormalBitmap)
+                                       {
+                                               pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedPressedBgColor);
+                                       }
 
-                               if (pDetailedRightHighlightedBitmap)
+                                       if (pDetailedRightHighlightedBitmap)
+                                       {
+                                               pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightHighlightedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightPressedColor);
+                                       }
+                               }
+                               else
                                {
-                                       pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightHighlightedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightHighlightedColor);
+                                       if (pCircleNormalBitmap)
+                                       {
+                                               pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleNormalBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedNormalBgColor);
+                                       }
+
+                                       if (pDetailedRightHighlightedBitmap)
+                                       {
+                                               pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightHighlightedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightHighlightedColor);
+                                       }
                                }
 
                                if (pReColorCircleBitmap)
@@ -1101,7 +1226,7 @@ _CheckButtonPresenter::DrawCheckBitmap(void)
                                        pReColorCircleHighlightedBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleHighlightedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedHighlightedBgColor);
                                }
 
-                               if (pReColorCircleHighlightedBitmap)
+                               if (pReColorCircleHighlightedBitmap && __highlightedIndex == 1)
                                {
                                        pCanvas->DrawBitmap(FloatPoint(__detailedButtonBounds.x, __detailedButtonBounds.y), *pReColorCircleHighlightedBitmap);
                                }
@@ -1116,14 +1241,29 @@ _CheckButtonPresenter::DrawCheckBitmap(void)
                                Bitmap* pCircleSelectedBitmap = __pCheckButton->GetCircleBitmap(_CHECK_BUTTON_STATUS_SELECTED);
                                Bitmap* pDetailedRightSelectedBitmap = __pCheckButton->GetDetailedRightBitmap(_CHECK_BUTTON_STATUS_SELECTED);
 
-                               if (pCircleSelectedBitmap)
+                               if (__detailedPressed == true)
                                {
-                                       pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleSelectedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedSelectedBgColor);
-                               }
+                                       if (pCircleSelectedBitmap)
+                                       {
+                                               pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleSelectedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedPressedBgColor);
+                                       }
 
-                               if (pDetailedRightSelectedBitmap)
+                                       if (pDetailedRightSelectedBitmap)
+                                       {
+                                               pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightSelectedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightPressedColor);
+                                       }
+                               }
+                               else
                                {
-                                       pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightSelectedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightSelectedColor);
+                                       if (pCircleSelectedBitmap)
+                                       {
+                                               pReColorCircleBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pCircleSelectedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedSelectedBgColor);
+                                       }
+
+                                       if (pDetailedRightSelectedBitmap)
+                                       {
+                                               pReColorRightBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDetailedRightSelectedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedRightSelectedColor);
+                                       }
                                }
 
                                if (pReColorCircleBitmap)
@@ -1230,7 +1370,7 @@ _CheckButtonPresenter::DrawCheckBitmap(void)
                                pReColorOnOffBgHighlightedBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pOnOffBgHighlightedBitmap, Color::GetColor(COLOR_ID_MAGENTA), detailedHighlightedBgColor);
                        }
 
-                       if (pReColorOnOffBgHighlightedBitmap)
+                       if (pReColorOnOffBgHighlightedBitmap && __highlightedIndex == 1)
                        {
                                pCanvas->DrawBitmap(FloatPoint(__defaultButtonBounds.x, __defaultButtonBounds.y), *pReColorOnOffBgHighlightedBitmap);
                        }
@@ -1265,14 +1405,14 @@ _CheckButtonPresenter::DrawCheckBitmap(void)
                float dividerRightMargin = 0.0f;
 
                Color dividerLeftColor;
-               Color dividerRightColor;
+               //Color dividerRightColor;
                FloatDimension minDimension(0.0f, 0.0f);
 
                GET_SHAPE_CONFIG(CHECKBUTTON::DIVIDER_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, dividerWidth);
                GET_SHAPE_CONFIG(CHECKBUTTON::DIVIDER_TOP_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, dividerTopMargin);
                GET_SHAPE_CONFIG(CHECKBUTTON::DIVIDER_RIGHT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, dividerRightMargin);
                GET_COLOR_CONFIG(HEADER::DIVIDER_LINE_LEFT_NORMAL, dividerLeftColor);
-               GET_COLOR_CONFIG(HEADER::DIVIDER_LINE_RIGHT_NORMAL, dividerRightColor);
+               //GET_COLOR_CONFIG(HEADER::DIVIDER_LINE_RIGHT_NORMAL, dividerRightColor);
 
                GET_DIMENSION_CONFIG(CHECKBUTTON::MIN_DIMENSION, __pCheckButton->GetOrientation(), minDimension);
 
@@ -1286,14 +1426,14 @@ _CheckButtonPresenter::DrawCheckBitmap(void)
                if (checkStyle == CHECK_BUTTON_STYLE_ONOFF_SLIDING_WITH_DIVIDER)
                {
                        pCanvas->SetForegroundColor(dividerLeftColor);
-                       pCanvas->SetLineWidth(dividerWidth/2);
-                       pCanvas->DrawLine(FloatPoint(__onOffSlidingButtonBounds.x - dividerRightMargin + dividerWidth/2, dividerTopMargin),
-                                       FloatPoint(__onOffSlidingButtonBounds.x - dividerRightMargin + dividerWidth/2, dividerTopMargin + bounds.height - dividerTopMargin * 2));
-
-                       pCanvas->SetForegroundColor(dividerRightColor);
-                       pCanvas->SetLineWidth(dividerWidth/2);
+                       pCanvas->SetLineWidth(dividerWidth);
                        pCanvas->DrawLine(FloatPoint(__onOffSlidingButtonBounds.x - dividerRightMargin + dividerWidth, dividerTopMargin),
                                        FloatPoint(__onOffSlidingButtonBounds.x - dividerRightMargin + dividerWidth, dividerTopMargin + bounds.height - dividerTopMargin * 2));
+
+                       //pCanvas->SetForegroundColor(dividerRightColor);
+                       //pCanvas->SetLineWidth(dividerWidth/2);
+                       //pCanvas->DrawLine(FloatPoint(__onOffSlidingButtonBounds.x - dividerRightMargin + dividerWidth, dividerTopMargin),
+                       //              FloatPoint(__onOffSlidingButtonBounds.x - dividerRightMargin + dividerWidth, dividerTopMargin + bounds.height - dividerTopMargin * 2));
                }
        }
 
@@ -1456,6 +1596,17 @@ _CheckButtonPresenter::OnTouchPressed(const _Control& source, const _TouchInfo&
                        __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_PRESSED);
                }
        }
+       else if (checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DETAILED_BUTTON || checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DETAILED_BUTTON)
+       {
+               if (__detailedButtonBounds.Contains(touchPoint))
+               {
+                       __detailedPressed = true;
+               }
+               else
+               {
+                       __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_PRESSED);
+               }
+       }
        else
        {
                __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_PRESSED);
@@ -1492,17 +1643,32 @@ _CheckButtonPresenter::OnTouchReleased(const _Control& source, const _TouchInfo&
        _CheckButtonStatus status = __pCheckButton->GetCheckButtonStatus();
        CheckButtonStyle checkStyle = __pCheckButton->GetCheckButtonStyle();
 
-       if (status == _CHECK_BUTTON_STATUS_NORMAL && __onOffHandlerPressed == false)
+       if (checkStyle == CHECK_BUTTON_STYLE_ONOFF_SLIDING || checkStyle == CHECK_BUTTON_STYLE_ONOFF_SLIDING_WITH_DIVIDER)
        {
-               if (checkStyle == CHECK_BUTTON_STYLE_ONOFF_SLIDING || checkStyle == CHECK_BUTTON_STYLE_ONOFF_SLIDING_WITH_DIVIDER)
+               if (status == _CHECK_BUTTON_STATUS_NORMAL && __onOffHandlerPressed == false)
                {
-                       AdjustHandlerPosition();
-
-                       __onOffHandlerPressed = false;
                        __onOffHandlerMoved = false;
+
+                       return true;
                }
+       }
+       else if (checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DETAILED_BUTTON || checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DETAILED_BUTTON)
+       {
+               if (status == _CHECK_BUTTON_STATUS_NORMAL && __detailedPressed == true)
+               {
+                       __detailedPressed = false;
 
-               return true;
+                       __pCheckButton->Invalidate();
+
+                       return true;
+               }
+       }
+       else
+       {
+               if (status == _CHECK_BUTTON_STATUS_NORMAL)
+               {
+                       return true;
+               }
        }
 
        if (checkStyle == CHECK_BUTTON_STYLE_MARK || checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DIVIDER || checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DETAILED_BUTTON
@@ -1525,9 +1691,7 @@ _CheckButtonPresenter::OnTouchReleased(const _Control& source, const _TouchInfo&
 
        if (checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DETAILED_BUTTON || checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DETAILED_BUTTON)
        {
-               detailedBounds.width = detailedBounds.width - checkButtonLeftMargin - checkButtonDetailedBitmapWidth;
-
-               if (detailedBounds.Contains(touchPoint))
+               if (!__detailedButtonBounds.Contains(touchPoint))
                {
                        PLAY_FEEDBACK(_RESOURCE_FEEDBACK_PATTERN_TAP, __pCheckButton);
 
@@ -1698,14 +1862,53 @@ _CheckButtonPresenter::OnTouchMoved(const _Control& source, const _TouchInfo& to
        FloatRectangle bounds = __pCheckButton->GetClientBoundsF();
        bool isInCheckButtonArea = bounds.Contains(touchPoint);
        bool isInOnOffHandlerArea = __onOffSlidingButtonBounds.Contains(touchPoint);
+       bool isDetailedArea = __detailedButtonBounds.Contains(touchPoint);
+
+       CheckButtonStyle checkStyle = __pCheckButton->GetCheckButtonStyle();
 
-       if (__onOffHandlerPressed == true)
+       if (checkStyle == CHECK_BUTTON_STYLE_ONOFF_SLIDING || checkStyle == CHECK_BUTTON_STYLE_ONOFF_SLIDING_WITH_DIVIDER)
        {
-               __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_NORMAL);
+               if (__onOffHandlerPressed == true)
+               {
+                       __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_NORMAL);
+               }
+               else
+               {
+                       if (isInCheckButtonArea == true && __touchMoveHandled == false && isInOnOffHandlerArea == false )
+                       {
+                               __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_PRESSED);
+                       }
+                       else
+                       {
+                               __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_NORMAL);
+                       }
+               }
+       }
+       else if (checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DETAILED_BUTTON || checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DETAILED_BUTTON)
+       {
+               if (isDetailedArea == true && __touchMoveHandled == false)
+               {
+                       __detailedPressed = true;
+
+                       __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_NORMAL);
+               }
+               else
+               {
+                       __detailedPressed = false;
+
+                       if (isInCheckButtonArea == true && __touchMoveHandled == false && isDetailedArea == false )
+                       {
+                               __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_PRESSED);
+                       }
+                       else
+                       {
+                               __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_NORMAL);
+                       }
+               }
        }
        else
        {
-               if (isInCheckButtonArea == true && __touchMoveHandled == false && isInOnOffHandlerArea == false )
+               if (isInCheckButtonArea == true && __touchMoveHandled == false)
                {
                        __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_PRESSED);
                }
@@ -1715,8 +1918,6 @@ _CheckButtonPresenter::OnTouchMoved(const _Control& source, const _TouchInfo& to
                }
        }
 
-       CheckButtonStyle checkStyle = __pCheckButton->GetCheckButtonStyle();
-
        if (checkStyle == CHECK_BUTTON_STYLE_ONOFF_SLIDING || checkStyle == CHECK_BUTTON_STYLE_ONOFF_SLIDING_WITH_DIVIDER)
        {
                if (isInOnOffHandlerArea == true && __onOffHandlerPressed == true)
@@ -1847,7 +2048,7 @@ _CheckButtonPresenter::DrawOnOffSlidingHandler(float handlerPosition)
                                                detailedHighlightedBgColor);
                        }
 
-                       if (pReColorBgBitmap)
+                       if (pReColorBgBitmap && __highlightedIndex == 1)
                        {
                                pCanvas->DrawBitmap(FloatPoint(handlerPosition, __onOffSlidingButtonBounds.y - handlerMargin), *pReColorBgBitmap);
                        }
@@ -1943,7 +2144,7 @@ _CheckButtonPresenter::DrawOnOffSlidingHandler(float handlerPosition)
                                                detailedHighlightedBgColor);
                        }
 
-                       if (pReColorBgBitmap)
+                       if (pReColorBgBitmap && __highlightedIndex == 1)
                        {
                                pCanvas->DrawBitmap(FloatPoint(handlerPosition, __onOffSlidingButtonBounds.y - handlerMargin), *pReColorBgBitmap);
                        }
@@ -2006,15 +2207,53 @@ _CheckButtonPresenter::OnKeyPressed(const _Control& source, const _KeyInfo& keyI
 {
        _KeyCode keyCode = keyInfo.GetKeyCode();
 
+       CheckButtonStyle checkStyle = __pCheckButton->GetCheckButtonStyle();
+
        if (__pCheckButton->IsFocusModeStateEnabled() == true && keyCode == _KEY_ENTER)
        {
                if (__pCheckButton->GetCheckButtonStatus() != _CHECK_BUTTON_STATUS_DISABLED)
                {
-                       __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_PRESSED);
+                       if (checkStyle == CHECK_BUTTON_STYLE_ONOFF_SLIDING || checkStyle == CHECK_BUTTON_STYLE_ONOFF_SLIDING_WITH_DIVIDER)
+                       {
+                               if (__highlightedIndex == 1)
+                               {
+                                       __onOffHandlerPressed = true;
+                               }
+                               else
+                               {
+                                       __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_PRESSED);
+                               }
+                       }
+                       else if (checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DETAILED_BUTTON)
+                       {
+                               if (__highlightedIndex == 2)
+                               {
+                                       __detailedPressed = true;
+                               }
+                               else
+                               {
+                                       __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_PRESSED);
+                               }
+                       }
+                       else if (checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DETAILED_BUTTON)
+                       {
+                               if (__highlightedIndex == 1)
+                               {
+                                       __detailedPressed = true;
+                               }
+                               else
+                               {
+                                       __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_PRESSED);
+                               }
+                       }
+                       else
+                       {
+                               __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_PRESSED);
+                       }
                }
        }
 
-       __pCheckButton->Draw();
+       __pCheckButton->Invalidate();
 
        return false;
 }
@@ -2024,10 +2263,80 @@ _CheckButtonPresenter::OnKeyReleased(const _Control& source, const _KeyInfo& key
 {
        _KeyCode keyCode = keyInfo.GetKeyCode();
 
-       if (__pCheckButton->IsFocusModeStateEnabled() == true && keyCode == _KEY_ENTER)
+       CheckButtonStyle checkStyle = __pCheckButton->GetCheckButtonStyle();
+
+       if (__pCheckButton->IsFocusModeStateEnabled() == true && keyCode == _KEY_LEFT)
+       {
+               if (checkStyle == CHECK_BUTTON_STYLE_RADIO || checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DIVIDER)
+               {
+                       __highlightedIndex = 0;
+               }
+               else if (checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DETAILED_BUTTON)
+               {
+                       if (__highlightedIndex == 0)
+                       {
+                               __highlightedIndex = 1;
+                       }
+                       else if (__highlightedIndex == 1)
+                       {
+                               __highlightedIndex = 2;
+                       }
+                       else if (__highlightedIndex == 2)
+                       {
+                               __highlightedIndex = 0;
+                       }
+               }
+               else
+               {
+                       if (__highlightedIndex == 0)
+                       {
+                               __highlightedIndex = 1;
+                       }
+                       else if (__highlightedIndex == 1)
+                       {
+                               __highlightedIndex = 0;
+                       }
+               }
+
+               __pCheckButton->Invalidate();
+       }
+       else if (__pCheckButton->IsFocusModeStateEnabled() == true && keyCode == _KEY_RIGHT)
        {
-               CheckButtonStyle checkStyle = __pCheckButton->GetCheckButtonStyle();
+               if (checkStyle == CHECK_BUTTON_STYLE_RADIO || checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DIVIDER)
+               {
+                       __highlightedIndex = 0;
+               }
+               else if (checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DETAILED_BUTTON)
+               {
+                       if (__highlightedIndex == 0)
+                       {
+                               __highlightedIndex = 2;
+                       }
+                       else if (__highlightedIndex == 1)
+                       {
+                               __highlightedIndex = 0;
+                       }
+                       else if (__highlightedIndex == 2)
+                       {
+                               __highlightedIndex = 1;
+                       }
+               }
+               else
+               {
+                       if (__highlightedIndex == 0)
+                       {
+                               __highlightedIndex = 1;
+                       }
+                       else if (__highlightedIndex == 1)
+                       {
+                               __highlightedIndex = 0;
+                       }
+               }
 
+               __pCheckButton->Invalidate();
+       }
+       else if (__pCheckButton->IsFocusModeStateEnabled() == true && keyCode == _KEY_ENTER)
+       {
                if (checkStyle == CHECK_BUTTON_STYLE_MARK || checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DIVIDER || checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DETAILED_BUTTON
                                || checkStyle == CHECK_BUTTON_STYLE_RADIO || checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DIVIDER || checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DETAILED_BUTTON)
                {
@@ -2040,22 +2349,69 @@ _CheckButtonPresenter::OnKeyReleased(const _Control& source, const _KeyInfo& key
 
                __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_HIGHLIGHTED);
 
-               PLAY_FEEDBACK(_RESOURCE_FEEDBACK_PATTERN_TAP, __pCheckButton);
+               if (checkStyle == CHECK_BUTTON_STYLE_MARK_WITH_DETAILED_BUTTON)
+               {
+                       if (__highlightedIndex != 2)
+                       {
+                               PLAY_FEEDBACK(_RESOURCE_FEEDBACK_PATTERN_TAP, __pCheckButton);
 
-               __pCheckButton->FireActionEvent();
+                               __pCheckButton->FireActionEvent();
 
-               if (__pCheckButton->GetRadioGroup() != null)
-               {
-                       __pCheckButton->SendTouchReleasedEvent(*__pCheckButton);
+                               if (__pCheckButton->GetRadioGroup() != null)
+                               {
+                                       __pCheckButton->SendTouchReleasedEvent(*__pCheckButton);
+                               }
+                       }
+                       else
+                       {
+                               __detailedPressed = false;
+                       }
                }
+               else if (checkStyle == CHECK_BUTTON_STYLE_RADIO_WITH_DETAILED_BUTTON)
+               {
+                       if (__highlightedIndex != 1)
+                       {
+                               PLAY_FEEDBACK(_RESOURCE_FEEDBACK_PATTERN_TAP, __pCheckButton);
 
-               if (checkStyle == CHECK_BUTTON_STYLE_ONOFF_SLIDING_WITH_DIVIDER || checkStyle == CHECK_BUTTON_STYLE_ONOFF_SLIDING)
+                               __pCheckButton->FireActionEvent();
+
+                               if (__pCheckButton->GetRadioGroup() != null)
+                               {
+                                       __pCheckButton->SendTouchReleasedEvent(*__pCheckButton);
+                               }
+                       }
+                       else
+                       {
+                               __detailedPressed = false;
+                       }
+               }
+               else if (checkStyle == CHECK_BUTTON_STYLE_ONOFF_SLIDING_WITH_DIVIDER || checkStyle == CHECK_BUTTON_STYLE_ONOFF_SLIDING)
                {
+                       PLAY_FEEDBACK(_RESOURCE_FEEDBACK_PATTERN_TAP, __pCheckButton);
+
+                       __pCheckButton->FireActionEvent();
+
+                       if (__pCheckButton->GetRadioGroup() != null)
+                       {
+                               __pCheckButton->SendTouchReleasedEvent(*__pCheckButton);
+                       }
+
                        AdjustHandlerPosition();
 
                        __onOffHandlerPressed = false;
                        __onOffHandlerMoved = false;
                }
+               else
+               {
+                       PLAY_FEEDBACK(_RESOURCE_FEEDBACK_PATTERN_TAP, __pCheckButton);
+
+                       __pCheckButton->FireActionEvent();
+
+                       if (__pCheckButton->GetRadioGroup() != null)
+                       {
+                               __pCheckButton->SendTouchReleasedEvent(*__pCheckButton);
+                       }
+               }
        }
 
        return false;
@@ -2476,6 +2832,8 @@ _CheckButtonPresenter::OnFocusModeStateChanged(void)
 bool
 _CheckButtonPresenter::OnFocusGained(const _Control& source)
 {
+       __highlightedIndex = 0;
+
        if (__pCheckButton->IsFocusModeStateEnabled() == true)
        {
                if (__pCheckButton->GetCheckButtonStatus() != _CHECK_BUTTON_STATUS_DISABLED)