X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/14d922d18f52eb99bed74c8dd81e5f798e5a52a9..4017f5ca49e153e04ffd1c49bc93afd31c1cdf87:/interface/wx/dataview.h diff --git a/interface/wx/dataview.h b/interface/wx/dataview.h index 779e3539de..f7497f28d9 100644 --- a/interface/wx/dataview.h +++ b/interface/wx/dataview.h @@ -1,129 +1,11 @@ ///////////////////////////////////////////////////////////////////////////// // Name: dataview.h -// Purpose: interface of wxDataViewIconText +// Purpose: interface of wxDataView* classes // Author: wxWidgets team // RCS-ID: $Id$ // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// -/** - @class wxDataViewIconText - - wxDataViewIconText is used by wxDataViewIconTextRenderer for data transfer. - This class can be converted to and from a wxVariant. - - @library{wxadv} - @category{dvc} -*/ -class wxDataViewIconText : public wxObject -{ -public: - //@{ - /** - Constructor. - */ - wxDataViewIconText(const wxString& text = wxEmptyString, - const wxIcon& icon = wxNullIcon); - wxDataViewIconText(const wxDataViewIconText& other); - //@} - - /** - Gets the icon. - */ - const wxIcon& GetIcon() const; - - /** - Gets the text. - */ - wxString GetText() const; - - /** - Set the icon. - */ - void SetIcon(const wxIcon& icon); - - /** - Set the text. - */ - void SetText(const wxString& text); -}; - - - -/** - @class wxDataViewEvent - - This is the event class for the wxDataViewCtrl notifications. - - @library{wxadv} - @category{events,dvc} -*/ -class wxDataViewEvent : public wxNotifyEvent -{ -public: - //@{ - /** - Constructor. Typically used by wxWidgets internals only. - */ - wxDataViewEvent(wxEventType commandType = wxEVT_NULL, - int winid = 0); - wxDataViewEvent(const wxDataViewEvent& event); - //@} - - /** - Used to clone the event. - */ - 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() const; - - /** - Returns a pointer to the wxDataViewColumn from which - the event was emitted or @NULL. - */ - wxDataViewColumn* GetDataViewColumn() const; - - /** - Returns the wxDataViewModel associated with the event. - */ - wxDataViewModel* GetModel() const; - - /** - Returns a the position of a context menu event in screen coordinates. - */ - wxPoint GetPosition() const; - - /** - Returns a reference to a value. - */ - const wxVariant& GetValue() const; - - /** - Sets the column index associated with this event. - */ - void SetColumn(int col); - - /** - For wxEVT_DATAVIEW_COLUMN_HEADER_CLICKED only. - */ - void SetDataViewColumn(wxDataViewColumn* col); - - /** - Sets the dataview model associated with this event. - */ - void SetModel(wxDataViewModel* model); - - /** - Sets the value associated with this event. - */ - void SetValue(const wxVariant& value); -}; - - /** @class wxDataViewModel @@ -176,26 +58,27 @@ public: to the data in the list model. Currently wxWidgets provides the following models apart from the base model: - wxDataViewIndexListModel, wxDataViewVirtualListModel, wxDataViewTreeStore. + wxDataViewIndexListModel, wxDataViewVirtualListModel, wxDataViewTreeStore, + wxDataViewListStore. - Note that wxDataViewModel is reference counted, derives from wxObjectRefData + Note that wxDataViewModel is reference counted, derives from wxRefCounter and cannot be deleted directly as it can be shared by several wxDataViewCtrls. This implies that you need to decrease the reference count after associating the model with a control like this: @code - wxDataViewCtrl *musicCtrl = new wxDataViewCtrl( this, ID_MUSIC_CTRL ); + wxDataViewCtrl *musicCtrl = new wxDataViewCtrl( this, wxID_ANY ); wxDataViewModel *musicModel = new MyMusicModel; - m_musicCtrl-AssociateModel( musicModel ); - musicModel-DecRef(); // avoid memory leak !! + m_musicCtrl->AssociateModel( musicModel ); + musicModel->DecRef(); // avoid memory leak !! + // add columns now @endcode - @library{wxadv} @category{dvc} */ -class wxDataViewModel : public wxObjectRefData +class wxDataViewModel : public wxRefCounter { public: /** @@ -224,10 +107,10 @@ public: virtual int Compare(const wxDataViewItem& item1, const wxDataViewItem& item2, unsigned int column, - bool ascending); + bool ascending) const; /** - Oberride this to indicate that the item has special font attributes. + Override this to indicate that the item has special font attributes. This only affects the wxDataViewTextRendererText renderer. @see wxDataViewItemAttr. @@ -412,12 +295,12 @@ public: unsigned int column, bool ascending); /** - Oberride this to indicate that the row has special font attributes. + Override this to indicate that the row has special font attributes. This only affects the wxDataViewTextRendererText() renderer. @see wxDataViewItemAttr. */ - virtual bool GetAttr(unsigned int row, unsigned int col, + virtual bool GetAttrByRow(unsigned int row, unsigned int col, wxDataViewItemAttr& attr); /** @@ -433,7 +316,7 @@ public: /** Override this to allow getting values from the model. */ - virtual void GetValue(wxVariant& variant, unsigned int row, + virtual void GetValueByRow(wxVariant& variant, unsigned int row, unsigned int col) const = 0; /** @@ -483,7 +366,7 @@ public: /** Called in order to set a value in the model. */ - virtual bool SetValue(const wxVariant& variant, unsigned int row, + virtual bool SetValueByRow(const wxVariant& variant, unsigned int row, unsigned int col) = 0; }; @@ -602,12 +485,16 @@ public: wxDataViewCtrl is a control to display data either in a tree like fashion or in a tabular form or both. + If you only need to display a simple tree structure with an API more like the older wxTreeCtrl class, then the specialized wxDataViewTreeCtrl can be used. + Likewise, if you only want to display simple table structure you can use + the specialized wxDataViewListCtrl class. Both wxDataViewTreeCtrl and + wxDataViewListCtrl can be used without defining your own wxDataViewModel. A wxDataViewItem is used to represent a (visible) item in the control. - Unlike wxListCtrl wxDataViewCtrl doesn't get its data from the user through + Unlike wxListCtrl, wxDataViewCtrl doesn't get its data from the user through virtual functions or by setting it directly. Instead you need to write your own wxDataViewModel and associate it with this control. Then you need to add a number of wxDataViewColumn to this control to define @@ -616,7 +503,7 @@ public: A number of standard renderers for rendering text, dates, images, toggle, a progress bar etc. are provided. Additionally, the user can write custom - renderes deriving from wxDataViewCustomRenderer for displaying anything. + renderers deriving from wxDataViewCustomRenderer for displaying anything. All data transfer from the control to the model and the user code is done through wxVariant which can be extended to support more data formats as necessary. @@ -635,38 +522,48 @@ public: 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. + This can be inefficient when displaying large number of items. @endStyleTable - @beginEventTable{wxDataViewEvent} + @beginEventEmissionTable{wxDataViewEvent} @event{EVT_DATAVIEW_SELECTION_CHANGED(id, func)} - Process a wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED event. + Process a @c wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED event. @event{EVT_DATAVIEW_ITEM_ACTIVATED(id, func)} - Process a wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED event. + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED event. + @event{EVT_DATAVIEW_ITEM_START_EDITING(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED event. This + event can be vetoed in order to prevent editing on an item by item + basis. Still experimental. @event{EVT_DATAVIEW_ITEM_EDITING_STARTED(id, func)} - Process a wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED event. + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED event. @event{EVT_DATAVIEW_ITEM_EDITING_DONE(id, func)} - Process a wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE event. + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE event. @event{EVT_DATAVIEW_ITEM_COLLAPSING(id, func)} - Process a wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING event. + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING event. @event{EVT_DATAVIEW_ITEM_COLLAPSED(id, func)} - Process a wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSED event. + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSED event. @event{EVT_DATAVIEW_ITEM_EXPANDING(id, func)} - Process a wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING event. + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING event. @event{EVT_DATAVIEW_ITEM_EXPANDED(id, func)} - Process a wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED event. + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED event. @event{EVT_DATAVIEW_ITEM_VALUE_CHANGED(id, func)} - Process a wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED event. + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED event. @event{EVT_DATAVIEW_ITEM_CONTEXT_MENU(id, func)} - Process a wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU event. + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU event. @event{EVT_DATAVIEW_COLUMN_HEADER_CLICK(id, func)} - Process a wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICKED event. + Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICKED event. @event{EVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK(id, func)} - Process a wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICKED event. + Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICKED event. @event{EVT_DATAVIEW_COLUMN_SORTED(id, func)} - Process a wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED event. + Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED event. @event{EVT_DATAVIEW_COLUMN_REORDERED(id, func)} - Process a wxEVT_COMMAND_DATAVIEW_COLUMN_REORDERED event. + Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_REORDERED event. + @event{EVT_DATAVIEW_ITEM_BEGIN_DRAG(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_BEGIN_DRAG event. + @event{EVT_DATAVIEW_ITEM_DROP_POSSIBLE(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_DROP_POSSIBLE event. + @event{EVT_DATAVIEW_ITEM_DROP(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_DROP event. @endEventTable @library{wxadv} @@ -747,13 +644,13 @@ public: unsigned int model_column, wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int width = -1, - wxAlignment align = wxALIGN_CENTER, + wxAlignment align = wxALIGN_NOT, int flags = wxDATAVIEW_COL_RESIZABLE); wxDataViewColumn* AppendDateColumn(const wxBitmap& label, unsigned int model_column, wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int width = -1, - wxAlignment align = wxALIGN_CENTER, + wxAlignment align = wxALIGN_NOT, int flags = wxDATAVIEW_COL_RESIZABLE); //@} @@ -770,13 +667,13 @@ public: unsigned int model_column, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1, - wxAlignment align = wxALIGN_LEFT, + wxAlignment align = wxALIGN_NOT, int flags = wxDATAVIEW_COL_RESIZABLE); wxDataViewColumn* AppendIconTextColumn(const wxBitmap& label, unsigned int model_column, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1, - wxAlignment align = wxALIGN_LEFT, + wxAlignment align = wxALIGN_NOT, int flags = wxDATAVIEW_COL_RESIZABLE); //@} @@ -814,13 +711,13 @@ public: unsigned int model_column, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1, - wxAlignment align = wxALIGN_LEFT, + wxAlignment align = wxALIGN_NOT, int flags = wxDATAVIEW_COL_RESIZABLE); wxDataViewColumn* AppendTextColumn(const wxBitmap& label, unsigned int model_column, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1, - wxAlignment align = wxALIGN_LEFT, + wxAlignment align = wxALIGN_NOT, int flags = wxDATAVIEW_COL_RESIZABLE); //@} @@ -876,6 +773,16 @@ public: */ virtual bool DeleteColumn(wxDataViewColumn* column); + /** + Enable drag operations using the given @a format. + */ + virtual bool EnableDragSource( const wxDataFormat &format ); + + /** + Enable drop operations using the given @a format. + */ + virtual bool EnableDropTarget( const wxDataFormat &format ); + /** Call this to ensure that the given item is visible. */ @@ -887,6 +794,13 @@ public: */ virtual void Expand(const wxDataViewItem& item); + /** + Expands all ancestors of the @a item. This method also + ensures that the item itself as well as all ancestor + items have been read from the model by the control. + */ + virtual void ExpandAncestors( const wxDataViewItem & item ); + /** Returns pointer to the column. @a pos refers to the position in the control which may change after reordering columns by the user. @@ -946,6 +860,11 @@ public: virtual void HitTest(const wxPoint& point, wxDataViewItem& item, wxDataViewColumn*& col) const; + /** + Return @true if the item is expanded. + */ + virtual bool IsExpanded(const wxDataViewItem& item) const; + /** Return @true if the item is selected. */ @@ -1458,7 +1377,7 @@ public: Override this and make it return @true in order to indicate that this renderer supports in-place editing. */ - virtual bool HasEditorCtrl(); + virtual bool HasEditorCtrl() const; /** Overrride this to react to a left click. @@ -1519,6 +1438,7 @@ public: /** The flags used by wxDataViewColumn. + Can be combined together. */ enum wxDataViewColumnFlags { @@ -1532,7 +1452,7 @@ enum wxDataViewColumnFlags @class wxDataViewColumn This class represents a column in a wxDataViewCtrl. - One wxDataViewColumn is bound to one column in the data model, to which the + 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. @@ -1540,36 +1460,56 @@ enum wxDataViewColumnFlags @library{wxadv} @category{dvc} */ -class wxDataViewColumn : public wxObject +class wxDataViewColumn : public wxSettableHeaderColumn { public: - //@{ /** - Constructors. + Constructs a text column. + + @param title + The title of the column. + @param renderer + The class which will render the contents of this column. + @param model_column + The index of the model's column which is associated with this object. + @param width + The width of the column. + The @c wxDVC_DEFAULT_WIDTH value is the fixed default value. + @param align + The alignment of the column title. + @param flags + One or more flags of the ::wxDataViewColumnFlags enumeration. */ wxDataViewColumn(const wxString& title, wxDataViewRenderer* renderer, unsigned int model_column, int width = wxDVC_DEFAULT_WIDTH, - wxAlignment align = wxALIGN_CENTRE, + wxAlignment align = wxALIGN_CENTER, int flags = wxDATAVIEW_COL_RESIZABLE); + + /** + Constructs a bitmap column. + + @param bitmap + The bitmap of the column. + @param renderer + The class which will render the contents of this column. + @param model_column + The index of the model's column which is associated with this object. + @param width + The width of the column. + The @c wxDVC_DEFAULT_WIDTH value is the fixed default value. + @param align + The alignment of the column title. + @param flags + One or more flags of the ::wxDataViewColumnFlags enumeration. + */ wxDataViewColumn(const wxBitmap& bitmap, wxDataViewRenderer* renderer, unsigned int model_column, int width = wxDVC_DEFAULT_WIDTH, - wxAlignment align = wxALIGN_CENTRE, + wxAlignment align = wxALIGN_CENTER, int flags = wxDATAVIEW_COL_RESIZABLE); - //@} - - /** - Destructor. - */ - virtual ~wxDataViewColumn(); - - /** - Returns the bitmap in the header of the column, if any. - */ - const wxBitmap& GetBitmap() const; /** Returns the index of the column of the model, which this @@ -1588,70 +1528,247 @@ public: @see wxDataViewRenderer. */ wxDataViewRenderer* GetRenderer() const; +}; + + + +/** + @class wxDataViewListCtrl + + This class is a wxDataViewCtrl which internally uses a wxDataViewListStore + and forwards most of its API to that class. + + The purpose of this class is to offer a simple way to display and + edit a small table of data without having to write your own wxDataViewModel. + + @code + wxDataViewListCtrl *listctrl = new wxDataViewListCtrl( parent, wxID_ANY ); + + listctrl->AppendToggleColumn( "Toggle" ); + listctrl->AppendTextColumn( "Text" ); + + wxVector data; + data.push_back( wxVariant(true) ); + data.push_back( wxVariant("row 1") ); + listctrl->AppendItem( data ); + + data.clear(); + data.push_back( wxVariant(false) ); + 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 + + @library{wxadv} + @category{ctrl,dvc} +*/ +class wxDataViewListCtrl: public wxDataViewCtrl +{ +public: + /** + Default ctor. + */ + wxDataViewListCtrl(); + + /** + Constructor. Calls Create(). + */ + wxDataViewListCtrl( wxWindow *parent, wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, long style = wxDV_ROW_LINES, + const wxValidator& validator = wxDefaultValidator ); /** - Returns @true if the column is reorderable. + Destructor. Deletes the image list if any. */ - virtual bool IsReorderable() const; + ~wxDataViewListCtrl(); /** - Returns @true if the column is sortable. + Creates the control and a wxDataViewListStore as its internal model. + */ + bool Create( wxWindow *parent, wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, long style = wxDV_ROW_LINES, + const wxValidator& validator = wxDefaultValidator ); - @see SetSortable() + //@{ + /** + Returns the store. */ - virtual bool IsSortable() const; + wxDataViewListStore *GetStore(); + const wxDataViewListStore *GetStore() const; + //@} /** - Returns the width of the column. + @name Column management functions */ - virtual int GetWidth() const; + //@{ + + /** + Appends a column to the control and additionally appends a + column to the store with the type string. + */ + virtual void AppendColumn( wxDataViewColumn *column ); /** - Returns @true, if the sort order is ascending. + Appends a column to the control and additionally appends a + column to the list store with the type @a varianttype. + */ + void AppendColumn( wxDataViewColumn *column, const wxString &varianttype ); - @see SetSortOrder() + /** + Appends a text column to the control and the store. + + See wxDataViewColumn::wxDataViewColumn for more info about + the parameters. */ - virtual bool IsSortOrderAscending() const; + wxDataViewColumn *AppendTextColumn( const wxString &label, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + int width = -1, wxAlignment align = wxALIGN_LEFT, + int flags = wxDATAVIEW_COL_RESIZABLE ); /** - Set the alignment of the column header. + Appends a toggle column to the control and the store. + + See wxDataViewColumn::wxDataViewColumn for more info about + the parameters. */ - virtual void SetAlignment(wxAlignment align); + wxDataViewColumn *AppendToggleColumn( const wxString &label, + wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, + int width = -1, wxAlignment align = wxALIGN_LEFT, + int flags = wxDATAVIEW_COL_RESIZABLE ); /** - Set the bitmap of the column header. + Appends a progress column to the control and the store. + + See wxDataViewColumn::wxDataViewColumn for more info about + the parameters. */ - virtual void SetBitmap(const wxBitmap& bitmap); + wxDataViewColumn *AppendProgressColumn( const wxString &label, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + int width = -1, wxAlignment align = wxALIGN_LEFT, + int flags = wxDATAVIEW_COL_RESIZABLE ); /** - Indicate wether the column can be reordered by the user using the mouse. - This is typically implemented visually by dragging the header button around. + Appends an icon-and-text column to the control and the store. + + See wxDataViewColumn::wxDataViewColumn for more info about + the parameters. */ - virtual void SetReorderable(bool reorderable); + wxDataViewColumn *AppendIconTextColumn( const wxString &label, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + int width = -1, wxAlignment align = wxALIGN_LEFT, + int flags = wxDATAVIEW_COL_RESIZABLE ); /** - Indicate the sort order if the implementation of the wxDataViewCtrl supports - it, most commonly by showing a little arrow. + Inserts a column to the control and additionally inserts a + column to the store with the type string. */ - virtual void SetSortOrder(bool ascending); + virtual void InsertColumn( unsigned int pos, wxDataViewColumn *column ); /** - 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. + 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, + const wxString &varianttype ); - If @a sortable is @false, the column header is no longer clickable and - the sort indicator (little arrow) will disappear. + /** + Prepends a column to the control and additionally prepends a + column to the store with the type string. */ - virtual void SetSortable(bool sortable); + virtual void PrependColumn( wxDataViewColumn *column ); /** - Set the title of the column header to @a title. + Prepends a column to the control and additionally prepends a + column to the list store with the type @a varianttype. */ - virtual void SetTitle(const wxString& title); -}; + void PrependColumn( wxDataViewColumn *column, const wxString &varianttype ); + + //@} + + + /** + @name Item management functions + */ + //@{ + + /** + Appends an item (=row) to the control and store. + */ + void AppendItem( const wxVector &values, wxClientData *data = NULL ); + + /** + Prepends an item (=row) to the control and store. + */ + void PrependItem( const wxVector &values, wxClientData *data = NULL ); + + /** + Inserts an item (=row) to the control and store. + */ + void InsertItem( unsigned int row, const wxVector &values, wxClientData *data = NULL ); + + /** + Delete the row at position @a row. + */ + void DeleteItem( unsigned row ); + + /** + Delete all items (= all rows). + */ + void DeleteAllItems(); + + /** + Sets the value in the store and update the control. + */ + void SetValue( const wxVariant &value, unsigned int row, unsigned int col ); + + /** + Returns the value from the store. + */ + void GetValue( wxVariant &value, unsigned int row, unsigned int col ); + + /** + Sets the value in the store and update the control. + + This method assumes that the a string is stored in respective + column. + */ + void SetTextValue( const wxString &value, unsigned int row, unsigned int col ); + + /** + Returns the value from the store. + + This method assumes that the a string is stored in respective + column. + */ + wxString GetTextValue( unsigned int row, unsigned int col ) const; + + /** + Sets the value in the store and update the control. + + This method assumes that the a boolean value is stored in + respective column. + */ + void SetToggleValue( bool value, unsigned int row, unsigned int col ); + + /** + Returns the value from the store. + This method assumes that the a boolean value is stored in + respective column. + */ + bool GetToggleValue( unsigned int row, unsigned int col ) const; + + //@} +}; /** @@ -1661,8 +1778,16 @@ 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 look like a wxTreeCtrl to make a transition - from it to the wxDataViewCtrl class simpler. + The main purpose of this class is to represent a possible replacement for + wxTreeCtrl. + + @beginStyleTable + See wxDataViewCtrl for the list of supported styles. + @endStyleTable + + @beginEventEmissionTable + See wxDataViewCtrl for the list of events emitted by this class. + @endEventTable @library{wxadv} @category{ctrl,dvc} @@ -1691,7 +1816,7 @@ public: virtual ~wxDataViewTreeCtrl(); /** - @todo docme + Appends a container to the given @a parent. */ wxDataViewItem AppendContainer(const wxDataViewItem& parent, const wxString& text, @@ -1700,7 +1825,7 @@ public: wxClientData* data = NULL); /** - @todo docme + Appends an item to the given @a parent. */ wxDataViewItem AppendItem(const wxDataViewItem& parent, const wxString& text, @@ -1771,7 +1896,7 @@ public: /** Returns the store. */ - wxDataViewTreeStore* GetStore() const; + wxDataViewTreeStore* GetStore(); const wxDataViewTreeStore* GetStore() const; //@} @@ -1844,17 +1969,137 @@ public: }; +/** + @class wxDataViewListStore + + wxDataViewListStore is a specialised wxDataViewModel for storing + a simple table of data. Since it derives from wxDataViewIndexListModel + its data is be accessed by row (i.e. by index) instead of only + by wxDataViewItem. + + This class actually stores the values (therefore its name) + and implements all virtual methods from the base classes so it can be + used directly without having to derive any class from it, but it is + mostly used from within wxDataViewListCtrl. + + @library{wxadv} + @category{dvc} +*/ + +class wxDataViewListStore: public wxDataViewIndexListModel +{ +public: + /** + Constructor + */ + wxDataViewListStore(); + + /** + Destructor + */ + ~wxDataViewListStore(); + + /** + Prepends a data column. + + @a variantype indicates the type of values store in the column. + + This does not automatically fill in any (default) values in + rows which exist in the store already. + */ + void PrependColumn( const wxString &varianttype ); + + /** + Inserts a data column before @a pos. + + @a variantype indicates the type of values store in the column. + + This does not automatically fill in any (default) values in + rows which exist in the store already. + */ + void InsertColumn( unsigned int pos, const wxString &varianttype ); + + /** + Appends a data column. + + @a variantype indicates the type of values store in the column. + + This does not automatically fill in any (default) values in + rows which exist in the store already. + */ + void AppendColumn( const wxString &varianttype ); + + /** + Appends an item (=row) and fills it with @a values. + + The values must match the values specifies in the column + in number and type. No (default) values are filled in + automatically. + */ + void AppendItem( const wxVector &values, wxClientData *data = NULL ); + + /** + Prepends an item (=row) and fills it with @a values. + + The values must match the values specifies in the column + in number and type. No (default) values are filled in + automatically. + */ + void PrependItem( const wxVector &values, wxClientData *data = NULL ); + + /** + Inserts an item (=row) and fills it with @a values. + + The values must match the values specifies in the column + in number and type. No (default) values are filled in + automatically. + */ + void InsertItem( unsigned int row, const wxVector &values, wxClientData *data = NULL ); + + /** + Delete the item (=row) at position @a pos. + */ + void DeleteItem( unsigned pos ); + + /** + Delete all item (=all rows) in the store. + */ + void DeleteAllItems(); + + /** + Overriden from wxDataViewModel + */ + virtual unsigned int GetColumnCount() const; + + /** + Overriden from wxDataViewModel + */ + virtual wxString GetColumnType( unsigned int col ) const; + + /** + Overriden from wxDataViewIndexListModel + */ + virtual void GetValueByRow( wxVariant &value, + unsigned int row, unsigned int col ) const; + + /** + Overriden from wxDataViewIndexListModel + */ + virtual bool SetValueByRow( const wxVariant &value, + unsigned int row, unsigned int col ); +}; + /** @class wxDataViewTreeStore - wxDataViewTreeStore is a specialised wxDataViewModel for displaying simple + wxDataViewTreeStore is a specialised wxDataViewModel for stroing 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 actually stores the entire tree and the values (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, but it is mostly used from within + wxDataViewTreeCtrl. @library{wxadv} @category{dvc} @@ -1988,3 +2233,203 @@ public: void SetItemIcon(const wxDataViewItem& item, const wxIcon& icon); }; + +/** + @class wxDataViewIconText + + wxDataViewIconText is used by wxDataViewIconTextRenderer for data transfer. + This class can be converted to and from a wxVariant. + + @library{wxadv} + @category{dvc} +*/ +class wxDataViewIconText : public wxObject +{ +public: + //@{ + /** + Constructor. + */ + wxDataViewIconText(const wxString& text = wxEmptyString, + const wxIcon& icon = wxNullIcon); + wxDataViewIconText(const wxDataViewIconText& other); + //@} + + /** + Gets the icon. + */ + const wxIcon& GetIcon() const; + + /** + Gets the text. + */ + wxString GetText() const; + + /** + Set the icon. + */ + void SetIcon(const wxIcon& icon); + + /** + Set the text. + */ + void SetText(const wxString& text); +}; + + + +/** + @class wxDataViewEvent + + This is the event class for the wxDataViewCtrl notifications. + + @beginEventTable{wxDataViewEvent} + @event{EVT_DATAVIEW_SELECTION_CHANGED(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED event. + @event{EVT_DATAVIEW_ITEM_ACTIVATED(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED event. + @event{EVT_DATAVIEW_ITEM_EDITING_STARTED(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED event. + @event{EVT_DATAVIEW_ITEM_EDITING_DONE(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE event. + @event{EVT_DATAVIEW_ITEM_COLLAPSING(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING event. + @event{EVT_DATAVIEW_ITEM_COLLAPSED(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSED event. + @event{EVT_DATAVIEW_ITEM_EXPANDING(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING event. + @event{EVT_DATAVIEW_ITEM_EXPANDED(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED event. + @event{EVT_DATAVIEW_ITEM_VALUE_CHANGED(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED event. + @event{EVT_DATAVIEW_ITEM_CONTEXT_MENU(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU event. + @event{EVT_DATAVIEW_COLUMN_HEADER_CLICK(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICKED event. + @event{EVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICKED event. + @event{EVT_DATAVIEW_COLUMN_SORTED(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED event. + @event{EVT_DATAVIEW_COLUMN_REORDERED(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_REORDERED event. + @event{EVT_DATAVIEW_ITEM_BEGIN_DRAG(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_BEGIN_DRAG event. + @event{EVT_DATAVIEW_ITEM_DROP_POSSIBLE(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_DROP_POSSIBLE event. + @event{EVT_DATAVIEW_ITEM_DROP(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_DROP event. + @event{EVT_DATAVIEW_CACHE_HINT(id, func)} + Process a @c wxEVT_COMMAND_DATAVIEW_CACHE_HINT event. + @endEventTable + + @library{wxadv} + @category{events,dvc} +*/ +class wxDataViewEvent : public wxNotifyEvent +{ +public: + /** + Constructor. Typically used by wxWidgets internals only. + */ + wxDataViewEvent(wxEventType commandType = wxEVT_NULL, + int winid = 0); + + /** + Returns the position of the column in the control or -1 + if no column field was set by the event emitter. + */ + int GetColumn() const; + + /** + Returns a pointer to the wxDataViewColumn from which + the event was emitted or @NULL. + */ + wxDataViewColumn* GetDataViewColumn() const; + + /** + Returns the wxDataViewModel associated with the event. + */ + wxDataViewModel* GetModel() const; + + /** + Returns a the position of a context menu event in screen coordinates. + */ + wxPoint GetPosition() const; + + /** + Returns a reference to a value. + */ + const wxVariant& GetValue() const; + + /** + Sets the column index associated with this event. + */ + void SetColumn(int col); + + /** + For wxEVT_DATAVIEW_COLUMN_HEADER_CLICKED only. + */ + void SetDataViewColumn(wxDataViewColumn* col); + + /** + Sets the dataview model associated with this event. + */ + void SetModel(wxDataViewModel* model); + + /** + Sets the value associated with this event. + */ + void SetValue(const wxVariant& value); + + /** + Set wxDataObject for data transfer within a drag operation. + */ + void SetDataObject( wxDataObject *obj ); + + /** + Used internally. Gets associated wxDataObject for data transfer + within a drag operation. + */ + wxDataObject *GetDataObject() const; + + /** + Used internally. Sets the wxDataFormat during a drop operation. + */ + void SetDataFormat( const wxDataFormat &format ); + + /** + Gets the wxDataFormat during a drop operation. + */ + wxDataFormat GetDataFormat() const; + + /** + Used internally. Sets the data size for a drop data transfer. + */ + void SetDataSize( size_t size ); + + /** + Gets the data size for a drop data transfer. + */ + size_t GetDataSize() const; + + /** + Used internally. Sets the data buffer for a drop data transfer. + */ + void SetDataBuffer( void* buf ); + + /** + Gets the data buffer for a drop data transfer. + */ + void *GetDataBuffer() const; + + /** + Return the first row that will be displayed. + */ + int GetCacheFrom() const; + + /** + Return the last row that will be displayed. + */ + int GetCacheTo() const; +}; +