X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c937bcac0fb8a8df7c0cbfc8c478a2874fec3eb9..7f4f5e8c24607ead9b5e2f4c60658dcd61f028f4:/interface/wx/dataview.h diff --git a/interface/wx/dataview.h b/interface/wx/dataview.h index a76c28ae67..13df37997b 100644 --- a/interface/wx/dataview.h +++ b/interface/wx/dataview.h @@ -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} @@ -1039,6 +1114,7 @@ enum wxDataViewCellRenderState - wxDataViewBitmapRenderer, - wxDataViewDateRenderer, - wxDataViewSpinRenderer. + - wxDataViewChoiceRenderer. Additionally, the user can write own renderers by deriving from wxDataViewCustomRenderer. @@ -1193,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} @@ -1278,6 +1354,38 @@ public: }; +/** + @class wxDataViewChoiceRenderer + + 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 wxDataViewChoiceRenderer: public wxDataViewRenderer +{ +public: + /** + The ctor. + */ + 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 wxDataViewDateRenderer @@ -1362,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. @@ -1372,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 { @@ -1393,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, @@ -1419,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, @@ -1570,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 @@ -1623,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. @@ -1638,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 ); /** @@ -1666,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 ); /** @@ -1677,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 ); /** @@ -1690,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 ); /** @@ -1706,13 +1825,13 @@ public: void PrependColumn( wxDataViewColumn *column, const wxString &varianttype ); //@} - - + + /** @name Item management functions */ //@{ - + /** Appends an item (=row) to the control and store. */ @@ -1779,7 +1898,7 @@ public: respective column. */ bool GetToggleValue( unsigned int row, unsigned int col ) const; - + //@} }; @@ -1791,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 @@ -1815,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); /** @@ -1847,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); /** @@ -1934,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. @@ -2334,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} */