]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/dataview.h
compilation fix for wxString::Format("no variadic arguments") and VC6
[wxWidgets.git] / include / wx / dataview.h
index 90cb52b033ccc0f89995382198dfe13271817bbb..ec832adb839c6d69cdf2403e768b262b52bd4676 100644 (file)
@@ -81,12 +81,37 @@ private:
 
 bool operator == (const wxDataViewItem &left, const wxDataViewItem &right);
 
+// ---------------------------------------------------------
+// wxDataViewModelNotifier
+// ---------------------------------------------------------
+
+class WXDLLIMPEXP_ADV wxDataViewModelNotifier
+{
+public:
+    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:
+    wxDataViewModel *m_owner;
+};
+
+
 // ---------------------------------------------------------
 // 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
 {
@@ -107,55 +132,95 @@ 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;
 
     // 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
 //-----------------------------------------------------------------------------
@@ -513,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)