From: youseong.ji Date: Tue, 26 Mar 2013 05:10:39 +0000 (+0900) Subject: Modified to work properly on double tab on tableview item X-Git-Tag: accepted/tizen_2.1/20130425.033138~682 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d4fb8bdde302ca72fe74a01cd6655551e02b70e1;p=platform%2Fframework%2Fnative%2Fuifw.git Modified to work properly on double tab on tableview item Change-Id: I9749334c5b0996dd0592ef0bf1b2808233e8a1bf Signed-off-by: youseong.ji --- diff --git a/src/ui/controls/FUiCtrl_TableViewItem.cpp b/src/ui/controls/FUiCtrl_TableViewItem.cpp index 11029fd..2a886eb 100644 --- a/src/ui/controls/FUiCtrl_TableViewItem.cpp +++ b/src/ui/controls/FUiCtrl_TableViewItem.cpp @@ -219,6 +219,7 @@ _TableViewItem::_TableViewItem(float itemHeight) , __isPressedTimerEnabled(false) , __isReleasedTimerEnabled(false) , __pressedControl(TABLE_VIEW_ITEM_PRESSED_NONE) + , __releasedControl(TABLE_VIEW_ITEM_PRESSED_NONE) , __pCheckedTimer(null) , __isCheckedTimerEnabled(false) , __isCheckedAnimationEnabled(false) @@ -1082,11 +1083,37 @@ _TableViewItem::OnTouchPressed(const _Control& source, const _TouchInfo& touchin return true; } + if(__isReleasedTimerEnabled) + { + StopTouchReleasedTimer(); + FireItemTouchReleased(); + } + __annexOnOffHandlerMoved = false; __touchStartPosition = touchinfo.GetCurrentPosition(); // +++ check floating + if (&source == this) + { + __pressedControl = TABLE_VIEW_ITEM_PRESSED_ITEM; + } + else if (&source == __pItemAnnex) + { + __pressedControl = TABLE_VIEW_ITEM_PRESSED_ANNEX; - __itemSelected = true; + if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING || + __annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER) + { + __annexOnOffTouchPosition = touchinfo.GetCurrentPosition().x; // +++ check floating + } + } + else if (IsIndividualSelectionEnabled(source)) + { + __pressedControl = TABLE_VIEW_ITEM_PRESSED_INDIVIDUAL; + } + else + { + __pressedControl = TABLE_VIEW_ITEM_PRESSED_NONE; + } if (!IsIndividualSelectionEnabled(source)) { @@ -1104,90 +1131,81 @@ _TableViewItem::OnTouchReleased(const _Control& source, const _TouchInfo& touchi return true; } - if (__isPressedTimerEnabled) + if (&source == this) { - StopTouchPressedTimer(); + __releasedControl = TABLE_VIEW_ITEM_PRESSED_ITEM; + } + else if (&source == __pItemAnnex) + { + __releasedControl = TABLE_VIEW_ITEM_PRESSED_ANNEX; + } + else if (IsIndividualSelectionEnabled(source)) + { + __releasedControl = TABLE_VIEW_ITEM_PRESSED_INDIVIDUAL; + } + else + { + __releasedControl = TABLE_VIEW_ITEM_PRESSED_NONE; } - if(!__itemTouchMoved && !IsContextItem()) + if(!__itemTouchMoved && __isPressedTimerEnabled) { - if(__pressedControl == TABLE_VIEW_ITEM_PRESSED_ITEM) - { - __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED; - SetItemChanged(true); - Invalidate(); - } - else if(__pressedControl == TABLE_VIEW_ITEM_PRESSED_ANNEX) - { - if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_DETAILED) - { - __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL; - SetChecked(true); - DrawAnnexStyle(); - } - else if (__annexStyle != TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING && - __annexStyle != TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER) - { - __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL; - SetItemChanged(true); - Invalidate(); - } - } - else - { - if(__pressedControl != TABLE_VIEW_ITEM_PRESSED_INDIVIDUAL) - { - __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED; - SetItemChanged(true); - Invalidate(); - } - } + StopTouchPressedTimer(); - if (&source == this) - { - __pressedControl = TABLE_VIEW_ITEM_PRESSED_ITEM; - } - else if (&source == __pItemAnnex) - { - __pressedControl = TABLE_VIEW_ITEM_PRESSED_ANNEX; - } - else if (IsIndividualSelectionEnabled(source)) + if(!IsContextItem()) { - __pressedControl = TABLE_VIEW_ITEM_PRESSED_INDIVIDUAL; - } - else - { - __pressedControl = TABLE_VIEW_ITEM_PRESSED_NONE; + FireItemTouchPressed(); } StartTouchReleasedTimer(); - return true; } - if (&source == this) - { - __pressedControl = TABLE_VIEW_ITEM_PRESSED_ITEM; - } - else if (&source == __pItemAnnex) + FireItemTouchReleased(); + return true; +} + +void +_TableViewItem::FireItemTouchPressed() +{ + __itemSelected = true; + + if(__pressedControl == TABLE_VIEW_ITEM_PRESSED_ITEM) { - __pressedControl = TABLE_VIEW_ITEM_PRESSED_ANNEX; + __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED; + SetItemChanged(true); + Invalidate(); } - else if (IsIndividualSelectionEnabled(source)) + else if(__pressedControl == TABLE_VIEW_ITEM_PRESSED_ANNEX) { - __pressedControl = TABLE_VIEW_ITEM_PRESSED_INDIVIDUAL; + if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_DETAILED) + { + __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL; + SetChecked(true); + DrawAnnexStyle(); + } + else if (__annexStyle != TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING && + __annexStyle != TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER) + { + __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL; + SetItemChanged(true); + Invalidate(); + } } else { - __pressedControl = TABLE_VIEW_ITEM_PRESSED_NONE; + if(__pressedControl != TABLE_VIEW_ITEM_PRESSED_INDIVIDUAL) + { + __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED; + SetItemChanged(true); + Invalidate(); + } } - FireItemTouchRelease(); - return true; } void -_TableViewItem::FireItemTouchRelease() +_TableViewItem::FireItemTouchReleased() { bool fireItemEvent = false; bool selectedItem = true; @@ -1199,7 +1217,7 @@ _TableViewItem::FireItemTouchRelease() bool checked = IsChecked(); fireItemEvent = true; - if (__pressedControl == TABLE_VIEW_ITEM_PRESSED_ITEM) + if (__releasedControl == TABLE_VIEW_ITEM_PRESSED_ITEM) { if ((__annexStyle == TABLE_VIEW_ANNEX_STYLE_MARK) || (__annexStyle == TABLE_VIEW_ANNEX_STYLE_RADIO) @@ -1209,7 +1227,7 @@ _TableViewItem::FireItemTouchRelease() SetCheckedAnimationEnabled(!checked); } } - else if(__pressedControl == TABLE_VIEW_ITEM_PRESSED_ANNEX) + else if(__releasedControl == TABLE_VIEW_ITEM_PRESSED_ANNEX) { if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_DETAILED) { @@ -1231,7 +1249,7 @@ _TableViewItem::FireItemTouchRelease() } else { - if(__pressedControl != TABLE_VIEW_ITEM_PRESSED_INDIVIDUAL) + if(__releasedControl != TABLE_VIEW_ITEM_PRESSED_INDIVIDUAL) { if ((__annexStyle == TABLE_VIEW_ANNEX_STYLE_MARK) || (__annexStyle == TABLE_VIEW_ANNEX_STYLE_RADIO) @@ -1253,7 +1271,7 @@ _TableViewItem::FireItemTouchRelease() } else { - if (__pressedControl == TABLE_VIEW_ITEM_PRESSED_ANNEX) + if (__releasedControl == TABLE_VIEW_ITEM_PRESSED_ANNEX) { if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING || __annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER) @@ -1383,7 +1401,7 @@ _TableViewItem::OnPreviewTouchReleased(const _Control& source, const _TouchInfo& _UiTouchEventDelivery _TableViewItem::OnPreviewTouchMoved(const _Control& source, const _TouchInfo& touchinfo) { - return _UI_TOUCH_EVENT_DELIVERY_FORCED_YES; + return _UI_TOUCH_EVENT_DELIVERY_YES; } _UiTouchEventDelivery @@ -1488,43 +1506,12 @@ _TableViewItem::OnTimerExpired(Tizen::Base::Runtime::Timer& timer) else if (&timer == __pPressedTimer) { __isPressedTimerEnabled = false; - - if(__pressedControl == TABLE_VIEW_ITEM_PRESSED_ITEM) - { - __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED; - SetItemChanged(true); - Invalidate(); - } - else if(__pressedControl == TABLE_VIEW_ITEM_PRESSED_ANNEX) - { - if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_DETAILED) - { - __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL; - SetChecked(true); - DrawAnnexStyle(); - } - else if (__annexStyle != TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING && - __annexStyle != TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER) - { - __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL; - SetItemChanged(true); - Invalidate(); - } - } - else - { - if(__pressedControl != TABLE_VIEW_ITEM_PRESSED_INDIVIDUAL) - { - __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED; - SetItemChanged(true); - Invalidate(); - } - } + FireItemTouchPressed(); } else if(&timer == __pReleasedTimer) { __isReleasedTimerEnabled = false; - FireItemTouchRelease(); + FireItemTouchReleased(); } } @@ -1548,35 +1535,12 @@ _TableViewItem::StartTouchPressedTimer(const _Control& source, const _TouchInfo& SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage); __isPressedTimerEnabled = true; - - if (&source == this) - { - __pressedControl = TABLE_VIEW_ITEM_PRESSED_ITEM; - } - else if (&source == __pItemAnnex) - { - __pressedControl = TABLE_VIEW_ITEM_PRESSED_ANNEX; - - if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING || - __annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER) - { - __annexOnOffTouchPosition = touchinfo.GetCurrentPosition().x; // +++ check floating - } - } - else if (IsIndividualSelectionEnabled(source)) - { - __pressedControl = TABLE_VIEW_ITEM_PRESSED_INDIVIDUAL; - } - else - { - __pressedControl = TABLE_VIEW_ITEM_PRESSED_NONE; - } } return r; CATCH: - if (__isPressedTimerEnabled) + if (__isPressedTimerEnabled && __pPressedTimer != null) { __pPressedTimer->Cancel(); } @@ -1587,21 +1551,42 @@ CATCH: return r; } +void +_TableViewItem::StopTouchPressedTimer(void) +{ + result r = E_SUCCESS; + + SysTryReturnVoidResult(NID_UI_CTRL, __pPressedTimer != null, E_SYSTEM, "[E_SYSTEM] Timer is invalid."); + + if (__isPressedTimerEnabled) + { + r = __pPressedTimer->Cancel(); + SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r)); + } + + __isPressedTimerEnabled = false; + + return; +} + result _TableViewItem::StartTouchReleasedTimer() { result r = E_SUCCESS; - if (__pReleasedTimer == null) + if(__pReleasedTimer != null) { - __pReleasedTimer = new (std::nothrow) Timer(); - SysTryCatch(NID_UI_CTRL, __pReleasedTimer != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed."); - - r = __pReleasedTimer->Construct(*this); - SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage); + delete __pReleasedTimer; + __pReleasedTimer = null; } - r = __pReleasedTimer->Start(TOUCH_RELREASED_DURATION); + __pReleasedTimer = new (std::nothrow) Timer(); + SysTryCatch(NID_UI_CTRL, __pReleasedTimer != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed."); + + r = __pReleasedTimer->Construct(*this); + SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage); + + r = __pReleasedTimer->Start(TOUCH_RELEASED_DURATION); SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage); __isReleasedTimerEnabled = true; @@ -1621,19 +1606,19 @@ CATCH: } void -_TableViewItem::StopTouchPressedTimer(void) +_TableViewItem::StopTouchReleasedTimer(void) { result r = E_SUCCESS; - SysTryReturnVoidResult(NID_UI_CTRL, __pPressedTimer != null, E_SYSTEM, "[E_SYSTEM] Timer is invalid."); + SysTryReturnVoidResult(NID_UI_CTRL, __pReleasedTimer != null, E_SYSTEM, "[E_SYSTEM] Timer is invalid."); - if (__isPressedTimerEnabled) + if (__isReleasedTimerEnabled) { - r = __pPressedTimer->Cancel(); + r = __pReleasedTimer->Cancel(); SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r)); } - __isPressedTimerEnabled = false; + __isReleasedTimerEnabled = false; return; } diff --git a/src/ui/inc/FUiCtrl_TableViewItem.h b/src/ui/inc/FUiCtrl_TableViewItem.h index a4830ca..557459b 100644 --- a/src/ui/inc/FUiCtrl_TableViewItem.h +++ b/src/ui/inc/FUiCtrl_TableViewItem.h @@ -299,6 +299,7 @@ protected: result StartTouchPressedTimer(const _Control& source, const _TouchInfo& touchinfo); void StopTouchPressedTimer(void); result StartTouchReleasedTimer(void); + void StopTouchReleasedTimer(void); private: _TableViewItem(const _TableViewItem&); @@ -335,7 +336,8 @@ private: result CreateItemCover(void); result CreateItemDivider(void); result CreateItemAnnexDivider(void); - void FireItemTouchRelease(void); + void FireItemTouchReleased(void); + void FireItemTouchPressed(void); private: void* __pAppInfo; @@ -406,6 +408,7 @@ private: bool __isPressedTimerEnabled; bool __isReleasedTimerEnabled; TableViewItemPressedControl __pressedControl; + TableViewItemPressedControl __releasedControl; Tizen::Base::Runtime::Timer* __pCheckedTimer; bool __isCheckedTimerEnabled; @@ -435,7 +438,7 @@ private: static const int DEFAULT_CAPTURED_CONTROL_COUNT = 10; static const int CHECKED_ANIMATION_DURATION = 30; static const int TOUCH_PRESSED_DURATION = 100; - static const int TOUCH_RELREASED_DURATION = 50; + static const int TOUCH_RELEASED_DURATION = 50; static const int MAX_CHECKED_COUNT = 10; static const float INSENSITIVE = 0.16f; static const float SENSITIVE = 0.08f;