X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9d52aad39a4e3b52c5baa50b9cc55caaf91bb026..a2c5db764c8450dda6e87fe58917b0a00ec2c74f:/include/wx/dataview.h diff --git a/include/wx/dataview.h b/include/wx/dataview.h index 90cb52b033..911727ca24 100644 --- a/include/wx/dataview.h +++ b/include/wx/dataview.h @@ -85,9 +85,6 @@ bool operator == (const wxDataViewItem &left, const wxDataViewItem &right); // wxDataViewModel // --------------------------------------------------------- -typedef int (wxCALLBACK *wxDataViewModelCompare) - (const wxDataViewItem& item1, const wxDataViewItem& item2, unsigned int col, unsigned int option ); - class WXDLLIMPEXP_ADV wxDataViewModel: public wxObjectRefData { public: @@ -107,7 +104,8 @@ public: const wxDataViewItem &item, unsigned int col ) = 0; // define hierachy - virtual bool HasChildren( const wxDataViewItem &item ) const = 0; + virtual wxDataViewItem GetParent( const wxDataViewItem &item ) const = 0; + virtual bool IsContainer( const wxDataViewItem &item ) const = 0; virtual wxDataViewItem GetFirstChild( const wxDataViewItem &parent ) const = 0; virtual wxDataViewItem GetNextSibling( const wxDataViewItem &item ) const = 0; @@ -118,18 +116,81 @@ public: virtual bool ValueChanged( const wxDataViewItem &item, unsigned int col ); virtual bool Cleared(); + // delegatd action + virtual void Resort(); + void AddNotifier( wxDataViewModelNotifier *notifier ); void RemoveNotifier( wxDataViewModelNotifier *notifier ); - void SetCompareFunction( wxDataViewModelCompare func ) { m_cmpFunc = func; } - wxDataViewModelCompare GetCompareFunction() { return m_cmpFunc; } + // default compare function + virtual int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2 ); + + void SetSortingColumn( unsigned int col ) { m_sortingColumn = col; } + unsigned int GetSortingColumn() { return m_sortingColumn; } + void SetSortOrderAscending( bool ascending ) { m_ascending = ascending; } + bool GetSortOrderAscending() { return m_ascending; } + protected: // the user should not delete this class directly: he should use DecRef() instead! virtual ~wxDataViewModel() { } wxList m_notifiers; - wxDataViewModelCompare m_cmpFunc; + unsigned int m_sortingColumn; + bool m_ascending; +}; + +// --------------------------------------------------------- +// wxDataViewIndexListModel +// --------------------------------------------------------- + +// use hash map later +WX_DEFINE_ARRAY_PTR( void*, wxDataViewItemHash ); + +class wxDataViewIndexListModel: public wxDataViewModel +{ +public: + wxDataViewIndexListModel( unsigned int initial_size = 0 ); + ~wxDataViewIndexListModel(); + + virtual unsigned int GetRowCount() = 0; + + virtual void GetValue( wxVariant &variant, + unsigned int row, unsigned int col ) const = 0; + + virtual bool SetValue( const wxVariant &variant, + unsigned int row, unsigned int col ) = 0; + + void RowPrepended(); + void RowInserted( unsigned int before ); + void RowAppended(); + void RowDeleted( unsigned int row ); + void RowChanged( unsigned int row ); + void RowValueChanged( unsigned int row, unsigned int col ); + + // convert to/from row/wxDataViewItem + + unsigned int GetRow( const wxDataViewItem &item ) const; + wxDataViewItem GetItem( unsigned int row ) const; + + // compare based on index + + virtual int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2 ); + + // implement base methods + + virtual void GetValue( wxVariant &variant, + const wxDataViewItem &item, unsigned int col ) const; + virtual bool SetValue( const wxVariant &variant, + const wxDataViewItem &item, unsigned int col ); + virtual wxDataViewItem GetParent( const wxDataViewItem &item ) const; + virtual bool IsContainer( const wxDataViewItem &item ) const; + virtual wxDataViewItem GetFirstChild( const wxDataViewItem &parent ) const; + virtual wxDataViewItem GetNextSibling( const wxDataViewItem &item ) const; + +private: + wxDataViewItemHash m_hash; + unsigned int m_lastIndex; }; // --------------------------------------------------------- @@ -147,6 +208,8 @@ public: virtual bool ItemChanged( const wxDataViewItem &item ) = 0; virtual bool ValueChanged( const wxDataViewItem &item, unsigned int col ) = 0; virtual bool Cleared() = 0; + + virtual void Resort() { }; void SetOwner( wxDataViewModel *owner ) { m_owner = owner; } wxDataViewModel *GetOwner() { return m_owner; }