]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/dataview.h
add handling of wxWrapSizer flags (part of ticket 9468)
[wxWidgets.git] / interface / dataview.h
index e32f513867a027cfb310ca5a9528a6c72b632ca9..533e8ec36bd16e4168f98953d333b735a379cdb3 100644 (file)
@@ -16,7 +16,7 @@
     a wxVariant.
 
     @library{wxbase}
-    @category{FIXME}
+    @category{dvc}
 */
 class wxDataViewIconText : public wxObject
 {
@@ -60,7 +60,7 @@ public:
     wxDataViewEvent - the event class for the wxDataViewCtrl notifications
 
     @library{wxadv}
-    @category{FIXME}
+    @category{events,dvc}
 */
 class wxDataViewEvent : public wxNotifyEvent
 {
@@ -129,153 +129,6 @@ public:
 
 
 
-/**
-    @class wxDataViewIconTextRenderer
-    @wxheader{dataview.h}
-
-    The wxDataViewIconTextRenderer class is used to display text with
-    a small icon next to it as it is typically done in a file manager.
-    This classes uses the wxDataViewIconText
-    helper class to store its data. wxDataViewIonText can be converted
-    to a from a wxVariant using the left shift
-    operator.
-
-    @library{wxadv}
-    @category{FIXME}
-*/
-class wxDataViewIconTextRenderer : public wxDataViewRenderer
-{
-public:
-    /**
-
-    */
-    wxDataViewIconTextRenderer(const wxString& varianttype = "wxDataViewIconText",
-                               wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT);
-};
-
-
-
-/**
-    @class wxDataViewIndexListModel
-    @wxheader{dataview.h}
-
-    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 special in the it is implemented differently under OS X
-    and other platforms. Under OS X a wxDataViewItem is always persistent
-    and this is also the case for this class. Under other platforms, the
-    meaning of a wxDataViewItem is changed to reflect a row number for
-    wxDataViewIndexListModel. The consequence of this is that
-    wxDataViewIndexListModel can be used as a virtual model with an
-    almost infinate number of items on platforms other than OS X.
-
-    @library{wxbase}
-    @category{FIXME}
-*/
-class wxDataViewIndexListModel : public wxDataViewModel
-{
-public:
-    /**
-        Constructor.
-    */
-    wxDataViewIndexListModel(unsigned int initial_size = 0);
-
-    /**
-        Destructor.
-    */
-    ~wxDataViewIndexListModel();
-
-    /**
-        Compare method that sorts the items by their index.
-    */
-    int Compare(const wxDataViewItem& item1,
-                const wxDataViewItem& item2,
-                unsigned int column, bool ascending);
-
-    /**
-        Oberride this to indicate that the row has special font attributes.
-        This only affects the
-        wxDataViewTextRendererText() renderer.
-        See also wxDataViewItemAttr.
-    */
-    bool GetAttr(unsigned int row, unsigned int col,
-                 wxDataViewItemAttr& attr);
-
-    /**
-        Returns the wxDataViewItem at the given @e row.
-    */
-    wxDataViewItem GetItem(unsigned int row) const;
-
-    /**
-        Returns the position of given @e item.
-    */
-    unsigned int GetRow(const wxDataViewItem& item) const;
-
-    /**
-        Override this to allow getting values from the model.
-    */
-    void GetValue(wxVariant& variant, unsigned int row,
-                  unsigned int col) 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);
-
-    /**
-        Called in order to set a value in the model.
-    */
-    bool SetValue(const wxVariant& variant, unsigned int row,
-                  unsigned int col);
-};
-
-
-
 /**
     @class wxDataViewModel
     @wxheader{dataview.h}
@@ -341,6 +194,7 @@ public:
     Currently wxWidgets provides the following models apart
     from the base model:
     wxDataViewIndexListModel,
+    wxDataViewVirtualListModel,
     wxDataViewTreeStore.
 
     Note that wxDataViewModel is reference counted, derives from
@@ -359,7 +213,7 @@ public:
 
 
     @library{wxadv}
-    @category{FIXME}
+    @category{dvc}
 */
 class wxDataViewModel : public wxObjectRefData
 {
@@ -542,146 +396,147 @@ public:
 
 
 /**
-    @class wxDataViewCustomRenderer
+    @class wxDataViewIndexListModel
     @wxheader{dataview.h}
 
-    You need to derive a new class from wxDataViewCustomRenderer in
-    order to write a new renderer. You need to override at least
-    wxDataViewRenderer::SetValue,
-    wxDataViewRenderer::GetValue,
-    wxDataViewCustomRenderer::GetSize
-    and wxDataViewCustomRenderer::Render.
-
-    If you want your renderer to support in-place editing then you
-    also need to override
-    wxDataViewCustomRenderer::HasEditorCtrl,
-    wxDataViewCustomRenderer::CreateEditorCtrl
-    and wxDataViewCustomRenderer::GetValueFromEditorCtrl.
-    Note that a special event handler will be pushed onto that
-    editor control which handles ENTER and focus out events
-    in order to end the editing.
+    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.
 
-    @library{wxadv}
-    @category{FIXME}
+    @library{wxbase}
+    @category{dvc}
 */
-class wxDataViewCustomRenderer : public wxDataViewRenderer
+class wxDataViewIndexListModel : public wxDataViewModel
 {
 public:
     /**
         Constructor.
     */
-    wxDataViewCustomRenderer(const wxString& varianttype = "string",
-                             wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
-                             bool no_init = false);
+    wxDataViewIndexListModel(unsigned int initial_size = 0);
 
     /**
         Destructor.
     */
-    ~wxDataViewCustomRenderer();
+    ~wxDataViewIndexListModel();
 
     /**
-        Override this to react to double clicks or ENTER.
+        Compare method that sorts the items by their index.
     */
-    virtual bool Activate( wxRect cell,
-                           wxDataViewModel* model,
-                           const wxDataViewItem & item,
-                           unsigned int col );
+    int Compare(const wxDataViewItem& item1,
+                const wxDataViewItem& item2,
+                unsigned int column, bool ascending);
 
     /**
-        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:
+        Oberride this to indicate that the row has special font attributes.
+        This only affects the
+        wxDataViewTextRendererText() renderer.
+        See also wxDataViewItemAttr.
     */
-    virtual wxControl* CreateEditorCtrl(wxWindow* parent,
-                                        wxRect labelRect,
-                                        const wxVariant& value);
+    bool GetAttr(unsigned int row, unsigned int col,
+                 wxDataViewItemAttr& attr);
 
     /**
-        Create DC on request. Internal.
+        Returns the wxDataViewItem at the given @e row.
     */
-    virtual wxDC* GetDC();
+    wxDataViewItem GetItem(unsigned int row) const;
 
     /**
-        Return size required to show content.
+        Returns the position of given @e item.
     */
-    virtual wxSize GetSize();
+    unsigned int GetRow(const wxDataViewItem& item) const;
 
     /**
-        Overrride this so that the renderer can get the value
-        from the editor control (pointed to by @e editor):
+        Override this to allow getting values from the model.
     */
-    virtual bool GetValueFromEditorCtrl(wxControl* editor,
-                                        wxVariant& value);
+    void GetValue(wxVariant& variant, unsigned int row,
+                  unsigned int col) const;
 
     /**
-        Override this and make it return @e @true in order to
-        indicate that this renderer supports in-place editing.
+        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.
     */
-    virtual bool HasEditorCtrl();
+    void Reset(unsigned int new_size);
 
     /**
-        Overrride this to react to a left click.
+        Call this after a row has been appended to the model.
     */
-    virtual bool LeftClick( wxPoint cursor,
-                            wxRect cell,
-                            wxDataViewModel * model,
-                            const wxDataViewItem & item,
-                            unsigned int col );
+    void RowAppended();
 
     /**
-        Override this to render the cell. Before this is called,
-        wxDataViewRenderer::SetValue was called
-        so that this instance knows what to render.
+        Call this after a row has been changed.
     */
-    virtual bool Render(wxRect cell, wxDC* dc, int state);
+    void RowChanged(unsigned int row);
 
     /**
-        This method should be called from within Render()
-        whenever you need to render simple text. This will ensure that the
-        correct colour, font and vertical alignment will be chosen so the
-        text will look the same as text drawn by native renderers.
+        Call this after a row has been deleted.
     */
-    bool RenderText(const wxString& text, int xoffset, wxRect cell,
-                    wxDC* dc, int state);
+    void RowDeleted(unsigned int row);
 
     /**
-        Overrride this to react to a right click.
+        Call this after a row has been inserted at the given position.
     */
-    virtual bool RightClick(wxPoint cursor,
-                            wxRect cell,
-                            wxDataViewModel* model,
-                            const wxDataViewItem & item,
-                            unsigned int col);
+    void RowInserted(unsigned int before);
 
     /**
-        Overrride this to start a drag operation.
+        Call this after a row has been prepended to the model.
     */
-    virtual bool StartDrag(wxPoint cursor, wxRect cell,
-                           wxDataViewModel* model,
-                           const wxDataViewItem & item,
-                           unsigned int col);
+    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);
+
+    /**
+        Called in order to set a value in the model.
+    */
+    bool SetValue(const wxVariant& variant, unsigned int row,
+                  unsigned int col);
 };
 
 
 
 /**
-    @class wxDataViewBitmapRenderer
+    @class wxDataViewVirtualListModel
     @wxheader{dataview.h}
 
-    wxDataViewBitmapRenderer
+    wxDataViewVirtualListModel is a specialized data model which lets
+    you address an item by its position (row) rather than its
+    wxDataViewItem and as such offers the exact same interface as
+    wxDataViewIndexListModel. The important difference is that under
+    platforms other than OS X, using this model will result in a
+    truely virtual control able to handle millions of items as the
+    control doesn't store any item (a feature not supported by the
+    Carbon API under OS X).
 
-    @library{wxadv}
-    @category{FIXME}
+    @see wxDataViewIndexListModel for the API.
+
+    @library{wxbase}
+    @category{dvc}
 */
-class wxDataViewBitmapRenderer : public wxDataViewRenderer
+class wxDataViewVirtualListModel : public wxDataViewModel
 {
 public:
     /**
-
+        Constructor.
     */
-    wxDataViewBitmapRenderer(const wxString& varianttype = "wxBitmap",
-                             wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT);
+    wxDataViewVirtualListModel(unsigned int initial_size = 0);
 };
 
 
@@ -699,7 +554,7 @@ public:
     wxDataViewTextRendererText().
 
     @library{wxadv}
-    @category{FIXME}
+    @category{dvc}
 */
 class wxDataViewItemAttr
 {
@@ -749,7 +604,7 @@ public:
     wxDataViewModel::GetChildren.
 
     @library{wxadv}
-    @category{FIXME}
+    @category{dvc}
 */
 class wxDataViewItem
 {
@@ -811,42 +666,65 @@ public:
     from wxVariant::GetType.
 
     @beginStyleTable
-    @style{wxDV_SINGLE}:
+    @style{wxDV_SINGLE}
            Single selection mode. This is the default.
-    @style{wxDV_MULTIPLE}:
+    @style{wxDV_MULTIPLE}
            Multiple selection mode.
-    @style{wxDV_ROW_LINES}:
+    @style{wxDV_ROW_LINES}
            Use alternating colours for rows if supported by platform and theme.
-    @style{wxDV_HORIZ_RULES}:
+    @style{wxDV_HORIZ_RULES}
            Display fine rules between row if supported.
-    @style{wxDV_VERT_RULES}:
+    @style{wxDV_VERT_RULES}
            Display fine rules between columns is supported.
+    @style{wxDV_VARIABLE_LINE_HEIGHT}
+           Allow variable line heights. This can be inefficient when displaying large number of items.
     @endStyleTable
 
     @library{wxadv}
-    @category{ctrl}
-    @appearance{dataviewctrl.png}
+    @category{ctrl,dvc}
+    <!-- @appearance{dataviewctrl.png} -->
 */
 class wxDataViewCtrl : public wxControl
 {
 public:
-    //@{
     /**
-        Constructor. Calls Create().
+        Default Constructor.
     */
     wxDataViewCtrl();
+    
+    /**
+        Constructor. Calls Create().
+    */
     wxDataViewCtrl(wxWindow* parent, wxWindowID id,
                    const wxPoint& pos = wxDefaultPosition,
                    const wxSize& size = wxDefaultSize,
                    long style = 0,
                    const wxValidator& validator = wxDefaultValidator);
-    //@}
 
     /**
         Destructor.
     */
     ~wxDataViewCtrl();
 
+    /**
+        Appends a wxDataViewColumn to the control. Returns @true on success.
+        Note that there is a number of short cut methods which implicitly create
+        a wxDataViewColumn and a wxDataViewRenderer for it (see below).
+    */
+    virtual bool AppendColumn(wxDataViewColumn* col);
+
+    /**
+        Prepends a wxDataViewColumn to the control. Returns @true on success.
+        Note that there is a number of short cut methods which implicitly create
+        a wxDataViewColumn and a wxDataViewRenderer for it.
+    */
+    virtual bool PrependColumn(wxDataViewColumn* col);
+
+    /**
+        Inserts a wxDataViewColumn to the control. Returns @true on success.
+    */
+    virtual bool InsertColumn(unsigned int pos, wxDataViewColumn* col);
+    
     //@{
     /**
         Appends a column for rendering a bitmap. Returns the wxDataViewColumn
@@ -866,19 +744,13 @@ public:
                                          int flags = wxDATAVIEW_COL_RESIZABLE);
     //@}
 
-    /**
-        Add a wxDataViewColumn to the control. Returns
-        @e @true on success.
-        Note that there is a number of short cut methods which implicitly create
-        a wxDataViewColumn and a
-        wxDataViewRenderer for it (see below).
-    */
-    virtual bool AppendColumn(wxDataViewColumn* col);
-
     //@{
     /**
         Appends a column for rendering a date. Returns the wxDataViewColumn
         created in the function or @NULL on failure.
+        
+        NB: The @e align parameter is applied to both the column header and
+        the column renderer.
     */
     wxDataViewColumn* AppendDateColumn(const wxString& label,
                                        unsigned int model_column,
@@ -897,8 +769,11 @@ public:
     //@{
     /**
         Appends a column for rendering text with an icon. Returns the wxDataViewColumn
-        created in the function or @NULL on failure. This uses the
-        wxDataViewIconTextRenderer.
+        created in the function or @NULL on failure. This method uses the
+        wxDataViewIconTextRenderer class.
+        
+        NB: The @e align parameter is applied to both the column header and
+        the column renderer.
     */
     wxDataViewColumn* AppendIconTextColumn(const wxString& label,
                                            unsigned int model_column,
@@ -917,8 +792,10 @@ public:
     //@{
     /**
         Appends a column for rendering a progress indicator. Returns the
-        wxDataViewColumn
-        created in the function or @NULL on failure.
+        wxDataViewColumn created in the function or @NULL on failure.
+        
+        NB: The @e align parameter is applied to both the column header and
+        the column renderer.
     */
     wxDataViewColumn* AppendProgressColumn(const wxString& label,
                                            unsigned int model_column,
@@ -938,6 +815,9 @@ public:
     /**
         Appends a column for rendering text. Returns the wxDataViewColumn
         created in the function or @NULL on failure.
+        
+        NB: The @e align parameter is applied to both the column header and
+        the column renderer.
     */
     wxDataViewColumn* AppendTextColumn(const wxString& label,
                                        unsigned int model_column,
@@ -957,6 +837,9 @@ public:
     /**
         Appends a column for rendering a toggle. Returns the wxDataViewColumn
         created in the function or @NULL on failure.
+        
+        NB: The @e align parameter is applied to both the column header and
+        the column renderer.
     */
     wxDataViewColumn* AppendToggleColumn(const wxString& label,
                                          unsigned int model_column,
@@ -973,8 +856,8 @@ public:
     //@}
 
     /**
-        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.
     */
     virtual bool AssociateModel(wxDataViewModel* model);
 
@@ -1135,7 +1018,7 @@ public:
     information.
 
     @library{wxbase}
-    @category{FIXME}
+    @category{dvc}
 */
 class wxDataViewModelNotifier
 {
@@ -1158,7 +1041,7 @@ public:
     /**
         Get owning wxDataViewModel.
     */
-    wxDataViewModel* GetOwner();
+    wxDataViewModel* GetOwner() const;
 
     /**
         Called by owning model.
@@ -1216,10 +1099,9 @@ public:
     @class wxDataViewRenderer
     @wxheader{dataview.h}
 
-    This class is used by wxDataViewCtrl to
-    render the individual cells. One instance of a renderer class is
-    owned by wxDataViewColumn. There is
-    a number of ready-to-use renderers provided:
+    This class is used by wxDataViewCtrl to render the individual cells.
+    One instance of a renderer class is owned by a wxDataViewColumn. There
+    is a number of ready-to-use renderers provided:
     wxDataViewTextRenderer,
     wxDataViewTextRendererAttr,
     wxDataViewIconTextRenderer,
@@ -1267,17 +1149,22 @@ public:
 
 
     @library{wxadv}
-    @category{FIXME}
+    @category{dvc}
 */
 class wxDataViewRenderer : public wxObject
 {
 public:
     /**
-        Constructor.
+        Constructor. 
     */
     wxDataViewRenderer(const wxString& varianttype,
                        wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
-                       int alignment = wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL);
+                       int align = wxDVR_DEFAULT_ALIGNMENT );
+
+    /**
+        Returns the alignment. See SetAlignment()
+    */
+    virtual int GetAlignment() const;
 
     /**
         Returns the cell mode.
@@ -1287,7 +1174,7 @@ public:
     /**
         Returns pointer to the owning wxDataViewColumn.
     */
-    virtual wxDataViewColumn* GetOwner();
+    virtual wxDataViewColumn* GetOwner() const;
 
     /**
         This methods retrieves the value from the renderer in order to
@@ -1302,6 +1189,15 @@ public:
     */
     virtual wxString GetVariantType();
 
+    /**
+        Sets the alignment of the renderer's content. The default value
+        of wxDVR_DEFAULT_ALIGMENT indicates that the content should 
+        have the same alignment as the column header. The method is
+        not implemented under OS X and the renderer always aligns its
+        contents as the column header on that platform. The other platforms
+        support both vertical and horizontal alignment.
+    */
+    virtual void SetAlignment( int align );
     /**
         Sets the owning wxDataViewColumn. This
         is usually called from within wxDataViewColumn.
@@ -1338,7 +1234,7 @@ public:
     in-place editing if desired.
 
     @library{wxadv}
-    @category{FIXME}
+    @category{dvc}
 */
 class wxDataViewTextRenderer : public wxDataViewRenderer
 {
@@ -1347,7 +1243,35 @@ public:
 
     */
     wxDataViewTextRenderer(const wxString& varianttype = "string",
-                           wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT);
+                           wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+                           int align = wxDVR_DEFAULT_ALIGNMENT );
+};
+
+
+
+/**
+    @class wxDataViewIconTextRenderer
+    @wxheader{dataview.h}
+
+    The wxDataViewIconTextRenderer class is used to display text with
+    a small icon next to it as it is typically done in a file manager.
+    This classes uses the wxDataViewIconText
+    helper class to store its data. wxDataViewIonText can be converted
+    to a from a wxVariant using the left shift
+    operator.
+
+    @library{wxadv}
+    @category{dvc}
+*/
+class wxDataViewIconTextRenderer : public wxDataViewRenderer
+{
+public:
+    /**
+
+    */
+    wxDataViewIconTextRenderer(const wxString& varianttype = "wxDataViewIconText",
+                               wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+                               int align = wxDVR_DEFAULT_ALIGNMENT );
 };
 
 
@@ -1359,7 +1283,7 @@ public:
     wxDataViewProgressRenderer
 
     @library{wxadv}
-    @category{FIXME}
+    @category{dvc}
 */
 class wxDataViewProgressRenderer : public wxDataViewRenderer
 {
@@ -1367,55 +1291,372 @@ public:
     /**
 
     */
-    wxDataViewProgressRenderer(const wxString& label = wxEmptyString,
-                               const wxString& varianttype = "long",
-                               wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT);
-};
+    wxDataViewProgressRenderer(const wxString& label = wxEmptyString,
+                               const wxString& varianttype = "long",
+                               wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+                               int align = wxDVR_DEFAULT_ALIGNMENT );
+};
+
+
+
+/**
+    @class wxDataViewSpinRenderer
+    @wxheader{dataview.h}
+
+    This is a specialized renderer for rendering integer values. It
+    supports modifying the values in-place by using a wxSpinCtrl.
+    The renderer only support variants of type @e long.
+
+    @library{wxbase}
+    @category{dvc}
+*/
+class wxDataViewSpinRenderer : public wxDataViewCustomRenderer
+{
+public:
+    /**
+        Constructor. @a min and @a max indicate the minimum und
+        maximum values of for the wxSpinCtrl.
+    */
+    wxDataViewSpinRenderer(int min, int max,
+                           wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE,
+                           int align = wxDVR_DEFAULT_ALIGNMENT);
+};
+
+
+
+/**
+    @class wxDataViewToggleRenderer
+    @wxheader{dataview.h}
+
+    wxDataViewToggleRenderer
+
+    @library{wxadv}
+    @category{dvc}
+*/
+class wxDataViewToggleRenderer : public wxDataViewRenderer
+{
+public:
+    /**
+
+    */
+    wxDataViewToggleRenderer(const wxString& varianttype = "bool",
+                             wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT);
+};
+
+
+
+/**
+    @class wxDataViewDateRenderer
+    @wxheader{dataview.h}
+
+    wxDataViewDateRenderer
+
+    @library{wxadv}
+    @category{dvc}
+*/
+class wxDataViewDateRenderer : public wxDataViewRenderer
+{
+public:
+    /**
+
+    */
+    wxDataViewDateRenderer(const wxString& varianttype = "datetime",
+                           wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE);
+};
+
+
+
+/**
+    @class wxDataViewTextRendererAttr
+    @wxheader{dataview.h}
+
+    The same as wxDataViewTextRenderer but with
+    support for font attributes. Font attributes are currently only supported
+    under GTK+ and MSW.
+
+    See also wxDataViewModel::GetAttr and
+    wxDataViewItemAttr.
+
+    @library{wxadv}
+    @category{dvc}
+*/
+class wxDataViewTextRendererAttr : public wxDataViewTextRenderer
+{
+public:
+    /**
+
+    */
+    wxDataViewTextRendererAttr(const wxString& varianttype = "string",
+                               wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+                               int align = wxDVR_DEFAULT_ALIGNMENT);
+};
+
+
+
+/**
+    @class wxDataViewCustomRenderer
+    @wxheader{dataview.h}
+
+    You need to derive a new class from wxDataViewCustomRenderer in
+    order to write a new renderer. You need to override at least
+    wxDataViewRenderer::SetValue,
+    wxDataViewRenderer::GetValue,
+    wxDataViewCustomRenderer::GetSize
+    and wxDataViewCustomRenderer::Render.
+
+    If you want your renderer to support in-place editing then you
+    also need to override
+    wxDataViewCustomRenderer::HasEditorCtrl,
+    wxDataViewCustomRenderer::CreateEditorCtrl
+    and wxDataViewCustomRenderer::GetValueFromEditorCtrl.
+    Note that a special event handler will be pushed onto that
+    editor control which handles ENTER and focus out events
+    in order to end the editing.
+
+    @library{wxadv}
+    @category{dvc}
+*/
+class wxDataViewCustomRenderer : public wxDataViewRenderer
+{
+public:
+    /**
+        Constructor.
+    */
+    wxDataViewCustomRenderer(const wxString& varianttype = "string",
+                             wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+                             int align = wxDVR_DEFAULT_ALIGNMENT );
+
+    /**
+        Destructor.
+    */
+    ~wxDataViewCustomRenderer();
+
+    /**
+        Override this to react to double clicks or ENTER. This method will
+        only be called in wxDATAVIEW_CELL_ACTIVATABLE mode.
+    */
+    virtual bool Activate( wxRect cell,
+                           wxDataViewModel* model,
+                           const wxDataViewItem & item,
+                           unsigned int col );
+
+    /**
+        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:
+    */
+    virtual wxControl* CreateEditorCtrl(wxWindow* parent,
+                                        wxRect labelRect,
+                                        const wxVariant& value);
+
+    /**
+        Create DC on request. Internal.
+    */
+    virtual wxDC* GetDC();
+
+    /**
+        Return size required to show content.
+    */
+    virtual wxSize GetSize();
+
+    /**
+        Overrride this so that the renderer can get the value
+        from the editor control (pointed to by @e editor):
+    */
+    virtual bool GetValueFromEditorCtrl(wxControl* editor,
+                                        wxVariant& value);
+
+    /**
+        Override this and make it return @e @true in order to
+        indicate that this renderer supports in-place editing.
+    */
+    virtual bool HasEditorCtrl();
+
+    /**
+        Overrride this to react to a left click. This method will
+        only be called in wxDATAVIEW_CELL_ACTIVATABLE mode.
+    */
+    virtual bool LeftClick( wxPoint cursor,
+                            wxRect cell,
+                            wxDataViewModel * model,
+                            const wxDataViewItem & item,
+                            unsigned int col );
+
+    /**
+        Override this to render the cell. Before this is called,
+        wxDataViewRenderer::SetValue was called
+        so that this instance knows what to render.
+    */
+    virtual bool Render(wxRect cell, wxDC* dc, int state);
+
+    /**
+        This method should be called from within Render()
+        whenever you need to render simple text. This will ensure that the
+        correct colour, font and vertical alignment will be chosen so the
+        text will look the same as text drawn by native renderers.
+    */
+    bool RenderText(const wxString& text, int xoffset, wxRect cell,
+                    wxDC* dc, int state);
+
+    /**
+        Overrride this to start a drag operation. Not yet
+        supported
+    */
+    virtual bool StartDrag(wxPoint cursor, wxRect cell,
+                           wxDataViewModel* model,
+                           const wxDataViewItem & item,
+                           unsigned int col);
+};
+
+
+
+/**
+    @class wxDataViewBitmapRenderer
+    @wxheader{dataview.h}
+
+    wxDataViewBitmapRenderer
+
+    @library{wxadv}
+    @category{dvc}
+*/
+class wxDataViewBitmapRenderer : public wxDataViewRenderer
+{
+public:
+    /**
+
+    */
+    wxDataViewBitmapRenderer(const wxString& varianttype = "wxBitmap",
+                             wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+                             int align = wxDVR_DEFAULT_ALIGNMENT,
+};
+
+
+
+/**
+    @class wxDataViewColumn
+    @wxheader{dataview.h}
+
+    This class represents a column in a wxDataViewCtrl.
+    One wxDataViewColumn is bound to one column in the data model,
+    to which the wxDataViewCtrl has been associated.
+
+    An instance of wxDataViewRenderer is used by
+    this class to render its data.
+
+    @library{wxadv}
+    @category{dvc}
+*/
+class wxDataViewColumn : public wxObject
+{
+public:
+    //@{
+    /**
+        Constructors.
+    */
+    wxDataViewColumn(const wxString& title,
+                     wxDataViewRenderer* renderer,
+                     unsigned int model_column,
+                     int width = wxDVC_DEFAULT_WIDTH,
+                     wxAlignment align = wxALIGN_CENTRE,
+                     int flags = wxDATAVIEW_COL_RESIZABLE);
+    wxDataViewColumn(const wxBitmap& bitmap,
+                     wxDataViewRenderer* renderer,
+                     unsigned int model_column,
+                     int width = wxDVC_DEFAULT_WIDTH,
+                     wxAlignment align = wxALIGN_CENTRE,
+                     int flags = wxDATAVIEW_COL_RESIZABLE);
+    //@}
+
+    /**
+        Destructor.
+    */
+    ~wxDataViewColumn();
+
+    /**
+        Returns the bitmap in the header of the column, if any.
+    */
+    const wxBitmap GetBitmap();
+
+    /**
+        Returns the index of the column of the model, which this
+        wxDataViewColumn is displaying.
+    */
+    unsigned int GetModelColumn();
+
+    /**
+        Returns the owning wxDataViewCtrl.
+    */
+    wxDataViewCtrl* GetOwner() const;
 
+    /**
+        Returns the renderer of this wxDataViewColumn.
+        See also wxDataViewRenderer.
+    */
+    wxDataViewRenderer* GetRenderer();
 
+    /**
+        Returns @true if the column is reorderable.
+    */
+    bool GetReorderable();
 
-/**
-    @class wxDataViewSpinRenderer
-    @wxheader{dataview.h}
+    /**
+        Returns @true if the column is sortable.
+        See SetSortable()
+    */
+    bool GetSortable();
 
-    This is a specialized renderer for rendering integer values. It
-    supports modifying the values in-place by using a wxSpinCtrl.
-    The renderer only support variants of type @e long.
+    /**
+        Returns the width of the column.
+    */
+    int GetWidth();
 
-    @library{wxbase}
-    @category{FIXME}
-*/
-class wxDataViewSpinRenderer : public wxDataViewCustomRenderer
-{
-public:
     /**
-        Constructor. @a min and @a max indicate the minimum und
-        maximum values of for the wxSpinCtrl.
+        Returns @true, if the sort order is ascending.
+        See also SetSortOrder()
     */
-    wxDataViewSpinRenderer(int min, int max,
-                           wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE,
-                           int alignment = wxDVR_DEFAULT_ALIGNMENT);
-};
+    bool IsSortOrderAscending();
 
+    /**
+        Set the alignment of the column header.
+    */
+    void SetAlignment(wxAlignment align);
 
+    /**
+        Set the bitmap of the column header.
+    */
+    void SetBitmap(const wxBitmap& bitmap);
 
-/**
-    @class wxDataViewToggleRenderer
-    @wxheader{dataview.h}
+    /**
+        Indicate wether the column can be reordered by the
+        user using the mouse. This is typically implemented
+        visually by dragging the header button around.
+    */
+    void SetReorderable(bool reorderable);
 
-    wxDataViewToggleRenderer
+    /**
+        Indicate the sort order if the implementation of the
+        wxDataViewCtrl supports it, most commonly by showing
+        a little arrow.
+    */
+    void SetSortOrder(bool ascending);
 
-    @library{wxadv}
-    @category{FIXME}
-*/
-class wxDataViewToggleRenderer : public wxDataViewRenderer
-{
-public:
     /**
+        Indicate that the column is sortable. This does
+        not show any sorting indicate yet, but it does
+        make the column header clickable. Call
+        SetSortOrder()
+        afterwards to actually make the sort indicator appear.
+        If @a sortable is @false, the column header is
+        no longer clickable and the sort indicator (little
+        arrow) will disappear.
+    */
+    void SetSortable(bool sortable);
 
+    /**
+        Set the title of the column header to @e title.
     */
-    wxDataViewToggleRenderer(const wxString& varianttype = "bool",
-                             wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT);
+    void SetTitle(const wxString& title);
 };
 
 
@@ -1432,8 +1673,8 @@ public:
     to the wxDataViewCtrl class simpler.
 
     @library{wxbase}
-    @category{ctrl}
-    @appearance{dataviewtreectrl.png}
+    @category{ctrl,dvc}
+    <!-- @appearance{dataviewtreectrl.png} -->
 */
 class wxDataViewTreeCtrl : public wxDataViewCtrl
 {
@@ -1623,7 +1864,7 @@ public:
     This comes at the price of much reduced flexibility.
 
     @library{wxadv}
-    @category{FIXME}
+    @category{dvc}
 */
 class wxDataViewTreeStore : public wxDataViewModel
 {
@@ -1754,179 +1995,3 @@ public:
     void SetItemIcon(const wxDataViewItem& item, const wxIcon& icon);
 };
 
-
-
-/**
-    @class wxDataViewDateRenderer
-    @wxheader{dataview.h}
-
-    wxDataViewDateRenderer
-
-    @library{wxadv}
-    @category{FIXME}
-*/
-class wxDataViewDateRenderer : public wxDataViewRenderer
-{
-public:
-    /**
-
-    */
-    wxDataViewDateRenderer(const wxString& varianttype = "datetime",
-                           wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE);
-};
-
-
-
-/**
-    @class wxDataViewTextRendererAttr
-    @wxheader{dataview.h}
-
-    The same as wxDataViewTextRenderer but with
-    support for font attributes. Font attributes are currently only supported
-    under GTK+ and MSW.
-
-    See also wxDataViewModel::GetAttr and
-    wxDataViewItemAttr.
-
-    @library{wxadv}
-    @category{FIXME}
-*/
-class wxDataViewTextRendererAttr : public wxDataViewTextRenderer
-{
-public:
-    /**
-
-    */
-    wxDataViewTextRendererAttr(const wxString& varianttype = "string",
-                               wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
-                               int align = wxDVR_DEFAULT_ALIGNMENT);
-};
-
-
-
-/**
-    @class wxDataViewColumn
-    @wxheader{dataview.h}
-
-    This class represents a column in a wxDataViewCtrl.
-    One wxDataViewColumn is bound to one column in the data model,
-    to which the wxDataViewCtrl has been associated.
-
-    An instance of wxDataViewRenderer is used by
-    this class to render its data.
-
-    @library{wxadv}
-    @category{FIXME}
-*/
-class wxDataViewColumn : public wxObject
-{
-public:
-    //@{
-    /**
-        Constructors.
-    */
-    wxDataViewColumn(const wxString& title,
-                     wxDataViewRenderer* renderer,
-                     unsigned int model_column,
-                     int width = wxDVC_DEFAULT_WIDTH,
-                     wxAlignment align = wxALIGN_CENTRE,
-                     int flags = wxDATAVIEW_COL_RESIZABLE);
-    wxDataViewColumn(const wxBitmap& bitmap,
-                     wxDataViewRenderer* renderer,
-                     unsigned int model_column,
-                     int width = wxDVC_DEFAULT_WIDTH,
-                     wxAlignment align = wxALIGN_CENTRE,
-                     int flags = wxDATAVIEW_COL_RESIZABLE);
-    //@}
-
-    /**
-        Destructor.
-    */
-    ~wxDataViewColumn();
-
-    /**
-        Returns the bitmap in the header of the column, if any.
-    */
-    const wxBitmap GetBitmap();
-
-    /**
-        Returns the index of the column of the model, which this
-        wxDataViewColumn is displaying.
-    */
-    unsigned int GetModelColumn();
-
-    /**
-        Returns the owning wxDataViewCtrl.
-    */
-    wxDataViewCtrl* GetOwner();
-
-    /**
-        Returns the renderer of this wxDataViewColumn.
-        See also wxDataViewRenderer.
-    */
-    wxDataViewRenderer* GetRenderer();
-
-    /**
-        Returns @true if the column is reorderable.
-    */
-    bool GetReorderable();
-
-    /**
-        Returns @true if the column is sortable.
-        See SetSortable()
-    */
-    bool GetSortable();
-
-    /**
-        Returns the width of the column.
-    */
-    int GetWidth();
-
-    /**
-        Returns @true, if the sort order is ascending.
-        See also SetSortOrder()
-    */
-    bool IsSortOrderAscending();
-
-    /**
-        Set the alignment of the column header.
-    */
-    void SetAlignment(wxAlignment align);
-
-    /**
-        Set the bitmap of the column header.
-    */
-    void SetBitmap(const wxBitmap& bitmap);
-
-    /**
-        Indicate wether the column can be reordered by the
-        user using the mouse. This is typically implemented
-        visually by dragging the header button around.
-    */
-    void SetReorderable(bool reorderable);
-
-    /**
-        Indicate the sort order if the implementation of the
-        wxDataViewCtrl supports it, most commonly by showing
-        a little arrow.
-    */
-    void SetSortOrder(bool ascending);
-
-    /**
-        Indicate that the column is sortable. This does
-        not show any sorting indicate yet, but it does
-        make the column header clickable. Call
-        SetSortOrder()
-        afterwards to actually make the sort indicator appear.
-        If @a sortable is @false, the column header is
-        no longer clickable and the sort indicator (little
-        arrow) will disappear.
-    */
-    void SetSortable(bool sortable);
-
-    /**
-        Set the title of the column header to @e title.
-    */
-    void SetTitle(const wxString& title);
-};
-