Fix for DateTimeBar Focus issue
authorBhavya Kumili <bhavya.k@samsung.com>
Fri, 5 Jul 2013 10:00:10 +0000 (15:30 +0530)
committerBhavya Kumili <bhavya.k@samsung.com>
Fri, 5 Jul 2013 13:32:37 +0000 (19:02 +0530)
Change-Id: I8a10e499b2f88a41949c55ce3d2d40ea5e8e32ee

src/ui/controls/FUiCtrl_DateTimeBar.cpp
src/ui/controls/FUiCtrl_DateTimeBarPresenter.cpp
src/ui/controls/FUiCtrl_EditDatePresenter.cpp
src/ui/controls/FUiCtrl_EditTimePresenter.cpp
src/ui/inc/FUiCtrl_DateTimeBarPresenter.h

index bfdbca9..34ecacd 100644 (file)
@@ -686,6 +686,10 @@ _DateTimeBar::RefreshItems(void)
 bool
 _DateTimeBar::OnFocusGained(const _Control& control)
 {
+       __pDateTimeBarPresenter->ChangeFocusStatus();
+       __pDateTimeBarPresenter->SetFocusedItemBounds();
+       __pDateTimeBarPresenter->SetItemFocused(true);
+
        return true;
 }
 
@@ -707,9 +711,6 @@ _DateTimeBar::OnFocusModeStateChanged(void)
 void
 _DateTimeBar::OnDrawFocus(void)
 {
-       __pDateTimeBarPresenter->RefreshDateTimeBar();
-       __pDateTimeBarPresenter->SetItemFocused(true);
-       __pDateTimeBarPresenter->ChangeFocusStatus();
        return;
 }
 
index ed29811..1c475c4 100644 (file)
@@ -255,6 +255,11 @@ void
 _DateTimeBarPresenter::ChangeFocusStatus(void)
 {
        _DateTimeBarItem* pItem = null;
+
+       if (__focusedIndex == -1)
+       {
+               __focusedIndex = GetSelectedItemIndex() - 1;
+       }
        pItem = GetItemAt(__focusedIndex);
 
        if (pItem != null)
@@ -277,22 +282,16 @@ _DateTimeBarPresenter::SetItemFocused(bool isFocused)
 }
 
 void
-_DateTimeBarPresenter::RefreshDateTimeBar()
+_DateTimeBarPresenter::SetFocusedItemBounds()
 {
-       __initialAnimationValue = 0.0f;
-       __isInitialAnimation = false;
        _DateTimeBarItem* pItem = null;
 
-       ResetFlickAnimationTimer();
-       RemoveAllItems();
-       __pDateTimeBar->SetInitialValue(GetMinimumValue(), GetMaximumValue(), __focusedValue, __pDateTimeBar->GetSelectedBoxId());
-       __distance = (GetItemWidth() * (-1.0f));
-
-       LoadItems();
-       AdjustItemPosition(__distance);
-       ValidateAndAdjustStartPosition();
-       pItem = GetItemAt(__focusedIndex);
-       __focusBounds = pItem->GetBounds();
+       if (__focusedIndex > 0)
+       {
+               pItem = GetItemAt(__focusedIndex);
+               SysTryReturnVoidResult(NID_UI,  pItem != NULL, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+               __focusBounds = pItem->GetBounds();
+       }
 }
 
 void
@@ -1048,15 +1047,30 @@ _DateTimeBarPresenter::GetWindowBounds(void) const
 bool
 _DateTimeBarPresenter::OnKeyPressed(const _Control& source, const _KeyInfo& keyInfo)
 {
-       if (!__isFocused)
-       {
-               return false;
-       }
-
        _KeyCode keyCode = keyInfo.GetKeyCode();
 
        switch (keyCode)
        {
+               case KEY_UP:
+                       //fall through
+               case KEY_DOWN:
+                       //fall through:
+               case KEY_TAB:
+               {
+                       __pDateTimeBar->CloseDateTimeBar();
+                       ResetFlickAnimationTimer();
+
+                       if (__pDateTimeBar->GetSelectedBoxId() >= DATETIME_ID_YEAR && __pDateTimeBar->GetSelectedBoxId() <= DATETIME_ID_DAY)
+                       {
+                               __pDateTimeBar->FireDateTimeChangeEvent(DATE_INTERNAL_CHANGE_CANCELED);
+                       }
+                       else if (__pDateTimeBar->GetSelectedBoxId() >= DATETIME_ID_HOUR && __pDateTimeBar->GetSelectedBoxId() <= DATETIME_ID_MINUTE)
+                       {
+                               __pDateTimeBar->FireDateTimeChangeEvent(TIME_INTERNAL_CHANGE_CANCELED);
+                       }
+
+                       break;
+               }
                case KEY_RIGHT:
                {
                        if ((__focusBounds.x + __focusBounds.width) > (GetWindowBounds().width - __focusBounds.width))
@@ -1066,7 +1080,6 @@ _DateTimeBarPresenter::OnKeyPressed(const _Control& source, const _KeyInfo& keyI
                        else
                        {
                                __focusBounds.x = __focusBounds.x + __focusBounds.width + GetItemMargin();
-
                        }
                        __focusedIndex = GetItemIndexFromPosition(FloatPoint(__focusBounds.x, __focusBounds.y));
                        __pDateTimeBar->Invalidate();
@@ -1104,7 +1117,7 @@ _DateTimeBarPresenter::OnKeyPressed(const _Control& source, const _KeyInfo& keyI
                        if (pItem != null)
                        {
                                __pDateTimeBar->SetVisibleState(false);
-                               __pDateTimeBar->Close();
+                               __pDateTimeBar->CloseDateTimeBar();
 
                                __pDateTimeBar->FireActionEvent(pItem->GetActionId());
 
index 1d17713..54c3687 100644 (file)
@@ -1276,7 +1276,6 @@ _EditDatePresenter::OnTouchReleased(const _Control& source, const _TouchInfo& to
        if ((__pEditDate->GetDateTimeBar() != null) && (GetLastSelectedId() != DATETIME_ID_NONE))
        {
                __pEditDate->SetFocused(true);
-
                FloatRectangle bounds(0.0f, 0.0f, 0.0f, 0.0f);
                bounds = GetDateAreaBounds(GetLastSelectedId());
                FloatRectangle absoluteBounds(0.0f, 0.0f, 0.0f, 0.0f);
@@ -1287,7 +1286,8 @@ _EditDatePresenter::OnTouchReleased(const _Control& source, const _TouchInfo& to
 
                if (__pEditDate->GetDateTimeBar()->IsActivated())
                {
-                       __pEditDate->GetDateTimeBar()->RefreshItems();
+                       __pEditDate->GetDateTimeBar()->Close();
+                       __pEditDate->GetDateTimeBar()->Open();
                }
                else
                {
index 7b866c5..47de18b 100644 (file)
@@ -1499,7 +1499,8 @@ _EditTimePresenter::OnTouchReleased(const _Control& source, const _TouchInfo& to
 
                if (__pEditTime->GetDateTimeBar()->IsActivated())
                {
-                       __pEditTime->GetDateTimeBar()->RefreshItems();
+                       __pEditTime->GetDateTimeBar()->Close();
+                       __pEditTime->GetDateTimeBar()->Open();
                }
                else
                {
index 90da69f..1b6d791 100644 (file)
@@ -72,7 +72,7 @@ public:
        void ChangeFocusStatus(void);
        void FocusModeChanged(void);
        void SetItemFocused(bool isFocused);
-       void RefreshDateTimeBar(void);
+       void SetFocusedItemBounds(void);
 
        float GetItemWidth(void) const;
        float GetItemMargin(void) const;