From c2704ff09c74e3b3abfffddc45271c58d6ee74da Mon Sep 17 00:00:00 2001 From: Myung Jin Kim Date: Thu, 4 Jul 2013 15:50:00 +0900 Subject: [PATCH] apply focus concept Change-Id: I65a8ba1882a09b3b9bf2788e5daa92b942a08397 --- src/ui/controls/FUiCtrl_ButtonPresenter.cpp | 17 ++ src/ui/controls/FUiCtrl_CheckButtonPresenter.cpp | 16 +- src/ui/controls/FUiCtrl_Toolbar.cpp | 211 ++++++++++++++++++++++- 3 files changed, 239 insertions(+), 5 deletions(-) diff --git a/src/ui/controls/FUiCtrl_ButtonPresenter.cpp b/src/ui/controls/FUiCtrl_ButtonPresenter.cpp index c83daab..a704d2f 100644 --- a/src/ui/controls/FUiCtrl_ButtonPresenter.cpp +++ b/src/ui/controls/FUiCtrl_ButtonPresenter.cpp @@ -1152,6 +1152,19 @@ _ButtonPresenter::OnTouchMoveHandled(const _Control& control) bool _ButtonPresenter::OnKeyPressed(const _Control& source, const _KeyInfo& keyInfo) { + _KeyCode keyCode = keyInfo.GetKeyCode(); + + if (__pButton->IsFocusModeStateEnabled() == true && keyCode == _KEY_ENTER) + { + if (__pButton->GetButtonStatus() != _BUTTON_STATUS_DISABLED) + { + __pButton->SetButtonStatus(_BUTTON_STATUS_PRESSED); + } + } + + __pButton->Draw(); + __pButton->Show(); + return false; } @@ -1164,6 +1177,9 @@ _ButtonPresenter::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo) { if (__pButton->GetButtonStatus() != _BUTTON_STATUS_DISABLED) { + __pButton->SetButtonStatus(_BUTTON_STATUS_NORMAL); + __pButton->Invalidate(); + __pButton->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED); } } @@ -1540,4 +1556,5 @@ _ButtonPresenter::DrawTabTextDimBitmap(void) return; } + }}} // Tizen::Ui::Controls diff --git a/src/ui/controls/FUiCtrl_CheckButtonPresenter.cpp b/src/ui/controls/FUiCtrl_CheckButtonPresenter.cpp index 567fe3b..abcb88b 100644 --- a/src/ui/controls/FUiCtrl_CheckButtonPresenter.cpp +++ b/src/ui/controls/FUiCtrl_CheckButtonPresenter.cpp @@ -2004,6 +2004,18 @@ _CheckButtonPresenter::OnTouchMoveHandled(const _Control& control) bool _CheckButtonPresenter::OnKeyPressed(const _Control& source, const _KeyInfo& keyInfo) { + _KeyCode keyCode = keyInfo.GetKeyCode(); + + if (__pCheckButton->IsFocusModeStateEnabled() == true && keyCode == _KEY_ENTER) + { + if (__pCheckButton->GetCheckButtonStatus() != _CHECK_BUTTON_STATUS_DISABLED) + { + __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_PRESSED); + } + } + + __pCheckButton->Draw(); + return false; } @@ -2023,9 +2035,11 @@ _CheckButtonPresenter::OnKeyReleased(const _Control& source, const _KeyInfo& key __ratio = 0; } - __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_HIGHLIGHTED); + __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_NORMAL); __pCheckButton->Invalidate(); + __pCheckButton->SetCheckButtonStatus(_CHECK_BUTTON_STATUS_HIGHLIGHTED); + PLAY_FEEDBACK(_RESOURCE_FEEDBACK_PATTERN_TAP, __pCheckButton); __pCheckButton->FireActionEvent(); diff --git a/src/ui/controls/FUiCtrl_Toolbar.cpp b/src/ui/controls/FUiCtrl_Toolbar.cpp index 49a5edb..11838eb 100644 --- a/src/ui/controls/FUiCtrl_Toolbar.cpp +++ b/src/ui/controls/FUiCtrl_Toolbar.cpp @@ -186,6 +186,8 @@ _Toolbar::_Toolbar(void) __isButtonTextColorSetByUser[i] = false; } __pAccessibilityListener = new (std::nothrow) FooterItemAccessibilityListener(this); + + SetFocusNavigateEnabled(false); } _Toolbar::~_Toolbar(void) @@ -374,7 +376,7 @@ _Toolbar::InitToolbarColor(void) __itemTransBackgroundColor[_BUTTON_STATUS_NORMAL].SetAlpha(0x00); __itemTransBackgroundColor[_BUTTON_STATUS_DISABLED].SetAlpha(0x00); __itemTransBackgroundColor[_BUTTON_STATUS_PRESSED].SetAlpha(0x7F); - __itemTransBackgroundColor[_BUTTON_STATUS_HIGHLIGHTED].SetAlpha(0x00); + __itemTransBackgroundColor[_BUTTON_STATUS_HIGHLIGHTED].SetAlpha(0xFF); __itemTransBackgroundColor[_BUTTON_STATUS_SELECTED].SetAlpha(0x00); GET_COLOR_CONFIG(HEADER::BUTTON_TRANSLUCENT_BG_NORMAL, __buttonTransBackgroundColor[_BUTTON_STATUS_NORMAL]); @@ -385,7 +387,7 @@ _Toolbar::InitToolbarColor(void) __buttonTransBackgroundColor[_BUTTON_STATUS_NORMAL].SetAlpha(0x00); __buttonTransBackgroundColor[_BUTTON_STATUS_DISABLED].SetAlpha(0x00); __buttonTransBackgroundColor[_BUTTON_STATUS_PRESSED].SetAlpha(0x7F); - __buttonTransBackgroundColor[_BUTTON_STATUS_HIGHLIGHTED].SetAlpha(0x00); + __buttonTransBackgroundColor[_BUTTON_STATUS_HIGHLIGHTED].SetAlpha(0xFF); GET_COLOR_CONFIG(HEADER::BUTTON_TRANSLUCENT_TEXT_NORMAL, __buttonTransTextColor[_BUTTON_STATUS_NORMAL]); GET_COLOR_CONFIG(HEADER::BUTTON_TRANSLUCENT_TEXT_DISABLED, __buttonTransTextColor[_BUTTON_STATUS_DISABLED]); @@ -615,7 +617,7 @@ _Toolbar::InitToolbarColor(void) __itemTransBackgroundColor[_BUTTON_STATUS_NORMAL].SetAlpha(0x00); __itemTransBackgroundColor[_BUTTON_STATUS_DISABLED].SetAlpha(0x00); __itemTransBackgroundColor[_BUTTON_STATUS_PRESSED].SetAlpha(0x7F); - __itemTransBackgroundColor[_BUTTON_STATUS_HIGHLIGHTED].SetAlpha(0x00); + __itemTransBackgroundColor[_BUTTON_STATUS_HIGHLIGHTED].SetAlpha(0xFF); __itemTransBackgroundColor[_BUTTON_STATUS_SELECTED].SetAlpha(0x00); @@ -627,7 +629,7 @@ _Toolbar::InitToolbarColor(void) __buttonTransBackgroundColor[_BUTTON_STATUS_NORMAL].SetAlpha(0x00); __buttonTransBackgroundColor[_BUTTON_STATUS_DISABLED].SetAlpha(0x00); __buttonTransBackgroundColor[_BUTTON_STATUS_PRESSED].SetAlpha(0x7F); - __buttonTransBackgroundColor[_BUTTON_STATUS_HIGHLIGHTED].SetAlpha(0x00); + __buttonTransBackgroundColor[_BUTTON_STATUS_HIGHLIGHTED].SetAlpha(0xFF); GET_COLOR_CONFIG(FOOTER::BUTTON_TRANSLUCENT_TEXT_NORMAL, __buttonTransTextColor[_BUTTON_STATUS_NORMAL]); GET_COLOR_CONFIG(FOOTER::BUTTON_TRANSLUCENT_TEXT_DISABLED, __buttonTransTextColor[_BUTTON_STATUS_DISABLED]); @@ -866,6 +868,8 @@ _Toolbar::AddItem(_Button* pButton) __pItems.push_back(pButton); __itemCount++; + SetFocusNavigateEnabled(true); + AttachChild(*pButton); ApplyUserGUI(TOOLBAR_ITEM, pButton); @@ -1248,6 +1252,8 @@ _Toolbar::InsertItemAt(int itemIndex, _Button* pButton) __pItems.insert(__pItems.begin() + itemIndex, pButton); __itemCount++; + SetFocusNavigateEnabled(true); + AttachChild(*pButton); ApplyUserGUI(TOOLBAR_ITEM, pButton); @@ -1495,6 +1501,11 @@ _Toolbar::RemoveButtonAt(ToolbarButton position) __pButtonItems[position] = null; } + if (__itemCount == 0 && __pButtonItems[LEFT_BUTTON] == null && __pButtonItems[RIGHT_BUTTON] == null) + { + SetFocusNavigateEnabled(false); + } + RearrangeItems(); return E_SUCCESS; @@ -1528,6 +1539,11 @@ _Toolbar::RemoveItemAt(int itemIndex) __itemCount--; + if (__itemCount == 0 && __pButtonItems[LEFT_BUTTON] == null && __pButtonItems[RIGHT_BUTTON] == null) + { + SetFocusNavigateEnabled(false); + } + __pItems.erase(__pItems.begin() + itemIndex); RearrangeItems(); @@ -1675,6 +1691,8 @@ _Toolbar::SetButton(ToolbarButton position, _Button* pButton) AttachChild(*pButton); + SetFocusNavigateEnabled(true); + if (__style != TOOLBAR_SOFTKEY) { ApplyUserGUI(TOOLBAR_BUTTON, __pButtonItems[position]); @@ -2600,6 +2618,15 @@ _Toolbar::SetStyle(ToolbarStyle style) } } + if (__itemCount == 0 && __pButtonItems[LEFT_BUTTON] == null && __pButtonItems[RIGHT_BUTTON] == null) + { + SetFocusNavigateEnabled(false); + } + else + { + SetFocusNavigateEnabled(true); + } + return E_SUCCESS; } @@ -5186,6 +5213,9 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo) { if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED) { + __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL); + __pButtonItems[LEFT_BUTTON]->Invalidate(); + __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED); __lastHighlightedItemIndex = __highlightedItemIndex = __itemCount; @@ -5199,6 +5229,9 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo) { if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED) { + __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL); + __pButtonItems[RIGHT_BUTTON]->Invalidate(); + __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED); __lastHighlightedItemIndex = __highlightedItemIndex = __itemCount + 1; @@ -5236,6 +5269,9 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo) { if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED) { + __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL); + __pButtonItems[LEFT_BUTTON]->Invalidate(); + __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED); __lastHighlightedItemIndex = __highlightedItemIndex = __itemCount; @@ -5276,6 +5312,9 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo) { if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED) { + __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL); + __pButtonItems[RIGHT_BUTTON]->Invalidate(); + __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED); __lastHighlightedItemIndex = __highlightedItemIndex = __itemCount; @@ -5322,6 +5361,9 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo) { if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED) { + __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL); + __pButtonItems[LEFT_BUTTON]->Invalidate(); + __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED); __lastHighlightedItemIndex = __highlightedItemIndex = __itemCount; @@ -5335,6 +5377,9 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo) { if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED) { + __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL); + __pButtonItems[RIGHT_BUTTON]->Invalidate(); + __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED); __lastHighlightedItemIndex = __highlightedItemIndex = __itemCount + 1; @@ -5351,6 +5396,9 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo) { if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED) { + __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL); + __pButtonItems[LEFT_BUTTON]->Invalidate(); + __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED); __lastHighlightedItemIndex = __highlightedItemIndex = __itemCount; @@ -5368,6 +5416,9 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo) { if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED) { + __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL); + __pButtonItems[RIGHT_BUTTON]->Invalidate(); + __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED); __lastHighlightedItemIndex = __highlightedItemIndex = __itemCount; @@ -5484,6 +5535,158 @@ _Toolbar::OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo) bool _Toolbar::OnKeyPressed(const _Control& source, const _KeyInfo& keyInfo) { + _KeyCode keyCode = keyInfo.GetKeyCode(); + + if (IsFocusModeStateEnabled() == true && keyCode == _KEY_ENTER) + { + if (__itemCount != 0) + { + if (__pButtonItems[LEFT_BUTTON]) + { + if (__pButtonItems[RIGHT_BUTTON]) // L Item R + { + if (__highlightedItemIndex < __itemCount) + { + if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED) + { + __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_PRESSED); + } + } + else if (__highlightedItemIndex == __itemCount) + { + if (__pButtonItems[LEFT_BUTTON]) + { + if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED) + { + __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_PRESSED); + } + } + } + else if (__highlightedItemIndex == __itemCount + 1) + { + if (__pButtonItems[RIGHT_BUTTON]) + { + if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED) + { + __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_PRESSED); + } + } + } + } + else // L Item + { + if (__highlightedItemIndex < __itemCount) + { + if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED) + { + __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_PRESSED); + } + } + else if (__highlightedItemIndex == __itemCount) + { + if (__pButtonItems[LEFT_BUTTON]) + { + if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED) + { + __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_PRESSED); + } + } + } + } + } + else // L is null + { + if (__pButtonItems[RIGHT_BUTTON]) // Item R + { + if (__highlightedItemIndex < __itemCount) + { + if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED) + { + __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_PRESSED); + } + } + else if (__highlightedItemIndex == __itemCount) + { + if (__pButtonItems[RIGHT_BUTTON]) + { + if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED) + { + __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_PRESSED); + } + } + } + } + else // Item + { + if (__highlightedItemIndex < __itemCount) + { + if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED) + { + __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_PRESSED); + } + } + } + } + } + else // __itemCount == 0 + { + if (__pButtonItems[LEFT_BUTTON]) + { + if (__pButtonItems[RIGHT_BUTTON]) // L R + { + if (__highlightedItemIndex == 0) + { + if (__pButtonItems[LEFT_BUTTON]) + { + if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED) + { + __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_PRESSED); + } + } + } + else if (__highlightedItemIndex == 1) + { + if (__pButtonItems[RIGHT_BUTTON]) + { + if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED) + { + __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_PRESSED); + } + } + } + } + else // L + { + if (__highlightedItemIndex == 0) + { + if (__pButtonItems[LEFT_BUTTON]) + { + if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED) + { + __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_PRESSED); + } + } + } + } + } + else // L is null + { + if (__pButtonItems[RIGHT_BUTTON]) // R + { + if (__highlightedItemIndex == 0) + { + if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED) + { + __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_PRESSED); + } + } + } + } + } + } + + Invalidate(true); + return false; } -- 2.7.4