2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.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://floralicense.org/license/
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_LayoutProxyList.cpp
19 * @brief This is the implementation file for ProxyList class.
21 * This file contains the implementation of ProxyList class.
25 #include <FBaseSysLog.h>
26 #include "FUi_LayoutRelativeLayout.h"
27 #include "FUi_LayoutProxyList.h"
28 #include "FUi_LayoutLayoutItemProxy.h"
29 #include "FUi_LayoutLayoutItemInfo.h"
31 namespace Tizen { namespace Ui { namespace _Layout
34 ProxyList::ProxyList(void)
39 ProxyList::~ProxyList(void)
44 ProxyList::GetFirstNode(void) const
46 return dynamic_cast <ProxyListNode*>(LinkedList::GetFirstNode());
50 ProxyList::GetLastNode(void) const
52 return dynamic_cast <ProxyListNode*>(LinkedList::GetLastNode());
56 ProxyList::GetNextNode(const LinkedListNode& node) const
58 return dynamic_cast <ProxyListNode*>(LinkedList::GetNextNode(node));
62 ProxyList::GetPrevNode(const LinkedListNode& node) const
64 return dynamic_cast <ProxyListNode*>(LinkedList::GetPrevNode(node));
68 ProxyList::GetNode(int index) const
70 ProxyListNode* pNode = SearchNode(index);
76 ProxyList::GetNode(const LayoutItem& item) const
78 LinkedListNode* pCurNode = GetFirstNode();
79 LinkedListNode* pNextNode = pCurNode;
83 pNextNode = GetNextNode(*pCurNode);
84 ProxyListNode* pProxyNode = dynamic_cast <ProxyListNode*>(pCurNode);
85 if (pProxyNode == null)
89 LayoutItemProxy* pItemProxy = pProxyNode->GetItemProxy();
90 if (pItemProxy == null)
95 if (pItemProxy->GetItem() == &item)
100 pCurNode = pNextNode;
106 ProxyList::GetIndex(ProxyListNode& node) const
108 LayoutItemProxy* pItemProxy = node.GetItemProxy();
109 if (pItemProxy == null)
114 return pItemProxy->GetIndex();
118 ProxyList::GetItemProxy(const LayoutItem& item) const
120 LinkedListNode* pCurNode = GetFirstNode();
121 LinkedListNode* pNextNode = pCurNode;
125 pNextNode = GetNextNode(*pCurNode);
126 ProxyListNode* pProxyNode = dynamic_cast <ProxyListNode*>(pCurNode);
127 if (pProxyNode == null)
131 LayoutItemProxy* pItemProxy = pProxyNode->GetItemProxy();
132 if (pItemProxy == null)
137 if (pItemProxy->GetItem() == &item)
142 pCurNode = pNextNode;
148 ProxyList::SearchNode(int index) const
150 ProxyListNode* pCurNode = GetFirstNode();
151 ProxyListNode* pNextNode = pCurNode;
155 pNextNode = GetNextNode(*pCurNode);
156 LayoutItemProxy* pItemProxy = pCurNode->GetItemProxy();
157 if (pItemProxy == null)
162 if (pItemProxy->GetIndex() == index)
167 pCurNode = pNextNode;
173 ProxyList::SearchNode(const LayoutItemProxy& itemProxy) const
175 ProxyListNode* pCurNode = GetFirstNode();
176 ProxyListNode* pNextNode = pCurNode;
180 pNextNode = GetNextNode(*pCurNode);
181 LayoutItemProxy* pCurItemProxy = pCurNode->GetItemProxy();
182 if (pCurItemProxy == null)
187 if (pCurItemProxy == &itemProxy)
192 pCurNode = pNextNode;
198 ProxyList::RefreshIndex(void)
200 ProxyListNode* pCurNode = GetFirstNode();
201 ProxyListNode* pNextNode = pCurNode;
203 int bakLastIndex = __lastIndex;
208 pNextNode = GetNextNode(*pCurNode);
209 LayoutItemProxy* pCurItemProxy = pCurNode->GetItemProxy();
211 pCurItemProxy->SetIndex(++__lastIndex);
213 pCurNode = pNextNode;
216 SysAssert(bakLastIndex == __lastIndex);
220 ProxyList::AddNode(LayoutItemProxy& addProxy)
222 if (SearchNode(addProxy) != null)
224 SysLog(NID_UI, "SearchNode() is failed.");
227 ProxyListNode* pAddNode = new (std::nothrow) ProxyListNode();
228 SysTryReturn(NID_UI, pAddNode != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to add to ProxyList.");
230 pAddNode->Create(addProxy);
232 if (OnAddNode(*pAddNode) != E_SUCCESS)
234 SysLog(NID_UI, "OnAddNode() is failed.");
238 if (InsertIntoLeft(*_pEndNode, *pAddNode) != E_SUCCESS)
240 SysLog(NID_UI, "InsertIntoLeft() is failed.");
245 pAddNode->GetItemProxy()->SetIndex(++__lastIndex);
251 ProxyList::RemoveNode(LinkedListNode& removeNode)
253 ProxyListNode* pProxyNode = dynamic_cast <ProxyListNode*>(&removeNode);
254 result re = E_SYSTEM;
255 re = OnRemoveNode(*pProxyNode);
258 SysLog(NID_UI, "OnRemoveNode() is failed.");
263 re = LinkedList::RemoveNode(removeNode);
266 SysLog(NID_UI, "RemoveNode() is failed.");
275 ProxyList::RemoveNode(int index)
277 ProxyListNode* pRemoveNode = SearchNode(index);
279 result re = E_SYSTEM;
280 re = RemoveNode(*pRemoveNode);
286 ProxyList::RemoveNode(LayoutItemProxy& removeItem)
288 ProxyListNode* pRemoveNode = SearchNode(removeItem);
290 return RemoveNode(*pRemoveNode);
291 //int index = GetIndex(*removeNode);
293 //return RemoveNode(index);
297 ProxyList::OnAddNode(ProxyListNode& addNode)
303 ProxyList::OnRemoveNode(ProxyListNode& removeNode)
309 ProxyList::GetNodeCount(void) const
311 return __lastIndex + 1;
315 ProxyList::RemoveAllNode(void)
317 ProxyListNode* pCurNode = GetFirstNode();
318 ProxyListNode* pNextNode = pCurNode;
319 LayoutItemProxy* pItemProxy = null;
321 while (pCurNode != null)
323 pNextNode = GetNextNode(*pCurNode);
324 pItemProxy = pCurNode->GetItemProxy();
325 SysAssert(pItemProxy != null);
326 pItemProxy->SetParentContainer(null);
329 if (RemoveNode(*pCurNode) != E_SUCCESS)
333 pCurNode = pNextNode;
340 AbsoluteProxyList::AbsoluteProxyList(void)
344 AbsoluteProxyList::~AbsoluteProxyList(void)
350 AbsoluteProxyList::OnAddNode(ProxyListNode& addNode)
356 AbsoluteProxyList::OnRemoveNode(ProxyListNode& removeNode)
364 RelativeProxyList::RelativeProxyList()
365 : __pRelativeLayout(null)
369 RelativeProxyList::~RelativeProxyList()
375 RelativeProxyList::OnAddNode(ProxyListNode& addNode)
377 RelativeItemInfo* pItemInfo = new (std::nothrow) RelativeItemInfo();
378 if (pItemInfo == null)
380 return E_OUT_OF_MEMORY;
383 addNode.SetItemInfo(pItemInfo);
389 RelativeProxyList::OnRemoveNode(ProxyListNode& removeNode)
391 RelativeItemInfo* pItemInfo = dynamic_cast <RelativeItemInfo*>(removeNode.GetItemInfo());
392 if (pItemInfo == null)
394 return E_INVALID_ARG;
396 ProxyListNode* pCurNode = GetFirstNode();
397 while (pCurNode != null)
399 __pRelativeLayout->DeleteTargetInfo(*pCurNode, removeNode);
400 pCurNode = GetNextNode(*pCurNode);
403 removeNode.SetItemInfo(null);
409 RelativeProxyList::GetReferenceCount(ProxyListNode& node) const
411 RelativeItemInfo* pItemInfo = dynamic_cast <RelativeItemInfo*>(node.GetItemInfo());
412 if (pItemInfo == null)
417 return pItemInfo->__refCount;
421 RelativeProxyList::SetRelativeLayout(RelativeLayout* pLayout)
423 __pRelativeLayout = pLayout;
429 TableProxyList::TableProxyList()
433 TableProxyList::~TableProxyList()
439 TableProxyList::OnAddNode(ProxyListNode& addNode)
441 TableItemInfo* pItemInfo = new (std::nothrow) TableItemInfo();
442 if (pItemInfo == null)
444 return E_OUT_OF_MEMORY;
446 addNode.SetItemInfo(pItemInfo);
452 TableProxyList::OnRemoveNode(ProxyListNode& removeNode)
454 TableItemInfo* pItemInfo = dynamic_cast <TableItemInfo*>(removeNode.GetItemInfo());
455 if (pItemInfo == null)
457 return E_INVALID_STATE;
461 removeNode.SetItemInfo(null);
469 LinearProxyList::LinearProxyList(void)
473 LinearProxyList::~LinearProxyList(void)
479 LinearProxyList::OnAddNode(ProxyListNode& addNode)
481 LinearItemInfo* pItemInfo = new (std::nothrow) LinearItemInfo();
482 if (pItemInfo == null)
484 return E_OUT_OF_MEMORY;
486 addNode.SetItemInfo(pItemInfo);
492 LinearProxyList::OnRemoveNode(ProxyListNode& removeNode)
494 LinearItemInfo* pItemInfo = dynamic_cast <LinearItemInfo*>(removeNode.GetItemInfo());
495 if (pItemInfo == null)
497 return E_INVALID_STATE;
504 }}} // Tizen::Ui::_Layout