////////////////////////////////////////////////////////////////////// // This file was auto-generated by codelite's wxCrafter Plugin // Do not modify this file by hand! ////////////////////////////////////////////////////////////////////// #include "addfunctionsmodel.h" #include #include ////////////////////////////////////////// // Implementation ////////////////////////////////////////// // ------------------------------------------------- // Help method // ------------------------------------------------- wxVariant AddFunctionsModel::CreateIconTextVariant(const wxString &text, const wxBitmap& bmp) { wxIcon icn; icn.CopyFromBitmap( bmp); wxDataViewIconText ict(text, icn); wxVariant v; v << ict; return v; } // ------------------------------------------------- // The model class // ------------------------------------------------- AddFunctionsModel::AddFunctionsModel() : m_colCount(0) { } AddFunctionsModel::~AddFunctionsModel() { for(size_t i=0; i(item.m_pItem); if ( node ) { for(size_t i=0; iGetChildren().size(); ++i) { children.Add( wxDataViewItem( node->GetChildren().at(i) ) ); } } return children.GetCount(); } unsigned int AddFunctionsModel::GetColumnCount() const { return m_colCount; } wxString AddFunctionsModel::GetColumnType(unsigned int col) const { if ( !m_data.empty() && m_data.at(0)->GetData().size() > col ) { return m_data.at(0)->GetData().at(col).GetType(); } return "string"; } wxDataViewItem AddFunctionsModel::GetParent(const wxDataViewItem& item) const { if ( IsEmpty() ) { return wxDataViewItem(NULL); } AddFunctionsModel_Item* node = reinterpret_cast(item.m_pItem); if ( node ) { return wxDataViewItem(node->GetParent()); } return wxDataViewItem(NULL); } bool AddFunctionsModel::IsContainer(const wxDataViewItem& item) const { AddFunctionsModel_Item* node = reinterpret_cast(item.m_pItem); if ( node ) { return node->IsContainer(); } return false; } void AddFunctionsModel::GetValue(wxVariant& variant, const wxDataViewItem& item, unsigned int col) const { AddFunctionsModel_Item* node = reinterpret_cast(item.m_pItem); if ( node && node->GetData().size() > col ) { variant = node->GetData().at(col); } } wxDataViewItem AddFunctionsModel::DoAppendItem(const wxDataViewItem& parent, const wxVector& data, bool isContainer, wxClientData *clientData) { AddFunctionsModel_Item* parentNode = reinterpret_cast(parent.m_pItem); DoChangeItemType(parent, true); AddFunctionsModel_Item* child = new AddFunctionsModel_Item(); child->SetIsContainer(isContainer); child->SetClientObject( clientData ); child->SetData( data ); if ( parentNode ) { parentNode->AddChild( child ); } else { m_data.push_back( child ); } return wxDataViewItem(child); } wxDataViewItem AddFunctionsModel::DoInsertItem(const wxDataViewItem& insertBeforeMe, const wxVector& data, bool isContainer, wxClientData *clientData) { AddFunctionsModel_Item* child = new AddFunctionsModel_Item(); child->SetIsContainer(isContainer); child->SetClientObject( clientData ); child->SetData( data ); // find the location where to insert the new item AddFunctionsModel_Item* node = reinterpret_cast(insertBeforeMe.m_pItem); if ( !node ) return wxDataViewItem(); wxVector::iterator where = std::find(m_data.begin(), m_data.end(), node); if ( where != m_data.end() ) { // top level item m_data.insert( where, child ); } else { if ( !node->GetParent() ) return wxDataViewItem(); child->SetParent(node->GetParent()); where = std::find(node->GetParent()->GetChildren().begin(), node->GetParent()->GetChildren().end(), node); if ( where == node->GetParent()->GetChildren().end() ) { node->GetParent()->GetChildren().push_back( child ); } else { node->GetParent()->GetChildren().insert(where, child); } } return wxDataViewItem(child); } wxDataViewItem AddFunctionsModel::AppendItem(const wxDataViewItem &parent, const wxVector& data, wxClientData *clientData) { wxDataViewItem ch = DoAppendItem(parent, data, false, clientData); ItemAdded(parent, ch); return ch; } wxDataViewItemArray AddFunctionsModel::AppendItems(const wxDataViewItem &parent, const wxVector >& data) { wxDataViewItemArray items; for(size_t i=0; i(item.m_pItem); if ( node && node->GetData().size() > col ) { node->GetData().at(col) = variant; } return true; } void AddFunctionsModel::DeleteItem(const wxDataViewItem& item) { AddFunctionsModel_Item* node = reinterpret_cast(item.m_pItem); if ( node ) { AddFunctionsModel_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::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 AddFunctionsModel::DeleteItems(const wxDataViewItem& parent, const wxDataViewItemArray& items) { // sanity for(size_t i=0; i(items.Item(i).m_pItem); wxUnusedVar(node); wxASSERT(node && node->GetParent() == parent.m_pItem); DeleteItem(items.Item(i)); } } void AddFunctionsModel::Clear() { wxVector roots = m_data; wxVector::iterator iter = roots.begin(); for(; iter != roots.end(); ++iter) { DeleteItem( wxDataViewItem(*iter) ); } m_data.clear(); Cleared(); } bool AddFunctionsModel::IsEmpty() const { return m_data.empty(); } wxClientData* AddFunctionsModel::GetClientObject(const wxDataViewItem& item) const { AddFunctionsModel_Item* node = reinterpret_cast(item.GetID()); if ( node ) { return node->GetClientObject(); } return NULL; } void AddFunctionsModel::SetClientObject(const wxDataViewItem& item, wxClientData *data) { AddFunctionsModel_Item* node = reinterpret_cast(item.GetID()); if ( node ) { node->SetClientObject(data); } } void AddFunctionsModel::UpdateItem(const wxDataViewItem& item, const wxVector& data) { AddFunctionsModel_Item* node = reinterpret_cast(item.GetID()); if ( node ) { node->SetData( data ); ItemChanged( item ); } } wxDataViewItem AddFunctionsModel::InsertItem(const wxDataViewItem& insertBeforeMe, const wxVector& data, wxClientData *clientData) { wxDataViewItem ch = DoInsertItem(insertBeforeMe, data, false, clientData); if ( ch.IsOk() ) { AddFunctionsModel_Item* node = reinterpret_cast(ch.GetID()); ItemAdded(wxDataViewItem(node->GetParent()), ch); } return ch; } wxVector AddFunctionsModel::GetItemColumnsData(const wxDataViewItem& item) const { if ( !item.IsOk() ) return wxVector(); AddFunctionsModel_Item* node = reinterpret_cast(item.GetID()); if ( !node ) { return wxVector(); } return node->GetData(); } bool AddFunctionsModel::HasChildren(const wxDataViewItem& item) const { if ( !item.IsOk() ) return false; AddFunctionsModel_Item* node = reinterpret_cast(item.GetID()); if ( !node ) { return false; } return !node->GetChildren().empty(); } void AddFunctionsModel::DoChangeItemType(const wxDataViewItem& item, bool changeToContainer) { AddFunctionsModel_Item* node = reinterpret_cast(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 } }