Performance improvement ContextMenu
authorvipul <vipul.kumar@samsung.com>
Tue, 10 Sep 2013 05:07:38 +0000 (10:37 +0530)
committervipul <vipul.kumar@samsung.com>
Thu, 12 Sep 2013 09:47:30 +0000 (15:17 +0530)
and prevent issues.
Signed-off-by: vipul <vipul.kumar@samsung.com>
Change-Id: I833097b5a4beb8a9d03048c7cd22f696b34d0ce9

src/ui/controls/FUiCtrl_ContextMenu.cpp
src/ui/controls/FUiCtrl_ContextMenuGridPresenter.cpp
src/ui/controls/FUiCtrl_ContextMenuListPresenter.cpp
src/ui/controls/FUiCtrl_OptionMenu.cpp
src/ui/controls/FUiCtrl_OptionMenuImpl.cpp
src/ui/controls/FUiCtrl_OptionMenuPresenter.cpp
src/ui/inc/FUiCtrl_IContextMenuPresenter.h

index b83347e..320a0e2 100644 (file)
@@ -367,6 +367,7 @@ _ContextMenu::OnAttachedToMainTree(void)
                __pContextMenuPresenter->CalculateShowItemCount();
        }
 
+       __pContextMenuPresenter->CalculateItemMaximumWidth();
        r = __pContextMenuPresenter->CalculateWindowRect();
        SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, "Propagating.");
 
@@ -495,8 +496,11 @@ _ContextMenu::AddItem(const Base::String& text, int actionId, const Bitmap* pNor
 
        __actionId.Add(actionId);
 
-       __pContextMenuPresenter->CalculateShowItemCount();
-       __pContextMenuPresenter->CalculateWindowRect();
+       if (__isAttachedToMainTree)
+       {
+               __pContextMenuPresenter->CalculateShowItemCount();
+               __pContextMenuPresenter->CalculateWindowRect();
+       }
 
        return r;
 }
@@ -513,8 +517,11 @@ _ContextMenu::InsertItem(int index, const Base::String& text, int actionId, cons
 
        __actionId.InsertAt(actionId, index);
 
-       __pContextMenuPresenter->CalculateShowItemCount();
-       __pContextMenuPresenter->CalculateWindowRect();
+       if (__isAttachedToMainTree)
+       {
+               __pContextMenuPresenter->CalculateShowItemCount();
+               __pContextMenuPresenter->CalculateWindowRect();
+       }
 
        return r;
 }
@@ -530,7 +537,10 @@ _ContextMenu::SetItem(int index, const Base::String& text, int actionId, const B
 
        __actionId.SetAt(actionId, index);
 
-       __pContextMenuPresenter->CalculateWindowRect();
+       if (__isAttachedToMainTree)
+       {
+               __pContextMenuPresenter->CalculateWindowRect();
+       }
 
        return r;
 }
@@ -545,8 +555,11 @@ _ContextMenu::RemoveItemAt(int index)
 
        __actionId.RemoveAt(index);
 
-       __pContextMenuPresenter->CalculateShowItemCount();
-       __pContextMenuPresenter->CalculateWindowRect();
+       if (__isAttachedToMainTree)
+       {
+               __pContextMenuPresenter->CalculateShowItemCount();
+               __pContextMenuPresenter->CalculateWindowRect();
+       }
 
        return r;
 }
@@ -561,8 +574,11 @@ _ContextMenu::RemoveAllItems(void)
 
        __actionId.RemoveAll();
 
-       __pContextMenuPresenter->CalculateShowItemCount();
-       __pContextMenuPresenter->CalculateWindowRect();
+       if (__isAttachedToMainTree)
+       {
+               __pContextMenuPresenter->CalculateShowItemCount();
+               __pContextMenuPresenter->CalculateWindowRect();
+       }
 
        return r;
 }
@@ -621,7 +637,10 @@ _ContextMenu::SetAnchorPosition(float x, float y)
                AdjustDropPosition();
        }
 
-       __pContextMenuPresenter->CalculateWindowRect();
+       if (__isAttachedToMainTree)
+       {
+               __pContextMenuPresenter->CalculateWindowRect();
+       }
        return E_SUCCESS;
 }
 
@@ -727,7 +746,7 @@ _ContextMenu::SetShowItemCount(int count)
        r = SetProperty("maxVisibleItemsCount", Variant(count));
        SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Failed to set show item count.");
 
-       if (__style == CONTEXT_MENU_CORE_STYLE_LIST)
+       if (__style == CONTEXT_MENU_CORE_STYLE_LIST && __isAttachedToMainTree)
        {
                r = __pContextMenuPresenter->CalculateWindowRect();
                SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Failed to calculate window.");
index 932060f..d870a94 100644 (file)
@@ -1186,8 +1186,7 @@ _ContextMenuGridPresenter::Draw(void)
 
        Canvas* pCanvas = __pContextMenu->GetCanvasN();
 
-       r = GetLastResult();
-       SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
+       SysTryReturnResult(NID_UI_CTRL, pCanvas != null, GetLastResult(), "Propagating.");
 
        // Clear canvas for drawing area of the ContextMenu.
        pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
index 389c8c0..4219d71 100644 (file)
@@ -359,8 +359,11 @@ _ContextMenuListPresenter::SetItem(int index, const String& text, int actionId,
        r = GetLastResult();
        SysTryReturnResult(NID_UI_CTRL, pItem != null, r, "Failed to get the item.");
 
-       r = __pContextMenu->GetScrollPanel()->DetachChild(*pItem);
-       SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Failed to detach item.");
+       if (pItem->HasParent())
+       {
+               r = __pContextMenu->GetScrollPanel()->DetachChild(*pItem);
+               SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Failed to detach item.");
+       }
 
        pItem = CreateItemN(text, actionId, pNormalBitmap, pPressedBitmap, pHighlightedBitmap);
        SysTryReturnResult(NID_UI_CTRL, pItem != null, GetLastResult(), "Failed to create item.");
@@ -389,8 +392,11 @@ _ContextMenuListPresenter::DeleteItem(int index)
        r = GetLastResult();
        SysTryReturnResult(NID_UI_CTRL, pItem != null, r, "Failed to get the item.");
 
-       r = __pContextMenu->GetScrollPanel()->DetachChild(*pItem);
-       SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Failed to detach item.");
+       if (pItem->HasParent())
+       {
+               r = __pContextMenu->GetScrollPanel()->DetachChild(*pItem);
+               SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Failed to detach item.");
+       }
 
        r = __pModel->RemoveItem(index);
        SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Failed to delete item.");
@@ -446,6 +452,8 @@ _ContextMenuListPresenter::ApplyColorProperty(void)
                Color color = __pContextMenu->GetItemColor(CONTEXT_MENU_CORE_ITEM_STATUS_PRESSED);
 
                pItem = __pModel->GetItem(i);
+               SysTryReturnResult(NID_UI_CTRL, pItem != null, E_SYSTEM, "A system error has occured. pItem must not be null.");
+
                pItem->SetPressedItemColor(color);
        }
        return E_SUCCESS;
@@ -888,9 +896,9 @@ _ContextMenuListPresenter::CalculateItemMaximumWidth(void)
 {
        FloatDimension itemSize(0.0f, 0.0f);
        FloatDimension textArea(0.0f, 0.0f);
-       float maxItemWidth = 0.0f;
+       float maxItemWidth = __itemMinWidth;
 
-       for (int i = 0; i < __pModel->GetItemCount() - 1; i++)
+       for (int i = 0; i < __pModel->GetItemCount(); i++)
        {
                _ContextMenuItem* pItem = null;
 
@@ -903,8 +911,8 @@ _ContextMenuListPresenter::CalculateItemMaximumWidth(void)
                {
                        maxItemWidth = itemSize.width;
                }
-               __itemWidth = maxItemWidth;
        }
+       __itemWidth = maxItemWidth;
 }
 
 int
@@ -951,8 +959,7 @@ _ContextMenuListPresenter::Draw(void)
        result r = E_SUCCESS;
 
        Canvas* pCanvas = __pContextMenu->GetCanvasN();
-       r = GetLastResult();
-       SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, GetLastResult(), "Propagating.");
+       SysTryReturnResult(NID_UI_CTRL, pCanvas != null, GetLastResult(), "Propagating.");
 
        // Clear canvas for drawing area of the ContextMenu.
        pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
index 2061395..14cac9a 100644 (file)
@@ -1438,7 +1438,6 @@ _OptionMenu::OnChangeLayout(_ControlRotation rotation)
        __rotation =  rotation;
 
        __pOptionMenuPresenter->ResetSelectedItem();
-       __pOptionMenuPresenter->CalculateWindowRect();
 }
 
 void
index 4fad681..e0fc21a 100755 (executable)
@@ -411,7 +411,7 @@ _OptionMenuImpl::GetMaxVisibleItemsCount(void) const
 result
 _OptionMenuImpl::OnAttachedToMainTree(void)
 {
-       return _WindowImpl::OnAttachedToMainTree();;
+       return _WindowImpl::OnAttachedToMainTree();
 }
 
 const char*
index 7a3ecbc..7bc11ee 100755 (executable)
@@ -459,9 +459,8 @@ _OptionMenuPresenter::CalculateItemMaximumWidth(void)
                        maxItemWidth = itemSize.width;
                }
 
-               __itemWidth = maxItemWidth;
        }
-
+       __itemWidth = maxItemWidth;
 }
 
 result
@@ -486,8 +485,16 @@ _OptionMenuPresenter::DeleteItem(int index)
        SysTryReturnResult(NID_UI_CTRL, (index < __pOptionMenu->GetItemCount()), E_INVALID_ARG,
                        "Invalid argument is used. The specified index (%d) is invalid.", index);
 
-       result r = __pOptionMenu->GetScrollPanel()->DetachChild(*__pModel->GetItem(index));
-       SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Failed to detach item.");
+       result r = E_SUCCESS;
+       _OptionMenuItem* pItem = null;
+
+       pItem = __pModel->GetItem(index);
+
+       if (pItem != null && pItem->HasParent())
+       {
+               r = __pOptionMenu->GetScrollPanel()->DetachChild(*__pModel->GetItem(index));
+               SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Failed to detach item.");
+       }
 
        r = __pModel->RemoveItem(index);
        SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Failed to delete item.");
@@ -755,8 +762,7 @@ _OptionMenuPresenter::Draw(void)
        result r = E_SUCCESS;
 
        Canvas* pCanvas = __pOptionMenu->GetCanvasN();
-       r = GetLastResult();
-       SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating");
+       SysTryReturnResult(NID_UI_CTRL, pCanvas != null, GetLastResult(), "Propagating");
 
        // Clear canvas for drawing area of the OptionMenu.
        pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
index 503ebe3..8fa7631 100644 (file)
@@ -95,6 +95,8 @@ public:
        virtual void OnDrawFocus(void) {};
        virtual void OnFocusModeStateChanged(void) {};
 
+       virtual void CalculateItemMaximumWidth(void) {};
+
        virtual void OnFontChanged(Tizen::Graphics::Font* pFont) = 0;
        virtual void OnFontInfoRequested(unsigned long& style, float& size) = 0;