X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fa629adae4b372620b2109777ec37c2deed24d58..c29c95fe24973b94fd724db767193171ca7c513d:/interface/wx/dataview.h diff --git a/interface/wx/dataview.h b/interface/wx/dataview.h index 1bcdf86eb0..8779ef96f9 100644 --- a/interface/wx/dataview.h +++ b/interface/wx/dataview.h @@ -167,6 +167,33 @@ public: virtual bool GetAttr(const wxDataViewItem& item, unsigned int col, wxDataViewItemAttr& attr) const; + /** + Override this to indicate that the item should be disabled. + + Disabled items are displayed differently (e.g. grayed out) and cannot + be interacted with. + + The base class version always returns @true, thus making all items + enabled by default. + + @param item + The item whose enabled status is requested. + @param col + The column of the item whose enabled status is requested. + @return + @true if this item should be enabled, @false otherwise. + + @note Currently disabling items is fully implemented only for the + native control implementation in wxOSX/Cocoa and wxGTK. + This feature is only partially supported in the generic + version (used by wxMSW) and not supported by the wxOSX/Carbon + implementation. + + @since 2.9.2 + */ + virtual bool IsEnabled(const wxDataViewItem &item, + unsigned int col) const; + /** Override this so the control can query the child items of an item. Returns the number of items. @@ -189,7 +216,7 @@ public: /** Override this to indicate which wxDataViewItem representing the parent - of @a item or an invalid wxDataViewItem if the the root item is + of @a item or an invalid wxDataViewItem if the root item is the parent item. */ virtual wxDataViewItem GetParent(const wxDataViewItem& item) const = 0; @@ -204,7 +231,7 @@ public: /** Override this method to indicate if a container item merely acts as a headline (or for categorisation) or if it also acts a normal item with - entries for futher columns. By default returns @false. + entries for further columns. By default returns @false. */ virtual bool HasContainerColumns(const wxDataViewItem& item) const; @@ -249,7 +276,7 @@ public: /** Call this to inform the model that an item has changed. - This will eventually emit a wxEVT_DATAVIEW_ITEM_VALUE_CHANGED + This will eventually emit a @c wxEVT_DATAVIEW_ITEM_VALUE_CHANGED event (in which the column fields will not be set) to the user. */ bool ItemChanged(const wxDataViewItem& item); @@ -269,7 +296,7 @@ public: /** Call this to inform the model that several items have changed. - This will eventually emit wxEVT_DATAVIEW_ITEM_VALUE_CHANGED + This will eventually emit @c wxEVT_DATAVIEW_ITEM_VALUE_CHANGED events (in which the column fields will not be set) to the user. */ bool ItemsChanged(const wxDataViewItemArray& items); @@ -310,7 +337,7 @@ public: 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 + This will eventually emit a @c wxEVT_DATAVIEW_ITEM_VALUE_CHANGED event to the user. */ virtual bool ValueChanged(const wxDataViewItem& item, @@ -327,28 +354,17 @@ protected: /** - @class wxDataViewIndexListModel + @class wxDataViewListModel - 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. + Base class with abstract API for wxDataViewIndexListModel and + wxDataViewVirtualListModel. @library{wxadv} @category{dvc} */ -class wxDataViewIndexListModel : public wxDataViewModel +class wxDataViewListModel : public wxDataViewModel { public: - /** - Constructor. - */ - wxDataViewIndexListModel(unsigned int initial_size = 0); /** Destructor. @@ -382,6 +398,28 @@ public: virtual bool GetAttrByRow(unsigned int row, unsigned int col, wxDataViewItemAttr& attr) const; + /** + Override this if you want to disable specific items. + + The base class version always returns @true, thus making all items + enabled by default. + + @param row + The row of the item whose enabled status is requested. + @param col + The column of the item whose enabled status is requested. + @return + @true if the item at this row and column should be enabled, + @false otherwise. + + @note See wxDataViewModel::IsEnabled() for the current status of + support for disabling the items under different platforms. + + @since 2.9.2 + */ + virtual bool IsEnabledByRow(unsigned int row, + unsigned int col) const; + /** Returns the number of items (i.e. rows) in the list. */ @@ -455,6 +493,34 @@ public: }; +/** + @class wxDataViewIndexListModel + + 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. + + @see wxDataViewListModel for the API. + + @library{wxadv} + @category{dvc} +*/ + +class wxDataViewIndexListModel : public wxDataViewListModel +{ +public: + /** + Constructor. + */ + wxDataViewIndexListModel(unsigned int initial_size = 0); + +}; /** @class wxDataViewVirtualListModel @@ -464,15 +530,15 @@ public: the exact same interface as wxDataViewIndexListModel. The important difference is that under platforms other than OS X, using this model will result in a truly 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). + as the control doesn't store any item (a feature not supported by OS X). - @see wxDataViewIndexListModel for the API. + @see wxDataViewListModel for the API. @library{wxadv} @category{dvc} */ -class wxDataViewVirtualListModel : public wxDataViewModel + +class wxDataViewVirtualListModel : public wxDataViewListModel { public: /** @@ -480,10 +546,6 @@ public: */ wxDataViewVirtualListModel(unsigned int initial_size = 0); - /** - Returns the number of virtual items (i.e. rows) in the list. - */ - unsigned int GetCount() const; }; @@ -605,6 +667,8 @@ public: Multiple selection mode. @style{wxDV_ROW_LINES} Use alternating colours for rows if supported by platform and theme. + Currently only supported by the native GTK and OS X implementations + but not by the generic one. @style{wxDV_HORIZ_RULES} Display fine rules between row if supported. @style{wxDV_VERT_RULES} @@ -676,7 +740,8 @@ public: const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, - const wxValidator& validator = wxDefaultValidator); + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxDataViewCtrlNameStr); /** Destructor. @@ -857,7 +922,8 @@ public: const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, - const wxValidator& validator = wxDefaultValidator); + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxDataViewCtrlNameStr); /** Deletes given column. @@ -913,6 +979,26 @@ public: */ wxDataViewColumn* GetExpanderColumn() const; + /** + Returns the currently focused item. + + This is the item that the keyboard commands apply to. It may be invalid + if there is no focus currently. + + This method is mostly useful for the controls with @c wxDV_MULTIPLE + style as in the case of single selection it returns the same thing as + GetSelection(). + + Notice that under all platforms except Mac OS X the currently focused + item may be selected or not but under OS X the current item is always + selected. + + @see SetCurrentItem() + + @since 2.9.2 + */ + wxDataViewItem GetCurrentItem() const; + /** Returns indentation. */ @@ -963,6 +1049,10 @@ public: /** Select the given item. + + In single selection mode this changes the (unique) currently selected + item. In multi selection mode, the @a item is selected and the + previously selected items remain selected. */ virtual void Select(const wxDataViewItem& item); @@ -977,7 +1067,26 @@ public: void SetExpanderColumn(wxDataViewColumn* col); /** - Sets the indendation. + Changes the currently focused item. + + The @a item parameter must be valid, there is no way to remove the + current item from the control. + + In single selection mode, calling this method is the same as calling + Select() and is thus not very useful. In multiple selection mode this + method only moves the current item however without changing the + selection except under OS X where the current item is always selected, + so calling SetCurrentItem() selects @a item if it hadn't been selected + before. + + @see GetCurrentItem() + + @since 2.9.2 + */ + void SetCurrentItem(const wxDataViewItem& item); + + /** + Sets the indentation. */ void SetIndent(int indent); @@ -986,6 +1095,14 @@ public: */ virtual void SetSelections(const wxDataViewItemArray& sel); + /** + Programmatically starts editing the given item on the given column. + Currently not implemented on wxOSX Carbon. + @since 2.9.2 + */ + + virtual void StartEditor(const wxDataViewItem & item, unsigned int column); + /** Unselect the given item. */ @@ -996,6 +1113,26 @@ public: This method only has effect if multiple selections are allowed. */ virtual void UnselectAll(); + + /** + Sets the row height. + + This function can only be used when all rows have the same height, i.e. + when wxDV_VARIABLE_LINE_HEIGHT flag is not used. + + Currently this is implemented in the generic and native GTK versions + only and nothing is done (and @false returned) when using OS X port. + + Also notice that this method can only be used to increase the row + height compared with the default one (as determined by the return value + of wxDataViewRenderer::GetSize()), if it is set to a too small value + then the minimum required by the renderers will be used. + + @return @true if the line height was changed or @false otherwise. + + @since 2.9.2 + */ + virtual bool SetRowHeight(int rowHeight); }; @@ -1462,7 +1599,7 @@ public: Override this to react to double clicks or ENTER. This method will only be called in wxDATAVIEW_CELL_ACTIVATABLE mode. */ - virtual bool Activate( wxRect cell, + virtual bool Activate( const wxRect& cell, wxDataViewModel* model, const wxDataViewItem & item, unsigned int col ); @@ -1481,9 +1618,9 @@ public: } @endcode */ - virtual wxControl* CreateEditorCtrl(wxWindow* parent, - wxRect labelRect, - const wxVariant& value); + virtual wxWindow* CreateEditorCtrl(wxWindow* parent, + wxRect labelRect, + const wxVariant& value); /** Return the attribute to be used for rendering. @@ -1518,7 +1655,7 @@ public: } @endcode */ - virtual bool GetValueFromEditorCtrl(wxControl* editor, + virtual bool GetValueFromEditorCtrl(wxWindow* editor, wxVariant& value); /** @@ -1531,8 +1668,8 @@ public: 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, - wxRect cell, + virtual bool LeftClick( const wxPoint& cursor, + const wxRect& cell, wxDataViewModel * model, const wxDataViewItem & item, unsigned int col ); @@ -1556,7 +1693,8 @@ public: /** Override this to start a drag operation. Not yet supported. */ - virtual bool StartDrag(wxPoint cursor, wxRect cell, + virtual bool StartDrag(const wxPoint& cursor, + const wxRect& cell, wxDataViewModel* model, const wxDataViewItem & item, unsigned int col); @@ -1944,7 +2082,7 @@ public: /** Sets the value in the store and update the control. - This method assumes that the a string is stored in respective + This method assumes that the string is stored in respective column. */ void SetTextValue( const wxString &value, unsigned int row, unsigned int col ); @@ -1952,7 +2090,7 @@ public: /** Returns the value from the store. - This method assumes that the a string is stored in respective + This method assumes that the string is stored in respective column. */ wxString GetTextValue( unsigned int row, unsigned int col ) const; @@ -1960,7 +2098,7 @@ public: /** Sets the value in the store and update the control. - This method assumes that the a boolean value is stored in + This method assumes that the boolean value is stored in respective column. */ void SetToggleValue( bool value, unsigned int row, unsigned int col ); @@ -1968,7 +2106,7 @@ public: /** Returns the value from the store. - This method assumes that the a boolean value is stored in + This method assumes that the boolean value is stored in respective column. */ bool GetToggleValue( unsigned int row, unsigned int col ) const; @@ -2283,23 +2421,23 @@ public: void DeleteAllItems(); /** - Overriden from wxDataViewModel + Overridden from wxDataViewModel */ virtual unsigned int GetColumnCount() const; /** - Overriden from wxDataViewModel + Overridden from wxDataViewModel */ virtual wxString GetColumnType( unsigned int col ) const; /** - Overriden from wxDataViewIndexListModel + Overridden from wxDataViewIndexListModel */ virtual void GetValueByRow( wxVariant &value, unsigned int row, unsigned int col ) const; /** - Overriden from wxDataViewIndexListModel + Overridden from wxDataViewIndexListModel */ virtual bool SetValueByRow( const wxVariant &value, unsigned int row, unsigned int col ); @@ -2309,7 +2447,7 @@ public: /** @class wxDataViewTreeStore - wxDataViewTreeStore is a specialised wxDataViewModel for stroing simple + wxDataViewTreeStore is a specialised wxDataViewModel for storing simple trees very much like wxTreeCtrl does and it offers a similar API. This class actually stores the entire tree and the values (therefore its name) @@ -2371,7 +2509,7 @@ public: int GetChildCount(const wxDataViewItem& parent) const; /** - Returns the client data asoociated with the item. + Returns the client data associated with the item. */ wxClientData* GetItemData(const wxDataViewItem& item) const; @@ -2568,7 +2706,7 @@ public: wxDataViewModel* GetModel() const; /** - Returns a the position of a context menu event in screen coordinates. + Returns the position of a context menu event in screen coordinates. */ wxPoint GetPosition() const; @@ -2577,13 +2715,33 @@ public: */ const wxVariant& GetValue() const; + /** + Can be used to determine whether the new value is going to be accepted + in wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE handler. + + Returns @true if editing the item was cancelled or if the user tried to + enter an invalid value (refused by wxDataViewRenderer::Validate()). If + this method returns @false, it means that the value in the model is + about to be changed to the new one. + + Notice that wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE event handler can + call wxNotifyEvent::Veto() to prevent this from happening. + + Currently support for setting this field and for vetoing the change is + only available in the generic version of wxDataViewCtrl, i.e. under MSW + but not GTK nor OS X. + + @since 2.9.3 + */ + bool IsEditCancelled() const; + /** Sets the column index associated with this event. */ void SetColumn(int col); /** - For wxEVT_DATAVIEW_COLUMN_HEADER_CLICKED only. + For @c wxEVT_DATAVIEW_COLUMN_HEADER_CLICKED only. */ void SetDataViewColumn(wxDataViewColumn* col);