X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a75124d0da255513e83d2e62f963dd849829466b..2f94ab4099941a5f47ced25799dd28b12ccdc319:/src/common/datavcmn.cpp diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp index 4d1c9dd89c..a77fcb9387 100644 --- a/src/common/datavcmn.cpp +++ b/src/common/datavcmn.cpp @@ -326,6 +326,29 @@ wxDataViewIndexListModel::~wxDataViewIndexListModel() { } +void wxDataViewIndexListModel::Reset( unsigned int new_size ) +{ + if (m_useHash) + { + m_hash.Clear(); + + // IDs are ordered until an item gets deleted or inserted + m_ordered = true; + + // build initial index + unsigned int i; + for (i = 1; i < new_size+1; i++) + m_hash.Add( (void*) i ); + m_lastIndex = new_size + 1; + } + else + { + m_lastIndex = new_size-1; + } + + wxDataViewModel::Cleared(); +} + void wxDataViewIndexListModel::RowPrepended() { if (m_useHash) @@ -385,6 +408,8 @@ void wxDataViewIndexListModel::RowDeleted( unsigned int row ) { if (m_useHash) { + m_ordered = false; + wxDataViewItem item( m_hash[row] ); wxDataViewModel::ItemDeleted( wxDataViewItem(0), item ); m_hash.RemoveAt( row ); @@ -397,6 +422,47 @@ void wxDataViewIndexListModel::RowDeleted( unsigned int row ) } } +static int my_sort( int *v1, int *v2 ) +{ + return *v2-*v1; +} + +void wxDataViewIndexListModel::RowsDeleted( const wxArrayInt &rows ) +{ + wxArrayInt sorted = rows; + sorted.Sort( my_sort ); + + if (m_useHash) + { + m_ordered = false; + + wxDataViewItemArray array; + unsigned int i; + for (i = 0; i < rows.GetCount(); i++) + { + wxDataViewItem item( m_hash[rows[i]] ); + array.Add( item ); + } + wxDataViewModel::ItemsDeleted( wxDataViewItem(0), array ); + + for (i = 0; i < sorted.GetCount(); i++) + m_hash.RemoveAt( sorted[i] ); + } + else + { + wxDataViewItemArray array; + unsigned int i; + for (i = 0; i < sorted.GetCount(); i++) + { + wxDataViewItem item( (void*) sorted[i] ); + array.Add( item ); + } + wxDataViewModel::ItemsDeleted( wxDataViewItem(0), array ); + + m_lastIndex -= rows.GetCount(); + } +} + void wxDataViewIndexListModel::RowChanged( unsigned int row ) { wxDataViewModel::ItemChanged( GetItem(row) ); @@ -506,7 +572,7 @@ unsigned int wxDataViewIndexListModel::GetChildren( const wxDataViewItem &item, return 0; children = m_hash; - + return m_hash.GetCount(); } @@ -1083,6 +1149,8 @@ DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED) DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE) DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED) +DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU) + DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK) DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK) DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED) @@ -1559,6 +1627,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxDataViewTreeCtrl,wxDataViewCtrl) BEGIN_EVENT_TABLE(wxDataViewTreeCtrl,wxDataViewCtrl) EVT_DATAVIEW_ITEM_EXPANDED(-1, wxDataViewTreeCtrl::OnExpanded) EVT_DATAVIEW_ITEM_COLLAPSED(-1, wxDataViewTreeCtrl::OnCollapsed) + EVT_SIZE( wxDataViewTreeCtrl::OnSize ) END_EVENT_TABLE() wxDataViewTreeCtrl::wxDataViewTreeCtrl() @@ -1575,7 +1644,15 @@ wxDataViewTreeCtrl::wxDataViewTreeCtrl( wxWindow *parent, wxWindowID id, wxDataViewTreeStore *store = new wxDataViewTreeStore; AssociateModel( store ); store->DecRef(); - AppendIconTextColumn( "", 0, wxDATAVIEW_CELL_INERT, 200 ); + +#if !defined(__WXGTK20__) || defined(wxUSE_GENERICDATAVIEWCTRL) + wxDataViewColumn *col = AppendIconTextColumn( "", 0, wxDATAVIEW_CELL_INERT, 40 ); + + wxSize cient_size = GetClientSize(); + col->SetWidth( size.x ); +#else + AppendIconTextColumn( "", 0, wxDATAVIEW_CELL_INERT, 40 ); +#endif } wxDataViewTreeCtrl::~wxDataViewTreeCtrl() @@ -1670,7 +1747,6 @@ wxDataViewItem wxDataViewTreeCtrl::InsertContainer( const wxDataViewItem& parent return GetStore()->InsertContainer( parent, previous, text, icon, expanded, data ); } - void wxDataViewTreeCtrl::OnExpanded( wxDataViewEvent &event ) { if (m_imageList) return; @@ -1693,6 +1769,15 @@ void wxDataViewTreeCtrl::OnCollapsed( wxDataViewEvent &event ) GetStore()->ItemChanged( event.GetItem() ); } +void wxDataViewTreeCtrl::OnSize( wxSizeEvent &event ) +{ +#if !defined(__WXGTK20__) || defined(wxUSE_GENERICDATAVIEWCTRL) + wxSize size = GetClientSize(); + wxDataViewColumn *col = GetColumn( 0 ); + if (col) col->SetWidth( size.x ); +#endif + event.Skip( true ); +} #endif // wxUSE_DATAVIEWCTRL