Modified to work properly on double tab on tableview item
authoryouseong.ji <youseong.ji@samsung.com>
Tue, 26 Mar 2013 05:10:39 +0000 (14:10 +0900)
committerGerrit Code Review <gerrit2@kim11>
Wed, 27 Mar 2013 10:31:38 +0000 (19:31 +0900)
Change-Id: I9749334c5b0996dd0592ef0bf1b2808233e8a1bf
Signed-off-by: youseong.ji <youseong.ji@samsung.com>
src/ui/controls/FUiCtrl_TableViewItem.cpp
src/ui/inc/FUiCtrl_TableViewItem.h

index 11029fd..2a886eb 100644 (file)
@@ -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;
 }
index a4830ca..557459b 100644 (file)
@@ -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;