}
void
+_ContainerImpl::DeleteAllChildren(_ContainerImpl* pChild, bool detachSystemChild)
+{
+ ArrayList* pList = static_cast <ArrayList*>(pChild->GetChildrenPublic());
+ int count = pList->GetCount();
+ for (int index = 0; index < count; index++)
+ {
+ Container* pContainer = dynamic_cast <Container*>(pList->GetAt(index));
+ result r = GetLastResult();
+ if (IsFailed(r))
+ {
+ SysAssert(r == E_OUT_OF_RANGE);
+ SysLogException(NID_UI,
+ E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The specified index is out of range (index = %d, count = %d.)",
+ index, GetChildCount());
+ return;
+ }
+
+ if (pContainer)
+ {
+ _ContainerImpl* pContainerImpl = _ContainerImpl::GetInstance(*pContainer);
+ DeleteAllChildren(pContainerImpl, detachSystemChild);
+ pContainer->Destroy();
+ }
+ else
+ {
+ Control* pControl = static_cast <Control*>(pList->GetAt(index));
+ result r = GetLastResult();
+ if (IsFailed(r))
+ {
+ SysAssert(r == E_OUT_OF_RANGE);
+ SysLogException(NID_UI,
+ E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The specified index is out of range (index = %d, count = %d.)",
+ index, GetChildCount());
+ return;
+ }
+ _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*pControl);
+ if (pControlImpl)
+ {
+ if (detachSystemChild || pControlImpl->GetCore().GetArea() != _CONTROL_AREA_SYSTEM)
+ {
+ pControl->Destroy();
+ }
+ }
+ }
+ }
+}
+
+void
_ContainerImpl::RemoveAllChildren(bool detachSystemChild)
{
ClearLastResult();
GetCore().DetachAllChildren(detachSystemChild);
SysAssert(GetLastResult() == E_SUCCESS);
+ DeleteAllChildren(this, detachSystemChild);
if (detachSystemChild)
{
- __controlPublics.RemoveAll(true);
+ __controlPublics.RemoveAll(false);
}
else
{
continue;
}
- r = __controlPublics.Remove(pControl->GetPublic(), true);
+ r = __controlPublics.Remove(pControl->GetPublic(), false);
SysAssert(r == E_SUCCESS);
}
}
+
}
result
result AddChild(_ControlImpl* pChild, bool transferOwnership = true);
result RemoveChild(_ControlImpl* pChild, bool deallocate = true);
result RemoveChild(int index);
+ void DeleteAllChildren(_ContainerImpl* pChild, bool detachSystemChild = true);
void RemoveAllChildren(bool detachSystemChild = true);
result MoveChildToTop(const _ControlImpl& child);
result MoveChildBefore(const _ControlImpl& targetChild, const _ControlImpl& child);