// 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.
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 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.
/**
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;
/**
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;
/**
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);
/**
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.
*/
- 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);
/**
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.
*/
- 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);
/**
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,
/**
- @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.
*/
int Compare(const wxDataViewItem& item1,
const wxDataViewItem& item2,
- unsigned int column, bool ascending);
+ unsigned int column, bool ascending) const;
/**
Override this to indicate that the row has special font attributes.
wxDataViewItemAttr& attr) const;
/**
- Returns the number of items (i.e. rows) in the list.
+ 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 (or rows) in the list.
*/
unsigned int GetCount() const;
};
+/**
+ @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
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:
/**
*/
wxDataViewVirtualListModel(unsigned int initial_size = 0);
- /**
- Returns the number of virtual items (i.e. rows) in the list.
- */
- unsigned int GetCount() const;
};
*/
void SetColour(const wxColour& colour);
+ /**
+ Call this to set the background colour to use.
+
+ Currently this attribute is only supported in the generic version of
+ wxDataViewCtrl and ignored by the native GTK+ and OS X implementations.
+
+ @since 2.9.4
+ */
+ void SetBackgroundColour(const wxColour& colour);
+
/**
Call this to indicate that the item shall be displayed in italic text.
*/
@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
/**
Constructor.
*/
- wxDataViewItem(void* id = NULL);
+ wxDataViewItem();
wxDataViewItem(const wxDataViewItem& item);
+ explicit wxDataViewItem(void* id);
//@}
/**
};
+// ----------------------------------------------------------------------------
+// wxDataViewCtrl flags
+// ----------------------------------------------------------------------------
+
+// size of a wxDataViewRenderer without contents:
+#define wxDVC_DEFAULT_RENDERER_SIZE 20
+
+// the default width of new (text) columns:
+#define wxDVC_DEFAULT_WIDTH 80
+
+// the default width of new toggle columns:
+#define wxDVC_TOGGLE_DEFAULT_WIDTH 30
+
+// the default minimal width of the columns:
+#define wxDVC_DEFAULT_MINWIDTH 30
+
+// The default alignment of wxDataViewRenderers is to take
+// the alignment from the column it owns.
+#define wxDVR_DEFAULT_ALIGNMENT -1
+
+#define wxDV_SINGLE 0x0000 // for convenience
+#define wxDV_MULTIPLE 0x0001 // can select multiple items
+
+#define wxDV_NO_HEADER 0x0002 // column titles not visible
+#define wxDV_HORIZ_RULES 0x0004 // light horizontal rules between rows
+#define wxDV_VERT_RULES 0x0008 // light vertical rules between columns
+
+#define wxDV_ROW_LINES 0x0010 // alternating colour in rows
+#define wxDV_VARIABLE_LINE_HEIGHT 0x0020 // variable line height
+
+// events
+
+wxEventType wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED;
+
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED;
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING;
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSED;
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING;
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED;
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_START_EDITING;
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED;
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE;
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED;
+
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU;
+
+wxEventType wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK;
+wxEventType wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK;
+wxEventType wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED;
+wxEventType wxEVT_COMMAND_DATAVIEW_COLUMN_REORDERED;
+wxEventType wxEVT_COMMAND_DATAVIEW_CACHE_HINT;
+
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_BEGIN_DRAG;
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_DROP_POSSIBLE;
+wxEventType wxEVT_COMMAND_DATAVIEW_ITEM_DROP;
/**
@class wxDataViewCtrl
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}
@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}
@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_EDITING_STARTED event. This
+ 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
- basis. Still experimental.
+ basis.
@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)}
@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.
+ Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU event
+ generated when the user right clicks inside the control. Notice that
+ this menu is generated even if the click didn't occur on any valid
+ item, in this case wxDataViewEvent::GetItem() simply returns an
+ invalid item.
@event{EVT_DATAVIEW_COLUMN_HEADER_CLICK(id, func)}
- Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICKED event.
+ Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK 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_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}
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.
*/
virtual bool DeleteColumn(wxDataViewColumn* column);
+ /**
+ Programmatically starts editing given cell of @a item.
+
+ Doesn't do anything if the item or this column is not editable.
+
+ @note Currently not implemented in wxOSX/Carbon.
+
+ @since 2.9.4
+ */
+ virtual void EditItem(const wxDataViewItem& item, const wxDataViewColumn *column);
+
/**
Enable drag operations using the given @a format.
*/
*/
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(), GetCurrentColumn()
+
+ @since 2.9.2
+ */
+ wxDataViewItem GetCurrentItem() const;
+
+ /**
+ Returns the column that currently has focus.
+
+ If the focus is set to individual cell within the currently focused
+ item (as opposed to being on the item as a whole), then this is the
+ column that the focus is on.
+
+ Returns NULL if no column currently has focus.
+
+ @see GetCurrentItem()
+
+ @since 2.9.4
+ */
+ wxDataViewColumn *GetCurrentColumn() const;
+
/**
Returns indentation.
*/
int GetIndent() const;
/**
- Returns item rect.
+ Returns item rectangle.
+
+ This method is currently not implemented at all in wxGTK and only
+ implemented for non-@NULL @a col argument in wxOSX. It is fully
+ implemented in the generic version of the control.
+
+ @param item
+ A valid item.
+ @param col
+ If non-@NULL, the rectangle returned corresponds to the
+ intersection of the item with the specified column. If @NULL, the
+ rectangle spans all the columns.
*/
virtual wxRect GetItemRect(const wxDataViewItem& item,
const wxDataViewColumn* col = NULL) const;
*/
wxDataViewModel* GetModel();
+ /**
+ Returns the number of currently selected items.
+
+ This method may be called for both the controls with single and
+ multiple selections and returns the number of selected item, possibly
+ 0, in any case.
+
+ @since 2.9.3
+ */
+ virtual int GetSelectedItemsCount() const;
+
/**
Returns first selected item or an invalid item if none is selected.
+
+ This method may be called for both the controls with single and
+ multiple selections but returns an invalid item if more than one item
+ is selected in the latter case, use HasSelection() to determine if
+ there are any selected items when using multiple selection.
*/
virtual wxDataViewItem GetSelection() const;
/**
Fills @a sel with currently selected items and returns their number.
+
+ This method may be called for both the controls with single and
+ multiple selections. In the single selection case it returns the array
+ with at most one element in it.
+
+ @see GetSelectedItemsCount()
*/
virtual int GetSelections(wxDataViewItemArray& sel) const;
*/
virtual wxDataViewColumn* GetSortingColumn() const;
+ /**
+ Returns true if any items are currently selected.
+
+ This method may be called for both the controls with single and
+ multiple selections.
+
+ Calling this method is equivalent to calling GetSelectedItemsCount()
+ and comparing its result with 0 but is more clear and might also be
+ implemented more efficiently in the future.
+
+ @since 2.9.3
+ */
+ bool HasSelection() const;
+
/**
Hittest.
*/
/**
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);
/**
- 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);
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);
};
/**
Called by owning model.
+
+ @return Always return @true from this function in derived classes.
*/
virtual bool ItemAdded(const wxDataViewItem& parent,
const wxDataViewItem& item) = 0;
/**
Called by owning model.
+
+ @return Always return @true from this function in derived classes.
*/
virtual bool ItemChanged(const wxDataViewItem& item) = 0;
/**
Called by owning model.
+
+ @return Always return @true from this function in derived classes.
*/
virtual bool ItemDeleted(const wxDataViewItem& parent,
const wxDataViewItem& item) = 0;
/**
Called by owning model.
+
+ @return Always return @true from this function in derived classes.
*/
virtual bool ItemsAdded(const wxDataViewItem& parent,
const wxDataViewItemArray& items);
/**
Called by owning model.
+
+ @return Always return @true from this function in derived classes.
*/
virtual bool ItemsChanged(const wxDataViewItemArray& items);
/**
Called by owning model.
+
+ @return Always return @true from this function in derived classes.
*/
virtual bool ItemsDeleted(const wxDataViewItem& parent,
const wxDataViewItemArray& items);
/**
Called by owning model.
+
+ @return Always return @true from this function in derived classes.
*/
virtual bool ValueChanged(const wxDataViewItem& item, unsigned int col) = 0;
};
*/
enum wxDataViewCellMode
{
+ /**
+ The cell only displays information and cannot be manipulated or
+ otherwise interacted with in any way.
+
+ Note that this doesn't mean that the row being drawn can't be selected,
+ just that a particular element of it cannot be individually modified.
+ */
wxDATAVIEW_CELL_INERT,
/**
- Indicates that the user can double click the cell and something will
- happen (e.g. a window for editing a date will pop up).
+ Indicates that the cell can be @em activated by clicking it or using
+ keyboard.
+
+ Activating a cell is an alternative to showing inline editor when the
+ value can be edited in a simple way that doesn't warrant full editor
+ control. The most typical use of cell activation is toggling the
+ checkbox in wxDataViewToggleRenderer; others would be e.g. an embedded
+ volume slider or a five-star rating column.
+
+ The exact means of activating a cell are platform-dependent, but they
+ are usually similar to those used for inline editing of values.
+ Typically, a cell would be activated by Space or Enter keys or by left
+ mouse click.
+
+ @note Do not confuse this with item activation in wxDataViewCtrl
+ and the wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED event. That one is
+ used for activating the item (or, to put it differently, the
+ entire row) similarly to analogous messages in wxTreeCtrl and
+ wxListCtrl, and the effect differs (play a song, open a file
+ etc.). Cell activation, on the other hand, is all about
+ interacting with the individual cell.
+
+ @see wxDataViewCustomRenderer::ActivateCell()
*/
wxDATAVIEW_CELL_ACTIVATABLE,
/**
- Indicates that the user can edit the data in-place, i.e. an control
- will show up after a slow click on the cell. This behaviour is best
- known from changing the filename in most file managers etc.
+ Indicates that the user can edit the data in-place in an inline editor
+ control that will show up when the user wants to edit the cell.
+
+ A typical example of this behaviour is changing the filename in a file
+ managers.
+
+ Editing is typically triggered by slowly double-clicking the cell or by
+ a platform-dependent keyboard shortcut (F2 is typical on Windows, Space
+ and/or Enter is common elsewhere and supported on Windows too).
+
+ @see wxDataViewCustomRenderer::CreateEditorCtrl()
*/
wxDATAVIEW_CELL_EDITABLE
};
- 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}
};
+/**
+ 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}
+*/
+
+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;
+};
+
+
+/**
+ 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
virtual ~wxDataViewCustomRenderer();
/**
- Override this to react to double clicks or ENTER.
- This method will only be called in wxDATAVIEW_CELL_ACTIVATABLE mode.
+ Override this to react to cell @em activation. Activating a cell is an
+ alternative to showing inline editor when the value can be edited in a
+ simple way that doesn't warrant full editor control. The most typical
+ use of cell activation is toggling the checkbox in
+ wxDataViewToggleRenderer; others would be e.g. an embedded volume
+ slider or a five-star rating column.
+
+ The exact means of activating a cell are platform-dependent, but they
+ are usually similar to those used for inline editing of values.
+ Typically, a cell would be activated by Space or Enter keys or by left
+ mouse click.
+
+ This method will only be called if the cell has the
+ wxDATAVIEW_CELL_ACTIVATABLE mode.
+
+ @param cell
+ Coordinates of the activated cell's area.
+ @param model
+ The model to manipulate in response.
+ @param item
+ Activated item.
+ @param col
+ Activated column of @a item.
+ @param mouseEvent
+ If the activation was triggered by mouse click, contains the
+ corresponding event. Is @NULL otherwise (for keyboard activation).
+ Mouse coordinates are adjusted to be relative to the cell.
+
+ @since 2.9.3
+
+ @note Do not confuse this method with item activation in wxDataViewCtrl
+ and the wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED event. That one is
+ used for activating the item (or, to put it differently, the
+ entire row) similarly to analogous messages in wxTreeCtrl and
+ wxListCtrl, and the effect differs (play a song, open a file
+ etc.). Cell activation, on the other hand, is all about
+ interacting with the individual cell.
+
+ @see CreateEditorCtrl()
*/
- virtual bool Activate( wxRect cell,
- wxDataViewModel* model,
- const wxDataViewItem & item,
- unsigned int col );
+ virtual bool ActivateCell(const wxRect& cell,
+ wxDataViewModel* model,
+ const wxDataViewItem & item,
+ unsigned int col,
+ const wxMouseEvent *mouseEvent);
/**
Override this to create the actual editor control once editing
is about to start.
- @a parent is the parent of the editor control, @a labelRect indicates the
- position and size of the editor control and @a value is its initial value:
+ This method will only be called if the cell has the
+ wxDATAVIEW_CELL_EDITABLE mode. Editing is typically triggered by slowly
+ double-clicking the cell or by a platform-dependent keyboard shortcut
+ (F2 is typical on Windows, Space and/or Enter is common elsewhere and
+ supported on Windows too).
+
+ @param parent
+ The parent of the editor control.
+ @param labelRect
+ Indicates the position and size of the editor control. The control
+ should be created in place of the cell and @a labelRect should be
+ respected as much as possible.
+ @param value
+ Initial value of the editor.
+
+ An example:
@code
{
long l = value;
labelRect.GetTopLeft(), labelRect.GetSize(), 0, 0, 100, l );
}
@endcode
+
+ @see ActivateCell()
*/
- 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.
}
@endcode
*/
- virtual bool GetValueFromEditorCtrl(wxControl* editor,
+ virtual bool GetValueFromEditorCtrl(wxWindow* editor,
wxVariant& value);
/**
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 );
/**
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);
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
*/
Appends a column to the control and additionally appends a
column to the store with the type string.
*/
- virtual void AppendColumn( wxDataViewColumn *column );
+ virtual bool AppendColumn( wxDataViewColumn *column );
/**
Appends a column to the control and additionally appends a
Inserts a column to the control and additionally inserts a
column to the store with the type string.
*/
- virtual void InsertColumn( unsigned int pos, wxDataViewColumn *column );
+ virtual bool InsertColumn( unsigned int pos, wxDataViewColumn *column );
/**
Inserts a column to the control and additionally inserts a
Prepends a column to the control and additionally prepends a
column to the store with the type string.
*/
- virtual void PrependColumn( wxDataViewColumn *column );
+ virtual bool PrependColumn( wxDataViewColumn *column );
/**
Prepends a column to the control and additionally prepends a
/**
Appends an item (=row) to the control and store.
*/
- void AppendItem( const wxVector<wxVariant> &values, wxClientData *data = NULL );
+ void AppendItem( const wxVector<wxVariant> &values, wxUIntPtr data = NULL );
/**
Prepends an item (=row) to the control and store.
*/
- void PrependItem( const wxVector<wxVariant> &values, wxClientData *data = NULL );
+ void PrependItem( const wxVector<wxVariant> &values, wxUIntPtr data = NULL );
/**
Inserts an item (=row) to the control and store.
*/
- void InsertItem( unsigned int row, const wxVector<wxVariant> &values, wxClientData *data = NULL );
+ void InsertItem( unsigned int row, const wxVector<wxVariant> &values, wxUIntPtr data = NULL );
/**
Delete the row at position @a row.
*/
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.
*/
/**
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 );
/**
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;
/**
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 );
/**
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;
+ /**
+ 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);
+
//@}
};
in number and type. No (default) values are filled in
automatically.
*/
- void AppendItem( const wxVector<wxVariant> &values, wxClientData *data = NULL );
+ void AppendItem( const wxVector<wxVariant> &values, wxUIntPtr data = NULL );
/**
Prepends an item (=row) and fills it with @a values.
in number and type. No (default) values are filled in
automatically.
*/
- void PrependItem( const wxVector<wxVariant> &values, wxClientData *data = NULL );
+ void PrependItem( const wxVector<wxVariant> &values, wxUIntPtr data = NULL );
/**
Inserts an item (=row) and fills it with @a values.
in number and type. No (default) values are filled in
automatically.
*/
- void InsertItem( unsigned int row, const wxVector<wxVariant> &values, wxClientData *data = NULL );
+ void InsertItem( unsigned int row, const wxVector<wxVariant> &values, wxUIntPtr data = NULL );
/**
Delete the item (=row) at position @a pos.
void DeleteAllItems();
/**
- Overriden from wxDataViewModel
+ 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
*/
virtual unsigned int GetColumnCount() const;
/**
- Overriden from wxDataViewModel
+ Overridden from wxDataViewModel
*/
virtual wxString GetColumnType( unsigned int col ) const;
/**
- Overriden from wxDataViewIndexListModel
+ 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
*/
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 );
/**
@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)
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;
@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.
+ Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK 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.
+ 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)}
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;
*/
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_CLICK only.
*/
void SetDataViewColumn(wxDataViewColumn* col);
*/
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.
+ Gets the data size for a drop data transfer.
*/
- void SetDataSize( size_t size );
+ size_t GetDataSize() const;
/**
- Gets the data size for a drop data transfer.
+ Gets the data buffer for a drop data transfer.
*/
- size_t GetDataSize() const;
+ void *GetDataBuffer() const;
/**
- Used internally. Sets the data buffer for a drop data transfer.
+ 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 SetDataBuffer( void* buf );
+ void SetDragFlags(int flags);
/**
- Gets the data buffer for a drop data transfer.
+ 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
*/
- void *GetDataBuffer() const;
+ wxDragResult GetDropEffect() const;
/**
Return the first row that will be displayed.