X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b5dbe15d0bacde245539f54c4d97af6b4696f01f..3ac1094bead05e30462122d00e4859725d2ea59f:/include/wx/dataview.h diff --git a/include/wx/dataview.h b/include/wx/dataview.h index 8ad75c0d26..ec832adb83 100644 --- a/include/wx/dataview.h +++ b/include/wx/dataview.h @@ -68,25 +68,51 @@ extern WXDLLIMPEXP_DATA_ADV(const wxChar) wxDataViewCtrlNameStr[]; class WXDLLIMPEXP_ADV wxDataViewItem { public: - wxDataViewItem( wxUint32 id = 0 ) - { m_id = id; m_reserved1 = 0; m_reserved2 = NULL; } + wxDataViewItem( void* id = NULL ) + { m_id = id; } wxDataViewItem( const wxDataViewItem &item ) - { m_id = item.m_id; m_reserved1 = item.m_reserved1; m_reserved2 = item.m_reserved2; } - bool IsOk() const { return m_id != 0; } - wxUint32 GetID() const { return m_id; } + { m_id = item.m_id; } + bool IsOk() const { return m_id != NULL; } + void* GetID() const { return m_id; } +private: + void* m_id; +}; + +bool operator == (const wxDataViewItem &left, const wxDataViewItem &right); + +// --------------------------------------------------------- +// wxDataViewModelNotifier +// --------------------------------------------------------- + +class WXDLLIMPEXP_ADV wxDataViewModelNotifier +{ public: - wxUint32 m_reserved1; - void* m_reserved2; + wxDataViewModelNotifier() { } + virtual ~wxDataViewModelNotifier() { m_owner = NULL; } + + virtual bool ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item ) = 0; + virtual bool ItemDeleted( const wxDataViewItem &parent, const wxDataViewItem &item ) = 0; + virtual bool ItemChanged( const wxDataViewItem &item ) = 0; + virtual bool ValueChanged( const wxDataViewItem &item, unsigned int col ) = 0; + virtual bool Cleared() = 0; + virtual void Resort() = 0; + + void SetOwner( wxDataViewModel *owner ) { m_owner = owner; } + wxDataViewModel *GetOwner() { return m_owner; } + private: - wxUint32 m_id; + wxDataViewModel *m_owner; }; + // --------------------------------------------------------- // wxDataViewModel // --------------------------------------------------------- +WX_DECLARE_LIST(wxDataViewModelNotifier, wxDataViewModelNotifiers ); + class WXDLLIMPEXP_ADV wxDataViewModel: public wxObjectRefData { public: @@ -106,54 +132,95 @@ public: const wxDataViewItem &item, unsigned int col ) = 0; // define hierachy - virtual bool HasChildren( const wxDataViewItem &item ) const = 0; - virtual int GetChildCount( const wxDataViewItem &item ) const = 0; - virtual wxDataViewItem GetParent( const wxDataViewItem &child ) 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; - virtual wxDataViewItem GetNthChild( const wxDataViewItem &parent, unsigned int n ) const = 0; // delegated notifiers virtual bool ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item ); - virtual bool ItemDeleted( const wxDataViewItem &item ); + virtual bool ItemDeleted( const wxDataViewItem &parent, const wxDataViewItem &item ); virtual bool ItemChanged( const wxDataViewItem &item ); 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 ); + // 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; + wxDataViewModelNotifiers m_notifiers; + unsigned int m_sortingColumn; + bool m_ascending; }; // --------------------------------------------------------- -// wxDataViewModelNotifier +// wxDataViewIndexListModel // --------------------------------------------------------- -class WXDLLIMPEXP_ADV wxDataViewModelNotifier: public wxObject +// use hash map later +WX_DEFINE_ARRAY_PTR( void*, wxDataViewItemHash ); + +class wxDataViewIndexListModel: public wxDataViewModel { public: - wxDataViewModelNotifier() { } - virtual ~wxDataViewModelNotifier() { m_owner = NULL; } + 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 ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item ) = 0; - virtual bool ItemDeleted( const wxDataViewItem &item ) = 0; - virtual bool ItemChanged( const wxDataViewItem &item ) = 0; - virtual bool ValueChanged( const wxDataViewItem &item, unsigned int col ) = 0; - virtual bool Cleared() = 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 ); - void SetOwner( wxDataViewModel *owner ) { m_owner = owner; } - wxDataViewModel *GetOwner() { return m_owner; } + // 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: - wxDataViewModel *m_owner; + wxDataViewItemHash m_hash; + unsigned int m_lastIndex; }; - //----------------------------------------------------------------------------- // wxDataViewEditorCtrlEvtHandler //----------------------------------------------------------------------------- @@ -401,13 +468,30 @@ public: virtual bool ClearColumns(); virtual wxDataViewColumn* GetColumn( unsigned int pos ); + void SetExpanderColumn( unsigned int col ) + { m_expander_column = col ; DoSetExpanderColumn(); } + unsigned int GetExpanderColumn() const + { return m_expander_column; } + + void SetIndent( int indent ) + { m_indent = indent ; DoSetIndent(); } + int GetIndent() const + { return m_indent; } + // TODO selection code + virtual wxDataViewItem GetSelection() = 0; + +protected: + virtual void DoSetExpanderColumn() = 0 ; + virtual void DoSetIndent() = 0; private: wxDataViewModel *m_model; wxList m_cols; wxDataViewEventModelNotifier *m_eventNotifier; - + unsigned int m_expander_column; + int m_indent ; + protected: DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCtrlBase) }; @@ -494,7 +578,7 @@ typedef void (wxEvtHandler::*wxDataViewEventFunction)(wxDataViewEvent&); #define EVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICKED(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_HEADER_RIGHT_CLICK, id, fn) #define EVT_DATAVIEW_COLUMN_SORTED(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_SORTED, id, fn) -#define EVT_DATAVIEW_MODEL_ITEM_ADDED(id, fn) wx__DECLARE_DATAVIEWEVT(MODEL_ITEM_APPENDED, id, fn) +#define EVT_DATAVIEW_MODEL_ITEM_ADDED(id, fn) wx__DECLARE_DATAVIEWEVT(MODEL_ITEM_ADDED, id, fn) #define EVT_DATAVIEW_MODEL_ITEM_DELETED(id, fn) wx__DECLARE_DATAVIEWEVT(MODEL_ITEM_DELETED, id, fn) #define EVT_DATAVIEW_MODEL_ITEM_CHANGED(id, fn) wx__DECLARE_DATAVIEWEVT(MODEL_ITEM_CHANGED, id, fn) #define EVT_DATAVIEW_MODEL_VALUE_CHANGED(id, fn) wx__DECLARE_DATAVIEWEVT(MODEL_VALUE_CHANGED, id, fn)