]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/dataview.h
Add ctors for wxFileSystemWatcherEvent
[wxWidgets.git] / interface / wx / dataview.h
index fef9f43452ec14b127c7f7545f0ea66264ff4d6d..e45d0fced14153d526ef07fcee6f27b8feee7a00 100644 (file)
@@ -183,10 +183,7 @@ public:
         @return
             @true if this item should be enabled, @false otherwise.
 
         @return
             @true if this item should be enabled, @false otherwise.
 
-        @note Currently disabling items is fully implemented only for the
-              native control implementation in wxOSX/Cocoa and wxGTK. 
-              This feature is only partially supported in the generic
-              version (used by wxMSW) and not supported by the wxOSX/Carbon
+        @note Currently disabling items is not supported by the wxOSX/Carbon
               implementation.
 
         @since 2.9.2
               implementation.
 
         @since 2.9.2
@@ -216,7 +213,7 @@ public:
 
     /**
         Override this to indicate which wxDataViewItem representing the parent
 
     /**
         Override this to indicate which wxDataViewItem representing the parent
-        of @a item or an invalid wxDataViewItem if the the root item is
+        of @a item or an invalid wxDataViewItem if the root item is
         the parent item.
     */
     virtual wxDataViewItem GetParent(const wxDataViewItem& item) const = 0;
         the parent item.
     */
     virtual wxDataViewItem GetParent(const wxDataViewItem& item) const = 0;
@@ -231,7 +228,7 @@ public:
     /**
         Override this method to indicate if a container item merely acts as a
         headline (or for categorisation) or if it also acts a normal item with
     /**
         Override this method to indicate if a container item merely acts as a
         headline (or for categorisation) or if it also acts a normal item with
-        entries for futher columns. By default returns @false.
+        entries for further columns. By default returns @false.
     */
     virtual bool HasContainerColumns(const wxDataViewItem& item) const;
 
     */
     virtual bool HasContainerColumns(const wxDataViewItem& item) const;
 
@@ -276,7 +273,7 @@ public:
     /**
         Call this to inform the model that an item has changed.
 
     /**
         Call this to inform the model that an item has changed.
 
-        This will eventually emit a wxEVT_DATAVIEW_ITEM_VALUE_CHANGED
+        This will eventually emit a @c wxEVT_DATAVIEW_ITEM_VALUE_CHANGED
         event (in which the column fields will not be set) to the user.
     */
     bool ItemChanged(const wxDataViewItem& item);
         event (in which the column fields will not be set) to the user.
     */
     bool ItemChanged(const wxDataViewItem& item);
@@ -296,7 +293,7 @@ public:
     /**
         Call this to inform the model that several items have changed.
 
     /**
         Call this to inform the model that several items have changed.
 
-        This will eventually emit wxEVT_DATAVIEW_ITEM_VALUE_CHANGED
+        This will eventually emit @c wxEVT_DATAVIEW_ITEM_VALUE_CHANGED
         events (in which the column fields will not be set) to the user.
     */
     bool ItemsChanged(const wxDataViewItemArray& items);
         events (in which the column fields will not be set) to the user.
     */
     bool ItemsChanged(const wxDataViewItemArray& items);
@@ -337,7 +334,7 @@ public:
         This is also called from wxDataViewCtrl's internal editing code, e.g. when
         editing a text field in the control.
 
         This is also called from wxDataViewCtrl's internal editing code, e.g. when
         editing a text field in the control.
 
-        This will eventually emit a wxEVT_DATAVIEW_ITEM_VALUE_CHANGED
+        This will eventually emit a @c wxEVT_DATAVIEW_ITEM_VALUE_CHANGED
         event to the user.
     */
     virtual bool ValueChanged(const wxDataViewItem& item,
         event to the user.
     */
     virtual bool ValueChanged(const wxDataViewItem& item,
@@ -376,7 +373,7 @@ public:
     */
     int Compare(const wxDataViewItem& item1,
                 const wxDataViewItem& item2,
     */
     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.
@@ -421,7 +418,7 @@ public:
                                 unsigned int col) const;
 
     /**
                                 unsigned int col) const;
 
     /**
-        Returns the number of items (i.e. rows) in the list.
+        Returns the number of items (or rows) in the list.
     */
     unsigned int GetCount() const;
 
     */
     unsigned int GetCount() const;
 
@@ -580,6 +577,16 @@ public:
     */
     void SetColour(const wxColour& colour);
 
     */
     void SetColour(const wxColour& colour);
 
+    /**
+        Call this to set the background colour to use.
+
+        Currently this attribute is only supported in the generic version of
+        wxDataViewCtrl and ignored by the native GTK+ and OS X implementations.
+
+        @since 2.9.4
+    */
+    void SetBackgroundColour(const wxColour& colour);
+
     /**
         Call this to indicate that the item shall be displayed in italic text.
     */
     /**
         Call this to indicate that the item shall be displayed in italic text.
     */
@@ -614,8 +621,9 @@ public:
     /**
         Constructor.
     */
     /**
         Constructor.
     */
-    wxDataViewItem(void* id = NULL);
+    wxDataViewItem();
     wxDataViewItem(const wxDataViewItem& item);
     wxDataViewItem(const wxDataViewItem& item);
+    explicit wxDataViewItem(void* id);
     //@}
 
     /**
     //@}
 
     /**
@@ -630,6 +638,61 @@ public:
 };
 
 
 };
 
 
+// ----------------------------------------------------------------------------
+// wxDataViewCtrl flags
+// ----------------------------------------------------------------------------
+
+// size of a wxDataViewRenderer without contents:
+#define wxDVC_DEFAULT_RENDERER_SIZE     20
+
+// the default width of new (text) columns:
+#define wxDVC_DEFAULT_WIDTH             80
+
+// the default width of new toggle columns:
+#define wxDVC_TOGGLE_DEFAULT_WIDTH      30
+
+// the default minimal width of the columns:
+#define wxDVC_DEFAULT_MINWIDTH          30
+
+// The default alignment of wxDataViewRenderers is to take
+// the alignment from the column it owns.
+#define wxDVR_DEFAULT_ALIGNMENT         -1
+
+#define wxDV_SINGLE                  0x0000     // for convenience
+#define wxDV_MULTIPLE                0x0001     // can select multiple items
+
+#define wxDV_NO_HEADER               0x0002     // column titles not visible
+#define wxDV_HORIZ_RULES             0x0004     // light horizontal rules between rows
+#define wxDV_VERT_RULES              0x0008     // light vertical rules between columns
+
+#define wxDV_ROW_LINES               0x0010     // alternating colour in rows
+#define wxDV_VARIABLE_LINE_HEIGHT    0x0020     // variable line height
+
+// events
+
+wxEventType wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED;
+
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED;
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING;
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSED;
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING;
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED;
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_START_EDITING;
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED;
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE;
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED;
+
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU;
+
+wxEventType wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK;
+wxEventType wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK;
+wxEventType wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED;
+wxEventType wxEVT_COMMAND_DATAVIEW_COLUMN_REORDERED;
+wxEventType wxEVT_COMMAND_DATAVIEW_CACHE_HINT;
+
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_BEGIN_DRAG;
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_DROP_POSSIBLE;
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_DROP;
 
 /**
     @class wxDataViewCtrl
 
 /**
     @class wxDataViewCtrl
@@ -684,11 +747,13 @@ public:
     @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)}
     @event{EVT_DATAVIEW_ITEM_START_EDITING(id, func)}
-           Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED event. This
+           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 can be vetoed in order to prevent editing on an item by item
-           basis. Still experimental.
+           basis.
     @event{EVT_DATAVIEW_ITEM_EDITING_STARTED(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED event.
     @event{EVT_DATAVIEW_ITEM_EDITING_DONE(id, func)}
     @event{EVT_DATAVIEW_ITEM_EDITING_STARTED(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED event.
     @event{EVT_DATAVIEW_ITEM_EDITING_DONE(id, func)}
@@ -704,9 +769,13 @@ public:
     @event{EVT_DATAVIEW_ITEM_VALUE_CHANGED(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED event.
     @event{EVT_DATAVIEW_ITEM_CONTEXT_MENU(id, func)}
     @event{EVT_DATAVIEW_ITEM_VALUE_CHANGED(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED event.
     @event{EVT_DATAVIEW_ITEM_CONTEXT_MENU(id, func)}
-           Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU event.
+           Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU event
+           generated when the user right clicks inside the control. Notice that
+           this menu is generated even if the click didn't occur on any valid
+           item, in this case wxDataViewEvent::GetItem() simply returns an
+           invalid item.
     @event{EVT_DATAVIEW_COLUMN_HEADER_CLICK(id, func)}
     @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)}
@@ -721,6 +790,11 @@ public:
            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}
     @appearance{dataviewctrl.png}
     @library{wxadv}
     @category{ctrl,dvc}
     @appearance{dataviewctrl.png}
@@ -930,6 +1004,17 @@ public:
     */
     virtual bool DeleteColumn(wxDataViewColumn* column);
 
     */
     virtual bool DeleteColumn(wxDataViewColumn* 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 void EditItem(const wxDataViewItem& item, const wxDataViewColumn *column);
+
     /**
        Enable drag operations using the given @a format.
     */
     /**
        Enable drag operations using the given @a format.
     */
@@ -993,19 +1078,45 @@ public:
         item may be selected or not but under OS X the current item is always
         selected.
 
         item may be selected or not but under OS X the current item is always
         selected.
 
-        @see SetCurrentItem()
+        @see SetCurrentItem(), GetCurrentColumn()
 
         @since 2.9.2
      */
     wxDataViewItem GetCurrentItem() const;
 
 
         @since 2.9.2
      */
     wxDataViewItem GetCurrentItem() const;
 
+    /**
+        Returns the column that currently has focus.
+
+        If the focus is set to individual cell within the currently focused
+        item (as opposed to being on the item as a whole), then this is the
+        column that the focus is on.
+
+        Returns NULL if no column currently has focus.
+
+        @see GetCurrentItem()
+
+        @since 2.9.4
+     */
+    wxDataViewColumn *GetCurrentColumn() const;
+
     /**
         Returns indentation.
     */
     int GetIndent() const;
 
     /**
     /**
         Returns indentation.
     */
     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;
@@ -1015,13 +1126,35 @@ public:
     */
     wxDataViewModel* GetModel();
 
     */
     wxDataViewModel* GetModel();
 
+    /**
+        Returns the number of currently selected items.
+
+        This method may be called for both the controls with single and
+        multiple selections and returns the number of selected item, possibly
+        0, in any case.
+
+        @since 2.9.3
+     */
+    virtual int GetSelectedItemsCount() const;
+
     /**
         Returns first selected item or an invalid item if none is selected.
     /**
         Returns first selected item or an invalid item if none is selected.
+
+        This method may be called for both the controls with single and
+        multiple selections but returns an invalid item if more than one item
+        is selected in the latter case, use HasSelection() to determine if
+        there are any selected items when using multiple selection.
     */
     virtual wxDataViewItem GetSelection() const;
 
     /**
         Fills @a sel with currently selected items and returns their number.
     */
     virtual wxDataViewItem GetSelection() const;
 
     /**
         Fills @a sel with currently selected items and returns their number.
+
+        This method may be called for both the controls with single and
+        multiple selections. In the single selection case it returns the array
+        with at most one element in it.
+
+        @see GetSelectedItemsCount()
     */
     virtual int GetSelections(wxDataViewItemArray& sel) const;
 
     */
     virtual int GetSelections(wxDataViewItemArray& sel) const;
 
@@ -1031,6 +1164,20 @@ public:
     */
     virtual wxDataViewColumn* GetSortingColumn() const;
 
     */
     virtual wxDataViewColumn* GetSortingColumn() const;
 
+    /**
+        Returns true if any items are currently selected.
+
+        This method may be called for both the controls with single and
+        multiple selections.
+
+        Calling this method is equivalent to calling GetSelectedItemsCount()
+        and comparing its result with 0 but is more clear and might also be
+        implemented more efficiently in the future.
+
+        @since 2.9.3
+     */
+    bool HasSelection() const;
+
     /**
         Hittest.
     */
     /**
         Hittest.
     */
@@ -1086,7 +1233,7 @@ public:
     void SetCurrentItem(const wxDataViewItem& item);
 
     /**
     void SetCurrentItem(const wxDataViewItem& item);
 
     /**
-        Sets the indendation.
+        Sets the indentation.
     */
     void SetIndent(int indent);
 
     */
     void SetIndent(int indent);
 
@@ -1105,6 +1252,26 @@ public:
         This method only has effect if multiple selections are allowed.
     */
     virtual void UnselectAll();
         This method only has effect if multiple selections are allowed.
     */
     virtual void UnselectAll();
+
+    /**
+        Sets the row height.
+
+        This function can only be used when all rows have the same height, i.e.
+        when wxDV_VARIABLE_LINE_HEIGHT flag is not used.
+
+        Currently this is implemented in the generic and native GTK versions
+        only and nothing is done (and @false returned) when using OS X port.
+
+        Also notice that this method can only be used to increase the row
+        height compared with the default one (as determined by the return value
+        of wxDataViewRenderer::GetSize()), if it is set to a too small value
+        then the minimum required by the renderers will be used.
+
+        @return @true if the line height was changed or @false otherwise.
+
+        @since 2.9.2
+    */
+    virtual bool SetRowHeight(int rowHeight);
 };
 
 
 };
 
 
@@ -1144,34 +1311,46 @@ public:
 
     /**
         Called by owning model.
 
     /**
         Called by owning model.
+
+        @return Always return @true from this function in derived classes.
     */
     virtual bool ItemAdded(const wxDataViewItem& parent,
                            const wxDataViewItem& item) = 0;
 
     /**
         Called by owning model.
     */
     virtual bool ItemAdded(const wxDataViewItem& parent,
                            const wxDataViewItem& item) = 0;
 
     /**
         Called by owning model.
+
+        @return Always return @true from this function in derived classes.
     */
     virtual bool ItemChanged(const wxDataViewItem& item) = 0;
 
     /**
         Called by owning model.
     */
     virtual bool ItemChanged(const wxDataViewItem& item) = 0;
 
     /**
         Called by owning model.
+
+        @return Always return @true from this function in derived classes.
     */
     virtual bool ItemDeleted(const wxDataViewItem& parent,
                              const wxDataViewItem& item) = 0;
 
     /**
         Called by owning model.
     */
     virtual bool ItemDeleted(const wxDataViewItem& parent,
                              const wxDataViewItem& item) = 0;
 
     /**
         Called by owning model.
+
+        @return Always return @true from this function in derived classes.
     */
     virtual bool ItemsAdded(const wxDataViewItem& parent,
                             const wxDataViewItemArray& items);
 
     /**
         Called by owning model.
     */
     virtual bool ItemsAdded(const wxDataViewItem& parent,
                             const wxDataViewItemArray& items);
 
     /**
         Called by owning model.
+
+        @return Always return @true from this function in derived classes.
     */
     virtual bool ItemsChanged(const wxDataViewItemArray& items);
 
     /**
         Called by owning model.
     */
     virtual bool ItemsChanged(const wxDataViewItemArray& items);
 
     /**
         Called by owning model.
+
+        @return Always return @true from this function in derived classes.
     */
     virtual bool ItemsDeleted(const wxDataViewItem& parent,
                               const wxDataViewItemArray& items);
     */
     virtual bool ItemsDeleted(const wxDataViewItem& parent,
                               const wxDataViewItemArray& items);
@@ -1188,6 +1367,8 @@ public:
 
     /**
         Called by owning model.
 
     /**
         Called by owning model.
+
+        @return Always return @true from this function in derived classes.
     */
     virtual bool ValueChanged(const wxDataViewItem& item, unsigned int col) = 0;
 };
     */
     virtual bool ValueChanged(const wxDataViewItem& item, unsigned int col) = 0;
 };
@@ -1198,18 +1379,54 @@ public:
 */
 enum wxDataViewCellMode
 {
 */
 enum wxDataViewCellMode
 {
+    /**
+        The cell only displays information and cannot be manipulated or
+        otherwise interacted with in any way.
+
+        Note that this doesn't mean that the row being drawn can't be selected,
+        just that a particular element of it cannot be individually modified.
+     */
     wxDATAVIEW_CELL_INERT,
 
     /**
     wxDATAVIEW_CELL_INERT,
 
     /**
-        Indicates that the user can double click the cell and something will
-        happen (e.g. a window for editing a date will pop up).
+        Indicates that the cell can be @em activated by clicking it or using
+        keyboard.
+
+        Activating a cell is an alternative to showing inline editor when the
+        value can be edited in a simple way that doesn't warrant full editor
+        control. The most typical use of cell activation is toggling the
+        checkbox in wxDataViewToggleRenderer; others would be e.g. an embedded
+        volume slider or a five-star rating column.
+
+        The exact means of activating a cell are platform-dependent, but they
+        are usually similar to those used for inline editing of values.
+        Typically, a cell would be activated by Space or Enter keys or by left
+        mouse click.
+
+        @note Do not confuse this with item activation in wxDataViewCtrl
+              and the wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED event. That one is
+              used for activating the item (or, to put it differently, the
+              entire row) similarly to analogous messages in wxTreeCtrl and
+              wxListCtrl, and the effect differs (play a song, open a file
+              etc.). Cell activation, on the other hand, is all about
+              interacting with the individual cell.
+
+        @see wxDataViewCustomRenderer::ActivateCell()
     */
     wxDATAVIEW_CELL_ACTIVATABLE,
 
     /**
     */
     wxDATAVIEW_CELL_ACTIVATABLE,
 
     /**
-        Indicates that the user can edit the data in-place, i.e. an control
-        will show up after a slow click on the cell. This behaviour is best
-        known from changing the filename in most file managers etc.
+        Indicates that the user can edit the data in-place in an inline editor
+        control that will show up when the user wants to edit the cell.
+
+        A typical example of this behaviour is changing the filename in a file
+        managers.
+
+        Editing is typically triggered by slowly double-clicking the cell or by
+        a platform-dependent keyboard shortcut (F2 is typical on Windows, Space
+        and/or Enter is common elsewhere and supported on Windows too).
+
+        @see wxDataViewCustomRenderer::CreateEditorCtrl()
     */
     wxDATAVIEW_CELL_EDITABLE
 };
     */
     wxDATAVIEW_CELL_EDITABLE
 };
@@ -1480,12 +1697,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}
 */
@@ -1504,7 +1724,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.
     */
@@ -1512,6 +1732,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
 
@@ -1568,20 +1810,72 @@ public:
     virtual ~wxDataViewCustomRenderer();
 
     /**
     virtual ~wxDataViewCustomRenderer();
 
     /**
-        Override this to react to double clicks or ENTER.
-        This method will only be called in wxDATAVIEW_CELL_ACTIVATABLE mode.
+        Override this to react to cell @em activation. Activating a cell is an
+        alternative to showing inline editor when the value can be edited in a
+        simple way that doesn't warrant full editor control. The most typical
+        use of cell activation is toggling the checkbox in
+        wxDataViewToggleRenderer; others would be e.g. an embedded volume
+        slider or a five-star rating column.
+
+        The exact means of activating a cell are platform-dependent, but they
+        are usually similar to those used for inline editing of values.
+        Typically, a cell would be activated by Space or Enter keys or by left
+        mouse click.
+
+        This method will only be called if the cell has the
+        wxDATAVIEW_CELL_ACTIVATABLE mode.
+
+        @param cell
+            Coordinates of the activated cell's area.
+        @param model
+            The model to manipulate in response.
+        @param item
+            Activated item.
+        @param col
+            Activated column of @a item.
+        @param mouseEvent
+            If the activation was triggered by mouse click, contains the
+            corresponding event. Is @NULL otherwise (for keyboard activation).
+            Mouse coordinates are adjusted to be relative to the cell.
+
+        @since 2.9.3
+
+        @note Do not confuse this method with item activation in wxDataViewCtrl
+              and the wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED event. That one is
+              used for activating the item (or, to put it differently, the
+              entire row) similarly to analogous messages in wxTreeCtrl and
+              wxListCtrl, and the effect differs (play a song, open a file
+              etc.). Cell activation, on the other hand, is all about
+              interacting with the individual cell.
+
+        @see CreateEditorCtrl()
     */
     */
-    virtual bool Activate( wxRect cell,
-                           wxDataViewModel* model,
-                           const wxDataViewItem & item,
-                           unsigned int col );
+    virtual bool ActivateCell(const wxRect& cell,
+                              wxDataViewModel* model,
+                              const wxDataViewItem & item,
+                              unsigned int col,
+                              const wxMouseEvent *mouseEvent);
 
     /**
         Override this to create the actual editor control once editing
         is about to start.
 
 
     /**
         Override this to create the actual editor control once editing
         is about to start.
 
-        @a parent is the parent of the editor control, @a labelRect indicates the
-        position and size of the editor control and @a value is its initial value:
+        This method will only be called if the cell has the
+        wxDATAVIEW_CELL_EDITABLE mode. Editing is typically triggered by slowly
+        double-clicking the cell or by a platform-dependent keyboard shortcut
+        (F2 is typical on Windows, Space and/or Enter is common elsewhere and
+        supported on Windows too).
+
+        @param parent
+            The parent of the editor control.
+        @param labelRect
+            Indicates the position and size of the editor control. The control
+            should be created in place of the cell and @a labelRect should be
+            respected as much as possible.
+        @param value
+            Initial value of the editor.
+
+        An example:
         @code
         {
             long l = value;
         @code
         {
             long l = value;
@@ -1589,10 +1883,12 @@ public:
                         labelRect.GetTopLeft(), labelRect.GetSize(), 0, 0, 100, l );
         }
         @endcode
                         labelRect.GetTopLeft(), labelRect.GetSize(), 0, 0, 100, l );
         }
         @endcode
+
+        @see ActivateCell()
     */
     */
-    virtual wxControl* CreateEditorCtrl(wxWindow* parent,
-                                        wxRect labelRect,
-                                        const wxVariant& value);
+    virtual wxWindow* CreateEditorCtrl(wxWindow* parent,
+                                       wxRect labelRect,
+                                       const wxVariant& value);
 
     /**
         Return the attribute to be used for rendering.
 
     /**
         Return the attribute to be used for rendering.
@@ -1627,7 +1923,7 @@ public:
         }
         @endcode
     */
         }
         @endcode
     */
-    virtual bool GetValueFromEditorCtrl(wxControl* editor,
+    virtual bool GetValueFromEditorCtrl(wxWindow* editor,
                                         wxVariant& value);
 
     /**
                                         wxVariant& value);
 
     /**
@@ -1640,8 +1936,8 @@ public:
         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.
     */
-    virtual bool LeftClick( wxPoint cursor,
-                            wxRect cell,
+    virtual bool LeftClick( const wxPoint& cursor,
+                            const wxRect& cell,
                             wxDataViewModel * model,
                             const wxDataViewItem & item,
                             unsigned int col );
                             wxDataViewModel * model,
                             const wxDataViewItem & item,
                             unsigned int col );
@@ -1665,7 +1961,8 @@ public:
     /**
         Override this to start a drag operation. Not yet supported.
     */
     /**
         Override this to start a drag operation. Not yet supported.
     */
-    virtual bool StartDrag(wxPoint cursor, wxRect cell,
+    virtual bool StartDrag(const wxPoint& cursor,
+                           const wxRect& cell,
                            wxDataViewModel* model,
                            const wxDataViewItem & item,
                            unsigned int col);
                            wxDataViewModel* model,
                            const wxDataViewItem & item,
                            unsigned int col);
@@ -1930,7 +2227,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
@@ -1986,7 +2283,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
@@ -1999,7 +2296,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
@@ -2018,17 +2315,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.
@@ -2040,6 +2337,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.
     */
@@ -2053,7 +2366,7 @@ public:
     /**
          Sets the value in the store and update the control.
 
     /**
          Sets the value in the store and update the control.
 
-         This method assumes that the string is stored in respective
+         This method assumes that the string is stored in respective
          column.
     */
     void SetTextValue( const wxString &value, unsigned int row, unsigned int col );
          column.
     */
     void SetTextValue( const wxString &value, unsigned int row, unsigned int col );
@@ -2061,7 +2374,7 @@ public:
     /**
          Returns the value from the store.
 
     /**
          Returns the value from the store.
 
-         This method assumes that the string is stored in respective
+         This method assumes that the string is stored in respective
          column.
     */
     wxString GetTextValue( unsigned int row, unsigned int col ) const;
          column.
     */
     wxString GetTextValue( unsigned int row, unsigned int col ) const;
@@ -2069,7 +2382,7 @@ public:
     /**
          Sets the value in the store and update the control.
 
     /**
          Sets the value in the store and update the control.
 
-         This method assumes that the boolean value is stored in
+         This method assumes that the boolean value is stored in
          respective column.
     */
     void SetToggleValue( bool value, unsigned int row, unsigned int col );
          respective column.
     */
     void SetToggleValue( bool value, unsigned int row, unsigned int col );
@@ -2077,11 +2390,24 @@ public:
     /**
          Returns the value from the store.
 
     /**
          Returns the value from the store.
 
-         This method assumes that the boolean value is stored in
+         This method assumes that the boolean value is stored in
          respective column.
     */
     bool GetToggleValue( unsigned int row, unsigned int col ) const;
 
          respective column.
     */
     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);
+
     //@}
 };
 
     //@}
 };
 
@@ -2361,7 +2687,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.
@@ -2370,7 +2696,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.
@@ -2379,7 +2705,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.
@@ -2392,23 +2718,51 @@ public:
     void DeleteAllItems();
 
     /**
     void DeleteAllItems();
 
     /**
-        Overriden from wxDataViewModel
+        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
     */
     virtual unsigned int GetColumnCount() const;
 
     /**
     */
     virtual unsigned int GetColumnCount() const;
 
     /**
-        Overriden from wxDataViewModel
+        Overridden from wxDataViewModel
     */
     virtual wxString GetColumnType( unsigned int col ) const;
 
     /**
     */
     virtual wxString GetColumnType( unsigned int col ) const;
 
     /**
-        Overriden from wxDataViewIndexListModel
+        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
     */
     virtual void GetValueByRow( wxVariant &value,
                            unsigned int row, unsigned int col ) const;
 
     /**
     */
     virtual void GetValueByRow( wxVariant &value,
                            unsigned int row, unsigned int col ) const;
 
     /**
-        Overriden from wxDataViewIndexListModel
+        Overridden from wxDataViewIndexListModel
     */
     virtual bool SetValueByRow( const wxVariant &value,
                            unsigned int row, unsigned int col );
     */
     virtual bool SetValueByRow( const wxVariant &value,
                            unsigned int row, unsigned int col );
@@ -2418,7 +2772,7 @@ public:
 /**
     @class wxDataViewTreeStore
 
 /**
     @class wxDataViewTreeStore
 
-    wxDataViewTreeStore is a specialised wxDataViewModel for stroing simple
+    wxDataViewTreeStore is a specialised wxDataViewModel for storing simple
     trees very much like wxTreeCtrl does and it offers a similar API.
 
     This class actually stores the entire tree and the values (therefore its name)
     trees very much like wxTreeCtrl does and it offers a similar API.
 
     This class actually stores the entire tree and the values (therefore its name)
@@ -2480,7 +2834,7 @@ public:
     int GetChildCount(const wxDataViewItem& parent) const;
 
     /**
     int GetChildCount(const wxDataViewItem& parent) const;
 
     /**
-        Returns the client data asoociated with the item.
+        Returns the client data associated with the item.
     */
     wxClientData* GetItemData(const wxDataViewItem& item) const;
 
     */
     wxClientData* GetItemData(const wxDataViewItem& item) const;
 
@@ -2630,13 +2984,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)}
@@ -2677,7 +3033,7 @@ public:
     wxDataViewModel* GetModel() const;
 
     /**
     wxDataViewModel* GetModel() const;
 
     /**
-        Returns the position of a context menu event in screen coordinates.
+        Returns the position of a context menu event in screen coordinates.
     */
     wxPoint GetPosition() const;
 
     */
     wxPoint GetPosition() const;
 
@@ -2686,13 +3042,33 @@ public:
     */
     const wxVariant& GetValue() const;
 
     */
     const wxVariant& GetValue() const;
 
+    /**
+        Can be used to determine whether the new value is going to be accepted
+        in wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE handler.
+
+        Returns @true if editing the item was cancelled or if the user tried to
+        enter an invalid value (refused by wxDataViewRenderer::Validate()). If
+        this method returns @false, it means that the value in the model is
+        about to be changed to the new one.
+
+        Notice that wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE event handler can
+        call wxNotifyEvent::Veto() to prevent this from happening.
+
+        Currently support for setting this field and for vetoing the change is
+        only available in the generic version of wxDataViewCtrl, i.e. under MSW
+        but not GTK nor OS X.
+
+        @since 2.9.3
+     */
+    bool IsEditCancelled() const;
+
     /**
         Sets the column index associated with this event.
     */
     void SetColumn(int col);
 
     /**
     /**
         Sets the column index associated with this event.
     */
     void SetColumn(int col);
 
     /**
-        For wxEVT_DATAVIEW_COLUMN_HEADER_CLICKED only.
+        For @c wxEVT_DATAVIEW_COLUMN_HEADER_CLICK only.
     */
     void SetDataViewColumn(wxDataViewColumn* col);
 
     */
     void SetDataViewColumn(wxDataViewColumn* col);
 
@@ -2711,41 +3087,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.