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() { }
+
+ void SetOwner( wxDataViewModel *owner ) { m_owner = owner; }
+ wxDataViewModel *GetOwner() { return m_owner; }
+
private:
- wxUint32 m_id;
+ wxDataViewModel *m_owner;
};
-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 );
+WX_DECLARE_LIST(wxDataViewModelNotifier, wxDataViewModelNotifiers );
class WXDLLIMPEXP_ADV wxDataViewModel: public wxObjectRefData
{
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 );
- 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;
+ 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
//-----------------------------------------------------------------------------
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)
};
#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)