X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dc813e6c7ef8a9a26c035b004b512e1aa1b0bf3f..47e105413fda3097f4ff5a3d9a224b8123aa5501:/src/common/datavcmn.cpp diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp index b38d9489f6..17f3e911d3 100644 --- a/src/common/datavcmn.cpp +++ b/src/common/datavcmn.cpp @@ -18,20 +18,18 @@ #if wxUSE_DATAVIEWCTRL #include "wx/dataview.h" -#include "wx/spinctrl.h" -#include "wx/choice.h" - -#include "wx/weakref.h" -#include "wx/vector.h" #ifndef WX_PRECOMP #include "wx/dc.h" #include "wx/settings.h" #include "wx/log.h" - #include "wx/icon.h" #include "wx/crt.h" #endif +#include "wx/spinctrl.h" +#include "wx/choice.h" +#include "wx/imaglist.h" + const char wxDataViewCtrlNameStr[] = "dataviewCtrl"; @@ -899,11 +897,11 @@ const wxDataViewModel* wxDataViewCtrlBase::GetModel() const void wxDataViewCtrlBase::ExpandAncestors( const wxDataViewItem & item ) { if (!m_model) return; - + if (!item.IsOk()) return; wxVector parentChain; - + // at first we get all the parents of the selected item wxDataViewItem parent = m_model->GetParent(item); while (parent.IsOk()) @@ -911,7 +909,7 @@ void wxDataViewCtrlBase::ExpandAncestors( const wxDataViewItem & item ) parentChain.push_back(parent); parent = m_model->GetParent(parent); } - + // then we expand the parents, starting at the root while (!parentChain.empty()) { @@ -946,7 +944,6 @@ wxDataViewColumn * wxDataViewCtrlBase::AppendToggleColumn( const wxString &label, unsigned int model_column, wxDataViewCellMode mode, int width, wxAlignment align, int flags ) { - wxDataViewColumn *ret = new wxDataViewColumn( label, new wxDataViewToggleRenderer( wxT("bool"), mode ), model_column, width, align, flags ); @@ -1213,24 +1210,27 @@ wxDataViewCtrlBase::InsertColumn( unsigned int WXUNUSED(pos), wxDataViewColumn * IMPLEMENT_DYNAMIC_CLASS(wxDataViewEvent,wxNotifyEvent) -wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEvent ) +wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEvent ); -wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEvent ) -wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING, wxDataViewEvent ) -wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSED, wxDataViewEvent ) -wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING, wxDataViewEvent ) -wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED, wxDataViewEvent ) -wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED, wxDataViewEvent ) -wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE, wxDataViewEvent ) -wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED, wxDataViewEvent ) +wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING, wxDataViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSED, wxDataViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING, wxDataViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED, wxDataViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED, wxDataViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE, wxDataViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED, wxDataViewEvent ); -wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, wxDataViewEvent ) +wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, wxDataViewEvent ); -wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK, wxDataViewEvent ) -wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK, wxDataViewEvent ) -wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED, wxDataViewEvent ) -wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_COLUMN_REORDERED, wxDataViewEvent ) +wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK, wxDataViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK, wxDataViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED, wxDataViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_COLUMN_REORDERED, wxDataViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_BEGIN_DRAG, wxDataViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_DROP_POSSIBLE, wxDataViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_ITEM_DROP, wxDataViewEvent ); // ------------------------------------- // wxDataViewSpinRenderer @@ -1396,13 +1396,13 @@ wxString wxDataViewListStore::GetColumnType( unsigned int pos ) const { return m_cols[pos]; } - + void wxDataViewListStore::AppendItem( const wxVector &values, wxClientData *data ) { wxDataViewListStoreLine *line = new wxDataViewListStoreLine( data ); line->m_values = values; m_data.push_back( line ); - + RowAppended(); } @@ -1411,24 +1411,25 @@ void wxDataViewListStore::PrependItem( const wxVector &values, wxClie wxDataViewListStoreLine *line = new wxDataViewListStoreLine( data ); line->m_values = values; m_data.insert( m_data.begin(), line ); - + RowPrepended(); } -void wxDataViewListStore::InsertItem( unsigned int row, const wxVector &values, wxClientData *data ) +void wxDataViewListStore::InsertItem( unsigned int row, const wxVector &values, + wxClientData *data ) { wxDataViewListStoreLine *line = new wxDataViewListStoreLine( data ); line->m_values = values; m_data.insert( m_data.begin()+row, line ); - + RowInserted( row ); } -void wxDataViewListStore::DeleteItem( unsigned row ) +void wxDataViewListStore::DeleteItem( unsigned int row ) { wxVector::iterator it = m_data.begin() + row; m_data.erase( it ); - + RowDeleted( row ); } @@ -1440,7 +1441,9 @@ void wxDataViewListStore::DeleteAllItems() wxDataViewListStoreLine* line = *it; delete line; } - + + m_data.clear(); + Reset( 0 ); } @@ -1454,7 +1457,7 @@ bool wxDataViewListStore::SetValueByRow( const wxVariant &value, unsigned int ro { wxDataViewListStoreLine *line = m_data[row]; line->m_values[col] = value; - + return true; } @@ -1495,50 +1498,93 @@ bool wxDataViewListCtrl::Create( wxWindow *parent, wxWindowID id, return wxDataViewCtrl::Create( parent, id, pos, size, style, validator ); } -void wxDataViewListCtrl::AppendCol( wxDataViewColumn *column, const wxString &varianttype ) +bool wxDataViewListCtrl::AppendColumn( wxDataViewColumn *column, const wxString &varianttype ) { GetStore()->AppendColumn( varianttype ); - AppendColumn( column ); + return wxDataViewCtrl::AppendColumn( column ); } -void wxDataViewListCtrl::PrependCol( wxDataViewColumn *column, const wxString &varianttype ) +bool wxDataViewListCtrl::PrependColumn( wxDataViewColumn *column, const wxString &varianttype ) { GetStore()->PrependColumn( varianttype ); - PrependColumn( column ); + return wxDataViewCtrl::PrependColumn( column ); } -void wxDataViewListCtrl::InsertCol( unsigned int pos, wxDataViewColumn *column, const wxString &varianttype ) +bool wxDataViewListCtrl::InsertColumn( unsigned int pos, wxDataViewColumn *column, const wxString &varianttype ) { GetStore()->InsertColumn( pos, varianttype ); - InsertColumn( pos, column ); + return wxDataViewCtrl::InsertColumn( pos, column ); } - -wxDataViewColumn *wxDataViewListCtrl::AppendTextCol( const wxString &label, + +bool wxDataViewListCtrl::PrependColumn( wxDataViewColumn *col ) +{ + return PrependColumn( col, "string" ); +} + +bool wxDataViewListCtrl::InsertColumn( unsigned int pos, wxDataViewColumn *col ) +{ + return InsertColumn( pos, col, "string" ); +} + +bool wxDataViewListCtrl::AppendColumn( wxDataViewColumn *col ) +{ + return AppendColumn( col, "string" ); +} + +wxDataViewColumn *wxDataViewListCtrl::AppendTextColumn( const wxString &label, wxDataViewCellMode mode, int width, wxAlignment align, int flags ) { GetStore()->AppendColumn( wxT("string") ); - return AppendTextColumn( label, GetStore()->GetColumnCount()-1, mode, width, align, flags ); + + wxDataViewColumn *ret = new wxDataViewColumn( label, + new wxDataViewTextRenderer( wxT("string"), mode ), + GetStore()->GetColumnCount()-1, width, align, flags ); + + wxDataViewCtrl::AppendColumn( ret ); + + return ret; } -wxDataViewColumn *wxDataViewListCtrl::AppendToggleCol( const wxString &label, +wxDataViewColumn *wxDataViewListCtrl::AppendToggleColumn( const wxString &label, wxDataViewCellMode mode, int width, wxAlignment align, int flags ) { GetStore()->AppendColumn( wxT("bool") ); - return AppendToggleColumn( label, GetStore()->GetColumnCount()-1, mode, width, align, flags ); + + wxDataViewColumn *ret = new wxDataViewColumn( label, + new wxDataViewToggleRenderer( wxT("bool"), mode ), + GetStore()->GetColumnCount()-1, width, align, flags ); + + wxDataViewCtrl::AppendColumn( ret ); + + return ret; } -wxDataViewColumn *wxDataViewListCtrl::AppendProgressCol( const wxString &label, +wxDataViewColumn *wxDataViewListCtrl::AppendProgressColumn( const wxString &label, wxDataViewCellMode mode, int width, wxAlignment align, int flags ) { GetStore()->AppendColumn( wxT("long") ); - return AppendProgressColumn( label, GetStore()->GetColumnCount()-1, mode, width, align, flags ); + + wxDataViewColumn *ret = new wxDataViewColumn( label, + new wxDataViewProgressRenderer( wxEmptyString, wxT("long"), mode ), + GetStore()->GetColumnCount()-1, width, align, flags ); + + wxDataViewCtrl::AppendColumn( ret ); + + return ret; } -wxDataViewColumn *wxDataViewListCtrl::AppendIconTextCol( const wxString &label, +wxDataViewColumn *wxDataViewListCtrl::AppendIconTextColumn( const wxString &label, wxDataViewCellMode mode, int width, wxAlignment align, int flags ) { GetStore()->AppendColumn( wxT("wxDataViewIconText") ); - return AppendIconTextColumn( label, GetStore()->GetColumnCount()-1, mode, width, align, flags ); + + wxDataViewColumn *ret = new wxDataViewColumn( label, + new wxDataViewIconTextRenderer( wxT("wxDataViewIconText"), mode ), + GetStore()->GetColumnCount()-1, width, align, flags ); + + wxDataViewCtrl::AppendColumn( ret ); + + return ret; } void wxDataViewListCtrl::OnSize( wxSizeEvent &event ) @@ -1605,9 +1651,6 @@ wxDataViewItem wxDataViewTreeStore::AppendItem( const wxDataViewItem& parent, new wxDataViewTreeStoreNode( parent_node, text, icon, data ); parent_node->GetChildren().Append( node ); - // notify control - ItemAdded( parent, node->GetItem() ); - return node->GetItem(); } @@ -1621,20 +1664,28 @@ wxDataViewItem wxDataViewTreeStore::PrependItem( const wxDataViewItem& parent, new wxDataViewTreeStoreNode( parent_node, text, icon, data ); parent_node->GetChildren().Insert( node ); - // notify control - ItemAdded( parent, node->GetItem() ); - return node->GetItem(); } wxDataViewItem -wxDataViewTreeStore::InsertItem(const wxDataViewItem& WXUNUSED(parent), - const wxDataViewItem& WXUNUSED(previous), - const wxString& WXUNUSED(text), - const wxIcon& WXUNUSED(icon), - wxClientData * WXUNUSED(data)) +wxDataViewTreeStore::InsertItem(const wxDataViewItem& parent, + const wxDataViewItem& previous, + const wxString& text, + const wxIcon& icon, + wxClientData *data) { - return wxDataViewItem(0); + wxDataViewTreeStoreContainerNode *parent_node = FindContainerNode( parent ); + if (!parent_node) return wxDataViewItem(0); + + wxDataViewTreeStoreNode *previous_node = FindNode( previous ); + int pos = parent_node->GetChildren().IndexOf( previous_node ); + if (pos == wxNOT_FOUND) return wxDataViewItem(0); + + wxDataViewTreeStoreNode *node = + new wxDataViewTreeStoreNode( parent_node, text, icon, data ); + parent_node->GetChildren().Insert( (size_t) pos, node ); + + return node->GetItem(); } wxDataViewItem wxDataViewTreeStore::PrependContainer( const wxDataViewItem& parent, @@ -1648,9 +1699,6 @@ wxDataViewItem wxDataViewTreeStore::PrependContainer( const wxDataViewItem& pare new wxDataViewTreeStoreContainerNode( parent_node, text, icon, expanded, data ); parent_node->GetChildren().Insert( node ); - // notify control - ItemAdded( parent, node->GetItem() ); - return node->GetItem(); } @@ -1668,21 +1716,29 @@ wxDataViewTreeStore::AppendContainer(const wxDataViewItem& parent, new wxDataViewTreeStoreContainerNode( parent_node, text, icon, expanded, data ); parent_node->GetChildren().Append( node ); - // notify control - ItemAdded( parent, node->GetItem() ); - return node->GetItem(); } wxDataViewItem -wxDataViewTreeStore::InsertContainer(const wxDataViewItem& WXUNUSED(parent), - const wxDataViewItem& WXUNUSED(previous), - const wxString& WXUNUSED(text), - const wxIcon& WXUNUSED(icon), - const wxIcon& WXUNUSED(expanded), - wxClientData * WXUNUSED(data)) +wxDataViewTreeStore::InsertContainer(const wxDataViewItem& parent, + const wxDataViewItem& previous, + const wxString& text, + const wxIcon& icon, + const wxIcon& expanded, + wxClientData * data) { - return wxDataViewItem(0); + wxDataViewTreeStoreContainerNode *parent_node = FindContainerNode( parent ); + if (!parent_node) return wxDataViewItem(0); + + wxDataViewTreeStoreNode *previous_node = FindNode( previous ); + int pos = parent_node->GetChildren().IndexOf( previous_node ); + if (pos == wxNOT_FOUND) return wxDataViewItem(0); + + wxDataViewTreeStoreContainerNode *node = + new wxDataViewTreeStoreContainerNode( parent_node, text, icon, expanded, data ); + parent_node->GetChildren().Insert( (size_t) pos, node ); + + return node->GetItem(); } wxDataViewItem wxDataViewTreeStore::GetNthChild( const wxDataViewItem& parent, unsigned int pos ) const @@ -1715,9 +1771,6 @@ void wxDataViewTreeStore::SetItemText( const wxDataViewItem& item, const wxStrin if (!node) return; node->SetText( text ); - - // notify control - ValueChanged( item, 0 ); } wxString wxDataViewTreeStore::GetItemText( const wxDataViewItem& item ) const @@ -1734,9 +1787,6 @@ void wxDataViewTreeStore::SetItemIcon( const wxDataViewItem& item, const wxIcon if (!node) return; node->SetIcon( icon ); - - // notify control - ValueChanged( item, 0 ); } const wxIcon &wxDataViewTreeStore::GetItemIcon( const wxDataViewItem& item ) const @@ -1753,9 +1803,6 @@ void wxDataViewTreeStore::SetItemExpandedIcon( const wxDataViewItem& item, const if (!node) return; node->SetExpandedIcon( icon ); - - // notify control - ValueChanged( item, 0 ); } const wxIcon &wxDataViewTreeStore::GetItemExpandedIcon( const wxDataViewItem& item ) const @@ -1772,9 +1819,6 @@ void wxDataViewTreeStore::SetItemData( const wxDataViewItem& item, wxClientData if (!node) return; node->SetData( data ); - - // notify control? only sensible when sorting on client data - // ValueChanged( item, 0 ); } wxClientData *wxDataViewTreeStore::GetItemData( const wxDataViewItem& item ) const @@ -1798,9 +1842,6 @@ void wxDataViewTreeStore::DeleteItem( const wxDataViewItem& item ) if (!node) return; parent_node->GetChildren().DeleteObject( node ); - - // notify control - ItemDeleted( parent_item, item ); } void wxDataViewTreeStore::DeleteChildren( const wxDataViewItem& item ) @@ -1808,18 +1849,7 @@ void wxDataViewTreeStore::DeleteChildren( const wxDataViewItem& item ) wxDataViewTreeStoreContainerNode *node = FindContainerNode( item ); if (!node) return; - wxDataViewItemArray array; - wxDataViewTreeStoreNodeList::iterator iter; - for (iter = node->GetChildren().begin(); iter != node->GetChildren().end(); iter++) - { - wxDataViewTreeStoreNode* child = *iter; - array.Add( child->GetItem() ); - } - node->GetChildren().clear(); - - // notify control - ItemsDeleted( item, array ); } void wxDataViewTreeStore::DeleteAllItems() @@ -2014,7 +2044,11 @@ wxDataViewItem wxDataViewTreeCtrl::AppendItem( const wxDataViewItem& parent, if (m_imageList && (iconIndex != -1)) icon = m_imageList->GetIcon( iconIndex ); - return GetStore()->AppendItem( parent, text, icon, data ); + wxDataViewItem res = GetStore()->AppendItem( parent, text, icon, data ); + + GetStore()->ItemAdded( parent, res ); + + return res; } wxDataViewItem wxDataViewTreeCtrl::PrependItem( const wxDataViewItem& parent, @@ -2024,7 +2058,11 @@ wxDataViewItem wxDataViewTreeCtrl::PrependItem( const wxDataViewItem& parent, if (m_imageList && (iconIndex != -1)) icon = m_imageList->GetIcon( iconIndex ); - return GetStore()->PrependItem( parent, text, icon, data ); + wxDataViewItem res = GetStore()->PrependItem( parent, text, icon, data ); + + GetStore()->ItemAdded( parent, res ); + + return res; } wxDataViewItem wxDataViewTreeCtrl::InsertItem( const wxDataViewItem& parent, const wxDataViewItem& previous, @@ -2034,7 +2072,11 @@ wxDataViewItem wxDataViewTreeCtrl::InsertItem( const wxDataViewItem& parent, con if (m_imageList && (iconIndex != -1)) icon = m_imageList->GetIcon( iconIndex ); - return GetStore()->InsertItem( parent, previous, text, icon, data ); + wxDataViewItem res = GetStore()->InsertItem( parent, previous, text, icon, data ); + + GetStore()->ItemAdded( parent, res ); + + return res; } wxDataViewItem wxDataViewTreeCtrl::PrependContainer( const wxDataViewItem& parent, @@ -2048,7 +2090,11 @@ wxDataViewItem wxDataViewTreeCtrl::PrependContainer( const wxDataViewItem& paren if (m_imageList && (expandedIndex != -1)) expanded = m_imageList->GetIcon( expandedIndex ); - return GetStore()->PrependContainer( parent, text, icon, expanded, data ); + wxDataViewItem res = GetStore()->PrependContainer( parent, text, icon, expanded, data ); + + GetStore()->ItemAdded( parent, res ); + + return res; } wxDataViewItem wxDataViewTreeCtrl::AppendContainer( const wxDataViewItem& parent, @@ -2062,7 +2108,11 @@ wxDataViewItem wxDataViewTreeCtrl::AppendContainer( const wxDataViewItem& parent if (m_imageList && (expandedIndex != -1)) expanded = m_imageList->GetIcon( expandedIndex ); - return GetStore()->AppendContainer( parent, text, icon, expanded, data ); + wxDataViewItem res = GetStore()->AppendContainer( parent, text, icon, expanded, data ); + + GetStore()->ItemAdded( parent, res ); + + return res; } wxDataViewItem wxDataViewTreeCtrl::InsertContainer( const wxDataViewItem& parent, const wxDataViewItem& previous, @@ -2076,7 +2126,71 @@ wxDataViewItem wxDataViewTreeCtrl::InsertContainer( const wxDataViewItem& parent if (m_imageList && (expandedIndex != -1)) expanded = m_imageList->GetIcon( expandedIndex ); - return GetStore()->InsertContainer( parent, previous, text, icon, expanded, data ); + wxDataViewItem res = GetStore()->InsertContainer( parent, previous, text, icon, expanded, data ); + + GetStore()->ItemAdded( parent, res ); + + return res; +} + +void wxDataViewTreeCtrl::SetItemText( const wxDataViewItem& item, const wxString &text ) +{ + GetStore()->SetItemText(item,text); + + // notify control + GetStore()->ValueChanged( item, 0 ); +} + +void wxDataViewTreeCtrl::SetItemIcon( const wxDataViewItem& item, const wxIcon &icon ) +{ + GetStore()->SetItemIcon(item,icon); + + // notify control + GetStore()->ValueChanged( item, 0 ); +} + +void wxDataViewTreeCtrl::SetItemExpandedIcon( const wxDataViewItem& item, const wxIcon &icon ) +{ + GetStore()->SetItemExpandedIcon(item,icon); + + // notify control + GetStore()->ValueChanged( item, 0 ); +} + +void wxDataViewTreeCtrl::DeleteItem( const wxDataViewItem& item ) +{ + wxDataViewItem parent_item = GetStore()->GetParent( item ); + + GetStore()->DeleteItem(item); + + // notify control + GetStore()->ItemDeleted( parent_item, item ); +} + +void wxDataViewTreeCtrl::DeleteChildren( const wxDataViewItem& item ) +{ + wxDataViewTreeStoreContainerNode *node = GetStore()->FindContainerNode( item ); + if (!node) return; + + wxDataViewItemArray array; + wxDataViewTreeStoreNodeList::iterator iter; + for (iter = node->GetChildren().begin(); iter != node->GetChildren().end(); iter++) + { + wxDataViewTreeStoreNode* child = *iter; + array.Add( child->GetItem() ); + } + + GetStore()->DeleteChildren( item ); + + // notify control + GetStore()->ItemsDeleted( item, array ); +} + +void wxDataViewTreeCtrl::DeleteAllItems() +{ + GetStore()->DeleteAllItems(); + + GetStore()->Cleared(); } void wxDataViewTreeCtrl::OnExpanded( wxDataViewEvent &event ) @@ -2087,6 +2201,7 @@ void wxDataViewTreeCtrl::OnExpanded( wxDataViewEvent &event ) if (!container) return; container->SetExpanded( true ); + GetStore()->ItemChanged( event.GetItem() ); } @@ -2098,6 +2213,7 @@ void wxDataViewTreeCtrl::OnCollapsed( wxDataViewEvent &event ) if (!container) return; container->SetExpanded( false ); + GetStore()->ItemChanged( event.GetItem() ); }