// Purpose: interface of wxDataView* classes
// Author: wxWidgets team
// RCS-ID: $Id$
-// Licence: wxWindows license
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
wxDataViewModel::GetValue in order to define the data model which acts as an
interface between your actual data and the wxDataViewCtrl.
- 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 committed.
+ Note that wxDataViewModel does not define the position or index of any item
+ in the control because different controls might display the same data differently.
+ wxDataViewModel does provide a wxDataViewModel::Compare method which the
+ wxDataViewCtrl may use to sort the data either in conjunction with a column
+ header or without (see wxDataViewModel::HasDefaultCompare).
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
- almost any data without changes to the original class.
+ almost any data without changes to the original class. To a certain extent,
+ you can use (the somewhat more elegant) wxAny instead of wxVariant as there
+ is code to convert between the two, but it is unclear what impact this will
+ have on performance.
- The data that is presented through this data model is expected to change at
- run-time. You need to inform the data model when a change happened.
+ Since you will usually 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 committed.
+
+ If the data represented by the model is changed by something else than its
+ associated wxDataViewCtrl, the control has to be notified about the change.
Depending on what happened you need to call one of the following methods:
- wxDataViewModel::ValueChanged,
- wxDataViewModel::ItemAdded,
- wxDataViewModel::ItemsDeleted,
- wxDataViewModel::ItemsChanged.
- Note that wxDataViewModel does not define the position or index of any item
- in the control because different controls might display the same data differently.
- wxDataViewModel does provide a wxDataViewModel::Compare method which the
- wxDataViewCtrl may use to sort the data either in conjunction with a column
- header or without (see wxDataViewModel::HasDefaultCompare).
-
This class maintains a list of wxDataViewModelNotifier which link this class
to the specific implementations on the supported platforms so that e.g. calling
wxDataViewModel::ValueChanged on this model will just call
// add columns now
@endcode
+ A potentially better way to avoid memory leaks is to use wxObjectDataPtr
+
+ @code
+ wxObjectDataPtr<MyMusicModel> musicModel;
+
+ wxDataViewCtrl *musicCtrl = new wxDataViewCtrl( this, wxID_ANY );
+ musicModel = new MyMusicModel;
+ m_musicCtrl->AssociateModel( musicModel.get() );
+
+ // add columns now
+ @endcode
+
+
@library{wxadv}
@category{dvc}
*/
@since 2.9.1
- @param variable
+ @param variant
The new value.
@param item
The item (row) to update.
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.
/**
Call this to inform the model that an item has been added to the data.
*/
- virtual bool ItemAdded(const wxDataViewItem& parent,
+ bool ItemAdded(const wxDataViewItem& parent,
const wxDataViewItem& item);
/**
This will eventually emit a wxEVT_DATAVIEW_ITEM_VALUE_CHANGED
event (in which the column fields will not be set) to the user.
*/
- virtual bool ItemChanged(const wxDataViewItem& item);
+ bool ItemChanged(const wxDataViewItem& item);
/**
Call this to inform the model that an item has been deleted from the data.
*/
- virtual bool ItemDeleted(const wxDataViewItem& parent,
+ bool ItemDeleted(const wxDataViewItem& parent,
const wxDataViewItem& item);
/**
Call this to inform the model that several items have been added to the data.
*/
- virtual bool ItemsAdded(const wxDataViewItem& parent,
+ bool ItemsAdded(const wxDataViewItem& parent,
const wxDataViewItemArray& items);
/**
This will eventually emit wxEVT_DATAVIEW_ITEM_VALUE_CHANGED
events (in which the column fields will not be set) to the user.
*/
- virtual bool ItemsChanged(const wxDataViewItemArray& items);
+ bool ItemsChanged(const wxDataViewItemArray& items);
/**
Call this to inform the model that several items have been deleted.
*/
- virtual bool ItemsDeleted(const wxDataViewItem& parent,
+ bool ItemsDeleted(const wxDataViewItem& parent,
const wxDataViewItemArray& items);
/**
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.
Constructor.
*/
wxDataViewVirtualListModel(unsigned int initial_size = 0);
+
+ /**
+ Returns the number of virtual items (i.e. rows) in the list.
+ */
+ unsigned int GetCount() const;
};
@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
@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}
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = 0,
- const wxValidator& validator = wxDefaultValidator);
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxDataViewCtrlNameStr);
/**
Destructor.
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.
*/
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.
*/
/**
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);
*/
void SetExpanderColumn(wxDataViewColumn* col);
+ /**
+ 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 indendation.
*/
- wxDataViewBitmapRenderer,
- wxDataViewDateRenderer,
- wxDataViewSpinRenderer.
+ - wxDataViewChoiceRenderer.
Additionally, the user can write own renderers by deriving from
wxDataViewCustomRenderer.
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}
};
+/**
+ @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
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.
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
{
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,
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,
const wxDataViewListStore *GetStore() const;
//@}
+ /**
+ Returns the position of given @e item or wxNOT_FOUND if it's
+ not a valid item.
+
+ @since 2.9.2
+ */
+ int ItemToRow(const wxDataViewItem &item) const;
+
+ /**
+ Returns the wxDataViewItem at the given @e row.
+
+ @since 2.9.2
+ */
+ wxDataViewItem RowToItem(int row) const;
+
+ //@{
+ /**
+ @name Selection handling functions
+ */
+
+ /**
+ Returns index of the selected row or wxNOT_FOUND.
+
+ @see wxDataViewCtrl::GetSelection()
+
+ @since 2.9.2
+ */
+ int GetSelectedRow() const;
+
+ /**
+ Selects given row.
+
+ @see wxDataViewCtrl::Select()
+
+ @since 2.9.2
+ */
+ void SelectRow(unsigned row);
+
+ /**
+ Unselects given row.
+
+ @see wxDataViewCtrl::Unselect()
+
+ @since 2.9.2
+ */
+ void UnselectRow(unsigned row);
+
+ /**
+ Returns true if @a row is selected.
+
+ @see wxDataViewCtrl::IsSelected()
+
+ @since 2.9.2
+ */
+ bool IsRowSelected(unsigned row) const;
+
+ //@}
+
/**
@name Column management functions
*/
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.