]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/dataview.h
Fix scrolling to the bottom in wxTextCtrl::AppendText().
[wxWidgets.git] / interface / wx / dataview.h
index f7497f28d9eab5bbc9a63806b1b2b431cb82a2bd..13df37997be37d4d0a6581ea52191487e40b787a 100644 (file)
@@ -23,7 +23,7 @@
     Since you will usually also allow the wxDataViewCtrl to change your data
     through its graphical interface, you will also have to override
     wxDataViewModel::SetValue which the wxDataViewCtrl will call when a change
-    to some data has been commited.
+    to some data has been committed.
 
     wxDataViewModel (as indeed the entire wxDataViewCtrl code) is using wxVariant
     to store data and its type in a generic way. wxVariant can be extended to contain
@@ -71,7 +71,7 @@
         wxDataViewModel *musicModel = new MyMusicModel;
         m_musicCtrl->AssociateModel( musicModel );
         musicModel->DecRef();  // avoid memory leak !!
-        
+
         // add columns now
     @endcode
 
@@ -91,6 +91,28 @@ public:
     */
     void AddNotifier(wxDataViewModelNotifier* notifier);
 
+    /**
+        Change the value of the given item and update the control to reflect
+        it.
+
+        This function simply calls SetValue() and, if it succeeded,
+        ValueChanged().
+
+        @since 2.9.1
+
+        @param variant
+            The new value.
+        @param item
+            The item (row) to update.
+        @param col
+            The column to update.
+        @return
+            @true if both SetValue() and ValueChanged() returned @true.
+     */
+    bool ChangeValue(const wxVariant& variant,
+                     const wxDataViewItem& item,
+                     unsigned int col);
+
     /**
         Called to inform the model that all data has been cleared.
         The control will reread the data from the model again.
@@ -113,10 +135,21 @@ public:
         Override this to indicate that the item has special font attributes.
         This only affects the wxDataViewTextRendererText renderer.
 
+        The base class version always simply returns @false.
+
         @see wxDataViewItemAttr.
+
+        @param item
+            The item for which the attribute is requested.
+        @param col
+            The column of the item for which the attribute is requested.
+        @param attr
+            The attribute to be filled in if the function returns @true.
+        @return
+            @true if this item has an attribute or @false otherwise.
     */
     virtual bool GetAttr(const wxDataViewItem& item, unsigned int col,
-                         wxDataViewItemAttr& attr);
+                         wxDataViewItemAttr& attr) const;
 
     /**
         Override this so the control can query the child items of an item.
@@ -171,6 +204,20 @@ public:
     */
     virtual bool HasDefaultCompare() const;
 
+    /**
+        Return true if there is a value in the given column of this item.
+
+        All normal items have values in all columns but the container items
+        only show their label in the first column (@a col == 0) by default (but
+        see HasContainerColumns()). So this function always returns true for
+        the first column while for the other ones it returns true only if the
+        item is not a container or HasContainerColumns() was overridden to
+        return true for it.
+
+        @since 2.9.1
+     */
+    bool HasValue(const wxDataViewItem& item, unsigned col) const;
+
     /**
         Override this to indicate of @a item is a container, i.e. if
         it can have child items.
@@ -229,12 +276,17 @@ public:
 
     /**
         This gets called in order to set a value in the data model.
+
         The most common scenario is that the wxDataViewCtrl calls this method
         after the user changed some data in the view.
 
-        Afterwards ValueChanged() has to be called!
+        This is the function you need to override in your derived class but if
+        you want to call it, ChangeValue() is usually more convenient as
+        otherwise you need to manually call ValueChanged() to update the
+        control itself.
     */
-    virtual bool SetValue(const wxVariant& variant, const wxDataViewItem& item,
+    virtual bool SetValue(const wxVariant& variant,
+                          const wxDataViewItem& item,
                           unsigned int col) = 0;
 
     /**
@@ -298,10 +350,26 @@ public:
         Override this to indicate that the row has special font attributes.
         This only affects the wxDataViewTextRendererText() renderer.
 
+        The base class version always simply returns @false.
+
         @see wxDataViewItemAttr.
+
+        @param row
+            The row for which the attribute is requested.
+        @param col
+            The column for which the attribute is requested.
+        @param attr
+            The attribute to be filled in if the function returns @true.
+        @return
+            @true if this item has an attribute or @false otherwise.
     */
     virtual bool GetAttrByRow(unsigned int row, unsigned int col,
-                         wxDataViewItemAttr& attr);
+                         wxDataViewItemAttr& attr) const;
+
+    /**
+        Returns the number of items (i.e. rows) in the list.
+    */
+    unsigned int GetCount() const;
 
     /**
         Returns the wxDataViewItem at the given @e row.
@@ -395,6 +463,11 @@ public:
         Constructor.
     */
     wxDataViewVirtualListModel(unsigned int initial_size = 0);
+
+    /**
+        Returns the number of virtual items (i.e. rows) in the list.
+    */
+    unsigned int GetCount() const;
 };
 
 
@@ -441,7 +514,7 @@ public:
     @class wxDataViewItem
 
     wxDataViewItem is a small opaque class that represents an item in a wxDataViewCtrl
-    in a persistent way, i.e. indepent of the position of the item in the control
+    in a persistent way, i.e. independent of the position of the item in the control
     or changes to its contents.
 
     It must hold a unique ID of type @e void* in its only field and can be converted
@@ -523,6 +596,8 @@ public:
     @style{wxDV_VARIABLE_LINE_HEIGHT}
            Allow variable line heights.
            This can be inefficient when displaying large number of items.
+    @style{wxDV_NO_HEADER}
+           Do not show column headers (which are shown by default).
     @endStyleTable
 
     @beginEventEmissionTable{wxDataViewEvent}
@@ -1033,13 +1108,13 @@ enum wxDataViewCellRenderState
     One instance of a renderer class is owned by a wxDataViewColumn.
     There is a number of ready-to-use renderers provided:
     - wxDataViewTextRenderer,
-    - wxDataViewTextRendererAttr,
     - wxDataViewIconTextRenderer,
     - wxDataViewToggleRenderer,
     - wxDataViewProgressRenderer,
     - wxDataViewBitmapRenderer,
     - wxDataViewDateRenderer,
     - wxDataViewSpinRenderer.
+    - wxDataViewChoiceRenderer.
 
     Additionally, the user can write own renderers by deriving from
     wxDataViewCustomRenderer.
@@ -1061,11 +1136,49 @@ public:
                        wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
                        int align = wxDVR_DEFAULT_ALIGNMENT );
 
+    /**
+        Enable or disable replacing parts of the item text with ellipsis to
+        make it fit the column width.
+
+        This method only makes sense for the renderers working with text, such
+        as wxDataViewTextRenderer or wxDataViewIconTextRenderer.
+
+        By default wxELLIPSIZE_MIDDLE is used.
+
+        @param mode
+            Ellipsization mode, use wxELLIPSIZE_NONE to disable.
+
+        @since 2.9.1
+     */
+    void EnableEllipsize(wxEllipsizeMode mode = wxELLIPSIZE_MIDDLE);
+
+    /**
+        Disable replacing parts of the item text with ellipsis.
+
+        If ellipsizing is disabled, the string will be truncated if it doesn't
+        fit.
+
+        This is the same as @code EnableEllipsize(wxELLIPSIZE_NONE) @endcode.
+
+        @since 2.9.1
+     */
+    void DisableEllipsize();
+
     /**
         Returns the alignment. See SetAlignment()
     */
     virtual int GetAlignment() const;
 
+    /**
+        Returns the ellipsize mode used by the renderer.
+
+        If the return value is wxELLIPSIZE_NONE, the text is simply truncated
+        if it doesn't fit.
+
+        @see EnableEllipsize()
+     */
+    wxEllipsizeMode GetEllipsizeMode() const;
+
     /**
         Returns the cell mode.
     */
@@ -1156,8 +1269,8 @@ public:
     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 and from a wxVariant using the left shift
-    operator.
+    wxDataViewIconText can be converted to and from a wxVariant using the left
+    shift operator.
 
     @library{wxadv}
     @category{dvc}
@@ -1241,48 +1354,56 @@ public:
 };
 
 
-
 /**
-    @class wxDataViewDateRenderer
+    @class wxDataViewChoiceRenderer
 
-    This class is used by wxDataViewCtrl to render calendar controls.
+    This class is used by wxDataViewCtrl to render choice controls.
+    It stores a string so that SetValue() and GetValue() operate
+    on a variant holding a string.
 
     @library{wxadv}
     @category{dvc}
 */
-class wxDataViewDateRenderer : public wxDataViewRenderer
+
+class wxDataViewChoiceRenderer: public wxDataViewRenderer
 {
 public:
     /**
         The ctor.
     */
-    wxDataViewDateRenderer(const wxString& varianttype = "datetime",
-                           wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE,
-                           int align = wxDVR_DEFAULT_ALIGNMENT);
-};
+    wxDataViewChoiceRenderer( const wxArrayString &choices,
+                              wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE,
+                              int alignment = wxDVR_DEFAULT_ALIGNMENT );
 
+    /**
+        Returns the choice referred to by index.
+    */
+    wxString GetChoice(size_t index) const;
+    
+    /**
+        Returns all choices.
+    */
+    const wxArrayString& GetChoices() const;
+};
 
 
 /**
-    @class wxDataViewTextRendererAttr
-
-    The same as wxDataViewTextRenderer but with support for font attributes.
-    Font attributes are currently only supported under GTK+ and MSW.
+    @class wxDataViewDateRenderer
 
-    @see wxDataViewModel::GetAttr and wxDataViewItemAttr.
+    This class is used by wxDataViewCtrl to render calendar controls.
 
     @library{wxadv}
     @category{dvc}
 */
-class wxDataViewTextRendererAttr : public wxDataViewTextRenderer
+class wxDataViewDateRenderer : public wxDataViewRenderer
 {
 public:
     /**
         The ctor.
     */
-    wxDataViewTextRendererAttr(const wxString& varianttype = "string",
-                               wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
-                               int align = wxDVR_DEFAULT_ALIGNMENT);
+    wxDataViewDateRenderer(const wxString& varianttype = "datetime",
+                           wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE,
+                           int align = wxDVR_DEFAULT_ALIGNMENT);
 };
 
 
@@ -1349,9 +1470,20 @@ public:
                                         const wxVariant& value);
 
     /**
-        Create DC on request. Internal.
-    */
-    virtual wxDC* GetDC();
+        Return the attribute to be used for rendering.
+
+        This function may be called from Render() implementation to use the
+        attributes defined for the item if the renderer supports them.
+
+        Notice that when Render() is called, the wxDC object passed to it is
+        already set up to use the correct attributes (e.g. its font is set to
+        bold or italic version if wxDataViewItemAttr::GetBold() or GetItalic()
+        returns true) so it may not be necessary to call it explicitly if you
+        only want to render text using the items attributes.
+
+        @since 2.9.1
+     */
+    const wxDataViewItemAttr& GetAttr() const;
 
     /**
         Return size required to show content.
@@ -1359,7 +1491,7 @@ public:
     virtual wxSize GetSize() const = 0;
 
     /**
-        Overrride this so that the renderer can get the value from the editor
+        Override this so that the renderer can get the value from the editor
         control (pointed to by @a editor):
         @code
         {
@@ -1380,7 +1512,7 @@ public:
     virtual bool HasEditorCtrl() const;
 
     /**
-        Overrride this to react to a left click.
+        Override this to react to a left click.
         This method will only be called in @c wxDATAVIEW_CELL_ACTIVATABLE mode.
     */
     virtual bool LeftClick( wxPoint cursor,
@@ -1406,7 +1538,7 @@ public:
                     wxDC* dc, int state);
 
     /**
-        Overrride this to start a drag operation. Not yet supported.
+        Override this to start a drag operation. Not yet supported.
     */
     virtual bool StartDrag(wxPoint cursor, wxRect cell,
                            wxDataViewModel* model,
@@ -1557,11 +1689,11 @@ public:
        data.push_back( wxVariant("row 3") );
        listctrl->AppendItem( data );
     @endcode
-    
+
     @beginStyleTable
     See wxDataViewCtrl for the list of supported styles.
     @endStyleTable
-    
+
     @beginEventEmissionTable
     See wxDataViewCtrl for the list of events emitted by this class.
     @endEventTable
@@ -1610,7 +1742,7 @@ public:
         @name Column management functions
     */
     //@{
-   
+
     /**
         Appends a column to the control and additionally appends a
         column to the store with the type string.
@@ -1625,24 +1757,24 @@ public:
 
     /**
         Appends a text column to the control and the store.
-        
+
         See wxDataViewColumn::wxDataViewColumn for more info about
         the parameters.
     */
     wxDataViewColumn *AppendTextColumn( const wxString &label,
           wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
-          int width = -1, wxAlignment align = wxALIGN_LEFT, 
+          int width = -1, wxAlignment align = wxALIGN_LEFT,
           int flags = wxDATAVIEW_COL_RESIZABLE );
 
     /**
         Appends a toggle column to the control and the store.
-        
+
         See wxDataViewColumn::wxDataViewColumn for more info about
         the parameters.
     */
     wxDataViewColumn *AppendToggleColumn( const wxString &label,
           wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE,
-          int width = -1, wxAlignment align = wxALIGN_LEFT, 
+          int width = -1, wxAlignment align = wxALIGN_LEFT,
           int flags = wxDATAVIEW_COL_RESIZABLE );
 
     /**
@@ -1653,7 +1785,7 @@ public:
     */
     wxDataViewColumn *AppendProgressColumn( const wxString &label,
           wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
-          int width = -1, wxAlignment align = wxALIGN_LEFT, 
+          int width = -1, wxAlignment align = wxALIGN_LEFT,
           int flags = wxDATAVIEW_COL_RESIZABLE );
 
     /**
@@ -1664,7 +1796,7 @@ public:
     */
     wxDataViewColumn *AppendIconTextColumn( const wxString &label,
           wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
-          int width = -1, wxAlignment align = wxALIGN_LEFT, 
+          int width = -1, wxAlignment align = wxALIGN_LEFT,
           int flags = wxDATAVIEW_COL_RESIZABLE );
 
     /**
@@ -1677,7 +1809,7 @@ public:
         Inserts a column to the control and additionally inserts a
         column to the list store with the type @a varianttype.
     */
-    void InsertColumn( unsigned int pos, wxDataViewColumn *column, 
+    void InsertColumn( unsigned int pos, wxDataViewColumn *column,
                        const wxString &varianttype );
 
     /**
@@ -1693,13 +1825,13 @@ public:
     void PrependColumn( wxDataViewColumn *column, const wxString &varianttype );
 
     //@}
-    
-    
+
+
     /**
         @name Item management functions
     */
     //@{
-    
+
     /**
         Appends an item (=row) to the control and store.
     */
@@ -1766,7 +1898,7 @@ public:
          respective column.
     */
     bool GetToggleValue( unsigned int row, unsigned int col ) const;
-    
+
     //@}
 };
 
@@ -1778,13 +1910,13 @@ public:
     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 represent a possible replacement for
-    wxTreeCtrl.
+    The main purpose of this class is to provide a simple upgrade path for code
+    using wxTreeCtrl.
 
     @beginStyleTable
     See wxDataViewCtrl for the list of supported styles.
     @endStyleTable
-    
+
     @beginEventEmissionTable
     See wxDataViewCtrl for the list of events emitted by this class.
     @endEventTable
@@ -1802,12 +1934,14 @@ public:
     wxDataViewTreeCtrl();
 
     /**
-        Constructor. Calls Create().
+        Constructor.
+
+        Calls Create().
     */
     wxDataViewTreeCtrl(wxWindow* parent, wxWindowID id,
                        const wxPoint& pos = wxDefaultPosition,
                        const wxSize& size = wxDefaultSize,
-                       long style = wxDV_NO_HEADER,
+                       long style = wxDV_NO_HEADER | wxDV_ROW_LINES,
                        const wxValidator& validator = wxDefaultValidator);
 
     /**
@@ -1834,11 +1968,14 @@ public:
 
     /**
         Creates the control and a wxDataViewTreeStore as its internal model.
+
+        The default tree column created by this method is an editable column
+        using wxDataViewIconTextRenderer as its renderer.
     */
     bool Create(wxWindow* parent, wxWindowID id,
                 const wxPoint& pos = wxDefaultPosition,
                 const wxSize& size = wxDefaultSize,
-                long style = wxDV_NO_HEADER,
+                long style = wxDV_NO_HEADER | wxDV_ROW_LINES,
                 const wxValidator& validator = wxDefaultValidator);
 
     /**
@@ -1921,6 +2058,11 @@ public:
                               int icon = -1,
                               wxClientData* data = NULL);
 
+    /**
+        Returns true if item is a container.
+    */
+    bool IsContainer( const wxDataViewItem& item );
+    
     /**
         Calls the same method from wxDataViewTreeStore but uses
         an index position in the image list instead of a wxIcon.
@@ -2321,7 +2463,7 @@ public:
     @event{EVT_DATAVIEW_CACHE_HINT(id, func)}
            Process a @c wxEVT_COMMAND_DATAVIEW_CACHE_HINT event.
     @endEventTable
-    
+
     @library{wxadv}
     @category{events,dvc}
 */