void wxTreeListModel::DeleteItem(Node* item) { wxCHECK_RET( item, "Invalid item" ); wxCHECK_RET( item != m_root, "Can't delete the root item" ); Node* const parent = item->GetParent(); ItemDeleted(ToDVI(parent), ToDVI(item)); Node* previous = parent->GetChild(); if ( previous == item ) { parent->DeleteChild(); } else // Not the first child of its parent. { // Find the sibling just before it. for ( ;; ) { Node* const next = previous->GetNext(); if ( next == item ) break; wxCHECK_RET( next, "Item not a child of its parent?" ); previous = next; } previous->DeleteNext(); } }
void MemCheckDVCErrorsModel::DeleteItem(const wxDataViewItem& item) { MemCheckDVCErrorsModel_Item* node = reinterpret_cast<MemCheckDVCErrorsModel_Item*>(item.m_pItem); if ( node ) { MemCheckDVCErrorsModel_Item* parent = node->GetParent(); wxDataViewItem parentItem(parent); ItemDeleted(parentItem, item); // this will also remove it from its model parent children list if ( parent == NULL ) { // root item, remove it from the roots array wxVector<MemCheckDVCErrorsModel_Item*>::iterator where = std::find(m_data.begin(), m_data.end(), node); if ( where != m_data.end() ) { m_data.erase(where); } } // If there are no more children, change the item back to 'normal' if ( parent && parent->GetChildren().empty() ) DoChangeItemType(parentItem, false); wxDELETE(node); } if ( IsEmpty() ) Cleared(); }
void MyMusicTreeModel::Delete( const wxDataViewItem &item ) { MyMusicTreeModelNode *node = (MyMusicTreeModelNode*) item.GetID(); if (!node) // happens if item.IsOk()==false return; wxDataViewItem parent( node->GetParent() ); if (!parent.IsOk()) { wxASSERT(node == m_root); // don't make the control completely empty: wxLogError( "Cannot remove the root item!" ); return; } // is the node one of those we keep stored in special pointers? if (node == m_pop) m_pop = NULL; else if (node == m_classical) m_classical = NULL; else if (node == m_ninth) m_ninth = NULL; // first remove the node from the parent's array of children; // NOTE: MyMusicTreeModelNodePtrArray is only an array of _pointers_ // thus removing the node from it doesn't result in freeing it node->GetParent()->GetChildren().Remove( node ); // free the node delete node; // notify control ItemDeleted( parent, item ); }
int ObjectSelection::DeleteCurrentSelectionInTable() { if( selections.size() > 0) { emit ItemDeleted(); return selections.size(); } else { return 0; } }
void TreeListModel::DoChangeItemType(const wxDataViewItem& item, bool changeToContainer) { TreeListModel_Item* node = reinterpret_cast<TreeListModel_Item*>(item.GetID()); if ( !node ) return; if ( ( changeToContainer && !node->IsContainer()) || // change an item from non-container to container type ( !changeToContainer && node->IsContainer()) ) { // change an item from container to non-container type #if defined(__WXGTK__) || defined(__WXMAC__) // change the item to container type: // 1st we need to delete it ItemDeleted(wxDataViewItem(node->GetParent()), item); // update the node type node->SetIsContainer(changeToContainer); ItemAdded(wxDataViewItem(node->GetParent()), item); #else node->SetIsContainer(changeToContainer); #endif } }