2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0/
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an ”AS IS” BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
18 * @file FUi_LayoutLayout.cpp
19 * @brief This is the implementation file for Layout class.
21 * This file contains the implementation of Layout class.
24 #include <FBaseSysLog.h>
25 #include "FUi_LayoutLayout.h"
26 #include "FUi_LayoutLayoutItemProxy.h"
27 #include "FUi_LayoutProxyList.h"
28 #include "FUi_LayoutLayoutItemInfo.h"
29 #include "FUi_LayoutLayoutList.h"
31 namespace Tizen { namespace Ui { namespace _Layout
40 , __pContainerProxy(null)
43 , __partialUpdateState(false)
44 , __determineState(false)
50 LayoutItemProxy* pContainerProxy = GetContainerProxy();
51 if (pContainerProxy != null)
53 LayoutContainer* pContainer = static_cast <LayoutContainer*>(pContainerProxy->GetItem());
56 pContainer->OnDestroyLayout(*this);
62 delete __pContainerProxy;
69 Layout::GetContainerProxy(void)
71 if (__pContainerProxy == null)
76 if (__rootLayout == false)
78 LayoutContainer* pContainer = static_cast <LayoutContainer*>(__pContainerProxy->GetItem());
79 if (pContainer == null)
81 SysLog(NID_UI, "Container is null.");
85 LayoutContainer* pParentContainer = pContainer->GetParentContainer();
86 if (pParentContainer == null)
88 SysLog(NID_UI, "Parent of container is null.");
92 Layout* pParentLayout = __pContainerProxy->GetParentLayout();
93 if (pParentLayout == null)
95 SysLog(NID_UI, "Parent layout of container is null.");
99 if (pParentLayout != pParentContainer->__pCurrentLayout)
101 ProxyListNode* pNode = pParentContainer->__pCurrentLayout->__pProxyList->GetFirstNode();
102 while (pNode != null)
104 LayoutItemProxy* pItemProxy = pNode->GetItemProxy();
105 LayoutContainer* pResultContainer = static_cast <LayoutContainer*>(pItemProxy->GetItem());
106 if (pContainer == pResultContainer)
108 __pContainerProxy = pItemProxy;
111 pNode = __pProxyList->GetNextNode(*pNode);
116 return __pContainerProxy;
120 Layout::SetLayoutRect(const LayoutRect layoutRect)
124 __width = layoutRect.w;
125 __height = layoutRect.h;
129 Layout::GetLayoutRect(void) const
131 LayoutRect layoutRect = {__x, __y, __width, __height};
137 Layout::SetItemAlignment(const LayoutItem& item, const ItemAlign align)
141 if (align.HAlign < ITEM_HORIZONTAL_ALIGN_LEFT || align.HAlign > ITEM_HORIZONTAL_ALIGN_LEFT_RIGHT ||
142 align.VAlign < ITEM_VERTICAL_ALIGN_TOP || align.VAlign > ITEM_VERTICAL_ALIGN_TOP_BOTTOM)
144 SysTryReturn(NID_UI, false, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The alignment parameter is invalid parameter.");
147 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(item);
148 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Control dose not belong to layout.");
150 pItemProxy->SetItemAlignment(align);
152 SetUpdateState(true);
157 Layout::GetItemAlignment(const LayoutItem& item, ItemAlign& align) const
161 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(item);
162 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Control dose not belong to layout.");
164 align = pItemProxy->GetItemAlignment();
170 Layout::SetItemMargin(const LayoutItem& item, const ItemMargin margin)
174 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(item);
175 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Control dose not belong to layout.");
177 pItemProxy->SetItemMargin(margin);
179 SetUpdateState(true);
184 Layout::GetItemMargin(const LayoutItem& item, ItemMargin& margin) const
188 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(item);
189 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Control dose not belong to layout.");
191 margin = pItemProxy->GetItemMargin();
197 Layout::SetItemWidthMatchMode(const LayoutItem& item, const LayoutMatchMode matchMode)
201 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(item);
202 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Control dose not belong to layout.");
204 pItemProxy->SetItemWidthMatchMode(matchMode);
206 SetUpdateState(true);
211 Layout::GetItemWidthMatchMode(const LayoutItem& item, LayoutMatchMode& matchMode) const
215 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(item);
216 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Control dose not belong to layout.");
218 matchMode = pItemProxy->GetItemWidthMatchMode();
224 Layout::SetItemHeightMatchMode(const LayoutItem& item, const LayoutMatchMode matchMode)
228 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(item);
229 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Control dose not belong to layout.");
231 pItemProxy->SetItemHeightMatchMode(matchMode);
233 SetUpdateState(true);
238 Layout::GetItemHeightMatchMode(const LayoutItem& item, LayoutMatchMode& matchMode) const
242 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(item);
243 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Control dose not belong to layout.");
245 matchMode = pItemProxy->GetItemHeightMatchMode();
251 Layout::SetItemBaseRect(const LayoutItem& item, const LayoutRect baseRect)
255 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(item);
256 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Control dose not belong to layout.");
258 pItemProxy->SetItemBaseRect(baseRect);
260 SetUpdateState(true);
265 Layout::GetItemBaseRect(const LayoutItem& item, LayoutRect& baseRect) const
269 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(item);
270 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Control dose not belong to layout.");
272 baseRect = pItemProxy->GetItemBaseRect();
278 Layout::ItemExists(LayoutItem& item)
280 if (__pProxyList->GetItemProxy(item) != null)
288 Layout::CheckParentFlag(void)
294 return UPDATEFLAG_NO_FLAG;
297 LayoutItemProxy* pContainerProxy = GetContainerProxy();
298 SysTryReturn(NID_UI, pContainerProxy != null, UPDATEFLAG_ERROR, E_INVALID_STATE, "[E_INVALID_STATE] Did not set the container.");
300 Layout* pParentLayout = pContainerProxy->GetParentLayout();
301 SysTryReturn(NID_UI, pParentLayout != null, UPDATEFLAG_ERROR, E_INVALID_STATE, "[E_INVALID_STATE] Layout does not exist.");
303 LayoutItemProxy* pParentContainerProxy = pParentLayout->GetContainerProxy();
304 SysTryReturn(NID_UI, pContainerProxy != null, UPDATEFLAG_ERROR, E_INVALID_STATE, "[E_INVALID_STATE] Did not set the parent container.");
306 return CheckFlagInternal(*pParentContainerProxy);
310 Layout::CheckCurrentFlag(void)
316 return UPDATEFLAG_NO_FLAG;
319 LayoutItemProxy* pContainerProxy = GetContainerProxy();
320 SysTryReturn(NID_UI, pContainerProxy != null, UPDATEFLAG_ERROR, E_INVALID_STATE, "[E_INVALID_STATE] Did not set the container.");
322 return CheckFlagInternal(*pContainerProxy);
326 Layout::CheckFlagInternal(LayoutItemProxy& containerProxy)
330 LayoutMatchMode widthMode = containerProxy.GetItemWidthMatchMode();
331 LayoutMatchMode heightMode = containerProxy.GetItemHeightMatchMode();
332 ItemAlign align = containerProxy.GetItemAlignment();
334 if (widthMode == NONE_MODE && heightMode == NONE_MODE)
336 updateFlag |= UPDATEFLAG_NONE_MODE;
339 if (widthMode == MATCH_PARENT || heightMode == MATCH_PARENT)
341 updateFlag |= UPDATEFLAG_MATCH_PARENT;
344 if (widthMode == WRAP_CONTENT || heightMode == WRAP_CONTENT)
346 updateFlag |= UPDATEFLAG_WRAPCONTENT;
349 if (align.HAlign != ITEM_HORIZONTAL_ALIGN_LEFT || align.VAlign != ITEM_VERTICAL_ALIGN_TOP)
351 updateFlag |= UPDATEFLAG_ALIGNMENT;
354 return static_cast <LayoutUpdateFlag>(updateFlag);
359 Layout::UpdateLayout(void)
361 result r = UpdateLayoutInternal(UPDATEFLAG_NO_FLAG);
362 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Failed to UpdateLayout.", GetErrorMessage(r));
363 r = DetermineWindowRectToAllItem();
364 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Failed to DetermineWindowRectToAllItem.", GetErrorMessage(r));
370 Layout::DetermineWindowRectToAllItem(void)
374 LayoutItemProxy* pContainerProxy = GetContainerProxy();
375 SysTryReturn(NID_UI, pContainerProxy != null, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Did not set the container.");
379 if (__determineState)
382 __determineState = false;
387 Layout* pParentLayout = pContainerProxy->GetParentLayout();
388 SysTryReturn(NID_UI, pParentLayout != null, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Layout does not exist.");
389 return pParentLayout->DetermineWindowRectToAllItem();
396 Layout::OnDetermine(void)
398 ProxyList* pProxyList = GetProxyList();
399 SysAssertf(pProxyList != null, "ProxyList is invalid");
401 LayoutItemProxy* pContainerProxy = GetContainerProxy();
402 SysTryReturn(NID_UI, pContainerProxy != null, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Did not set the container.");
405 pContainerProxy->GetItemWindowRect(itemRect);
406 pContainerProxy->SetItemWindowRect(itemRect, false);
412 pContainerProxy->SetItemWindowRect(itemRect, true);
414 ProxyListNode* pCurNode = pProxyList->GetFirstNode();
415 while (pCurNode != null)
417 LayoutItemProxy* pItemProxy = pCurNode->GetItemProxy();
418 LayoutContainer* pCurContainer = static_cast<LayoutContainer*>(pItemProxy->GetItem());
419 SysTryReturn(NID_UI, pCurContainer != null, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] This item is not container.");
421 pCurContainer->GetLayout()->OnDetermine();
423 pCurNode = pProxyList->GetNextNode(*pCurNode);
431 Layout::SetUpdateState(bool state)
435 LayoutItemProxy* pContainerProxy = GetContainerProxy();
437 SysTryReturnVoidResult(NID_UI, pContainerProxy != null, E_INVALID_STATE, "[E_INVALID_STATE] Did not set the container.");
441 __updateState = state;
445 Layout* pParentLayout = pContainerProxy->GetParentLayout();
446 SysTryReturnVoidResult(NID_UI, pParentLayout != null, E_INVALID_STATE, "[E_INVALID_STATE] Layout does not exist.");
447 return pParentLayout->SetUpdateState(state);
452 Layout::PartialUpdateLayout(void)
456 LayoutUpdateFlag flag = CheckCurrentFlag();
457 SysTryReturn(NID_UI, flag != UPDATEFLAG_ERROR, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] CheckCurrentFlag is failed.");
459 result r = UpdateLayoutInternal(flag);
460 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Failed to UpdateLayout.", GetErrorMessage(r));
462 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Failed to OnDetermine.", GetErrorMessage(r));
469 Layout::OnLayoutTrigger(Layout& layout, bool layoutUpdating)
473 LayoutItemProxy* pContainerProxy = layout.GetContainerProxy();
475 SysTryReturn(NID_UI, pContainerProxy != null, E_INVALID_STATE, E_INVALID_STATE,
476 "[E_INVALID_STATE] Did not set the container.");
478 LayoutRect containerRect;
479 pContainerProxy->GetItemWindowRect(containerRect);
480 LayoutContainer* pContainer = static_cast <LayoutContainer*>(pContainerProxy->GetItem());
481 SysTryReturn(NID_UI, pContainer != null, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Did not set the container.");
483 LayoutRect containerClientRect = {0.0f, 0.0f, containerRect.w, containerRect.h};
484 pContainer->ConvertWindowToClientBounds(containerClientRect, containerClientRect);
486 LayoutSize containerSize = {containerClientRect.w, containerClientRect.h};
488 pContainer->SetIntendedWindowSize(containerSize);
489 return layout.OnLayout(containerRect.w, containerRect.h, layoutUpdating);
493 Layout::UpdateLayoutInternal(LayoutUpdateFlag updateFlag)
497 LayoutItemProxy* pContainerProxy = GetContainerProxy();
499 SysTryReturn(NID_UI, pContainerProxy != null, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Did not set the container.");
505 if (updateFlag == UPDATEFLAG_NO_FLAG)
507 __updateState = false;
509 __determineState = true;
510 return OnLayoutTrigger(*this, true);
519 Layout* pParentLayout = pContainerProxy->GetParentLayout();
520 SysTryReturn(NID_UI, pParentLayout != null, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Layout does not exist.");
522 if (updateFlag != UPDATEFLAG_NO_FLAG)
524 if (updateFlag & UPDATEFLAG_MATCH_PARENT || updateFlag & UPDATEFLAG_ALIGNMENT || pParentLayout->__partialUpdateState)
526 LayoutUpdateFlag parentflag = CheckParentFlag();
527 SysTryReturn(NID_UI, parentflag != UPDATEFLAG_ERROR, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] CheckParentFlag is failed.");
529 if (parentflag & UPDATEFLAG_MATCH_PARENT || parentflag & UPDATEFLAG_ALIGNMENT || pParentLayout->__partialUpdateState)
531 return pParentLayout->UpdateLayoutInternal(parentflag);
535 return OnLayoutTrigger(*pParentLayout, true);
540 return OnLayoutTrigger(*this, true);
544 return pParentLayout->UpdateLayoutInternal(UPDATEFLAG_NO_FLAG);
549 Layout::AddItem(LayoutItem& addItem)
551 LayoutItemProxy* pItemProxy = CreateProxy(addItem);
552 SysTryReturn(NID_UI, pItemProxy != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to create proxy of layout item.");
554 LayoutContainer* pContainer = static_cast <LayoutContainer*>(&addItem);
555 if (pContainer != null)
557 LayoutListNode* pCurNode = pContainer->GetLayoutList()->GetFirstNode();
561 Layout* pLayout = pCurNode->GetLayout();
564 if (pLayout->__rootLayout == true)
566 delete pLayout->__pContainerProxy;
567 pLayout->__pContainerProxy = pItemProxy;
568 pLayout->__rootLayout = false;
571 pCurNode = pContainer->GetLayoutList()->GetNextNode(*pCurNode);
575 if (__pProxyList->AddNode(*pItemProxy) == null)
577 pItemProxy->Destroy();
578 result r = GetLastResult();
579 SysTryReturn(NID_UI, false, r, r, "[%s] Failed to add layout item.", GetErrorMessage(r));
582 pItemProxy->SetParentLayout(this);
583 pItemProxy->SetParentContainer(static_cast <LayoutContainer*>(__pContainerProxy->GetItem()));
586 pItemProxy->GetItemWindowRect(itemRect);
588 pItemProxy->SetItemBaseRect(itemRect);
590 SetUpdateState(true);
595 Layout::RemoveItem(const LayoutItem& removeItem)
599 LayoutItemProxy* pItemProxy = __pProxyList->GetItemProxy(removeItem);
600 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_STATE, E_INVALID_STATE,
601 "[E_INVALID_STATE] Control dose not belong to layout.");
603 result r = __pProxyList->RemoveNode(*pItemProxy);
606 SysLog(NID_UI, "Failed to RemoveNode()");
607 SysTryReturn(NID_UI, r, r, r, "[E_INVALID_STATE] Failed to remove layout item.");
610 pItemProxy->SetParentLayout(null);
611 pItemProxy->SetParentContainer(null);
612 pItemProxy->Destroy();
618 Layout::OnChangeViewPosition(int viewPosX, int viewPosY)
622 if (viewPosX != 0 || viewPosY != 0)
624 ProxyListNode* pNode = __pProxyList->GetFirstNode();
625 while (pNode != null)
627 LayoutItemProxy* pItemProxy = pNode->GetItemProxy();
628 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_STATE, E_INVALID_STATE,
629 "[E_INVALID_STATE] Layout proxy list error.");
632 pItemProxy->GetItemWindowRect(itemRect);
633 itemRect.x += viewPosX;
634 itemRect.y += viewPosY;
635 result r = pItemProxy->SetItemWindowRect(itemRect);
641 pNode = __pProxyList->GetNextNode(*pNode);
652 Layout::CalculateAlignment(const LayoutAlignMode alignMode)
656 result r = E_SUCCESS;
657 bool needMeasure = false;
659 SysAssertf(__pProxyList != null, "ProxyList is invalid.");
661 ProxyListNode* pNode = __pProxyList->GetFirstNode();
662 while (pNode != null)
664 LayoutItemProxy* pItemProxy = pNode->GetItemProxy();
665 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Layout proxy list error.");
667 ItemAlign align = pItemProxy->GetItemAlignment();
668 ItemMargin margin = pItemProxy->GetItemMargin();
670 pItemProxy->GetItemWindowRect(itemRect);
672 if (alignMode == BOTH || alignMode == HORIZONTALONLY)
674 switch (align.HAlign)
676 case ITEM_HORIZONTAL_ALIGN_LEFT:
678 itemRect.x = __x + margin.left;
682 case ITEM_HORIZONTAL_ALIGN_CENTER:
684 itemRect.x = (__x + (__width / 2)) - (itemRect.w / 2);
688 case ITEM_HORIZONTAL_ALIGN_RIGHT:
690 itemRect.x = (__x + __width) - (itemRect.w + margin.right);
694 case ITEM_HORIZONTAL_ALIGN_LEFT_RIGHT:
696 itemRect.x = __x + margin.left;
697 itemRect.w = __width - (margin.left + margin.right);
702 #ifdef NOT_SUPPORT_NEGATIVE_SIZE
710 if (alignMode == BOTH || alignMode == VERTICALONLY)
712 switch (align.VAlign)
714 case ITEM_VERTICAL_ALIGN_TOP:
716 itemRect.y = __y + margin.top;
720 case ITEM_VERTICAL_ALIGN_MIDDLE:
722 itemRect.y = (__y + (__height / 2)) - (itemRect.h / 2);
726 case ITEM_VERTICAL_ALIGN_BOTTOM:
728 itemRect.y = (__y + __height) - (itemRect.h + margin.bottom);
732 case ITEM_VERTICAL_ALIGN_TOP_BOTTOM:
734 itemRect.y = __y + margin.top;
735 itemRect.h = __height - (margin.top + margin.bottom);
740 #ifdef NOT_SUPPORT_NEGATIVE_SIZE
750 r = pItemProxy->Measure(itemRect.w, itemRect.h);
755 pItemProxy->GetMeasuredSize(itemRect.w, itemRect.h);
757 r = pItemProxy->SetItemWindowRect(itemRect);
763 pNode = __pProxyList->GetNextNode(*pNode);
770 Layout::SetContainer(LayoutContainer* pContainer)
774 if (pContainer == null)
776 ProxyListNode* pNode = __pProxyList->GetFirstNode();
777 while (pNode != null)
779 LayoutItemProxy* pItemProxy = pNode->GetItemProxy();
780 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_STATE, E_INVALID_STATE,
781 "[E_INVALID_STATE] Layout proxy list error.");
783 pItemProxy->SetParentContainer(null);
785 pNode = __pProxyList->GetNextNode(*pNode);
788 if (__pContainerProxy)
792 //__pContainerProxy->Destroy();
793 delete __pContainerProxy;
794 __rootLayout = false;
796 __pContainerProxy = null;
802 LayoutContainer* pParentContainer = pContainer->GetParentContainer();
803 if (pParentContainer == null)
805 if (__rootLayout && __pContainerProxy != null)
807 delete __pContainerProxy;
810 __pContainerProxy = CreateProxy(*pContainer);
811 SysTryReturn(NID_UI, __pContainerProxy != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to create proxy of layout item.");
817 Layout* pParentLayout = pParentContainer->GetLayout();
818 SysTryReturn(NID_UI, pParentLayout, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Did not set a layout.");
820 ProxyListNode* pNode = pParentLayout->__pProxyList->GetFirstNode();
821 while (pNode != null)
823 LayoutItemProxy* pItemProxy = pNode->GetItemProxy();
824 if (pItemProxy == null)
826 return E_INVALID_STATE;
828 LayoutContainer* pResultContainer = static_cast <LayoutContainer*>(pItemProxy->GetItem());
829 if (pContainer == pResultContainer)
831 if (__rootLayout && __pContainerProxy != null)
833 delete __pContainerProxy;
834 __rootLayout = false;
836 __pContainerProxy = pItemProxy;
839 pNode = __pProxyList->GetNextNode(*pNode);
847 Layout::CreateProxy(LayoutItem& item)
849 return LayoutItemProxy::Create(*this, item);
853 Layout::SetRootLayout(bool rootCheck)
855 __rootLayout = rootCheck;
859 Layout::CheckItem(const LayoutItem& checkItem)
863 ProxyListNode* pNode = __pProxyList->GetFirstNode();
864 while (pNode != null)
866 LayoutItemProxy* pItemProxy = pNode->GetItemProxy();
867 SysTryReturn(NID_UI, pItemProxy != null, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Invalid proxy list node.");
869 LayoutItem* pItem = pItemProxy->GetItem();
870 SysTryReturn(NID_UI, pItem != null, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Invalid layout item.");
872 SysTryReturn(NID_UI, &checkItem != pItem, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] Control belong to layout.");
874 pNode = __pProxyList->GetNextNode(*pNode);
881 Layout::HasLayoutContainer(void)
883 return __pContainerProxy != null;
887 Layout::SetPartialUpdateFlag(bool flag)
889 __partialUpdateState = flag;
893 Layout::SetItemList(ProxyList* pItemList)
895 __pProxyList = pItemList;
899 Layout::GetProxyList(void) const
904 }}} // Tizen::Ui::_Layout