X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bf915caf9b7b2e2503d319f9276e9d1e08c2979f..b09857ae000a60704207d63290be937584805fb0:/interface/wx/dataview.h diff --git a/interface/wx/dataview.h b/interface/wx/dataview.h index dcb4b7c429..e650262bf2 100644 --- a/interface/wx/dataview.h +++ b/interface/wx/dataview.h @@ -259,7 +259,7 @@ public: bool HasValue(const wxDataViewItem& item, unsigned col) const; /** - Override this to indicate of @a 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) const = 0; @@ -340,6 +340,10 @@ public: virtual bool ValueChanged(const wxDataViewItem& item, unsigned int col); + + virtual bool IsListModel() const; + virtual bool IsVirtualListModel() const; + protected: /** @@ -366,7 +370,7 @@ public: /** Destructor. */ - virtual ~wxDataViewIndexListModel(); + virtual ~wxDataViewListModel(); /** Compare method that sorts the items by their index. @@ -420,23 +424,58 @@ public: /** Returns the number of items (or rows) in the list. */ - unsigned int GetCount() const; - - /** - Returns the wxDataViewItem at the given @e row. - */ - wxDataViewItem GetItem(unsigned int row) const; + unsigned int GetCount() const = 0; /** Returns the position of given @e item. */ - unsigned int GetRow(const wxDataViewItem& item) const; + unsigned int GetRow(const wxDataViewItem& item) const = 0; /** Override this to allow getting values from the model. */ virtual void GetValueByRow(wxVariant& variant, unsigned int row, - unsigned int col) const = 0; + unsigned int col) const = 0; + + /** + Called in order to set a value in the model. + */ + virtual bool SetValueByRow(const wxVariant& variant, unsigned int row, + unsigned int col) = 0; +}; + + +/** + @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); + + /** + Returns the wxDataViewItem at the given @e row. + */ + wxDataViewItem GetItem(unsigned int row) const; /** Call this after if the data has to be read again from the model. @@ -482,41 +521,6 @@ public: */ void RowsDeleted(const wxArrayInt& rows); - /** - Called in order to set a value in the model. - */ - virtual bool SetValueByRow(const wxVariant& variant, unsigned int row, - unsigned int col) = 0; -}; - - -/** - @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); - }; /** @@ -543,6 +547,55 @@ public: */ wxDataViewVirtualListModel(unsigned int initial_size = 0); + /** + Returns the wxDataViewItem at the given @e row. + */ + wxDataViewItem GetItem(unsigned int row) const; + + /** + 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); + }; @@ -591,6 +644,52 @@ public: Call this to indicate that the item shall be displayed in italic text. */ void SetItalic(bool set); + + + /** + Returns true if the colour property has been set. + */ + bool HasColour() const; + + /** + Returns this attribute's colour. + */ + const wxColour& GetColour() const; + + /** + Returns true if any property affecting the font has been set. + */ + bool HasFont() const; + + /** + Returns value of the bold property. + */ + bool GetBold() const; + + /** + Returns value of the italics property. + */ + bool GetItalic() const; + + /** + Returns true if the background colour property has been set. + */ + bool HasBackgroundColour() const; + + /** + Returns the colour to be used for the background. + */ + const wxColour& GetBackgroundColour() const; + + /** + Returns true if none of the properties have been set. + */ + bool IsDefault() const; + + /** + Return the font based on the given one with this attribute applied to it. + */ + wxFont GetEffectiveFont(const wxFont& font) const; }; @@ -747,7 +846,9 @@ wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_DROP; @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. + Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED event. This event + is triggered by double clicking an item or pressing some special key + (usually "Enter") when it is focused. @event{EVT_DATAVIEW_ITEM_START_EDITING(id, func)} Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_START_EDITING event. This event can be vetoed in order to prevent editing on an item by item @@ -788,9 +889,14 @@ wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_DROP; Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_DROP event. @endEventTable + Notice that this control doesn't allow to process generic mouse events such + as @c wxEVT_LEFT_DOWN in all ports (notably it doesn't work in wxGTK). If + you need to handle any mouse events not covered by the ones above, consider + using a custom renderer for the cells that must handle them. + @library{wxadv} @category{ctrl,dvc} - @appearance{dataviewctrl.png} + @appearance{dataviewctrl} */ class wxDataViewCtrl : public wxControl { @@ -815,6 +921,16 @@ public: */ virtual ~wxDataViewCtrl(); + /** + Create the control. Useful for two step creation. + */ + bool Create(wxWindow* parent, wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxDataViewCtrlNameStr); + /** Appends a wxDataViewColumn to the control. Returns @true on success. @@ -855,6 +971,25 @@ public: int flags = wxDATAVIEW_COL_RESIZABLE); //@} + //@{ + /** + Prepends a column for rendering a bitmap. Returns the wxDataViewColumn + created in the function or @NULL on failure. + */ + wxDataViewColumn* PrependBitmapColumn(const wxString& label, + unsigned int model_column, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + int width = -1, + wxAlignment align = wxALIGN_CENTER, + int flags = wxDATAVIEW_COL_RESIZABLE); + wxDataViewColumn* PrependBitmapColumn(const wxBitmap& label, + unsigned int model_column, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + int width = -1, + wxAlignment align = wxALIGN_CENTER, + int flags = wxDATAVIEW_COL_RESIZABLE); + //@} + //@{ /** Appends a column for rendering a date. Returns the wxDataViewColumn @@ -877,6 +1012,28 @@ public: int flags = wxDATAVIEW_COL_RESIZABLE); //@} + //@{ + /** + Prepends a column for rendering a date. Returns the wxDataViewColumn + created in the function or @NULL on failure. + + @note The @a align parameter is applied to both the column header and + the column renderer. + */ + wxDataViewColumn* PrependDateColumn(const wxString& label, + unsigned int model_column, + wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, + int width = -1, + wxAlignment align = wxALIGN_NOT, + int flags = wxDATAVIEW_COL_RESIZABLE); + wxDataViewColumn* PrependDateColumn(const wxBitmap& label, + unsigned int model_column, + wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, + int width = -1, + wxAlignment align = wxALIGN_NOT, + int flags = wxDATAVIEW_COL_RESIZABLE); + //@} + //@{ /** Appends a column for rendering text with an icon. Returns the wxDataViewColumn @@ -900,6 +1057,29 @@ public: int flags = wxDATAVIEW_COL_RESIZABLE); //@} + //@{ + /** + Prepends a column for rendering text with an icon. Returns the wxDataViewColumn + created in the function or @NULL on failure. + This method uses the wxDataViewIconTextRenderer class. + + @note The @a align parameter is applied to both the column header and + the column renderer. + */ + wxDataViewColumn* PrependIconTextColumn(const wxString& label, + unsigned int model_column, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + int width = -1, + wxAlignment align = wxALIGN_NOT, + int flags = wxDATAVIEW_COL_RESIZABLE); + wxDataViewColumn* PrependIconTextColumn(const wxBitmap& label, + unsigned int model_column, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + int width = -1, + wxAlignment align = wxALIGN_NOT, + int flags = wxDATAVIEW_COL_RESIZABLE); + //@} + //@{ /** Appends a column for rendering a progress indicator. Returns the @@ -922,6 +1102,28 @@ public: int flags = wxDATAVIEW_COL_RESIZABLE); //@} + //@{ + /** + Prepends a column for rendering a progress indicator. Returns the + wxDataViewColumn created in the function or @NULL on failure. + + @note The @a align parameter is applied to both the column header and + the column renderer. + */ + wxDataViewColumn* PrependProgressColumn(const wxString& label, + unsigned int model_column, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + int width = 80, + wxAlignment align = wxALIGN_CENTER, + int flags = wxDATAVIEW_COL_RESIZABLE); + wxDataViewColumn* PrependProgressColumn(const wxBitmap& label, + unsigned int model_column, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + int width = 80, + wxAlignment align = wxALIGN_CENTER, + int flags = wxDATAVIEW_COL_RESIZABLE); + //@} + //@{ /** Appends a column for rendering text. Returns the wxDataViewColumn @@ -944,6 +1146,28 @@ public: int flags = wxDATAVIEW_COL_RESIZABLE); //@} + //@{ + /** + Prepends a column for rendering text. Returns the wxDataViewColumn + created in the function or @NULL on failure. + + @note The @a align parameter is applied to both the column header and + the column renderer. + */ + wxDataViewColumn* PrependTextColumn(const wxString& label, + unsigned int model_column, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + int width = -1, + wxAlignment align = wxALIGN_NOT, + int flags = wxDATAVIEW_COL_RESIZABLE); + wxDataViewColumn* PrependTextColumn(const wxBitmap& label, + unsigned int model_column, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + int width = -1, + wxAlignment align = wxALIGN_NOT, + int flags = wxDATAVIEW_COL_RESIZABLE); + //@} + //@{ /** Appends a column for rendering a toggle. Returns the wxDataViewColumn @@ -966,6 +1190,28 @@ public: int flags = wxDATAVIEW_COL_RESIZABLE); //@} + //@{ + /** + Prepends a column for rendering a toggle. Returns the wxDataViewColumn + created in the function or @NULL on failure. + + @note The @a align parameter is applied to both the column header and + the column renderer. + */ + wxDataViewColumn* PrependToggleColumn(const wxString& label, + unsigned int model_column, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + int width = 30, + wxAlignment align = wxALIGN_CENTER, + int flags = wxDATAVIEW_COL_RESIZABLE); + wxDataViewColumn* PrependToggleColumn(const wxBitmap& label, + unsigned int model_column, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + int width = 30, + wxAlignment align = wxALIGN_CENTER, + int flags = wxDATAVIEW_COL_RESIZABLE); + //@} + /** Associates a wxDataViewModel with the control. This increases the reference count of the model by 1. @@ -982,16 +1228,6 @@ public: */ virtual void Collapse(const wxDataViewItem& item); - /** - Create the control. Useful for two step creation. - */ - bool Create(wxWindow* parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxDataViewCtrlNameStr); - /** Deletes given column. */ @@ -1451,7 +1687,7 @@ enum wxDataViewCellRenderState - wxDataViewSpinRenderer. - wxDataViewChoiceRenderer. - Additionally, the user can write own renderers by deriving from + Additionally, the user can write their own renderers by deriving from wxDataViewCustomRenderer. The ::wxDataViewCellMode and ::wxDataViewCellRenderState flags accepted @@ -1571,6 +1807,21 @@ public: editing process finished. */ virtual bool Validate(wxVariant& value); + + + virtual bool HasEditorCtrl() const; + virtual wxWindow* CreateEditorCtrl(wxWindow * parent, + wxRect labelRect, + const wxVariant& value); + virtual bool GetValueFromEditorCtrl(wxWindow * editor, + wxVariant& value); + virtual bool StartEditing( const wxDataViewItem &item, wxRect labelRect ); + virtual void CancelEditing(); + virtual bool FinishEditing(); + wxWindow *GetEditorCtrl(); + +protected: + wxDataViewCtrl* GetView() const; }; @@ -1690,12 +1941,15 @@ public: /** - @class wxDataViewChoiceRenderer + A wxDataViewCtrl renderer using wxChoice control and values of strings in + it. 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. + @see wxDataViewChoiceByIndexRenderer + @library{wxadv} @category{dvc} */ @@ -1714,7 +1968,7 @@ public: Returns the choice referred to by index. */ wxString GetChoice(size_t index) const; - + /** Returns all choices. */ @@ -1722,6 +1976,28 @@ public: }; +/** + A wxDataViewCtrl renderer using wxChoice control and indexes into it. + + Unlike its base wxDataViewChoiceRenderer class, this one stores the choice + index, i.e. an @c int, in the variant used by its SetValue() and + GetValue(). + + @library{wxadv} + @category{dvc} +*/ +class wxDataViewChoiceByIndexRenderer : public wxDataViewChoiceRenderer +{ +public: + /** + The ctor. + */ + wxDataViewChoiceByIndexRenderer( const wxArrayString &choices, + wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE, + int alignment = wxDVR_DEFAULT_ALIGNMENT ); +}; + + /** @class wxDataViewDateRenderer @@ -1770,7 +2046,7 @@ public: */ wxDataViewCustomRenderer(const wxString& varianttype = "string", wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, - int align = -1, bool no_init = false); + int align = wxDVR_DEFAULT_ALIGNMENT); /** Destructor. @@ -1901,15 +2177,26 @@ public: virtual bool HasEditorCtrl() const; /** - Override this to react to a left click. - This method will only be called in @c wxDATAVIEW_CELL_ACTIVATABLE mode. + Override this to react to a left click. This method will only be + called in @c wxDATAVIEW_CELL_ACTIVATABLE mode. This method is + deprecated, please use ActivateCell instead. */ - virtual bool LeftClick( const wxPoint& cursor, - const wxRect& cell, + virtual bool LeftClick( wxPoint cursor, + wxRect cell, wxDataViewModel * model, const wxDataViewItem & item, unsigned int col ); + /** + Override this to react to the activation of a cell. This method is + deprecated, please use ActivateCell instead. + */ + virtual bool Activate(wxRect cell, + wxDataViewModel * model, + const wxDataViewItem & item, + unsigned int col); + + /** Override this to render the cell. Before this is called, wxDataViewRenderer::SetValue was called @@ -1934,6 +2221,12 @@ public: wxDataViewModel* model, const wxDataViewItem & item, unsigned int col); + +protected: + /** + Helper for GetSize() implementations, respects attributes. + */ + wxSize GetTextExtent(const wxString& str) const; }; @@ -2283,17 +2576,17 @@ public: /** Appends an item (=row) to the control and store. */ - void AppendItem( const wxVector &values, wxClientData *data = NULL ); + void AppendItem( const wxVector &values, wxUIntPtr data = NULL ); /** Prepends an item (=row) to the control and store. */ - void PrependItem( const wxVector &values, wxClientData *data = NULL ); + void PrependItem( const wxVector &values, wxUIntPtr data = NULL ); /** Inserts an item (=row) to the control and store. */ - void InsertItem( unsigned int row, const wxVector &values, wxClientData *data = NULL ); + void InsertItem( unsigned int row, const wxVector &values, wxUIntPtr data = NULL ); /** Delete the row at position @a row. @@ -2305,6 +2598,22 @@ public: */ void DeleteAllItems(); + /** + Returns the number of items (=rows) in the control + + @since 2.9.4 + */ + unsigned int GetItemCount() const; + + /** + Returns the client data associated with the item. + + @see SetItemData() + + @since 2.9.4 + */ + wxUIntPtr GetItemData(const wxDataViewItem& item) const; + /** Sets the value in the store and update the control. */ @@ -2347,6 +2656,19 @@ public: */ bool GetToggleValue( unsigned int row, unsigned int col ) const; + /** + Associates a client data pointer with the given item. + + Notice that the control does @e not take ownership of the pointer for + compatibility with wxListCtrl. I.e. it will @e not delete the pointer + (if it is a pointer and not a number) itself, it is up to you to do it. + + @see GetItemData() + + @since 2.9.4 + */ + void SetItemData(const wxDataViewItem& item, wxUIntPtr data); + //@} }; @@ -2371,7 +2693,7 @@ public: @library{wxadv} @category{ctrl,dvc} - @appearance{dataviewtreectrl.png} + @appearance{dataviewtreectrl} */ class wxDataViewTreeCtrl : public wxDataViewCtrl { @@ -2626,7 +2948,7 @@ public: in number and type. No (default) values are filled in automatically. */ - void AppendItem( const wxVector &values, wxClientData *data = NULL ); + void AppendItem( const wxVector &values, wxUIntPtr data = NULL ); /** Prepends an item (=row) and fills it with @a values. @@ -2635,7 +2957,7 @@ public: in number and type. No (default) values are filled in automatically. */ - void PrependItem( const wxVector &values, wxClientData *data = NULL ); + void PrependItem( const wxVector &values, wxUIntPtr data = NULL ); /** Inserts an item (=row) and fills it with @a values. @@ -2644,7 +2966,7 @@ public: in number and type. No (default) values are filled in automatically. */ - void InsertItem( unsigned int row, const wxVector &values, wxClientData *data = NULL ); + void InsertItem( unsigned int row, const wxVector &values, wxUIntPtr data = NULL ); /** Delete the item (=row) at position @a pos. @@ -2656,6 +2978,22 @@ public: */ void DeleteAllItems(); + /** + Returns the number of items (=rows) in the control + + @since 2.9.4 + */ + unsigned int GetItemCount() const; + + /** + Returns the client data associated with the item. + + @see SetItemData() + + @since 2.9.4 + */ + wxUIntPtr GetItemData(const wxDataViewItem& item) const; + /** Overridden from wxDataViewModel */ @@ -2666,6 +3004,18 @@ public: */ virtual wxString GetColumnType( unsigned int col ) const; + /** + Sets the client data associated with the item. + + Notice that this class does @e not take ownership of the passed in + pointer and will not delete it. + + @see GetItemData() + + @since 2.9.4 + */ + void SetItemData(const wxDataViewItem& item, wxUIntPtr data); + /** Overridden from wxDataViewIndexListModel */ @@ -2902,6 +3252,8 @@ public: 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. + Currently this even is only generated when using the native OSX + version. @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)} @@ -3011,6 +3363,41 @@ public: */ void *GetDataBuffer() const; + /** + Specify the kind of the drag operation to perform. + + This method can be used inside a wxEVT_COMMAND_DATAVIEW_ITEM_BEGIN_DRAG + handler in order to configure the drag operation. Valid values are + ::wxDrag_CopyOnly (default), ::wxDrag_AllowMove (allow the data to be + moved) and ::wxDrag_DefaultMove. + + Currently it is only honoured by the generic version of wxDataViewCtrl + (used e.g. under MSW) and not supported by the native GTK and OS X + versions. + + @see GetDropEffect() + + @since 2.9.4 + */ + void SetDragFlags(int flags); + + /** + Returns the effect the user requested to happen to the dropped data. + + This function can be used inside + wxEVT_COMMAND_DATAVIEW_ITEM_DROP_POSSIBLE and + wxEVT_COMMAND_DATAVIEW_ITEM_DROP handlers and returns whether the user + is trying to copy (the return value is ::wxDragCopy) or move (if the + return value is ::wxDragMove) the data. + + Currently this is only available when using the generic version of + wxDataViewCtrl (used e.g. under MSW) and always returns ::wxDragNone in + the GTK and OS X native versions. + + @since 2.9.4 + */ + wxDragResult GetDropEffect() const; + /** Return the first row that will be displayed. */ @@ -3020,5 +3407,21 @@ public: Return the last row that will be displayed. */ int GetCacheTo() const; + + + + + wxDataViewItem GetItem() const; + void SetItem( const wxDataViewItem &item ); + void SetEditCanceled(bool editCancelled); + void SetPosition( int x, int y ); + void SetCache(int from, int to); + wxDataObject *GetDataObject() const; + void SetDataFormat( const wxDataFormat &format ); + void SetDataSize( size_t size ); + void SetDataBuffer( void* buf ); + int GetDragFlags() const; + void SetDropEffect( wxDragResult effect ); + };