]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/dataview.h
VC6 compilation fix for _WX_VARARG_FORMAT_STRING macro
[wxWidgets.git] / include / wx / dataview.h
index c2b915eb1f452d83b497a430fbf7f04b6ab17fed..22869656034ce4f2087112144efc42527d33f6e3 100644 (file)
@@ -2,7 +2,7 @@
 // Name:        wx/dataview.h
 // Purpose:     wxDataViewCtrl base classes
 // Author:      Robert Roebling
-// Modified by:
+// Modified by: Bo Yang
 // Created:     08.01.06
 // RCS-ID:      $Id$
 // Copyright:   (c) Robert Roebling
@@ -21,6 +21,7 @@
 #include "wx/bitmap.h"
 #include "wx/variant.h"
 #include "wx/listctrl.h"
+#include "wx/dynarray.h"
 
 #if defined(__WXGTK20__)
     // for testing
@@ -44,7 +45,6 @@ class WXDLLIMPEXP_FWD_ADV wxDataViewCtrl;
 class WXDLLIMPEXP_FWD_ADV wxDataViewColumn;
 class WXDLLIMPEXP_FWD_ADV wxDataViewRenderer;
 class WXDLLIMPEXP_FWD_ADV wxDataViewModelNotifier;
-class                 wxDataViewEventModelNotifier;
 
 extern WXDLLIMPEXP_DATA_ADV(const wxChar) wxDataViewCtrlNameStr[];
 
@@ -74,6 +74,7 @@ public:
         { m_id = item.m_id; }
     bool IsOk() const                  { return m_id != NULL; }
     void* GetID() const                { return m_id; }
+    operator const void* () const      { return m_id; }
     
 private:
     void* m_id;
@@ -81,6 +82,8 @@ private:
 
 bool operator == (const wxDataViewItem &left, const wxDataViewItem &right);
 
+WX_DEFINE_ARRAY(wxDataViewItem, wxDataViewItemArray);
+
 // ---------------------------------------------------------
 // wxDataViewModelNotifier
 // ---------------------------------------------------------
@@ -97,7 +100,7 @@ public:
     virtual bool ValueChanged( const wxDataViewItem &item, unsigned int col ) = 0;
     virtual bool Cleared() = 0;
     
-    virtual void Resort() { }
+    virtual void Resort() = 0;
 
     void SetOwner( wxDataViewModel *owner ) { m_owner = owner; }
     wxDataViewModel *GetOwner()             { return m_owner; }
@@ -151,30 +154,20 @@ public:
     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; }
-    
-    
+    virtual int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2, 
+                         unsigned int column, bool ascending );
+
 protected:
     // the user should not delete this class directly: he should use DecRef() instead!
     virtual ~wxDataViewModel() { }
 
     wxDataViewModelNotifiers  m_notifiers;
-    unsigned int              m_sortingColumn;
-    bool                      m_ascending;
 };
 
 // ---------------------------------------------------------
 // wxDataViewIndexListModel
 // ---------------------------------------------------------
 
-// use hash map later
-WX_DEFINE_ARRAY_PTR( void*, wxDataViewItemHash );
-
 class wxDataViewIndexListModel: public wxDataViewModel
 {
 public:
@@ -203,7 +196,8 @@ public:
     
     // compare based on index
     
-    virtual int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2 );
+    virtual int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2, 
+                         unsigned int column, bool ascending );
 
     // implement base methods
 
@@ -217,7 +211,7 @@ public:
     virtual wxDataViewItem GetNextSibling( const wxDataViewItem &item ) const;
     
 private:
-    wxDataViewItemHash m_hash;
+    wxDataViewItemArray m_hash;
     unsigned int m_lastIndex;
 };
 
@@ -419,43 +413,44 @@ public:
     wxDataViewModel* GetModel();
 
     // short cuts
-    bool AppendTextColumn( const wxString &label, unsigned int model_column, 
+    wxDataViewColumn *AppendTextColumn( const wxString &label, unsigned int model_column, 
                     wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
                     wxAlignment align = wxALIGN_CENTER,
                     int flags = wxDATAVIEW_COL_RESIZABLE );
-    bool AppendToggleColumn( const wxString &label, unsigned int model_column,
+    wxDataViewColumn *AppendToggleColumn( const wxString &label, unsigned int model_column,
                     wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = wxDVC_TOGGLE_DEFAULT_WIDTH,
                     wxAlignment align = wxALIGN_CENTER,
                     int flags = wxDATAVIEW_COL_RESIZABLE );
-    bool AppendProgressColumn( const wxString &label, unsigned int model_column, 
+    wxDataViewColumn *AppendProgressColumn( const wxString &label, unsigned int model_column, 
                     wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = wxDVC_DEFAULT_WIDTH,
                     wxAlignment align = wxALIGN_CENTER,
                     int flags = wxDATAVIEW_COL_RESIZABLE );
-    bool AppendDateColumn( const wxString &label, unsigned int model_column,
+    wxDataViewColumn *AppendDateColumn( const wxString &label, unsigned int model_column,
                     wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int width = -1,
                     wxAlignment align = wxALIGN_CENTER,
                     int flags = wxDATAVIEW_COL_RESIZABLE );
-    bool AppendBitmapColumn( const wxString &label, unsigned int model_column,
+    wxDataViewColumn *AppendBitmapColumn( const wxString &label, unsigned int model_column,
                     wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
                     wxAlignment align = wxALIGN_CENTER,
                     int flags = wxDATAVIEW_COL_RESIZABLE );
-    bool AppendTextColumn( const wxBitmap &label, unsigned int model_column,
+    wxDataViewColumn *AppendTextColumn( const wxBitmap &label, unsigned int model_column,
                     wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
                     wxAlignment align = wxALIGN_CENTER,
                     int flags = wxDATAVIEW_COL_RESIZABLE );
-    bool AppendToggleColumn( const wxBitmap &label, unsigned int model_column,
+    wxDataViewColumn *AppendToggleColumn( const wxBitmap &label, unsigned int model_column,
                     wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = wxDVC_TOGGLE_DEFAULT_WIDTH,
                     wxAlignment align = wxALIGN_CENTER,
                     int flags = wxDATAVIEW_COL_RESIZABLE );
-    bool AppendProgressColumn( const wxBitmap &label, unsigned int model_column,
+    wxDataViewColumn *AppendProgressColumn( const wxBitmap &label, unsigned int model_column,
                     wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = wxDVC_DEFAULT_WIDTH,
                     wxAlignment align = wxALIGN_CENTER,
                     int flags = wxDATAVIEW_COL_RESIZABLE );
-    bool AppendDateColumn( const wxBitmap &label, unsigned int model_column,
+    wxDataViewColumn *AppendDateColumn( const wxBitmap &label, unsigned int model_column,
                     wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int width = -1,
                     wxAlignment align = wxALIGN_CENTER,
                     int flags = wxDATAVIEW_COL_RESIZABLE );
-    bool AppendBitmapColumn( const wxBitmap &label, unsigned int model_column,
+    
+    wxDataViewColumn *AppendBitmapColumn( const wxBitmap &label, unsigned int model_column,
                     wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
                     wxAlignment align = wxALIGN_CENTER,
                     int flags = wxDATAVIEW_COL_RESIZABLE );
@@ -478,8 +473,23 @@ public:
     int GetIndent() const 
         { return m_indent; } 
 
-    // TODO selection code
     virtual wxDataViewItem GetSelection() = 0;
+    virtual int GetSelections( wxDataViewItemArray & sel ) const = 0;
+    virtual void SetSelections( const wxDataViewItemArray & sel ) = 0;
+    virtual void Select( const wxDataViewItem & item ) = 0;
+    virtual void Unselect( const wxDataViewItem & item ) = 0;
+    virtual bool IsSelected( const wxDataViewItem & item ) const = 0;
+
+    virtual void SelectAll() = 0;
+    virtual void UnselectAll() = 0;
+
+    virtual void EnsureVisible( const wxDataViewItem & item,
+                                wxDataViewColumn *column = NULL ) = 0;
+                                
+    virtual void HitTest( const wxPoint &point, 
+                          wxDataViewItem &item, unsigned int &column ) const = 0;
+    virtual wxRect GetItemRect( const wxDataViewItem &item, 
+                          unsigned int column ) const = 0;
 
 protected:
     virtual void DoSetExpanderColumn() = 0 ;
@@ -488,7 +498,6 @@ protected:
 private:
     wxDataViewModel        *m_model;
     wxList                  m_cols;
-    wxDataViewEventModelNotifier *m_eventNotifier;
     unsigned int m_expander_column;
     int m_indent ;
        
@@ -552,7 +561,12 @@ private:
 
 BEGIN_DECLARE_EVENT_TYPES()
     DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_SELECTED, -1)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_DESELECTED, -1)
     DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, -1)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSED, -1)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED, -1)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING, -1)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING, -1)
     DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK, -1)
     DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK, -1)
     DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED, -1)
@@ -573,7 +587,12 @@ typedef void (wxEvtHandler::*wxDataViewEventFunction)(wxDataViewEvent&);
     wx__DECLARE_EVT1(wxEVT_COMMAND_DATAVIEW_ ## evt, id, wxDataViewEventHandler(fn))
 
 #define EVT_DATAVIEW_ITEM_SELECTED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_SELECTED, id, fn)
+#define EVT_DATAVIEW_ITEM_DESELECTED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_DESELECTED, id, fn)
 #define EVT_DATAVIEW_ITEM_ACTIVATED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_ACTIVATED, id, fn)
+#define EVT_DATAVIEW_ITEM_COLLAPSING(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_COLLAPSING, id, fn)
+#define EVT_DATAVIEW_ITEM_COLLAPSED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_COLLAPSED, id, fn)
+#define EVT_DATAVIEW_ITEM_EXPANDING(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_EXPANDING, id, fn)
+#define EVT_DATAVIEW_ITEM_EXPANDED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_EXPANDED, id, fn)
 #define EVT_DATAVIEW_COLUMN_HEADER_CLICK(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_HEADER_CLICK, id, fn)
 #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)