]> 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 0f0b1f82e08b93a2a59cc196790a107a3bfbe9f1..533e8ec36bd16e4168f98953d333b735a379cdb3 100644 (file)
@@ -1,6 +1,6 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        dataview.h
-// Purpose:     documentation for wxDataViewIconText class
+// Purpose:     interface of wxDataViewIconText
 // Author:      wxWidgets team
 // RCS-ID:      $Id$
 // Licence:     wxWindows license
@@ -16,7 +16,7 @@
     a wxVariant.
 
     @library{wxbase}
-    @category{FIXME}
+    @category{dvc}
 */
 class wxDataViewIconText : public wxObject
 {
@@ -33,12 +33,12 @@ public:
     /**
         Gets the icon.
     */
-    const wxIcon GetIcon();
+    const wxIcon GetIcon() const;
 
     /**
         Gets the text.
     */
-    wxString GetText();
+    wxString GetText() const;
 
     /**
         Set the icon.
@@ -52,6 +52,7 @@ public:
 };
 
 
+
 /**
     @class wxDataViewEvent
     @wxheader{dataview.h}
@@ -59,16 +60,16 @@ public:
     wxDataViewEvent - the event class for the wxDataViewCtrl notifications
 
     @library{wxadv}
-    @category{FIXME}
+    @category{events,dvc}
 */
 class wxDataViewEvent : public wxNotifyEvent
 {
 public:
     //@{
     /**
-        
+
     */
-    wxDataViewEvent(wxEventType commandType = wxEVT_@NULL,
+    wxDataViewEvent(wxEventType commandType = wxEVT_NULL,
                     int winid = 0);
     wxDataViewEvent(const wxDataViewEvent& event);
     //@}
@@ -76,13 +77,13 @@ public:
     /**
         Used to clone the event.
     */
-    wxEvent* Clone();
+    wxEvent* Clone() const;
 
     /**
         Returns the position of the column in the control or -1
         if no column field was set by the event emitter.
     */
-    int GetColumn();
+    int GetColumn() const;
 
     /**
         Returns a pointer to the wxDataViewColumn from which
@@ -93,20 +94,20 @@ public:
     /**
         Returns the wxDataViewModel associated with the event.
     */
-    wxDataViewModel* GetModel();
+    wxDataViewModel* GetModel() const;
 
     /**
         Returns a the position of a context menu event in screen coordinates.
     */
-    wxPoint GetPosition();
+    wxPoint GetPosition() const;
 
     /**
         Returns a reference to a value.
     */
-    const wxVariant GetValue();
+    const wxVariant GetValue() const;
 
     /**
-        
+
     */
     void SetColumn(int col);
 
@@ -116,162 +117,17 @@ public:
     void SetDataViewColumn(wxDataViewColumn* col);
 
     /**
-        
+
     */
     void SetModel(wxDataViewModel* model);
 
     /**
-        
-    */
-    void SetValue(const wxVariant& value);
-};
-
-
-/**
-    @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);
+    void SetValue(const wxVariant& value);
 };
 
 
-/**
-    @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);
-
-    /**
-        Returns the position of given @e item.
-    */
-    unsigned int GetRow(const wxDataViewItem& item);
-
-    /**
-        Override this to allow getting values from the model.
-    */
-    void GetValue(wxVariant& variant, unsigned int row,
-                  unsigned int col);
-
-    /**
-        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
@@ -338,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
@@ -356,7 +213,7 @@ public:
 
 
     @library{wxadv}
-    @category{FIXME}
+    @category{dvc}
 */
 class wxDataViewModel : public wxObjectRefData
 {
@@ -387,7 +244,6 @@ public:
         The compare function to be used by control. The default compare function
         sorts by container and other items separately and in ascending order.
         Override this for a different sorting behaviour.
-        
         See also HasDefaultCompare().
     */
     virtual int Compare(const wxDataViewItem& item1,
@@ -398,8 +254,7 @@ public:
     /**
         Oberride this to indicate that the item has special font attributes.
         This only affects the
-        wxDataViewTextRendererText renderer.
-        
+        wxDataViewTextRendererText() renderer.
         See also wxDataViewItemAttr.
     */
     bool GetAttr(const wxDataViewItem& item, unsigned int col,
@@ -410,26 +265,26 @@ public:
         an item. Returns the number of items.
     */
     virtual unsigned int GetChildren(const wxDataViewItem& item,
-                                     wxDataViewItemArray& children);
+                                     wxDataViewItemArray& children) const;
 
     /**
         Override this to indicate the number of columns in the model.
     */
-    virtual unsigned int GetColumnCount();
+    virtual unsigned int GetColumnCount() const;
 
     /**
         Override this to indicate what type of data is stored in the
         column specified by @e col. This should return a string
         indicating the type of data as reported by wxVariant.
     */
-    virtual wxString GetColumnType(unsigned int col);
+    virtual wxString GetColumnType(unsigned int col) const;
 
     /**
         Override this to indicate which wxDataViewItem representing the parent
-        of @e item or an invalid wxDataViewItem if the the root item is
+        of @a item or an invalid wxDataViewItem if the the root item is
         the parent item.
     */
-    virtual wxDataViewItem GetParent(const wxDataViewItem& item);
+    virtual wxDataViewItem GetParent(const wxDataViewItem& item) const;
 
     /**
         Override this to indicate the value of @e item
@@ -437,7 +292,7 @@ public:
     */
     virtual void GetValue(wxVariant& variant,
                           const wxDataViewItem& item,
-                          unsigned int col);
+                          unsigned int col) const;
 
     /**
         Override this method to indicate if a container item merely
@@ -445,7 +300,7 @@ public:
         acts a normal item with entries for futher columns. By
         default returns @e @false.
     */
-    virtual bool HasContainerColumns(const wxDataViewItem& item);
+    virtual bool HasContainerColumns(const wxDataViewItem& item) const;
 
     /**
         Override this to indicate that the model provides a default compare
@@ -456,13 +311,13 @@ public:
         should be used. See also wxDataViewIndexListModel
         for a model which makes use of this.
     */
-    virtual bool HasDefaultCompare();
+    virtual bool HasDefaultCompare() const;
 
     /**
-        Override this to indicate of @e 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);
+    virtual bool IsContainer(const wxDataViewItem& item) const;
 
     /**
         Call this to inform the model that an item has been added
@@ -473,7 +328,6 @@ public:
 
     /**
         Call this to inform the model that an item has changed.
-        
         This will eventually emit a wxEVT_DATAVIEW_ITEM_VALUE_CHANGED
         event (in which the column fields will not be set) to the user.
     */
@@ -494,7 +348,6 @@ public:
 
     /**
         Call this to inform the model that several items have changed.
-        
         This will eventually emit wxEVT_DATAVIEW_ITEM_VALUE_CHANGED
         events (in which the column fields will not be set) to the user.
     */
@@ -507,7 +360,7 @@ public:
                               const wxDataViewItemArray& items);
 
     /**
-        Remove the @e notifier from the list of notifiers.
+        Remove the @a notifier from the list of notifiers.
     */
     void RemoveNotifier(wxDataViewModelNotifier* notifier);
 
@@ -533,7 +386,6 @@ public:
         been changed. 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
         event to the user.
     */
@@ -542,160 +394,167 @@ 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,
-                          unsigned int col,
-                          unsigned int row);
+    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. @e parent is the parent of the editor
-        control, @e labelRect indicates the position and
-        size of the editor control and @e 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.
     */
-#define virtual wxDC* GetDC()     /* implementation is private */
+    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,
-                           unsigned int col,
-                           unsigned int row);
+    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,
-                            unsigned int col,
-                            unsigned int row);
+    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,
-                           unsigned int col,
-                           unsigned int row);
+    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);
 };
 
 
+
 /**
     @class wxDataViewItemAttr
     @wxheader{dataview.h}
 
     This class is used to indicate to a wxDataViewCtrl
-    that a certain Item has extra font attributes
+    that a certain Item() has extra font attributes
     for its renderer. For this, it is required to override
     wxDataViewModel::GetAttr.
 
     Attributes are currently only supported by
-    wxDataViewTextRendererText.
+    wxDataViewTextRendererText().
 
     @library{wxadv}
-    @category{FIXME}
+    @category{dvc}
 */
 class wxDataViewItemAttr
 {
@@ -723,6 +582,7 @@ public:
 };
 
 
+
 /**
     @class wxDataViewItem
     @wxheader{dataview.h}
@@ -744,31 +604,32 @@ public:
     wxDataViewModel::GetChildren.
 
     @library{wxadv}
-    @category{FIXME}
+    @category{dvc}
 */
 class wxDataViewItem
 {
 public:
     //@{
     /**
-        
+
     */
-    wxDataViewItem(void* id = @NULL);
+    wxDataViewItem(void* id = NULL);
     wxDataViewItem(const wxDataViewItem& item);
     //@}
 
     /**
         Returns the ID.
     */
-#define void* GetID()     /* implementation is private */
+    void* GetID() const;
 
     /**
         Returns @true if the ID is not @e @NULL.
     */
-#define bool IsOk()     /* implementation is private */
+    bool IsOk() const;
 };
 
 
+
 /**
     @class wxDataViewCtrl
     @wxheader{dataview.h}
@@ -805,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
@@ -860,20 +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,
@@ -892,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,
@@ -912,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,
@@ -933,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,
@@ -952,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,
@@ -968,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);
 
@@ -986,7 +874,7 @@ public:
     /**
         Collapses the item.
     */
-    void Collapse(const wxDataViewItem & item);
+    void Collapse(const wxDataViewItem& item);
 
     /**
         Create the control. Useful for two step creation.
@@ -1005,85 +893,85 @@ public:
     /**
         Call this to ensure that the given item is visible.
     */
-    void EnsureVisible(const wxDataViewItem & item,
-                       const wxDataViewColumn* column = @NULL);
+    void EnsureVisible(const wxDataViewItem& item,
+                       const wxDataViewColumn* column = NULL);
 
     /**
         Expands the item.
     */
-    void Expand(const wxDataViewItem & item);
+    void Expand(const wxDataViewItem& item);
 
     /**
-        Returns pointer to the column. @e pos refers to the
+        Returns pointer to the column. @a pos refers to the
         position in the control which may change after reordering
         columns by the user.
     */
-    virtual wxDataViewColumn* GetColumn(unsigned int pos);
+    virtual wxDataViewColumn* GetColumn(unsigned int pos) const;
 
     /**
         Returns the number of columns.
     */
-    virtual unsigned int GetColumnCount();
+    virtual unsigned int GetColumnCount() const;
 
     /**
         Returns the position of the column or -1 if not found in the control.
     */
-    virtual int GetColumnPosition(const wxDataViewColumn* column);
+    virtual int GetColumnPosition(const wxDataViewColumn* column) const;
 
     /**
         Returns column containing the expanders.
     */
-    wxDataViewColumn * GetExpanderColumn();
+    wxDataViewColumn* GetExpanderColumn() const;
 
     /**
         Returns indentation.
     */
-    int GetIndent();
+    int GetIndent() const;
 
     /**
         Returns item rect.
     */
     wxRect GetItemRect(const wxDataViewItem& item,
-                       const wxDataViewColumn * col = @NULL);
+                       const wxDataViewColumn* col = NULL) const;
 
     /**
         Returns pointer to the data model associated with the
         control (if any).
     */
-    virtual wxDataViewModel* GetModel();
+    virtual wxDataViewModel* GetModel() const;
 
     /**
         Returns first selected item or an invalid item if none is selected.
     */
-    wxDataViewItem GetSelection();
+    wxDataViewItem GetSelection() const;
 
     /**
-        Fills @e sel with currently selected items and returns
+        Fills @a sel with currently selected items and returns
         their number.
     */
-    int GetSelections(wxDataViewItemArray & sel);
+    int GetSelections(wxDataViewItemArray& sel) const;
 
     /**
         Returns the wxDataViewColumn currently responsible for sorting
         or @NULL if none has been selected.
     */
-    virtual wxDataViewColumn* GetSortingColumn();
+    virtual wxDataViewColumn* GetSortingColumn() const;
 
     /**
         Hittest.
     */
     void HitTest(const wxPoint& point, wxDataViewItem& item,
-                 wxDataViewColumn *& col);
+                 wxDataViewColumn*& col) const;
 
     /**
         Return @true if the item is selected.
     */
-    bool IsSelected(const wxDataViewItem & item);
+    bool IsSelected(const wxDataViewItem& item) const;
 
     /**
         Select the given item.
     */
-    void Select(const wxDataViewItem & item);
+    void Select(const wxDataViewItem& item);
 
     /**
         Select all items.
@@ -1093,7 +981,7 @@ public:
     /**
         Set which column shall contain the tree-like expanders.
     */
-    void SetExpanderColumn(wxDataViewColumn * col);
+    void SetExpanderColumn(wxDataViewColumn* col);
 
     /**
         Sets the indendation.
@@ -1103,12 +991,12 @@ public:
     /**
         Sets the selection to the array of wxDataViewItems.
     */
-    void SetSelections(const wxDataViewItemArray & sel);
+    void SetSelections(const wxDataViewItemArray& sel);
 
     /**
         Unselect the given item.
     */
-    void Unselect(const wxDataViewItem & item);
+    void Unselect(const wxDataViewItem& item);
 
     /**
         Unselect all item. This method only has effect if multiple
@@ -1118,6 +1006,7 @@ public:
 };
 
 
+
 /**
     @class wxDataViewModelNotifier
     @wxheader{dataview.h}
@@ -1129,7 +1018,7 @@ public:
     information.
 
     @library{wxbase}
-    @category{FIXME}
+    @category{dvc}
 */
 class wxDataViewModelNotifier
 {
@@ -1152,7 +1041,7 @@ public:
     /**
         Get owning wxDataViewModel.
     */
-    wxDataViewModel* GetOwner();
+    wxDataViewModel* GetOwner() const;
 
     /**
         Called by owning model.
@@ -1205,14 +1094,14 @@ 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,
@@ -1260,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.
@@ -1280,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
@@ -1295,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.
@@ -1314,7 +1217,6 @@ public:
         a certain aspect (e.g. max number of characters or only alphanumeric
         input, ASCII only etc.). Return @e @false if the value is
         not valid.
-        
         Please note that due to implementation limitations, this validation
         is done after the editing control already is destroyed and the
         editing process finished.
@@ -1323,6 +1225,7 @@ public:
 };
 
 
+
 /**
     @class wxDataViewTextRenderer
     @wxheader{dataview.h}
@@ -1331,19 +1234,48 @@ public:
     in-place editing if desired.
 
     @library{wxadv}
-    @category{FIXME}
+    @category{dvc}
 */
 class wxDataViewTextRenderer : public wxDataViewRenderer
 {
 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 );
 };
 
 
+
 /**
     @class wxDataViewProgressRenderer
     @wxheader{dataview.h}
@@ -1351,20 +1283,22 @@ public:
     wxDataViewProgressRenderer
 
     @library{wxadv}
-    @category{FIXME}
+    @category{dvc}
 */
 class wxDataViewProgressRenderer : public wxDataViewRenderer
 {
 public:
     /**
-        
+
     */
     wxDataViewProgressRenderer(const wxString& label = wxEmptyString,
                                const wxString& varianttype = "long",
-                               wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT);
+                               wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+                               int align = wxDVR_DEFAULT_ALIGNMENT );
 };
 
 
+
 /**
     @class wxDataViewSpinRenderer
     @wxheader{dataview.h}
@@ -1374,21 +1308,22 @@ public:
     The renderer only support variants of type @e long.
 
     @library{wxbase}
-    @category{FIXME}
+    @category{dvc}
 */
 class wxDataViewSpinRenderer : public wxDataViewCustomRenderer
 {
 public:
     /**
-        Constructor. @e min and @e max indicate the minimum und
+        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 alignment = wxDVR_DEFAULT_ALIGNMENT);
+                           int align = wxDVR_DEFAULT_ALIGNMENT);
 };
 
 
+
 /**
     @class wxDataViewToggleRenderer
     @wxheader{dataview.h}
@@ -1396,524 +1331,667 @@ public:
     wxDataViewToggleRenderer
 
     @library{wxadv}
-    @category{FIXME}
+    @category{dvc}
 */
 class wxDataViewToggleRenderer : public wxDataViewRenderer
 {
 public:
     /**
-        
+
     */
     wxDataViewToggleRenderer(const wxString& varianttype = "bool",
                              wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT);
 };
 
 
+
 /**
-    @class wxDataViewTreeCtrl
+    @class wxDataViewDateRenderer
     @wxheader{dataview.h}
 
-    This class is a wxDataViewCtrl which internally
-    uses a wxDataViewTreeStore and forwards
-    most of its API to that class. Additionally, it uses a wxImageList
-    to store a list of icons. The main purpose of this class is to look
-    like a wxTreeCtrl to make a transition from it
-    to the wxDataViewCtrl class simpler.
+    wxDataViewDateRenderer
 
-    @library{wxbase}
-    @category{ctrl}
-    @appearance{dataviewtreectrl.png}
+    @library{wxadv}
+    @category{dvc}
 */
-class wxDataViewTreeCtrl : public wxDataViewCtrl
+class wxDataViewDateRenderer : public wxDataViewRenderer
 {
 public:
-    //@{
     /**
-        Constructor. Calls Create().
-    */
-    wxDataViewTreeCtrl();
-    wxDataViewTreeCtrl(wxWindow* parent, wxWindowID id,
-                       const wxPoint& pos = wxDefaultPosition,
-                       const wxSize& size = wxDefaultSize,
-                       long style = wxDV_NO_HEADER,
-                       const wxValidator& validator = wxDefaultValidator);
-    //@}
 
-    /**
-        Destructor. Deletes the image list if any.
     */
-    ~wxDataViewTreeCtrl();
+    wxDataViewDateRenderer(const wxString& varianttype = "datetime",
+                           wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE);
+};
 
-    /**
-        
-    */
-    wxDataViewItem AppendContainer(const wxDataViewItem& parent,
-                                   const wxString& text,
-                                   int icon = -1,
-                                   int expanded = -1,
-                                   wxClientData* data = @NULL);
 
-    /**
-        
-    */
-    wxDataViewItem AppendItem(const wxDataViewItem& parent,
-                              const wxString& text,
-                              int icon = -1,
-                              wxClientData* data = @NULL);
 
-    /**
-        Creates the control and a wxDataViewTreeStore as
-        its internal model.
-    */
-    bool Create(wxWindow* parent, wxWindowID id,
-                const wxPoint& pos = wxDefaultPosition,
-                const wxSize& size = wxDefaultSize,
-                long style = wxDV_NO_HEADER,
-                const wxValidator& validator = wxDefaultValidator);
+/**
+    @class wxDataViewTextRendererAttr
+    @wxheader{dataview.h}
 
-    /**
-        Calls the identical method from wxDataViewTreeStore.
-    */
-    void DeleteAllItems();
+    The same as wxDataViewTextRenderer but with
+    support for font attributes. Font attributes are currently only supported
+    under GTK+ and MSW.
 
-    /**
-        Calls the identical method from wxDataViewTreeStore.
-    */
-    void DeleteChildren(const wxDataViewItem& item);
+    See also wxDataViewModel::GetAttr and
+    wxDataViewItemAttr.
 
+    @library{wxadv}
+    @category{dvc}
+*/
+class wxDataViewTextRendererAttr : public wxDataViewTextRenderer
+{
+public:
     /**
-        Calls the identical method from wxDataViewTreeStore.
-    */
-    void DeleteItem(const wxDataViewItem& item);
 
-    /**
-        Calls the identical method from wxDataViewTreeStore.
     */
-    int GetChildCount(const wxDataViewItem& parent);
+    wxDataViewTextRendererAttr(const wxString& varianttype = "string",
+                               wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+                               int align = wxDVR_DEFAULT_ALIGNMENT);
+};
 
-    /**
-        Returns the image list.
-    */
-    wxImageList* GetImageList();
 
-    /**
-        Calls the identical method from wxDataViewTreeStore.
-    */
-    wxClientData* GetItemData(const wxDataViewItem& item);
 
+/**
+    @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:
     /**
-        Calls the identical method from wxDataViewTreeStore.
+        Constructor.
     */
-    const wxIcon GetItemExpandedIcon(const wxDataViewItem& item);
+    wxDataViewCustomRenderer(const wxString& varianttype = "string",
+                             wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+                             int align = wxDVR_DEFAULT_ALIGNMENT );
 
     /**
-        Calls the identical method from wxDataViewTreeStore.
+        Destructor.
     */
-    const wxIcon GetItemIcon(const wxDataViewItem& item);
+    ~wxDataViewCustomRenderer();
 
     /**
-        Calls the identical method from wxDataViewTreeStore.
+        Override this to react to double clicks or ENTER. This method will
+        only be called in wxDATAVIEW_CELL_ACTIVATABLE mode.
     */
-    wxString GetItemText(const wxDataViewItem& item);
+    virtual bool Activate( wxRect cell,
+                           wxDataViewModel* model,
+                           const wxDataViewItem & item,
+                           unsigned int col );
 
     /**
-        Calls the identical method from wxDataViewTreeStore.
+        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:
     */
-    wxDataViewItem GetNthChild(const wxDataViewItem& parent,
-                               unsigned int pos);
+    virtual wxControl* CreateEditorCtrl(wxWindow* parent,
+                                        wxRect labelRect,
+                                        const wxVariant& value);
 
-    //@{
     /**
-        Returns the store.
+        Create DC on request. Internal.
     */
-    wxDataViewTreeStore* GetStore();
-    const wxDataViewTreeStore* GetStore();
-    //@}
+    virtual wxDC* GetDC();
 
     /**
-        Calls the same method from wxDataViewTreeStore but uess
-        and index position in the image list instead of a wxIcon.
+        Return size required to show content.
     */
-    wxDataViewItem InsertContainer(const wxDataViewItem& parent,
-                                   const wxDataViewItem& previous,
-                                   const wxString& text,
-                                   int icon = -1,
-                                   int expanded = -1,
-                                   wxClientData* data = @NULL);
+    virtual wxSize GetSize();
 
     /**
-        Calls the same method from wxDataViewTreeStore but uess
-        and index position in the image list instead of a wxIcon.
+        Overrride this so that the renderer can get the value
+        from the editor control (pointed to by @e editor):
     */
-    wxDataViewItem InsertItem(const wxDataViewItem& parent,
-                              const wxDataViewItem& previous,
-                              const wxString& text,
-                              int icon = -1,
-                              wxClientData* data = @NULL);
+    virtual bool GetValueFromEditorCtrl(wxControl* editor,
+                                        wxVariant& value);
 
     /**
-        Calls the same method from wxDataViewTreeStore but uess
-        and index position in the image list instead of a wxIcon.
+        Override this and make it return @e @true in order to
+        indicate that this renderer supports in-place editing.
     */
-    wxDataViewItem PrependContainer(const wxDataViewItem& parent,
-                                    const wxString& text,
-                                    int icon = -1,
-                                    int expanded = -1,
-                                    wxClientData* data = @NULL);
+    virtual bool HasEditorCtrl();
 
     /**
-        Calls the same method from wxDataViewTreeStore but uess
-        and index position in the image list instead of a wxIcon.
+        Overrride this to react to a left click. This method will
+        only be called in wxDATAVIEW_CELL_ACTIVATABLE mode.
     */
-    wxDataViewItem PrependItem(const wxDataViewItem& parent,
-                               const wxString& text,
-                               int icon = -1,
-                               wxClientData* data = @NULL);
+    virtual bool LeftClick( wxPoint cursor,
+                            wxRect cell,
+                            wxDataViewModel * model,
+                            const wxDataViewItem & item,
+                            unsigned int col );
 
     /**
-        Sets the image list.
+        Override this to render the cell. Before this is called,
+        wxDataViewRenderer::SetValue was called
+        so that this instance knows what to render.
     */
-    void SetImageList(wxImageList* imagelist);
+    virtual bool Render(wxRect cell, wxDC* dc, int state);
 
     /**
-        Calls the identical method from wxDataViewTreeStore.
+        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.
     */
-    void SetItemData(const wxDataViewItem& item, wxClientData* data);
+    bool RenderText(const wxString& text, int xoffset, wxRect cell,
+                    wxDC* dc, int state);
 
     /**
-        Calls the identical method from wxDataViewTreeStore.
+        Overrride this to start a drag operation. Not yet
+        supported
     */
-    void SetItemExpandedIcon(const wxDataViewItem& item,
-                             const wxIcon& icon);
+    virtual bool StartDrag(wxPoint cursor, wxRect cell,
+                           wxDataViewModel* model,
+                           const wxDataViewItem & item,
+                           unsigned int col);
+};
 
-    /**
-        Calls the identical method from wxDataViewTreeStore.
-    */
-    void SetItemIcon(const wxDataViewItem& item, const wxIcon& icon);
 
+
+/**
+    @class wxDataViewBitmapRenderer
+    @wxheader{dataview.h}
+
+    wxDataViewBitmapRenderer
+
+    @library{wxadv}
+    @category{dvc}
+*/
+class wxDataViewBitmapRenderer : public wxDataViewRenderer
+{
+public:
     /**
-        Calls the identical method from wxDataViewTreeStore.
+
     */
-    void SetItemText(const wxDataViewItem& item,
-                     const wxString& text);
+    wxDataViewBitmapRenderer(const wxString& varianttype = "wxBitmap",
+                             wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
+                             int align = wxDVR_DEFAULT_ALIGNMENT,
 };
 
 
+
 /**
-    @class wxDataViewTreeStore
+    @class wxDataViewColumn
     @wxheader{dataview.h}
 
-    wxDataViewTreeStore is a specialised wxDataViewModel
-    for displaying simple trees very much like wxTreeCtrl
-    does and it offers a similar API. This class actually stores the entire
-    tree (therefore its name) and implements all virtual methods from the base
-    class so it can be used directly without having to derive any class from it.
-    This comes at the price of much reduced flexibility.
+    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}
+    @category{dvc}
 */
-class wxDataViewTreeStore : public wxDataViewModel
+class wxDataViewColumn : public wxObject
 {
 public:
+    //@{
     /**
-        Constructor. Creates the invisible root node internally.
+        Constructors.
     */
-    wxDataViewTreeStore();
+    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.
     */
-    ~wxDataViewTreeStore();
+    ~wxDataViewColumn();
 
     /**
-        Append a container.
+        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();
+
+    /**
+        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);
+};
+
+
+
+/**
+    @class wxDataViewTreeCtrl
+    @wxheader{dataview.h}
+
+    This class is a wxDataViewCtrl which internally
+    uses a wxDataViewTreeStore and forwards
+    most of its API to that class. Additionally, it uses a wxImageList
+    to store a list of icons. The main purpose of this class is to look
+    like a wxTreeCtrl to make a transition from it
+    to the wxDataViewCtrl class simpler.
+
+    @library{wxbase}
+    @category{ctrl,dvc}
+    <!-- @appearance{dataviewtreectrl.png} -->
+*/
+class wxDataViewTreeCtrl : public wxDataViewCtrl
+{
+public:
+    //@{
+    /**
+        Constructor. Calls Create().
+    */
+    wxDataViewTreeCtrl();
+    wxDataViewTreeCtrl(wxWindow* parent, wxWindowID id,
+                       const wxPoint& pos = wxDefaultPosition,
+                       const wxSize& size = wxDefaultSize,
+                       long style = wxDV_NO_HEADER,
+                       const wxValidator& validator = wxDefaultValidator);
+    //@}
+
+    /**
+        Destructor. Deletes the image list if any.
+    */
+    ~wxDataViewTreeCtrl();
+
+    /**
+
     */
     wxDataViewItem AppendContainer(const wxDataViewItem& parent,
                                    const wxString& text,
-                                   const wxIcon& icon = wxNullIcon,
-                                   const wxIcon& expanded = wxNullIcon,
-                                   wxClientData* data = @NULL);
+                                   int icon = -1,
+                                   int expanded = -1,
+                                   wxClientData* data = NULL);
 
     /**
-        Append an item.
+
     */
     wxDataViewItem AppendItem(const wxDataViewItem& parent,
                               const wxString& text,
-                              const wxIcon& icon = wxNullIcon,
-                              wxClientData* data = @NULL);
+                              int icon = -1,
+                              wxClientData* data = NULL);
 
     /**
-        Delete all item in the model.
+        Creates the control and a wxDataViewTreeStore as
+        its internal model.
+    */
+    bool Create(wxWindow* parent, wxWindowID id,
+                const wxPoint& pos = wxDefaultPosition,
+                const wxSize& size = wxDefaultSize,
+                long style = wxDV_NO_HEADER,
+                const wxValidator& validator = wxDefaultValidator);
+
+    /**
+        Calls the identical method from wxDataViewTreeStore.
     */
     void DeleteAllItems();
 
     /**
-        Delete all children of the item, but not the item itself.
+        Calls the identical method from wxDataViewTreeStore.
     */
     void DeleteChildren(const wxDataViewItem& item);
 
     /**
-        Delete this item.
+        Calls the identical method from wxDataViewTreeStore.
     */
     void DeleteItem(const wxDataViewItem& item);
 
     /**
-        Return the number of children of item.
+        Calls the identical method from wxDataViewTreeStore.
     */
-    int GetChildCount(const wxDataViewItem& parent);
+    int GetChildCount(const wxDataViewItem& parent) const;
 
     /**
-        Returns the client data asoociated with the item.
+        Returns the image list.
     */
-    wxClientData* GetItemData(const wxDataViewItem& item);
+    wxImageList* GetImageList();
 
     /**
-        Returns the icon to display in expanded containers.
+        Calls the identical method from wxDataViewTreeStore.
     */
-    const wxIcon GetItemExpandedIcon(const wxDataViewItem& item);
+    wxClientData* GetItemData(const wxDataViewItem& item) const;
 
     /**
-        Returns the icon of the item.
+        Calls the identical method from wxDataViewTreeStore.
     */
-    const wxIcon GetItemIcon(const wxDataViewItem& item);
+    const wxIcon GetItemExpandedIcon(const wxDataViewItem& item) const;
 
     /**
-        Returns the text of the item.
+        Calls the identical method from wxDataViewTreeStore.
     */
-    wxString GetItemText(const wxDataViewItem& item);
+    const wxIcon GetItemIcon(const wxDataViewItem& item) const;
 
     /**
-        Returns the nth child item of item.
+        Calls the identical method from wxDataViewTreeStore.
+    */
+    wxString GetItemText(const wxDataViewItem& item) const;
+
+    /**
+        Calls the identical method from wxDataViewTreeStore.
     */
     wxDataViewItem GetNthChild(const wxDataViewItem& parent,
-                               unsigned int pos);
+                               unsigned int pos) const;
 
+    //@{
     /**
-        Inserts a container after @e previous.
+        Returns the store.
+    */
+    wxDataViewTreeStore* GetStore() const;
+    const wxDataViewTreeStore* GetStore() const;
+    //@}
+
+    /**
+        Calls the same method from wxDataViewTreeStore but uess
+        and index position in the image list instead of a wxIcon.
     */
     wxDataViewItem InsertContainer(const wxDataViewItem& parent,
                                    const wxDataViewItem& previous,
                                    const wxString& text,
-                                   const wxIcon& icon = wxNullIcon,
-                                   const wxIcon& expanded = wxNullIcon,
-                                   wxClientData* data = @NULL);
+                                   int icon = -1,
+                                   int expanded = -1,
+                                   wxClientData* data = NULL);
 
     /**
-        Inserts an item after @e previous.
+        Calls the same method from wxDataViewTreeStore but uess
+        and index position in the image list instead of a wxIcon.
     */
     wxDataViewItem InsertItem(const wxDataViewItem& parent,
                               const wxDataViewItem& previous,
                               const wxString& text,
-                              const wxIcon& icon = wxNullIcon,
-                              wxClientData* data = @NULL);
+                              int icon = -1,
+                              wxClientData* data = NULL);
 
     /**
-        Inserts a container before the first child item or @e parent.
+        Calls the same method from wxDataViewTreeStore but uess
+        and index position in the image list instead of a wxIcon.
     */
     wxDataViewItem PrependContainer(const wxDataViewItem& parent,
                                     const wxString& text,
-                                    const wxIcon& icon = wxNullIcon,
-                                    const wxIcon& expanded = wxNullIcon,
-                                    wxClientData* data = @NULL);
+                                    int icon = -1,
+                                    int expanded = -1,
+                                    wxClientData* data = NULL);
 
     /**
-        Inserts an item before the first child item or @e parent.
+        Calls the same method from wxDataViewTreeStore but uess
+        and index position in the image list instead of a wxIcon.
     */
     wxDataViewItem PrependItem(const wxDataViewItem& parent,
                                const wxString& text,
-                               const wxIcon& icon = wxNullIcon,
-                               wxClientData* data = @NULL);
+                               int icon = -1,
+                               wxClientData* data = NULL);
 
     /**
-        Sets the client data associated with the item.
+        Sets the image list.
+    */
+    void SetImageList(wxImageList* imagelist);
+
+    /**
+        Calls the identical method from wxDataViewTreeStore.
     */
     void SetItemData(const wxDataViewItem& item, wxClientData* data);
 
     /**
-        Sets the expanded icon for the item.
+        Calls the identical method from wxDataViewTreeStore.
     */
     void SetItemExpandedIcon(const wxDataViewItem& item,
                              const wxIcon& icon);
 
     /**
-        Sets the icon for the item.
+        Calls the identical method from wxDataViewTreeStore.
     */
     void SetItemIcon(const wxDataViewItem& item, const wxIcon& icon);
-};
-
-
-/**
-    @class wxDataViewDateRenderer
-    @wxheader{dataview.h}
-
-    wxDataViewDateRenderer
 
-    @library{wxadv}
-    @category{FIXME}
-*/
-class wxDataViewDateRenderer : public wxDataViewRenderer
-{
-public:
     /**
-        
+        Calls the identical method from wxDataViewTreeStore.
     */
-    wxDataViewDateRenderer(const wxString& varianttype = "datetime",
-                           wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE);
+    void SetItemText(const wxDataViewItem& item,
+                     const wxString& text);
 };
 
 
+
 /**
-    @class wxDataViewTextRendererAttr
+    @class wxDataViewTreeStore
     @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.
+    wxDataViewTreeStore is a specialised wxDataViewModel
+    for displaying simple trees very much like wxTreeCtrl
+    does and it offers a similar API. This class actually stores the entire
+    tree (therefore its name) and implements all virtual methods from the base
+    class so it can be used directly without having to derive any class from it.
+    This comes at the price of much reduced flexibility.
 
     @library{wxadv}
-    @category{FIXME}
+    @category{dvc}
 */
-class wxDataViewTextRendererAttr : public wxDataViewTextRenderer
+class wxDataViewTreeStore : public wxDataViewModel
 {
 public:
     /**
-        
+        Constructor. Creates the invisible root node internally.
     */
-    wxDataViewTextRendererAttr(const wxString& varianttype = "string",
-                               wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
-                               int align = wxDVR_DEFAULT_ALIGNMENT);
-};
-
+    wxDataViewTreeStore();
 
-/**
-    @class wxDataViewColumn
-    @wxheader{dataview.h}
+    /**
+        Destructor.
+    */
+    ~wxDataViewTreeStore();
 
-    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.
+    /**
+        Append a container.
+    */
+    wxDataViewItem AppendContainer(const wxDataViewItem& parent,
+                                   const wxString& text,
+                                   const wxIcon& icon = wxNullIcon,
+                                   const wxIcon& expanded = wxNullIcon,
+                                   wxClientData* data = NULL);
 
-    An instance of wxDataViewRenderer is used by
-    this class to render its data.
+    /**
+        Append an item.
+    */
+    wxDataViewItem AppendItem(const wxDataViewItem& parent,
+                              const wxString& text,
+                              const wxIcon& icon = wxNullIcon,
+                              wxClientData* data = NULL);
 
-    @library{wxadv}
-    @category{FIXME}
-*/
-class wxDataViewColumn : public wxObject
-{
-public:
-    //@{
     /**
-        Constructors.
+        Delete all item in the model.
     */
-    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);
-    //@}
+    void DeleteAllItems();
 
     /**
-        Destructor.
+        Delete all children of the item, but not the item itself.
     */
-    ~wxDataViewColumn();
+    void DeleteChildren(const wxDataViewItem& item);
 
     /**
-        Returns the bitmap in the header of the column, if any.
+        Delete this item.
     */
-    const wxBitmap GetBitmap();
+    void DeleteItem(const wxDataViewItem& item);
 
     /**
-        Returns the index of the column of the model, which this
-        wxDataViewColumn is displaying.
+        Return the number of children of item.
     */
-    unsigned int GetModelColumn();
+    int GetChildCount(const wxDataViewItem& parent) const;
 
     /**
-        Returns the owning wxDataViewCtrl.
+        Returns the client data asoociated with the item.
     */
-    wxDataViewCtrl* GetOwner();
+    wxClientData* GetItemData(const wxDataViewItem& item) const;
 
     /**
-        Returns the renderer of this wxDataViewColumn.
-        
-        See also wxDataViewRenderer.
+        Returns the icon to display in expanded containers.
     */
-    wxDataViewRenderer* GetRenderer();
+    const wxIcon GetItemExpandedIcon(const wxDataViewItem& item) const;
 
     /**
-        Returns @true if the column is reorderable.
+        Returns the icon of the item.
     */
-    bool GetReorderable();
+    const wxIcon GetItemIcon(const wxDataViewItem& item) const;
 
     /**
-        Returns @true if the column is sortable.
-        
-        See SetSortable()
+        Returns the text of the item.
     */
-    bool GetSortable();
+    wxString GetItemText(const wxDataViewItem& item) const;
 
     /**
-        Returns the width of the column.
+        Returns the nth child item of item.
     */
-    int GetWidth();
+    wxDataViewItem GetNthChild(const wxDataViewItem& parent,
+                               unsigned int pos) const;
 
     /**
-        Returns @true, if the sort order is ascending.
-        
-        See also SetSortOrder()
+        Inserts a container after @e previous.
     */
-    bool IsSortOrderAscending();
+    wxDataViewItem InsertContainer(const wxDataViewItem& parent,
+                                   const wxDataViewItem& previous,
+                                   const wxString& text,
+                                   const wxIcon& icon = wxNullIcon,
+                                   const wxIcon& expanded = wxNullIcon,
+                                   wxClientData* data = NULL);
 
     /**
-        Set the alignment of the column header.
+        Inserts an item after @e previous.
     */
-    void SetAlignment(wxAlignment align);
+    wxDataViewItem InsertItem(const wxDataViewItem& parent,
+                              const wxDataViewItem& previous,
+                              const wxString& text,
+                              const wxIcon& icon = wxNullIcon,
+                              wxClientData* data = NULL);
 
     /**
-        Set the bitmap of the column header.
+        Inserts a container before the first child item or @e parent.
     */
-    void SetBitmap(const wxBitmap& bitmap);
+    wxDataViewItem PrependContainer(const wxDataViewItem& parent,
+                                    const wxString& text,
+                                    const wxIcon& icon = wxNullIcon,
+                                    const wxIcon& expanded = wxNullIcon,
+                                    wxClientData* data = NULL);
 
     /**
-        Indicate wether the column can be reordered by the
-        user using the mouse. This is typically implemented
-        visually by dragging the header button around.
+        Inserts an item before the first child item or @e parent.
     */
-    void SetReorderable(bool reorderable);
+    wxDataViewItem PrependItem(const wxDataViewItem& parent,
+                               const wxString& text,
+                               const wxIcon& icon = wxNullIcon,
+                               wxClientData* data = NULL);
 
     /**
-        Indicate the sort order if the implementation of the
-        wxDataViewCtrl supports it, most commonly by showing
-        a little arrow.
+        Sets the client data associated with the item.
     */
-    void SetSortOrder(bool ascending);
+    void SetItemData(const wxDataViewItem& item, wxClientData* data);
 
     /**
-        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 @e sortable is @false, the column header is
-        no longer clickable and the sort indicator (little
-        arrow) will disappear.
+        Sets the expanded icon for the item.
     */
-    void SetSortable(bool sortable);
+    void SetItemExpandedIcon(const wxDataViewItem& item,
+                             const wxIcon& icon);
 
     /**
-        Set the title of the column header to @e title.
+        Sets the icon for the item.
     */
-    void SetTitle(const wxString& title);
+    void SetItemIcon(const wxDataViewItem& item, const wxIcon& icon);
 };
+