bool nuiTreeBase::Clear(bool erase) { for (uint32 i = 0; i < mpChildren.size(); i++) { nuiTreeBase* pChild = mpChildren[i]; ChildDeleted(this, pChild); } if (erase) { std::vector<nuiTreePtr>::iterator it = mpChildren.begin(); for (; it != mpChildren.end();) { nuiTreeBase* pChild = (*it); it = mpChildren.erase(it); pChild->Release(); } } else { for (uint32 i = 0; i < mpChildren.size(); i++) { mpChildren[i]->SetParent(NULL); mTreeNodeEventSink.DisconnectSource(mpChildren[i]->Changed); mTreeNodeEventSink.DisconnectSource(mpChildren[i]->ChildAdded); mTreeNodeEventSink.DisconnectSource(mpChildren[i]->ChildDeleted); mTreeNodeEventSink.DisconnectSource(mpChildren[i]->Deleted); } } mpChildren.clear(); Changed(); return true; }
bool nuiTreeBase::DelChild(uint32 Index) { NGL_ASSERT(Index < mpChildren.size()); if (mpChildren[Index]) { ChildDeleted(this, mpChildren[Index]); mTreeNodeEventSink.DisconnectSource(mpChildren[Index]->Changed); mTreeNodeEventSink.DisconnectSource(mpChildren[Index]->ChildAdded); mTreeNodeEventSink.DisconnectSource(mpChildren[Index]->ChildDeleted); mTreeNodeEventSink.DisconnectSource(mpChildren[Index]->Deleted); mpChildren[Index]->SetParent(NULL); mpChildren[Index]->Release(); mpChildren.erase(mpChildren.begin()+Index); Changed(); } return true; }
bool nuiSimpleContainer::DelChild(nuiWidgetPtr pChild) { CheckValid(); NGL_ASSERT(pChild->GetParent() == this) if (GetDebug()) { NGL_OUT(_T("[%s] Del Child 0x%x <--- 0x%x (%s)\n"), GetObjectClass().GetChars(), this, pChild); } nuiWidgetList::iterator it = mpChildren.begin(); nuiWidgetList::iterator end = mpChildren.end(); for ( ; it != end; ++it) { if (*it == pChild) { mpChildren.erase(it); if (!pChild->IsTrashed()) { nuiTopLevel* pRoot = GetTopLevel(); Trashed(); Invalidate(); if (pRoot) pRoot->AdviseObjectDeath(pChild); pChild->SetParent(NULL); } ChildDeleted(this, pChild); Invalidate(); InvalidateLayout(); DebugRefreshInfo(); pChild->Release(); return true; } } DebugRefreshInfo(); return false; }
bool nuiTreeBase::DelChild(nuiTreePtr pChild) { for (uint32 i = 0; i < mpChildren.size(); i++) { if (mpChildren[i] == pChild && pChild) { ChildDeleted(this, pChild); mTreeNodeEventSink.DisconnectSource(pChild->Changed); mTreeNodeEventSink.DisconnectSource(pChild->ChildAdded); mTreeNodeEventSink.DisconnectSource(pChild->ChildDeleted); mTreeNodeEventSink.DisconnectSource(pChild->Deleted); pChild->SetParent(NULL); mpChildren[i]->Release(); mpChildren.erase(mpChildren.begin()+i); Changed(); return true; } } return false; }
void nuiTreeBase::OnChildRemoved(const nuiEvent& rEvent) { const nuiTreeEvent<nuiTreeBase>* pTreeEvent = dynamic_cast<const nuiTreeEvent<nuiTreeBase>*>(&rEvent); ChildDeleted(pTreeEvent->mpParent, pTreeEvent->mpChild); }