X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/86ba79ed17aea939e2f5161797b9a94aa9d429c2..0738b901b17340f09766524b8d9d79e9ed1268e7:/src/common/datavcmn.cpp?ds=inline diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp index 91fa8da281..8f259b41bf 100644 --- a/src/common/datavcmn.cpp +++ b/src/common/datavcmn.cpp @@ -32,12 +32,6 @@ const char wxDataViewCtrlNameStr[] = "dataviewCtrl"; - -bool operator == (const wxDataViewItem &left, const wxDataViewItem &right) -{ - return (left.GetID() == right.GetID() ); -} - // --------------------------------------------------------- // wxDataViewModelNotifier // --------------------------------------------------------- @@ -280,7 +274,7 @@ int wxDataViewModel::Compare( const wxDataViewItem &item1, const wxDataViewItem if (dt1.IsEarlierThan(dt2)) return 1; if (dt2.IsEarlierThan(dt1)) - return -11; + return -1; } // items must be different @@ -309,11 +303,7 @@ wxDataViewIndexListModel::wxDataViewIndexListModel( unsigned int initial_size ) unsigned int i; for (i = 1; i < initial_size+1; i++) m_hash.Add( wxUIntToPtr(i) ); - m_lastIndex = initial_size + 1; -} - -wxDataViewIndexListModel::~wxDataViewIndexListModel() -{ + m_nextFreeID = initial_size + 1; } void wxDataViewIndexListModel::Reset( unsigned int new_size ) @@ -327,7 +317,8 @@ void wxDataViewIndexListModel::Reset( unsigned int new_size ) unsigned int i; for (i = 1; i < new_size+1; i++) m_hash.Add( wxUIntToPtr(i) ); - m_lastIndex = new_size + 1; + + m_nextFreeID = new_size + 1; wxDataViewModel::Cleared(); } @@ -336,17 +327,22 @@ void wxDataViewIndexListModel::RowPrepended() { m_ordered = false; - unsigned int id = m_lastIndex++; + unsigned int id = m_nextFreeID; + m_nextFreeID++; + m_hash.Insert( wxUIntToPtr(id), 0 ); wxDataViewItem item( wxUIntToPtr(id) ); ItemAdded( wxDataViewItem(0), item ); + } void wxDataViewIndexListModel::RowInserted( unsigned int before ) { m_ordered = false; - unsigned int id = m_lastIndex++; + unsigned int id = m_nextFreeID; + m_nextFreeID++; + m_hash.Insert( wxUIntToPtr(id), before ); wxDataViewItem item( wxUIntToPtr(id) ); ItemAdded( wxDataViewItem(0), item ); @@ -354,7 +350,9 @@ void wxDataViewIndexListModel::RowInserted( unsigned int before ) void wxDataViewIndexListModel::RowAppended() { - unsigned int id = m_lastIndex++; + unsigned int id = m_nextFreeID; + m_nextFreeID++; + m_hash.Add( wxUIntToPtr(id) ); wxDataViewItem item( wxUIntToPtr(id) ); ItemAdded( wxDataViewItem(0), item ); @@ -402,10 +400,7 @@ void wxDataViewIndexListModel::RowValueChanged( unsigned int row, unsigned int c unsigned int wxDataViewIndexListModel::GetRow( const wxDataViewItem &item ) const { if (m_ordered) - { - unsigned int pos = wxPtrToUInt( item.GetID() ); - return pos-1; - } + return wxPtrToUInt(item.GetID())-1; // assert for not found return (unsigned int) m_hash.Index( item.GetID() ); @@ -429,8 +424,8 @@ int wxDataViewIndexListModel::Compare(const wxDataViewItem& item1, { if (m_ordered) { - unsigned int pos1 = wxPtrToUInt(item1.GetID()); - unsigned int pos2 = wxPtrToUInt(item2.GetID()); + unsigned int pos1 = wxPtrToUInt(item1.GetID()); // -1 not needed here + unsigned int pos2 = wxPtrToUInt(item2.GetID()); // -1 not needed here if (ascending) return pos1 - pos2; @@ -444,37 +439,6 @@ int wxDataViewIndexListModel::Compare(const wxDataViewItem& item1, return GetRow(item2) - GetRow(item1); } -void wxDataViewIndexListModel::GetValue( wxVariant &variant, - const wxDataViewItem &item, unsigned int col ) const -{ - GetValueByRow( variant, GetRow(item), col ); -} - -bool wxDataViewIndexListModel::SetValue( const wxVariant &variant, - const wxDataViewItem &item, unsigned int col ) -{ - return SetValueByRow( variant, GetRow(item), col ); -} - -bool wxDataViewIndexListModel::GetAttr( const wxDataViewItem &item, unsigned int col, wxDataViewItemAttr &attr ) -{ - return GetAttrByRow( GetRow(item), col, attr ); -} - -wxDataViewItem wxDataViewIndexListModel::GetParent( const wxDataViewItem & WXUNUSED(item) ) const -{ - return wxDataViewItem(0); -} - -bool wxDataViewIndexListModel::IsContainer( const wxDataViewItem &item ) const -{ - // only the invisible root item has children - if (!item.IsOk()) - return true; - - return false; -} - unsigned int wxDataViewIndexListModel::GetChildren( const wxDataViewItem &item, wxDataViewItemArray &children ) const { if (item.IsOk()) @@ -493,50 +457,48 @@ unsigned int wxDataViewIndexListModel::GetChildren( const wxDataViewItem &item, wxDataViewVirtualListModel::wxDataViewVirtualListModel( unsigned int initial_size ) { - m_lastIndex = initial_size-1; -} - -wxDataViewVirtualListModel::~wxDataViewVirtualListModel() -{ + m_size = initial_size; } void wxDataViewVirtualListModel::Reset( unsigned int new_size ) { - m_lastIndex = new_size-1; + m_size = new_size; wxDataViewModel::Cleared(); } void wxDataViewVirtualListModel::RowPrepended() { - m_lastIndex++; - wxDataViewItem item( NULL ); + m_size++; + wxDataViewItem item( wxUIntToPtr(1) ); ItemAdded( wxDataViewItem(0), item ); } void wxDataViewVirtualListModel::RowInserted( unsigned int before ) { - m_lastIndex++; + m_size++; wxDataViewItem item( wxUIntToPtr(before+1) ); ItemAdded( wxDataViewItem(0), item ); } void wxDataViewVirtualListModel::RowAppended() { - m_lastIndex++; - wxDataViewItem item( wxUIntToPtr(m_lastIndex+1) ); + m_size++; + wxDataViewItem item( wxUIntToPtr(m_size) ); ItemAdded( wxDataViewItem(0), item ); } void wxDataViewVirtualListModel::RowDeleted( unsigned int row ) { + m_size--; wxDataViewItem item( wxUIntToPtr(row+1) ); wxDataViewModel::ItemDeleted( wxDataViewItem(0), item ); - m_lastIndex++; } void wxDataViewVirtualListModel::RowsDeleted( const wxArrayInt &rows ) { + m_size -= rows.GetCount(); + wxArrayInt sorted = rows; sorted.Sort( my_sort ); @@ -548,8 +510,6 @@ void wxDataViewVirtualListModel::RowsDeleted( const wxArrayInt &rows ) array.Add( item ); } wxDataViewModel::ItemsDeleted( wxDataViewItem(0), array ); - - m_lastIndex -= rows.GetCount(); } void wxDataViewVirtualListModel::RowChanged( unsigned int row ) @@ -582,8 +542,8 @@ int wxDataViewVirtualListModel::Compare(const wxDataViewItem& item1, unsigned int WXUNUSED(column), bool ascending) const { - unsigned int pos1 = wxPtrToUInt(item1.GetID())-1; - unsigned int pos2 = wxPtrToUInt(item2.GetID())-1; + unsigned int pos1 = wxPtrToUInt(item1.GetID()); // -1 not needed here + unsigned int pos2 = wxPtrToUInt(item2.GetID()); // -1 not needed here if (ascending) return pos1 - pos2; @@ -591,37 +551,6 @@ int wxDataViewVirtualListModel::Compare(const wxDataViewItem& item1, return pos2 - pos1; } -void wxDataViewVirtualListModel::GetValue( wxVariant &variant, - const wxDataViewItem &item, unsigned int col ) const -{ - GetValueByRow( variant, GetRow(item), col ); -} - -bool wxDataViewVirtualListModel::SetValue( const wxVariant &variant, - const wxDataViewItem &item, unsigned int col ) -{ - return SetValueByRow( variant, GetRow(item), col ); -} - -bool wxDataViewVirtualListModel::GetAttr( const wxDataViewItem &item, unsigned int col, wxDataViewItemAttr &attr ) -{ - return GetAttrByRow( GetRow(item), col, attr ); -} - -wxDataViewItem wxDataViewVirtualListModel::GetParent( const wxDataViewItem & WXUNUSED(item) ) const -{ - return wxDataViewItem(0); -} - -bool wxDataViewVirtualListModel::IsContainer( const wxDataViewItem &item ) const -{ - // only the invisible root item has children - if (!item.IsOk()) - return true; - - return false; -} - unsigned int wxDataViewVirtualListModel::GetChildren( const wxDataViewItem &WXUNUSED(item), wxDataViewItemArray &WXUNUSED(children) ) const { return 0; // should we report an error ? @@ -637,13 +566,6 @@ IMPLEMENT_DYNAMIC_CLASS(wxDataViewIconText,wxObject) IMPLEMENT_VARIANT_OBJECT_EXPORTED(wxDataViewIconText, WXDLLIMPEXP_ADV) -bool operator == (const wxDataViewIconText &one, const wxDataViewIconText &two) -{ - if (one.GetText() != two.GetText()) return false; - if (one.IsSameAs(two)) return false; - return true; -} - // --------------------------------------------------------- // wxDataViewRendererBase // --------------------------------------------------------- @@ -701,7 +623,7 @@ bool wxDataViewRendererBase::StartEditing( const wxDataViewItem &item, wxRect la m_editorCtrl = CreateEditorCtrl( dv_ctrl->GetMainWindow(), labelRect, value ); - // there might be no editor control for the given item + // there might be no editor control for the given item if(!m_editorCtrl) return false; @@ -759,8 +681,7 @@ bool wxDataViewRendererBase::FinishEditing() return false; unsigned int col = GetOwner()->GetModelColumn(); - dv_ctrl->GetModel()->SetValue( value, m_item, col ); - dv_ctrl->GetModel()->ValueChanged( m_item, col ); + dv_ctrl->GetModel()->ChangeValue(value, m_item, col); // Now we should send Editing Done event wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE, dv_ctrl->GetId() ); @@ -1245,10 +1166,14 @@ wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK, wxDataViewEven wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED, wxDataViewEvent ); wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_COLUMN_REORDERED, wxDataViewEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_DATAVIEW_CACHE_HINT, 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 // ------------------------------------- @@ -1432,7 +1357,7 @@ void wxDataViewListStore::PrependItem( const wxVector &values, wxClie RowPrepended(); } -void wxDataViewListStore::InsertItem( unsigned int row, const wxVector &values, +void wxDataViewListStore::InsertItem( unsigned int row, const wxVector &values, wxClientData *data ) { wxDataViewListStoreLine *line = new wxDataViewListStoreLine( data ); @@ -1548,7 +1473,7 @@ bool wxDataViewListCtrl::AppendColumn( wxDataViewColumn *col ) return AppendColumn( col, "string" ); } -wxDataViewColumn *wxDataViewListCtrl::AppendTextColumn( const wxString &label, +wxDataViewColumn *wxDataViewListCtrl::AppendTextColumn( const wxString &label, wxDataViewCellMode mode, int width, wxAlignment align, int flags ) { GetStore()->AppendColumn( wxT("string") ); @@ -1562,7 +1487,7 @@ wxDataViewColumn *wxDataViewListCtrl::AppendTextColumn( const wxString &label, return ret; } -wxDataViewColumn *wxDataViewListCtrl::AppendToggleColumn( const wxString &label, +wxDataViewColumn *wxDataViewListCtrl::AppendToggleColumn( const wxString &label, wxDataViewCellMode mode, int width, wxAlignment align, int flags ) { GetStore()->AppendColumn( wxT("bool") ); @@ -1576,7 +1501,7 @@ wxDataViewColumn *wxDataViewListCtrl::AppendToggleColumn( const wxString &label, return ret; } -wxDataViewColumn *wxDataViewListCtrl::AppendProgressColumn( const wxString &label, +wxDataViewColumn *wxDataViewListCtrl::AppendProgressColumn( const wxString &label, wxDataViewCellMode mode, int width, wxAlignment align, int flags ) { GetStore()->AppendColumn( wxT("long") ); @@ -1590,7 +1515,7 @@ wxDataViewColumn *wxDataViewListCtrl::AppendProgressColumn( const wxString &labe return ret; } -wxDataViewColumn *wxDataViewListCtrl::AppendIconTextColumn( const wxString &label, +wxDataViewColumn *wxDataViewListCtrl::AppendIconTextColumn( const wxString &label, wxDataViewCellMode mode, int width, wxAlignment align, int flags ) { GetStore()->AppendColumn( wxT("wxDataViewIconText") ); @@ -1871,7 +1796,7 @@ void wxDataViewTreeStore::DeleteChildren( const wxDataViewItem& item ) void wxDataViewTreeStore::DeleteAllItems() { - // TODO + DeleteChildren(m_root); } void @@ -2016,40 +1941,30 @@ BEGIN_EVENT_TABLE(wxDataViewTreeCtrl,wxDataViewCtrl) EVT_SIZE( wxDataViewTreeCtrl::OnSize ) END_EVENT_TABLE() -wxDataViewTreeCtrl::wxDataViewTreeCtrl() +wxDataViewTreeCtrl::~wxDataViewTreeCtrl() { - m_imageList = NULL; + delete m_imageList; } -wxDataViewTreeCtrl::wxDataViewTreeCtrl( wxWindow *parent, wxWindowID id, +bool wxDataViewTreeCtrl::Create( wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator ) { - m_imageList = NULL; - Create( parent, id, pos, size, style, validator ); + if ( !wxDataViewCtrl::Create( parent, id, pos, size, style, validator ) ) + return false; + // create the standard model and a column in the tree wxDataViewTreeStore *store = new wxDataViewTreeStore; AssociateModel( store ); store->DecRef(); - AppendIconTextColumn(wxString(),0,wxDATAVIEW_CELL_INERT,-1); -} + AppendIconTextColumn(wxString(),0,wxDATAVIEW_CELL_EDITABLE,-1); -wxDataViewTreeCtrl::~wxDataViewTreeCtrl() -{ - if (m_imageList) - delete m_imageList; -} - -bool wxDataViewTreeCtrl::Create( wxWindow *parent, wxWindowID id, - const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator ) -{ - return wxDataViewCtrl::Create( parent, id, pos, size, style, validator ); + return true; } void wxDataViewTreeCtrl::SetImageList( wxImageList *imagelist ) { - if (m_imageList) - delete m_imageList; + delete m_imageList; m_imageList = imagelist; } @@ -2151,7 +2066,7 @@ wxDataViewItem wxDataViewTreeCtrl::InsertContainer( const wxDataViewItem& parent } void wxDataViewTreeCtrl::SetItemText( const wxDataViewItem& item, const wxString &text ) -{ +{ GetStore()->SetItemText(item,text); // notify control @@ -2159,7 +2074,7 @@ void wxDataViewTreeCtrl::SetItemText( const wxDataViewItem& item, const wxString } void wxDataViewTreeCtrl::SetItemIcon( const wxDataViewItem& item, const wxIcon &icon ) -{ +{ GetStore()->SetItemIcon(item,icon); // notify control @@ -2167,7 +2082,7 @@ void wxDataViewTreeCtrl::SetItemIcon( const wxDataViewItem& item, const wxIcon & } void wxDataViewTreeCtrl::SetItemExpandedIcon( const wxDataViewItem& item, const wxIcon &icon ) -{ +{ GetStore()->SetItemExpandedIcon(item,icon); // notify control @@ -2175,7 +2090,7 @@ void wxDataViewTreeCtrl::SetItemExpandedIcon( const wxDataViewItem& item, const } void wxDataViewTreeCtrl::DeleteItem( const wxDataViewItem& item ) -{ +{ wxDataViewItem parent_item = GetStore()->GetParent( item ); GetStore()->DeleteItem(item); @@ -2185,7 +2100,7 @@ void wxDataViewTreeCtrl::DeleteItem( const wxDataViewItem& item ) } void wxDataViewTreeCtrl::DeleteChildren( const wxDataViewItem& item ) -{ +{ wxDataViewTreeStoreContainerNode *node = GetStore()->FindContainerNode( item ); if (!node) return; @@ -2204,7 +2119,7 @@ void wxDataViewTreeCtrl::DeleteChildren( const wxDataViewItem& item ) } void wxDataViewTreeCtrl::DeleteAllItems() -{ +{ GetStore()->DeleteAllItems(); GetStore()->Cleared();