bool nuiTreeBase::SetChild(uint32 Index, nuiTreePtr pChild) { pChild->Acquire(); if (mpChildren.size() < Index+1) mpChildren.resize(Index+1); if (mpChildren[Index]) mpChildren[Index]->Release(); else if (mpChildren[Index]) { mTreeNodeEventSink.DisconnectSource(mpChildren[Index]->Changed); mpChildren[Index]->SetParent(NULL); } mpChildren[Index] = pChild; mTreeNodeEventSink.Connect(pChild->Changed, &nuiTreeBase::OnChildChanged, pChild); mTreeNodeEventSink.Connect(pChild->ChildAdded, &nuiTreeBase::OnChildAdded, pChild); mTreeNodeEventSink.Connect(pChild->ChildDeleted, &nuiTreeBase::OnChildRemoved, pChild); mTreeNodeEventSink.Connect(pChild->Deleted, &nuiTreeBase::OnChildDeleted, pChild); pChild->SetParent(this); AutoSort(); Changed(); ChildAdded(this, pChild); return true; }
bool nuiTreeBase::InsertChild(uint32 Index, nuiTreePtr pChild) { if (mpAutoSort) return AddChild(pChild); if (mpChildren.size() < Index+1) mpChildren.resize(Index+1); std::vector<nuiTreePtr>::iterator it = mpChildren.begin(); it+=Index; if (it == mpChildren.end()) { mpChildren.resize(mpChildren.size() - 1); return false; } mpChildren.insert(it, pChild); pChild->Acquire(); mTreeNodeEventSink.Connect(pChild->Changed, &nuiTreeBase::OnChildChanged, pChild); mTreeNodeEventSink.Connect(pChild->ChildAdded, &nuiTreeBase::OnChildAdded, pChild); mTreeNodeEventSink.Connect(pChild->ChildDeleted, &nuiTreeBase::OnChildRemoved, pChild); mTreeNodeEventSink.Connect(pChild->Deleted, &nuiTreeBase::OnChildDeleted, pChild); pChild->SetParent(this); AutoSort(); Changed(); ChildAdded(this, pChild); return true; }
bool nuiTreeBase::AddChild(nuiTreePtr pChild) { pChild->Acquire(); if (!mpAutoSort) { mpChildren.push_back(pChild); } else { // Sorted insert: std::vector<nuiTreePtr>::iterator it = std::upper_bound(mpChildren.begin(), mpChildren.end(), pChild, PrivateSortFunction(mpAutoSort)); mpChildren.insert(it, pChild); } mTreeNodeEventSink.Connect(pChild->Changed, &nuiTreeBase::OnChildChanged, pChild); mTreeNodeEventSink.Connect(pChild->ChildAdded, &nuiTreeBase::OnChildAdded, pChild); mTreeNodeEventSink.Connect(pChild->ChildDeleted, &nuiTreeBase::OnChildRemoved, pChild); mTreeNodeEventSink.Connect(pChild->Deleted, &nuiTreeBase::OnChildDeleted, pChild); pChild->SetParent(this); Changed(); ChildAdded(this, pChild); return false; }
void QtPropertyData::ChildAdd(const QString &key, QtPropertyData *data) { if(NULL != data && !key.isEmpty()) { int sz = children.size(); children.insert(key, data); childrenOrder.insert(key, sz); data->parent = this; emit ChildAdded(key, data); } }
void Ctrl::AddChild(Ctrl *q, Ctrl *p) { GuiLock __; ASSERT(q); LLOG("Add " << UPP::Name(q) << " to: " << Name()); if(p == q) return; bool updaterect = true; if(q->parent) { ASSERT(!q->inframe); if(q->parent == this) { RemoveChild0(q); updaterect = false; } else q->parent->RemoveChild(q); } q->parent = this; if(p) { ASSERT(p->parent == this); q->prev = p; q->next = p->next; if(p == lastchild) lastchild = q; else p->next->prev = q; p->next = q; } else if(firstchild) { q->prev = NULL; q->next = firstchild; firstchild->prev = q; firstchild = q; } else { ASSERT(lastchild == NULL); firstchild = lastchild = q; q->prev = q->next = NULL; } q->CancelModeDeep(); if(updaterect) q->UpdateRect(); ChildAdded(q); q->ParentChange(); if(updaterect && GetTopCtrl()->IsOpen()) q->StateH(OPEN); if(dynamic_cast<DHCtrl *>(q)) SyncDHCtrl(); }
bool nuiSimpleContainer::AddChild(nuiWidgetPtr pChild) { CheckValid(); if (GetDebug()) { NGL_OUT(_T("[%s] Add Child 0x%x <--- 0x%x\n"), GetObjectClass().GetChars(), this, pChild); } pChild->Acquire(); nuiContainer* pParent = pChild->GetParent(); NGL_ASSERT(pParent != this); uint32 capacity = mpChildren.capacity(); uint32 size = mpChildren.size(); if (size == capacity) { if (size < 128) { mpChildren.reserve(size * 2); } else { mpChildren.reserve(size + 128); } } mpChildren.push_back(pChild); if (pParent) pParent->DelChild(pChild); // Remove from previous parent... pChild->SetParent(this); ChildAdded(this, pChild); Invalidate(); InvalidateLayout(); DebugRefreshInfo(); return true; }
void nuiTreeBase::OnChildAdded(const nuiEvent& rEvent) { const nuiTreeEvent<nuiTreeBase>* pTreeEvent = dynamic_cast<const nuiTreeEvent<nuiTreeBase>*>(&rEvent); ChildAdded(pTreeEvent->mpParent, pTreeEvent->mpChild); }