]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/dataview.h
More efficient access to name and value
[wxWidgets.git] / include / wx / dataview.h
index b220665ddf9901b501b07be6efff8c93bbd732c5..cf597a881befd89994a6e7716b1e01179bed8f35 100644 (file)
@@ -126,6 +126,10 @@ public:
     virtual bool ValueChanged( const wxDataViewItem &item, unsigned int col ) = 0;
     virtual bool Cleared() = 0;
 
+    // some platforms, such as GTK+, may need a two step procedure for ::Reset()
+    virtual bool BeforeReset() { return true; }
+    virtual bool AfterReset() { return Cleared(); }
+
     virtual void Resort() = 0;
 
     void SetOwner( wxDataViewModel *owner ) { m_owner = owner; }
@@ -245,7 +249,12 @@ public:
     bool ValueChanged( const wxDataViewItem &item, unsigned int col );
     bool Cleared();
 
-    // delegatd action
+    // some platforms, such as GTK+, may need a two step procedure for ::Reset()
+    bool BeforeReset();
+    bool AfterReset();
+
+
+    // delegated action
     virtual void Resort();
 
     void AddNotifier( wxDataViewModelNotifier *notifier );
@@ -257,6 +266,7 @@ public:
     virtual bool HasDefaultCompare() const { return false; }
 
     // internal
+    virtual bool IsListModel() const { return false; }
     virtual bool IsVirtualListModel() const { return false; }
 
 protected:
@@ -295,6 +305,8 @@ public:
     // helper methods provided by list models only
     virtual unsigned GetRow( const wxDataViewItem &item ) const = 0;
 
+    // returns the number of rows
+    virtual unsigned int GetCount() const = 0;
 
     // implement some base class pure virtual directly
     virtual wxDataViewItem
@@ -328,6 +340,9 @@ public:
     {
         return GetAttrByRow( GetRow(item), col, attr );
     }
+
+
+    virtual bool IsListModel() const { return true; }
 };
 
 // ---------------------------------------------------------
@@ -639,6 +654,12 @@ public:
     int GetIndent() const
         { return m_indent; }
 
+    // Current item is the one used by the keyboard navigation, it is the same
+    // as the (unique) selected item in single selection mode so these
+    // functions are mostly useful for controls with wxDV_MULTIPLE style.
+    wxDataViewItem GetCurrentItem() const;
+    void SetCurrentItem(const wxDataViewItem& item);
+
     virtual wxDataViewItem GetSelection() const = 0;
     virtual int GetSelections( wxDataViewItemArray & sel ) const = 0;
     virtual void SetSelections( const wxDataViewItemArray & sel ) = 0;
@@ -685,6 +706,12 @@ protected:
     virtual void DoSetIndent() = 0;
 
 private:
+    // Implementation of the public Set/GetCurrentItem() methods which are only
+    // called in multi selection case (for single selection controls their
+    // implementation is trivial and is done in the base class itself).
+    virtual wxDataViewItem DoGetCurrentItem() const = 0;
+    virtual void DoSetCurrentItem(const wxDataViewItem& item) = 0;
+
     wxDataViewModel        *m_model;
     wxDataViewColumn       *m_expander_column;
     int m_indent ;
@@ -950,6 +977,20 @@ public:
     const wxDataViewListStore *GetStore() const
         { return (const wxDataViewListStore*) GetModel(); }
 
+    int ItemToRow(const wxDataViewItem &item) const
+        { return item.IsOk() ? (int)GetStore()->GetRow(item) : wxNOT_FOUND; }
+    wxDataViewItem RowToItem(int row) const
+        { return row == wxNOT_FOUND ? wxDataViewItem() : GetStore()->GetItem(row); }
+
+    int GetSelectedRow() const
+        { return ItemToRow(GetSelection()); }
+    void SelectRow(unsigned row)
+        { Select(RowToItem(row)); }
+    void UnselectRow(unsigned row)
+        { Unselect(RowToItem(row)); }
+    bool IsRowSelected(unsigned row) const
+        { return IsSelected(RowToItem(row)); }
+
     bool AppendColumn( wxDataViewColumn *column, const wxString &varianttype );
     bool PrependColumn( wxDataViewColumn *column, const wxString &varianttype );
     bool InsertColumn( unsigned int pos, wxDataViewColumn *column, const wxString &varianttype );
@@ -1110,7 +1151,7 @@ public:
 
     wxDataViewItem GetNthChild( const wxDataViewItem& parent, unsigned int pos ) const;
     int GetChildCount( const wxDataViewItem& parent ) const;
-    
+
     void SetItemText( const wxDataViewItem& item, const wxString &text );
     wxString GetItemText( const wxDataViewItem& item ) const;
     void SetItemIcon( const wxDataViewItem& item, const wxIcon &icon );