Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
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;
}
Exemplo n.º 5
0
void nuiTreeBase::OnChildRemoved(const nuiEvent& rEvent)
{
  const nuiTreeEvent<nuiTreeBase>* pTreeEvent = dynamic_cast<const nuiTreeEvent<nuiTreeBase>*>(&rEvent);
  ChildDeleted(pTreeEvent->mpParent, pTreeEvent->mpChild);
}