]> git.saurik.com Git - wxWidgets.git/blame - docs/latex/wx/dataviewmodel.tex
escape underscores introduced by the last change
[wxWidgets.git] / docs / latex / wx / dataviewmodel.tex
CommitLineData
b6b9d556
RR
1
2\section{\class{wxDataViewModel}}\label{wxdataviewmodel}
3
4wxDataViewModel is the base class for all data model to be
5displayed by a \helpref{wxDataViewCtrl}{wxdataviewctrl}.
1ab4aff2
RR
6All other models derive from it and must implement its
7pure virtual functions in order to define a complete
8data model. In detail, you need to override
9\helpref{IsContainer}{wxdataviewmodeliscontainer},
10\helpref{GetParent}{wxdataviewmodelgetparent},
74fe973b 11\helpref{GetChildren}{wxdataviewmodelgetchildren},
1ab4aff2
RR
12\helpref{GetColumnCount}{wxdataviewmodelgetcolumncount},
13\helpref{GetColumnType}{wxdataviewmodelgetcolumntype} and
14\helpref{GetValue}{wxdataviewmodelgetvalue} in order to
15define the data model which acts as an interface between
16your actual data and the wxDataViewCtrl. Since you will
aa0576fe
RR
17usually also allow the wxDataViewCtrl to change your data
18through its graphical interface, you will also have to override
61cec318 19\helpref{SetValue}{wxdataviewmodelsetvalue} which the
aa0576fe
RR
20wxDataViewCtrl will call when a change to some data has been
21commited.
22
1ab4aff2 23wxDataViewModel (as indeed the entire wxDataViewCtrl
b19add95
RR
24code) is using \helpref{wxVariant}{wxvariant} to store data and
25its type in a generic way. wxVariant can be extended to contain
26almost any data without changes to the original class.
27
1ab4aff2
RR
28The data that is presented through this data model is expected
29to change at run-time. You need to inform the data model when
30a change happened. Depending on what happened you need to call
31one of the following methods:
32\helpref{ValueChanged}{wxdataviewmodelvaluechanged},
33\helpref{ItemAdded}{wxdataviewmodelitemadded},
34\helpref{ItemDeleted}{wxdataviewmodelitemdeleted},
35\helpref{ItemChanged}{wxdataviewmodelitemchanged},
2a4f365c
RR
36\helpref{Cleared}{wxdataviewmodelcleared}. There are
37plural forms for notification of addition, change
38or removal of several item at once. See
4d373bc0 39\helpref{ItemsAdded}{wxdataviewmodelitemsadded},
2a4f365c 40\helpref{ItemsDeleted}{wxdataviewmodelitemsdeleted},
8abbc646 41\helpref{ItemsChanged}{wxdataviewmodelitemschanged}.
1ab4aff2
RR
42
43Note that wxDataViewModel does not define the position or
2a4f365c
RR
44index of any item in the control because different controls
45might display the same data differently. wxDataViewModel does
1ab4aff2 46provide a \helpref{Compare}{wxdataviewmodelcompare} method
0bd26819
RR
47which the wxDataViewCtrl may use to sort the data either
48in conjunction with a column header or without (see
2a4f365c 49\helpref{HasDefaultCompare}{wxdataviewmodelhasdefaultcompare}).
1ab4aff2 50
b6b9d556 51This class maintains a list of
1ab4aff2 52\helpref{wxDataViewModelNotifier}{wxdataviewmodelnotifier}
b6b9d556 53which link this class to the specific implementations on the
b19add95 54supported platforms so that e.g. calling
1ab4aff2 55\helpref{ValueChanged}{wxdataviewmodelvaluechanged}
b6b9d556 56on this model will just call
1ab4aff2
RR
57\helpref{wxDataViewModelNotifier::ValueChanged}{wxdataviewmodelnotifiervaluechanged}
58for each notifier that has been added. You can also add
59your own notifier in order to get informed about any changes
60to the data in the list model.
61
62Currently wxWidgets provides the following models apart
63from the base model:
716a15b7
RR
64\helpref{wxDataViewIndexListModel}{wxdataviewindexlistmodel},
65\helpref{wxDataViewTreeStore}{wxdataviewtreestore}.
b6b9d556 66
2a4f365c
RR
67Note that wxDataViewModel is reference counted, derives from
68\helpref{wxObjectRefData}{wxobjectrefdata} and cannot be deleted
df1bc4fa 69directly as it can be shared by several wxDataViewCtrls. This
2a4f365c
RR
70implies that you need to decrease the reference count after
71associating the model with a control like this:
72
73{\small%
74\begin{verbatim}
729a8b9b 75 wxDataViewCtrl *musicCtrl = new wxDataViewCtrl( this, ID_MUSIC_CTRL );
2a4f365c
RR
76 wxDataViewModel *musicModel = new MyMusicModel;
77 m_musicCtrl->AssociateModel( musicModel );
78 musicModel->DecRef(); // avoid memory leak !!
2a4f365c
RR
79 // add columns now
80\end{verbatim}
81}%
82
b6b9d556
RR
83\wxheading{Derived from}
84
7376079d 85\helpref{wxObjectRefData}{wxobjectrefdata}
b6b9d556
RR
86
87\wxheading{Include files}
88
89<wx/dataview.h>
90
1ab4aff2 91\wxheading{Library}
b6b9d556 92
1ab4aff2 93\helpref{wxAdv}{librarieslist}
1be9182d 94
809e21b5
FM
95
96
97\latexignore{\rtfignore{\wxheading{Members}}}
98
1ab4aff2 99\membersection{wxDataViewModel::wxDataViewModel}\label{wxdataviewmodelwxdataviewmodel}
1be9182d 100
1ab4aff2 101\func{}{wxDataViewModel}{\void}
b6b9d556 102
1ab4aff2 103Constructor.
b6b9d556 104
1ab4aff2 105\membersection{wxDataViewModel::\destruct{wxDataViewModel}}\label{wxdataviewmodeldtor}
b6b9d556 106
1ab4aff2 107\func{}{\destruct{wxDataViewModel}}{\void}
b6b9d556 108
1ab4aff2 109Destructor. This should not be called directly. Use DecRef() instead.
b6b9d556 110
b6b9d556 111
1ab4aff2 112\membersection{wxDataViewModel::AddNotifier}\label{wxdataviewmodeladdnotifier}
b6b9d556 113
1ab4aff2 114\func{void}{AddNotifier}{\param{wxDataViewModelNotifier* }{notifier}}
b6b9d556 115
61cec318 116Adds a \helpref{wxDataViewModelNotifier}{wxdataviewmodelnotifier}
1ab4aff2 117to the model.
b6b9d556 118
1ab4aff2 119\membersection{wxDataViewModel::Cleared}\label{wxdataviewmodelcleared}
b6b9d556 120
09711964 121\func{virtual bool}{Cleared}{\void}
b6b9d556 122
1ab4aff2 123Called to inform the model that all data has been deleted.
b6b9d556 124
1ab4aff2 125\membersection{wxDataViewModel::Compare}\label{wxdataviewmodelcompare}
b6b9d556 126
09711964 127\func{virtual int}{Compare}{\param{const wxDataViewItem\& }{item1}, \param{const wxDataViewItem\& }{item2}, \param{unsigned int }{column}, \param{bool }{ascending}}
b6b9d556 128
1ab4aff2
RR
129The compare function to be used by control. The default compare function
130sorts by container and other items separately and in ascending order.
131Override this for a different sorting behaviour.
b6b9d556 132
0bd26819
RR
133See also \helpref{HasDefaultCompare}{wxdataviewmodelhasdefaultcompare}.
134
1ab4aff2 135\membersection{wxDataViewModel::GetColumnCount}\label{wxdataviewmodelgetcolumncount}
b6b9d556 136
09711964 137\constfunc{virtual unsigned int}{GetColumnCount}{\void}
b6b9d556 138
1ab4aff2 139Override this to indicate the number of columns in the model.
b6b9d556 140
1ab4aff2 141\membersection{wxDataViewModel::GetColumnType}\label{wxdataviewmodelgetcolumntype}
b6b9d556 142
09711964 143\constfunc{virtual wxString}{GetColumnType}{\param{unsigned int }{col}}
b6b9d556 144
1ab4aff2
RR
145Override this to indicate what type of data is stored in the
146column specified by {\it col}. This should return a string
147indicating the type of data as reported by \helpref{wxVariant}{wxvariant}.
b6b9d556 148
a9768412 149\membersection{wxDataViewModel::GetChildren}\label{wxdataviewmodelgetchildren}
b6b9d556 150
09711964 151\constfunc{virtual unsigned int}{GetChildren}{\param{const wxDataViewItem\& }{item}, \param{wxDataViewItemArray\& }{children} }
b6b9d556 152
74fe973b
RR
153Override this so the control can query the child items of
154an item. Returns the number of items.
b6b9d556 155
1ab4aff2 156\membersection{wxDataViewModel::GetParent}\label{wxdataviewmodelgetparent}
b6b9d556 157
09711964 158\constfunc{virtual wxDataViewItem}{GetParent}{\param{const wxDataViewItem\& }{item}}
b6b9d556 159
1ab4aff2 160Override this to indicate which wxDataViewItem representing the parent
2a4f365c
RR
161of {\it item} or an invalid wxDataViewItem if the the root item is
162the parent item.
b6b9d556 163
1ab4aff2 164\membersection{wxDataViewModel::GetValue}\label{wxdataviewmodelgetvalue}
b6b9d556 165
09711964 166\constfunc{virtual void}{GetValue}{\param{wxVariant\& }{variant}, \param{const wxDataViewItem\& }{item}, \param{unsigned int }{col}}
b6b9d556 167
1ab4aff2
RR
168Override this to indicate the value of {\it item}
169A \helpref{wxVariant}{wxvariant} is used to store the data.
b6b9d556 170
1e40f667
RR
171
172\membersection{wxDataViewModel::HasContainerColumns}\label{wxdataviewmodelhascontainercolumns}
173
174\constfunc{virtual bool}{HasContainerColumns}{\param{const wxDataViewItem\& }{item}}
175
176Override this method to indicate if a container item merely
177acts as a headline (or for categorisation) or if it also
178acts a normal item with entries for futher columns. By
179default returns {\it false}.
180
0bd26819
RR
181\membersection{wxDataViewModel::HasDefaultCompare}\label{wxdataviewmodelhasdefaultcompare}
182
09711964 183\constfunc{virtual bool}{HasDefaultCompare}{\void}
0bd26819
RR
184
185Override this to indicate that the model provides a default compare
186function that the control should use if no wxDataViewColumn has been
187chosen for sorting. Usually, the user clicks on a column header for
188sorting, the data will be sorted alphanumerically. If any other
189order (e.g. by index or order of appearance) is required, then this
190should be used. See also \helpref{wxDataViewIndexListModel}{wxdataviewindexlistmodel}
191for a model which makes use of this.
192
1ab4aff2 193\membersection{wxDataViewModel::IsContainer}\label{wxdataviewmodeliscontainer}
b6b9d556 194
09711964 195\constfunc{virtual bool}{IsContainer}{\param{const wxDataViewItem\& }{item}}
b6b9d556 196
1ab4aff2
RR
197Override this to indicate of {\it item} is a container, i.e. if
198it can have child items.
b6b9d556 199
1ab4aff2 200\membersection{wxDataViewModel::ItemAdded}\label{wxdataviewmodelitemadded}
b6b9d556 201
09711964 202\func{virtual bool}{ItemAdded}{\param{const wxDataViewItem\& }{parent}, \param{const wxDataViewItem\& }{item}}
b6b9d556 203
1ab4aff2
RR
204Call this to inform the model that an item has been added
205to the data.
b6b9d556 206
1ab4aff2 207\membersection{wxDataViewModel::ItemChanged}\label{wxdataviewmodelitemchanged}
b6b9d556 208
09711964 209\func{virtual bool}{ItemChanged}{\param{const wxDataViewItem\& }{item}}
b6b9d556 210
1ab4aff2 211Call this to inform the model that an item has changed.
b6b9d556 212
6608fdab
RR
213This will eventually emit a wxEVT\_DATAVIEW\_ITEM\_VALUE\_CHANGED
214event (in which the column fields will not be set) to the user.
215
854cdb09 216\membersection{wxDataViewModel::ItemsAdded}\label{wxdataviewmodelitemsadded}
b6b9d556 217
854cdb09 218\func{virtual bool}{ItemsAdded}{\param{const wxDataViewItem\& }{parent}, \param{const wxDataViewItemArray\& }{items}}
b6b9d556 219
854cdb09
RR
220Call this to inform the model that several items have been added
221to the data.
222
223\membersection{wxDataViewModel::ItemsChanged}\label{wxdataviewmodelitemschanged}
224
225\func{virtual bool}{ItemsChanged}{\param{const wxDataViewItemArray\& }{items}}
226
227Call this to inform the model that several items have changed.
228
6608fdab
RR
229This will eventually emit wxEVT\_DATAVIEW\_ITEM\_VALUE\_CHANGED
230events (in which the column fields will not be set) to the user.
231
854cdb09
RR
232\membersection{wxDataViewModel::ItemsDeleted}\label{wxdataviewmodelitemsdeleted}
233
234\func{virtual bool}{ItemsDeleted}{\param{const wxDataViewItem\& }{parent}, \param{const wxDataViewItemArray\& }{items}}
235
236Call this to inform the model that several items have been deleted.
b6b9d556 237
1ab4aff2 238\membersection{wxDataViewModel::RemoveNotifier}\label{wxdataviewmodelremovenotifier}
b6b9d556 239
1ab4aff2 240\func{void}{RemoveNotifier}{\param{wxDataViewModelNotifier* }{notifier}}
b6b9d556 241
1ab4aff2 242Remove the {\it notifier} from the list of notifiers.
b6b9d556 243
1ab4aff2 244\membersection{wxDataViewModel::Resort}\label{wxdataviewmodelresort}
b6b9d556 245
09711964 246\func{virtual void}{Resort}{\void}
b6b9d556 247
1ab4aff2
RR
248Call this to initiate a resort after the sort function has
249been changed.
b6b9d556 250
1ab4aff2 251\membersection{wxDataViewModel::SetValue}\label{wxdataviewmodelsetvalue}
b6b9d556 252
09711964 253\func{virtual bool}{SetValue}{\param{const wxVariant\& }{variant}, \param{const wxDataViewItem\& }{item}, \param{unsigned int }{col}}
b6b9d556 254
1ab4aff2
RR
255This gets called in order to set a value in the data model.
256The most common scenario is that the wxDataViewCtrl calls
257this method after the user changed some data in the view.
258Afterwards \helpref{ValueChanged}{wxdataviewmodelvaluechanged}
259has to be called!
b6b9d556 260
1ab4aff2 261\membersection{wxDataViewModel::ValueChanged}\label{wxdataviewmodelvaluechanged}
b6b9d556 262
09711964 263\func{virtual bool}{ValueChanged}{\param{const wxDataViewItem\& }{item}, \param{unsigned int }{col}}
b6b9d556 264
6608fdab
RR
265Call this to inform this model that a value in the model has
266been changed. This is also called from wxDataViewCtrl's
267internal editing code, e.g. when editing a text field
268in the control.
269
270This will eventually emit a wxEVT\_DATAVIEW\_ITEM\_VALUE\_CHANGED
271event to the user.
b6b9d556 272