]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/dataview.h
avoid infinite recursion for richtooltops, (hopefully) fixes #15070
[wxWidgets.git] / interface / wx / dataview.h
index f7bf4a2afc607882e5d7a981911e825290fc412f..e650262bf2aa6642ec57617bbcac14eb292b488a 100644 (file)
@@ -259,7 +259,7 @@ public:
     bool HasValue(const wxDataViewItem& item, unsigned col) const;
 
     /**
     bool HasValue(const wxDataViewItem& item, unsigned col) const;
 
     /**
-        Override this to indicate of @a item is a container, i.e. if
+        Override this to indicate of @a item is a container, i.e.\ if
         it can have child items.
     */
     virtual bool IsContainer(const wxDataViewItem& item) const = 0;
         it can have child items.
     */
     virtual bool IsContainer(const wxDataViewItem& item) const = 0;
@@ -340,6 +340,10 @@ public:
     virtual bool ValueChanged(const wxDataViewItem& item,
                               unsigned int col);
 
     virtual bool ValueChanged(const wxDataViewItem& item,
                               unsigned int col);
 
+    
+    virtual bool IsListModel() const;
+    virtual bool IsVirtualListModel() const;
+
 protected:
 
     /**
 protected:
 
     /**
@@ -366,14 +370,14 @@ public:
     /**
         Destructor.
     */
     /**
         Destructor.
     */
-    virtual ~wxDataViewIndexListModel();
+    virtual ~wxDataViewListModel();
 
     /**
         Compare method that sorts the items by their index.
     */
     int Compare(const wxDataViewItem& item1,
                 const wxDataViewItem& item2,
 
     /**
         Compare method that sorts the items by their index.
     */
     int Compare(const wxDataViewItem& item1,
                 const wxDataViewItem& item2,
-                unsigned int column, bool ascending);
+                unsigned int column, bool ascending) const;
 
     /**
         Override this to indicate that the row has special font attributes.
 
     /**
         Override this to indicate that the row has special font attributes.
@@ -420,23 +424,58 @@ public:
     /**
         Returns the number of items (or rows) in the list.
     */
     /**
         Returns the number of items (or rows) in the list.
     */
-    unsigned int GetCount() const;
-
-    /**
-        Returns the wxDataViewItem at the given @e row.
-    */
-    wxDataViewItem GetItem(unsigned int row) const;
+    unsigned int GetCount() const = 0;
 
     /**
         Returns the position of given @e item.
     */
 
     /**
         Returns the position of given @e item.
     */
-    unsigned int GetRow(const wxDataViewItem& item) const;
+    unsigned int GetRow(const wxDataViewItem& item) const = 0;
 
     /**
         Override this to allow getting values from the model.
     */
     virtual void GetValueByRow(wxVariant& variant, unsigned int row,
 
     /**
         Override this to allow getting values from the model.
     */
     virtual void GetValueByRow(wxVariant& variant, unsigned int row,
-                          unsigned int col) const = 0;
+                               unsigned int col) const = 0;
+
+    /**
+        Called in order to set a value in the model.
+    */
+    virtual bool SetValueByRow(const wxVariant& variant, unsigned int row,
+                               unsigned int col) = 0;
+};
+
+
+/**
+    @class wxDataViewIndexListModel
+
+    wxDataViewIndexListModel is a specialized data model which lets you address
+    an item by its position (row) rather than its wxDataViewItem (which you can
+    obtain from this class).
+    This model also provides its own wxDataViewIndexListModel::Compare
+    method which sorts the model's data by the index.
+
+    This model is not a virtual model since the control stores each wxDataViewItem.
+    Use wxDataViewVirtualListModel if you need to display millions of items or
+    have other reason to use a virtual control.
+
+    @see wxDataViewListModel for the API.
+    
+    @library{wxadv}
+    @category{dvc}
+*/
+
+class wxDataViewIndexListModel : public wxDataViewListModel
+{
+public:
+    /**
+        Constructor.
+    */
+    wxDataViewIndexListModel(unsigned int initial_size = 0);
+
+    /**
+       Returns the wxDataViewItem at the given @e row.
+    */
+    wxDataViewItem GetItem(unsigned int row) const;
 
     /**
         Call this after if the data has to be read again from the model.
 
     /**
         Call this after if the data has to be read again from the model.
@@ -482,41 +521,6 @@ public:
     */
     void RowsDeleted(const wxArrayInt& rows);
 
     */
     void RowsDeleted(const wxArrayInt& rows);
 
-    /**
-        Called in order to set a value in the model.
-    */
-    virtual bool SetValueByRow(const wxVariant& variant, unsigned int row,
-                          unsigned int col) = 0;
-};
-
-
-/**
-    @class wxDataViewIndexListModel
-
-    wxDataViewIndexListModel is a specialized data model which lets you address
-    an item by its position (row) rather than its wxDataViewItem (which you can
-    obtain from this class).
-    This model also provides its own wxDataViewIndexListModel::Compare
-    method which sorts the model's data by the index.
-
-    This model is not a virtual model since the control stores each wxDataViewItem.
-    Use wxDataViewVirtualListModel if you need to display millions of items or
-    have other reason to use a virtual control.
-
-    @see wxDataViewListModel for the API.
-    
-    @library{wxadv}
-    @category{dvc}
-*/
-
-class wxDataViewIndexListModel : public wxDataViewListModel
-{
-public:
-    /**
-        Constructor.
-    */
-    wxDataViewIndexListModel(unsigned int initial_size = 0);
-
 };
 
 /**
 };
 
 /**
@@ -543,6 +547,55 @@ public:
     */
     wxDataViewVirtualListModel(unsigned int initial_size = 0);
 
     */
     wxDataViewVirtualListModel(unsigned int initial_size = 0);
 
+    /**
+       Returns the wxDataViewItem at the given @e row.
+    */
+    wxDataViewItem GetItem(unsigned int row) const;
+
+    /**
+        Call this after if the data has to be read again from the model.
+        This is useful after major changes when calling the methods below
+        (possibly thousands of times) doesn't make sense.
+    */
+    void Reset(unsigned int new_size);
+
+    /**
+        Call this after a row has been appended to the model.
+    */
+    void RowAppended();
+
+    /**
+        Call this after a row has been changed.
+    */
+    void RowChanged(unsigned int row);
+
+    /**
+        Call this after a row has been deleted.
+    */
+    void RowDeleted(unsigned int row);
+
+    /**
+        Call this after a row has been inserted at the given position.
+    */
+    void RowInserted(unsigned int before);
+
+    /**
+        Call this after a row has been prepended to the model.
+    */
+    void RowPrepended();
+
+    /**
+        Call this after a value has been changed.
+    */
+    void RowValueChanged(unsigned int row, unsigned int col);
+
+    /**
+        Call this after rows have been deleted.
+        The array will internally get copied and sorted in descending order so
+        that the rows with the highest position will be deleted first.
+    */
+    void RowsDeleted(const wxArrayInt& rows);
+
 };
 
 
 };
 
 
@@ -591,6 +644,52 @@ public:
         Call this to indicate that the item shall be displayed in italic text.
     */
     void SetItalic(bool set);
         Call this to indicate that the item shall be displayed in italic text.
     */
     void SetItalic(bool set);
+
+
+    /**
+       Returns true if the colour property has been set.
+    */
+    bool HasColour() const;
+
+    /**
+       Returns this attribute's colour.
+    */
+    const wxColour& GetColour() const;
+
+    /**
+       Returns true if any property affecting the font has been set.
+    */
+    bool HasFont() const;
+
+    /**
+       Returns value of the bold property.
+    */
+    bool GetBold() const;
+
+    /**
+       Returns value of the italics property.
+    */
+    bool GetItalic() const;
+
+    /**
+       Returns true if the background colour property has been set.
+    */
+    bool HasBackgroundColour() const;
+
+    /**
+       Returns the colour to be used for the background.
+    */
+    const wxColour& GetBackgroundColour() const;
+
+    /**
+       Returns true if none of the properties have been set.
+    */
+    bool IsDefault() const;
+
+    /**
+       Return the font based on the given one with this attribute applied to it.
+    */
+    wxFont GetEffectiveFont(const wxFont& font) const;
 };
 
 
 };
 
 
@@ -747,7 +846,9 @@ wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_DROP;
     @event{EVT_DATAVIEW_SELECTION_CHANGED(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED event.
     @event{EVT_DATAVIEW_ITEM_ACTIVATED(id, func)}
     @event{EVT_DATAVIEW_SELECTION_CHANGED(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED event.
     @event{EVT_DATAVIEW_ITEM_ACTIVATED(id, func)}
-           Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED event.
+           Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED event. This event
+           is triggered by double clicking an item or pressing some special key
+           (usually "Enter") when it is focused.
     @event{EVT_DATAVIEW_ITEM_START_EDITING(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_START_EDITING event. This
            event can be vetoed in order to prevent editing on an item by item
     @event{EVT_DATAVIEW_ITEM_START_EDITING(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_START_EDITING event. This
            event can be vetoed in order to prevent editing on an item by item
@@ -773,7 +874,7 @@ wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_DROP;
            item, in this case wxDataViewEvent::GetItem() simply returns an
            invalid item.
     @event{EVT_DATAVIEW_COLUMN_HEADER_CLICK(id, func)}
            item, in this case wxDataViewEvent::GetItem() simply returns an
            invalid item.
     @event{EVT_DATAVIEW_COLUMN_HEADER_CLICK(id, func)}
-           Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICKED event.
+           Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK event.
     @event{EVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICKED event.
     @event{EVT_DATAVIEW_COLUMN_SORTED(id, func)}
     @event{EVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICKED event.
     @event{EVT_DATAVIEW_COLUMN_SORTED(id, func)}
@@ -788,9 +889,14 @@ wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_DROP;
            Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_DROP event.
     @endEventTable
 
            Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_DROP event.
     @endEventTable
 
+    Notice that this control doesn't allow to process generic mouse events such
+    as @c wxEVT_LEFT_DOWN in all ports (notably it doesn't work in wxGTK). If
+    you need to handle any mouse events not covered by the ones above, consider
+    using a custom renderer for the cells that must handle them.
+
     @library{wxadv}
     @category{ctrl,dvc}
     @library{wxadv}
     @category{ctrl,dvc}
-    @appearance{dataviewctrl.png}
+    @appearance{dataviewctrl}
 */
 class wxDataViewCtrl : public wxControl
 {
 */
 class wxDataViewCtrl : public wxControl
 {
@@ -815,6 +921,16 @@ public:
     */
     virtual ~wxDataViewCtrl();
 
     */
     virtual ~wxDataViewCtrl();
 
+    /**
+        Create the control. Useful for two step creation.
+    */
+    bool Create(wxWindow* parent, wxWindowID id,
+                const wxPoint& pos = wxDefaultPosition,
+                const wxSize& size = wxDefaultSize,
+                long style = 0,
+                const wxValidator& validator = wxDefaultValidator,
+                const wxString& name = wxDataViewCtrlNameStr);
+
     /**
         Appends a wxDataViewColumn to the control. Returns @true on success.
 
     /**
         Appends a wxDataViewColumn to the control. Returns @true on success.
 
@@ -855,6 +971,25 @@ public:
                                          int flags = wxDATAVIEW_COL_RESIZABLE);
     //@}
 
                                          int flags = wxDATAVIEW_COL_RESIZABLE);
     //@}
 
+    //@{
+    /**
+        Prepends a column for rendering a bitmap. Returns the wxDataViewColumn
+        created in the function or @NULL on failure.
+    */
+    wxDataViewColumn* PrependBitmapColumn(const wxString& label,
+                                         unsigned int model_column,
+                                         wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+                                         int width = -1,
+                                         wxAlignment align = wxALIGN_CENTER,
+                                         int flags = wxDATAVIEW_COL_RESIZABLE);
+    wxDataViewColumn* PrependBitmapColumn(const wxBitmap& label,
+                                         unsigned int model_column,
+                                         wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+                                         int width = -1,
+                                         wxAlignment align = wxALIGN_CENTER,
+                                         int flags = wxDATAVIEW_COL_RESIZABLE);
+    //@}
+
     //@{
     /**
         Appends a column for rendering a date. Returns the wxDataViewColumn
     //@{
     /**
         Appends a column for rendering a date. Returns the wxDataViewColumn
@@ -877,6 +1012,28 @@ public:
                                        int flags = wxDATAVIEW_COL_RESIZABLE);
     //@}
 
                                        int flags = wxDATAVIEW_COL_RESIZABLE);
     //@}
 
+    //@{
+    /**
+        Prepends a column for rendering a date. Returns the wxDataViewColumn
+        created in the function or @NULL on failure.
+
+        @note The @a align parameter is applied to both the column header and
+              the column renderer.
+    */
+    wxDataViewColumn* PrependDateColumn(const wxString& label,
+                                       unsigned int model_column,
+                                       wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE,
+                                       int width = -1,
+                                       wxAlignment align = wxALIGN_NOT,
+                                       int flags = wxDATAVIEW_COL_RESIZABLE);
+    wxDataViewColumn* PrependDateColumn(const wxBitmap& label,
+                                       unsigned int model_column,
+                                       wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE,
+                                       int width = -1,
+                                       wxAlignment align = wxALIGN_NOT,
+                                       int flags = wxDATAVIEW_COL_RESIZABLE);
+    //@}
+
     //@{
     /**
         Appends a column for rendering text with an icon. Returns the wxDataViewColumn
     //@{
     /**
         Appends a column for rendering text with an icon. Returns the wxDataViewColumn
@@ -900,6 +1057,29 @@ public:
                                            int flags = wxDATAVIEW_COL_RESIZABLE);
     //@}
 
                                            int flags = wxDATAVIEW_COL_RESIZABLE);
     //@}
 
+    //@{
+    /**
+        Prepends a column for rendering text with an icon. Returns the wxDataViewColumn
+        created in the function or @NULL on failure.
+        This method uses the wxDataViewIconTextRenderer class.
+
+        @note The @a align parameter is applied to both the column header and
+              the column renderer.
+    */
+    wxDataViewColumn* PrependIconTextColumn(const wxString& label,
+                                           unsigned int model_column,
+                                           wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+                                           int width = -1,
+                                           wxAlignment align = wxALIGN_NOT,
+                                           int flags = wxDATAVIEW_COL_RESIZABLE);
+    wxDataViewColumn* PrependIconTextColumn(const wxBitmap& label,
+                                           unsigned int model_column,
+                                           wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+                                           int width = -1,
+                                           wxAlignment align = wxALIGN_NOT,
+                                           int flags = wxDATAVIEW_COL_RESIZABLE);
+    //@}
+
     //@{
     /**
         Appends a column for rendering a progress indicator. Returns the
     //@{
     /**
         Appends a column for rendering a progress indicator. Returns the
@@ -922,6 +1102,28 @@ public:
                                            int flags = wxDATAVIEW_COL_RESIZABLE);
     //@}
 
                                            int flags = wxDATAVIEW_COL_RESIZABLE);
     //@}
 
+    //@{
+    /**
+        Prepends a column for rendering a progress indicator. Returns the
+        wxDataViewColumn created in the function or @NULL on failure.
+
+        @note The @a align parameter is applied to both the column header and
+              the column renderer.
+    */
+    wxDataViewColumn* PrependProgressColumn(const wxString& label,
+                                           unsigned int model_column,
+                                           wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+                                           int width = 80,
+                                           wxAlignment align = wxALIGN_CENTER,
+                                           int flags = wxDATAVIEW_COL_RESIZABLE);
+    wxDataViewColumn* PrependProgressColumn(const wxBitmap& label,
+                                           unsigned int model_column,
+                                           wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+                                           int width = 80,
+                                           wxAlignment align = wxALIGN_CENTER,
+                                           int flags = wxDATAVIEW_COL_RESIZABLE);
+    //@}
+
     //@{
     /**
         Appends a column for rendering text. Returns the wxDataViewColumn
     //@{
     /**
         Appends a column for rendering text. Returns the wxDataViewColumn
@@ -944,6 +1146,28 @@ public:
                                        int flags = wxDATAVIEW_COL_RESIZABLE);
     //@}
 
                                        int flags = wxDATAVIEW_COL_RESIZABLE);
     //@}
 
+    //@{
+    /**
+        Prepends a column for rendering text. Returns the wxDataViewColumn
+        created in the function or @NULL on failure.
+
+        @note The @a align parameter is applied to both the column header and
+              the column renderer.
+    */
+    wxDataViewColumn* PrependTextColumn(const wxString& label,
+                                       unsigned int model_column,
+                                       wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+                                       int width = -1,
+                                       wxAlignment align = wxALIGN_NOT,
+                                       int flags = wxDATAVIEW_COL_RESIZABLE);
+    wxDataViewColumn* PrependTextColumn(const wxBitmap& label,
+                                       unsigned int model_column,
+                                       wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+                                       int width = -1,
+                                       wxAlignment align = wxALIGN_NOT,
+                                       int flags = wxDATAVIEW_COL_RESIZABLE);
+    //@}
+
     //@{
     /**
         Appends a column for rendering a toggle. Returns the wxDataViewColumn
     //@{
     /**
         Appends a column for rendering a toggle. Returns the wxDataViewColumn
@@ -966,6 +1190,28 @@ public:
                                          int flags = wxDATAVIEW_COL_RESIZABLE);
     //@}
 
                                          int flags = wxDATAVIEW_COL_RESIZABLE);
     //@}
 
+    //@{
+    /**
+        Prepends a column for rendering a toggle. Returns the wxDataViewColumn
+        created in the function or @NULL on failure.
+
+        @note The @a align parameter is applied to both the column header and
+              the column renderer.
+    */
+    wxDataViewColumn* PrependToggleColumn(const wxString& label,
+                                         unsigned int model_column,
+                                         wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+                                         int width = 30,
+                                         wxAlignment align = wxALIGN_CENTER,
+                                         int flags = wxDATAVIEW_COL_RESIZABLE);
+    wxDataViewColumn* PrependToggleColumn(const wxBitmap& label,
+                                         unsigned int model_column,
+                                         wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+                                         int width = 30,
+                                         wxAlignment align = wxALIGN_CENTER,
+                                         int flags = wxDATAVIEW_COL_RESIZABLE);
+    //@}
+
     /**
         Associates a wxDataViewModel with the control.
         This increases the reference count of the model by 1.
     /**
         Associates a wxDataViewModel with the control.
         This increases the reference count of the model by 1.
@@ -983,19 +1229,20 @@ public:
     virtual void Collapse(const wxDataViewItem& item);
 
     /**
     virtual void Collapse(const wxDataViewItem& item);
 
     /**
-        Create the control. Useful for two step creation.
+        Deletes given column.
     */
     */
-    bool Create(wxWindow* parent, wxWindowID id,
-                const wxPoint& pos = wxDefaultPosition,
-                const wxSize& size = wxDefaultSize,
-                long style = 0,
-                const wxValidator& validator = wxDefaultValidator,
-                const wxString& name = wxDataViewCtrlNameStr);
+    virtual bool DeleteColumn(wxDataViewColumn* column);
 
     /**
 
     /**
-        Deletes given column.
+        Programmatically starts editing given cell of @a item.
+
+        Doesn't do anything if the item or this column is not editable.
+
+        @note Currently not implemented in wxOSX/Carbon.
+
+        @since 2.9.4
     */
     */
-    virtual bool DeleteColumn(wxDataViewColumn* column);
+    virtual void EditItem(const wxDataViewItem& item, const wxDataViewColumn *column);
 
     /**
        Enable drag operations using the given @a format.
 
     /**
        Enable drag operations using the given @a format.
@@ -1087,7 +1334,18 @@ public:
     int GetIndent() const;
 
     /**
     int GetIndent() const;
 
     /**
-        Returns item rect.
+        Returns item rectangle.
+
+        This method is currently not implemented at all in wxGTK and only
+        implemented for non-@NULL @a col argument in wxOSX. It is fully
+        implemented in the generic version of the control.
+
+        @param item
+            A valid item.
+        @param col
+            If non-@NULL, the rectangle returned corresponds to the
+            intersection of the item with the specified column. If @NULL, the
+            rectangle spans all the columns.
     */
     virtual wxRect GetItemRect(const wxDataViewItem& item,
                                const wxDataViewColumn* col = NULL) const;
     */
     virtual wxRect GetItemRect(const wxDataViewItem& item,
                                const wxDataViewColumn* col = NULL) const;
@@ -1213,14 +1471,6 @@ public:
     */
     virtual void SetSelections(const wxDataViewItemArray& sel);
 
     */
     virtual void SetSelections(const wxDataViewItemArray& sel);
 
-    /** 
-        Programmatically starts editing the given item on the given column.
-        Currently not implemented on wxOSX Carbon.
-        @since 2.9.2
-    */
-    
-    virtual void StartEditor(const wxDataViewItem & item, unsigned int column);
-
     /**
         Unselect the given item.
     */
     /**
         Unselect the given item.
     */
@@ -1437,7 +1687,7 @@ enum wxDataViewCellRenderState
     - wxDataViewSpinRenderer.
     - wxDataViewChoiceRenderer.
 
     - wxDataViewSpinRenderer.
     - wxDataViewChoiceRenderer.
 
-    Additionally, the user can write own renderers by deriving from
+    Additionally, the user can write their own renderers by deriving from
     wxDataViewCustomRenderer.
 
     The ::wxDataViewCellMode and ::wxDataViewCellRenderState flags accepted
     wxDataViewCustomRenderer.
 
     The ::wxDataViewCellMode and ::wxDataViewCellRenderState flags accepted
@@ -1557,6 +1807,21 @@ public:
         editing process finished.
     */
     virtual bool Validate(wxVariant& value);
         editing process finished.
     */
     virtual bool Validate(wxVariant& value);
+
+    
+    virtual bool HasEditorCtrl() const;
+    virtual wxWindow* CreateEditorCtrl(wxWindow * parent,
+                                       wxRect labelRect,
+                                       const wxVariant& value);
+    virtual bool GetValueFromEditorCtrl(wxWindow * editor,
+                                        wxVariant& value);
+    virtual bool StartEditing( const wxDataViewItem &item, wxRect labelRect );
+    virtual void CancelEditing();
+    virtual bool FinishEditing();
+    wxWindow *GetEditorCtrl();
+
+protected:
+    wxDataViewCtrl* GetView() const;
 };
 
 
 };
 
 
@@ -1676,12 +1941,15 @@ public:
 
 
 /**
 
 
 /**
-    @class wxDataViewChoiceRenderer
+    A wxDataViewCtrl renderer using wxChoice control and values of strings in
+    it.
 
     This class is used by wxDataViewCtrl to render choice controls.
     It stores a string so that SetValue() and GetValue() operate
     on a variant holding a string.
 
 
     This class is used by wxDataViewCtrl to render choice controls.
     It stores a string so that SetValue() and GetValue() operate
     on a variant holding a string.
 
+    @see wxDataViewChoiceByIndexRenderer
+
     @library{wxadv}
     @category{dvc}
 */
     @library{wxadv}
     @category{dvc}
 */
@@ -1700,7 +1968,7 @@ public:
         Returns the choice referred to by index.
     */
     wxString GetChoice(size_t index) const;
         Returns the choice referred to by index.
     */
     wxString GetChoice(size_t index) const;
-    
+
     /**
         Returns all choices.
     */
     /**
         Returns all choices.
     */
@@ -1708,6 +1976,28 @@ public:
 };
 
 
 };
 
 
+/**
+    A wxDataViewCtrl renderer using wxChoice control and indexes into it.
+
+    Unlike its base wxDataViewChoiceRenderer class, this one stores the choice
+    index, i.e. an @c int, in the variant used by its SetValue() and
+    GetValue().
+
+    @library{wxadv}
+    @category{dvc}
+*/
+class wxDataViewChoiceByIndexRenderer : public wxDataViewChoiceRenderer
+{
+public:
+    /**
+        The ctor.
+    */
+    wxDataViewChoiceByIndexRenderer( const wxArrayString &choices,
+                              wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE,
+                              int alignment = wxDVR_DEFAULT_ALIGNMENT );
+};
+
+
 /**
     @class wxDataViewDateRenderer
 
 /**
     @class wxDataViewDateRenderer
 
@@ -1756,7 +2046,7 @@ public:
     */
     wxDataViewCustomRenderer(const wxString& varianttype = "string",
                              wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
     */
     wxDataViewCustomRenderer(const wxString& varianttype = "string",
                              wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
-                             int align = -1, bool no_init = false);
+                             int align = wxDVR_DEFAULT_ALIGNMENT);
 
     /**
         Destructor.
 
     /**
         Destructor.
@@ -1887,15 +2177,26 @@ public:
     virtual bool HasEditorCtrl() const;
 
     /**
     virtual bool HasEditorCtrl() const;
 
     /**
-        Override this to react to a left click.
-        This method will only be called in @c wxDATAVIEW_CELL_ACTIVATABLE mode.
+        Override this to react to a left click.  This method will only be
+        called in @c wxDATAVIEW_CELL_ACTIVATABLE mode.  This method is
+        deprecated, please use ActivateCell instead.
     */
     */
-    virtual bool LeftClick( const wxPoint& cursor,
-                            const wxRect& cell,
+    virtual bool LeftClick( wxPoint cursor,
+                            wxRect cell,
                             wxDataViewModel * model,
                             const wxDataViewItem & item,
                             unsigned int col );
 
                             wxDataViewModel * model,
                             const wxDataViewItem & item,
                             unsigned int col );
 
+    /**
+       Override this to react to the activation of a cell.  This method is
+       deprecated, please use ActivateCell instead.
+    */
+    virtual bool Activate(wxRect cell,
+                          wxDataViewModel * model,
+                          const wxDataViewItem & item,
+                          unsigned int col);
+
+
     /**
         Override this to render the cell.
         Before this is called, wxDataViewRenderer::SetValue was called
     /**
         Override this to render the cell.
         Before this is called, wxDataViewRenderer::SetValue was called
@@ -1920,6 +2221,12 @@ public:
                            wxDataViewModel* model,
                            const wxDataViewItem & item,
                            unsigned int col);
                            wxDataViewModel* model,
                            const wxDataViewItem & item,
                            unsigned int col);
+
+protected:
+    /**
+       Helper for GetSize() implementations, respects attributes.
+    */
+    wxSize GetTextExtent(const wxString& str) const;
 };
 
 
 };
 
 
@@ -2181,7 +2488,7 @@ public:
         Appends a column to the control and additionally appends a
         column to the store with the type string.
     */
         Appends a column to the control and additionally appends a
         column to the store with the type string.
     */
-    virtual void AppendColumn( wxDataViewColumn *column );
+    virtual bool AppendColumn( wxDataViewColumn *column );
 
     /**
         Appends a column to the control and additionally appends a
 
     /**
         Appends a column to the control and additionally appends a
@@ -2237,7 +2544,7 @@ public:
         Inserts a column to the control and additionally inserts a
         column to the store with the type string.
     */
         Inserts a column to the control and additionally inserts a
         column to the store with the type string.
     */
-    virtual void InsertColumn( unsigned int pos, wxDataViewColumn *column );
+    virtual bool InsertColumn( unsigned int pos, wxDataViewColumn *column );
 
     /**
         Inserts a column to the control and additionally inserts a
 
     /**
         Inserts a column to the control and additionally inserts a
@@ -2250,7 +2557,7 @@ public:
         Prepends a column to the control and additionally prepends a
         column to the store with the type string.
     */
         Prepends a column to the control and additionally prepends a
         column to the store with the type string.
     */
-    virtual void PrependColumn( wxDataViewColumn *column );
+    virtual bool PrependColumn( wxDataViewColumn *column );
 
     /**
         Prepends a column to the control and additionally prepends a
 
     /**
         Prepends a column to the control and additionally prepends a
@@ -2269,17 +2576,17 @@ public:
     /**
         Appends an item (=row) to the control and store.
     */
     /**
         Appends an item (=row) to the control and store.
     */
-    void AppendItem( const wxVector<wxVariant> &values, wxClientData *data = NULL );
+    void AppendItem( const wxVector<wxVariant> &values, wxUIntPtr data = NULL );
 
     /**
         Prepends an item (=row) to the control and store.
     */
 
     /**
         Prepends an item (=row) to the control and store.
     */
-    void PrependItem( const wxVector<wxVariant> &values, wxClientData *data = NULL );
+    void PrependItem( const wxVector<wxVariant> &values, wxUIntPtr data = NULL );
 
     /**
         Inserts an item (=row) to the control and store.
     */
 
     /**
         Inserts an item (=row) to the control and store.
     */
-    void InsertItem( unsigned int row, const wxVector<wxVariant> &values, wxClientData *data = NULL );
+    void InsertItem( unsigned int row, const wxVector<wxVariant> &values, wxUIntPtr data = NULL );
 
     /**
         Delete the row at position @a row.
 
     /**
         Delete the row at position @a row.
@@ -2291,6 +2598,22 @@ public:
     */
     void DeleteAllItems();
 
     */
     void DeleteAllItems();
 
+    /**
+        Returns the number of items (=rows) in the control
+
+        @since 2.9.4
+    */
+    unsigned int GetItemCount() const;
+
+    /**
+        Returns the client data associated with the item.
+
+        @see SetItemData()
+
+        @since 2.9.4
+    */
+    wxUIntPtr GetItemData(const wxDataViewItem& item) const;
+
     /**
          Sets the value in the store and update the control.
     */
     /**
          Sets the value in the store and update the control.
     */
@@ -2333,6 +2656,19 @@ public:
     */
     bool GetToggleValue( unsigned int row, unsigned int col ) const;
 
     */
     bool GetToggleValue( unsigned int row, unsigned int col ) const;
 
+    /**
+        Associates a client data pointer with the given item.
+
+        Notice that the control does @e not take ownership of the pointer for
+        compatibility with wxListCtrl. I.e. it will @e not delete the pointer
+        (if it is a pointer and not a number) itself, it is up to you to do it.
+
+        @see GetItemData()
+
+        @since 2.9.4
+    */
+    void SetItemData(const wxDataViewItem& item, wxUIntPtr data);
+
     //@}
 };
 
     //@}
 };
 
@@ -2357,7 +2693,7 @@ public:
 
     @library{wxadv}
     @category{ctrl,dvc}
 
     @library{wxadv}
     @category{ctrl,dvc}
-    @appearance{dataviewtreectrl.png}
+    @appearance{dataviewtreectrl}
 */
 class wxDataViewTreeCtrl : public wxDataViewCtrl
 {
 */
 class wxDataViewTreeCtrl : public wxDataViewCtrl
 {
@@ -2612,7 +2948,7 @@ public:
         in number and type. No (default) values are filled in
         automatically.
     */
         in number and type. No (default) values are filled in
         automatically.
     */
-    void AppendItem( const wxVector<wxVariant> &values, wxClientData *data = NULL );
+    void AppendItem( const wxVector<wxVariant> &values, wxUIntPtr data = NULL );
 
     /**
         Prepends an item (=row) and fills it with @a values.
 
     /**
         Prepends an item (=row) and fills it with @a values.
@@ -2621,7 +2957,7 @@ public:
         in number and type. No (default) values are filled in
         automatically.
     */
         in number and type. No (default) values are filled in
         automatically.
     */
-    void PrependItem( const wxVector<wxVariant> &values, wxClientData *data = NULL );
+    void PrependItem( const wxVector<wxVariant> &values, wxUIntPtr data = NULL );
 
     /**
         Inserts an item (=row) and fills it with @a values.
 
     /**
         Inserts an item (=row) and fills it with @a values.
@@ -2630,7 +2966,7 @@ public:
         in number and type. No (default) values are filled in
         automatically.
     */
         in number and type. No (default) values are filled in
         automatically.
     */
-    void InsertItem(  unsigned int row, const wxVector<wxVariant> &values, wxClientData *data = NULL );
+    void InsertItem(  unsigned int row, const wxVector<wxVariant> &values, wxUIntPtr data = NULL );
 
     /**
         Delete the item (=row) at position @a pos.
 
     /**
         Delete the item (=row) at position @a pos.
@@ -2642,6 +2978,22 @@ public:
     */
     void DeleteAllItems();
 
     */
     void DeleteAllItems();
 
+    /**
+        Returns the number of items (=rows) in the control
+
+        @since 2.9.4
+    */
+    unsigned int GetItemCount() const;
+
+    /**
+        Returns the client data associated with the item.
+
+        @see SetItemData()
+
+        @since 2.9.4
+    */
+    wxUIntPtr GetItemData(const wxDataViewItem& item) const;
+
     /**
         Overridden from wxDataViewModel
     */
     /**
         Overridden from wxDataViewModel
     */
@@ -2652,6 +3004,18 @@ public:
     */
     virtual wxString GetColumnType( unsigned int col ) const;
 
     */
     virtual wxString GetColumnType( unsigned int col ) const;
 
+    /**
+        Sets the client data associated with the item.
+
+        Notice that this class does @e not take ownership of the passed in
+        pointer and will not delete it.
+
+        @see GetItemData()
+
+        @since 2.9.4
+    */
+    void SetItemData(const wxDataViewItem& item, wxUIntPtr data);
+
     /**
         Overridden from wxDataViewIndexListModel
     */
     /**
         Overridden from wxDataViewIndexListModel
     */
@@ -2881,13 +3245,15 @@ public:
     @event{EVT_DATAVIEW_ITEM_CONTEXT_MENU(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU event.
     @event{EVT_DATAVIEW_COLUMN_HEADER_CLICK(id, func)}
     @event{EVT_DATAVIEW_ITEM_CONTEXT_MENU(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU event.
     @event{EVT_DATAVIEW_COLUMN_HEADER_CLICK(id, func)}
-           Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICKED event.
+           Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK event.
     @event{EVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICKED event.
     @event{EVT_DATAVIEW_COLUMN_SORTED(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED event.
     @event{EVT_DATAVIEW_COLUMN_REORDERED(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_REORDERED event.
     @event{EVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICKED event.
     @event{EVT_DATAVIEW_COLUMN_SORTED(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED event.
     @event{EVT_DATAVIEW_COLUMN_REORDERED(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_REORDERED event.
+           Currently this even is only generated when using the native OSX
+           version.
     @event{EVT_DATAVIEW_ITEM_BEGIN_DRAG(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_BEGIN_DRAG event.
     @event{EVT_DATAVIEW_ITEM_DROP_POSSIBLE(id, func)}
     @event{EVT_DATAVIEW_ITEM_BEGIN_DRAG(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_BEGIN_DRAG event.
     @event{EVT_DATAVIEW_ITEM_DROP_POSSIBLE(id, func)}
@@ -2963,7 +3329,7 @@ public:
     void SetColumn(int col);
 
     /**
     void SetColumn(int col);
 
     /**
-        For @c wxEVT_DATAVIEW_COLUMN_HEADER_CLICKED only.
+        For @c wxEVT_DATAVIEW_COLUMN_HEADER_CLICK only.
     */
     void SetDataViewColumn(wxDataViewColumn* col);
 
     */
     void SetDataViewColumn(wxDataViewColumn* col);
 
@@ -2982,41 +3348,55 @@ public:
     */
     void SetDataObject( wxDataObject *obj );
 
     */
     void SetDataObject( wxDataObject *obj );
 
-    /**
-        Used internally. Gets associated wxDataObject for data transfer
-        within a drag operation.
-    */
-    wxDataObject *GetDataObject() const;
-
-    /**
-        Used internally. Sets the wxDataFormat during a drop operation.
-    */
-    void SetDataFormat( const wxDataFormat &format );
-
     /**
         Gets the wxDataFormat during a drop operation.
     */
     wxDataFormat GetDataFormat() const;
 
     /**
     /**
         Gets the wxDataFormat during a drop operation.
     */
     wxDataFormat GetDataFormat() const;
 
     /**
-        Used internally. Sets the data size for a drop data transfer.
+        Gets the data size for a drop data transfer.
     */
     */
-    void SetDataSize( size_t size );
+    size_t GetDataSize() const;
 
     /**
 
     /**
-        Gets the data size for a drop data transfer.
+        Gets the data buffer for a drop data transfer.
     */
     */
-    size_t GetDataSize() const;
+    void *GetDataBuffer() const;
 
     /**
 
     /**
-        Used internally. Sets the data buffer for a drop data transfer.
+        Specify the kind of the drag operation to perform.
+
+        This method can be used inside a wxEVT_COMMAND_DATAVIEW_ITEM_BEGIN_DRAG
+        handler in order to configure the drag operation. Valid values are
+        ::wxDrag_CopyOnly (default), ::wxDrag_AllowMove (allow the data to be
+        moved) and ::wxDrag_DefaultMove.
+
+        Currently it is only honoured by the generic version of wxDataViewCtrl
+        (used e.g. under MSW) and not supported by the native GTK and OS X
+        versions.
+
+        @see GetDropEffect()
+
+        @since 2.9.4
     */
     */
-    void SetDataBuffer( void* buf );
+    void SetDragFlags(int flags);
 
     /**
 
     /**
-        Gets the data buffer for a drop data transfer.
+        Returns the effect the user requested to happen to the dropped data.
+
+        This function can be used inside
+        wxEVT_COMMAND_DATAVIEW_ITEM_DROP_POSSIBLE and
+        wxEVT_COMMAND_DATAVIEW_ITEM_DROP handlers and returns whether the user
+        is trying to copy (the return value is ::wxDragCopy) or move (if the
+        return value is ::wxDragMove) the data.
+
+        Currently this is only available when using the generic version of
+        wxDataViewCtrl (used e.g. under MSW) and always returns ::wxDragNone in
+        the GTK and OS X native versions.
+
+        @since 2.9.4
     */
     */
-    void *GetDataBuffer() const;
+    wxDragResult GetDropEffect() const;
 
     /**
         Return the first row that will be displayed.
 
     /**
         Return the first row that will be displayed.
@@ -3027,5 +3407,21 @@ public:
         Return the last row that will be displayed.
     */
     int GetCacheTo() const;
         Return the last row that will be displayed.
     */
     int GetCacheTo() const;
+
+
+
+    
+    wxDataViewItem GetItem() const;
+    void SetItem( const wxDataViewItem &item );
+    void SetEditCanceled(bool editCancelled);
+    void SetPosition( int x, int y );
+    void SetCache(int from, int to);
+    wxDataObject *GetDataObject() const;
+    void SetDataFormat( const wxDataFormat &format );
+    void SetDataSize( size_t size );
+    void SetDataBuffer( void* buf );
+    int GetDragFlags() const;
+    void SetDropEffect( wxDragResult effect );
+
 };
 
 };