]> git.saurik.com Git - wxWidgets.git/blame - docs/latex/wx/dataviewmodel.tex
added null pointer check and assert
[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
d1e660b5 99
1ab4aff2 100\membersection{wxDataViewModel::wxDataViewModel}\label{wxdataviewmodelwxdataviewmodel}
1be9182d 101
1ab4aff2 102\func{}{wxDataViewModel}{\void}
b6b9d556 103
1ab4aff2 104Constructor.
b6b9d556 105
d1e660b5 106
1ab4aff2 107\membersection{wxDataViewModel::\destruct{wxDataViewModel}}\label{wxdataviewmodeldtor}
b6b9d556 108
1ab4aff2 109\func{}{\destruct{wxDataViewModel}}{\void}
b6b9d556 110
1ab4aff2 111Destructor. This should not be called directly. Use DecRef() instead.
b6b9d556 112
b6b9d556 113
d1e660b5 114
1ab4aff2 115\membersection{wxDataViewModel::AddNotifier}\label{wxdataviewmodeladdnotifier}
b6b9d556 116
1ab4aff2 117\func{void}{AddNotifier}{\param{wxDataViewModelNotifier* }{notifier}}
b6b9d556 118
61cec318 119Adds a \helpref{wxDataViewModelNotifier}{wxdataviewmodelnotifier}
1ab4aff2 120to the model.
b6b9d556 121
d1e660b5 122
1ab4aff2 123\membersection{wxDataViewModel::Cleared}\label{wxdataviewmodelcleared}
b6b9d556 124
09711964 125\func{virtual bool}{Cleared}{\void}
b6b9d556 126
1ab4aff2 127Called to inform the model that all data has been deleted.
b6b9d556 128
d1e660b5 129
1ab4aff2 130\membersection{wxDataViewModel::Compare}\label{wxdataviewmodelcompare}
b6b9d556 131
09711964 132\func{virtual int}{Compare}{\param{const wxDataViewItem\& }{item1}, \param{const wxDataViewItem\& }{item2}, \param{unsigned int }{column}, \param{bool }{ascending}}
b6b9d556 133
1ab4aff2
RR
134The compare function to be used by control. The default compare function
135sorts by container and other items separately and in ascending order.
136Override this for a different sorting behaviour.
b6b9d556 137
0bd26819
RR
138See also \helpref{HasDefaultCompare}{wxdataviewmodelhasdefaultcompare}.
139
d1e660b5 140
1ab4aff2 141\membersection{wxDataViewModel::GetColumnCount}\label{wxdataviewmodelgetcolumncount}
b6b9d556 142
09711964 143\constfunc{virtual unsigned int}{GetColumnCount}{\void}
b6b9d556 144
1ab4aff2 145Override this to indicate the number of columns in the model.
b6b9d556 146
d1e660b5 147
1ab4aff2 148\membersection{wxDataViewModel::GetColumnType}\label{wxdataviewmodelgetcolumntype}
b6b9d556 149
09711964 150\constfunc{virtual wxString}{GetColumnType}{\param{unsigned int }{col}}
b6b9d556 151
1ab4aff2
RR
152Override this to indicate what type of data is stored in the
153column specified by {\it col}. This should return a string
154indicating the type of data as reported by \helpref{wxVariant}{wxvariant}.
b6b9d556 155
d1e660b5 156
a9768412 157\membersection{wxDataViewModel::GetChildren}\label{wxdataviewmodelgetchildren}
b6b9d556 158
09711964 159\constfunc{virtual unsigned int}{GetChildren}{\param{const wxDataViewItem\& }{item}, \param{wxDataViewItemArray\& }{children} }
b6b9d556 160
74fe973b
RR
161Override this so the control can query the child items of
162an item. Returns the number of items.
b6b9d556 163
d1e660b5 164
1ab4aff2 165\membersection{wxDataViewModel::GetParent}\label{wxdataviewmodelgetparent}
b6b9d556 166
09711964 167\constfunc{virtual wxDataViewItem}{GetParent}{\param{const wxDataViewItem\& }{item}}
b6b9d556 168
1ab4aff2 169Override this to indicate which wxDataViewItem representing the parent
2a4f365c
RR
170of {\it item} or an invalid wxDataViewItem if the the root item is
171the parent item.
b6b9d556 172
d1e660b5 173
1ab4aff2 174\membersection{wxDataViewModel::GetValue}\label{wxdataviewmodelgetvalue}
b6b9d556 175
09711964 176\constfunc{virtual void}{GetValue}{\param{wxVariant\& }{variant}, \param{const wxDataViewItem\& }{item}, \param{unsigned int }{col}}
b6b9d556 177
1ab4aff2
RR
178Override this to indicate the value of {\it item}
179A \helpref{wxVariant}{wxvariant} is used to store the data.
b6b9d556 180
1e40f667 181
d1e660b5 182
1e40f667
RR
183\membersection{wxDataViewModel::HasContainerColumns}\label{wxdataviewmodelhascontainercolumns}
184
185\constfunc{virtual bool}{HasContainerColumns}{\param{const wxDataViewItem\& }{item}}
186
187Override this method to indicate if a container item merely
188acts as a headline (or for categorisation) or if it also
189acts a normal item with entries for futher columns. By
190default returns {\it false}.
191
d1e660b5 192
0bd26819
RR
193\membersection{wxDataViewModel::HasDefaultCompare}\label{wxdataviewmodelhasdefaultcompare}
194
09711964 195\constfunc{virtual bool}{HasDefaultCompare}{\void}
0bd26819
RR
196
197Override this to indicate that the model provides a default compare
198function that the control should use if no wxDataViewColumn has been
199chosen for sorting. Usually, the user clicks on a column header for
200sorting, the data will be sorted alphanumerically. If any other
201order (e.g. by index or order of appearance) is required, then this
202should be used. See also \helpref{wxDataViewIndexListModel}{wxdataviewindexlistmodel}
203for a model which makes use of this.
204
d1e660b5 205
1ab4aff2 206\membersection{wxDataViewModel::IsContainer}\label{wxdataviewmodeliscontainer}
b6b9d556 207
09711964 208\constfunc{virtual bool}{IsContainer}{\param{const wxDataViewItem\& }{item}}
b6b9d556 209
1ab4aff2
RR
210Override this to indicate of {\it item} is a container, i.e. if
211it can have child items.
b6b9d556 212
d1e660b5 213
1ab4aff2 214\membersection{wxDataViewModel::ItemAdded}\label{wxdataviewmodelitemadded}
b6b9d556 215
09711964 216\func{virtual bool}{ItemAdded}{\param{const wxDataViewItem\& }{parent}, \param{const wxDataViewItem\& }{item}}
b6b9d556 217
1ab4aff2
RR
218Call this to inform the model that an item has been added
219to the data.
b6b9d556 220
d1e660b5 221
1ab4aff2 222\membersection{wxDataViewModel::ItemChanged}\label{wxdataviewmodelitemchanged}
b6b9d556 223
09711964 224\func{virtual bool}{ItemChanged}{\param{const wxDataViewItem\& }{item}}
b6b9d556 225
1ab4aff2 226Call this to inform the model that an item has changed.
b6b9d556 227
6608fdab
RR
228This will eventually emit a wxEVT\_DATAVIEW\_ITEM\_VALUE\_CHANGED
229event (in which the column fields will not be set) to the user.
230
d1e660b5
VZ
231
232\membersection{wxDataViewModel::ItemDeleted}\label{wxdataviewmodelitemdeleted}
233
234\func{virtual bool}{ItemDeleted}{\param{const wxDataViewItem\& }{parent}, \param{const wxDataViewItem\& }{item}}
235
236Call this to inform the model that an item has been deleted from the data.
237
238
854cdb09 239\membersection{wxDataViewModel::ItemsAdded}\label{wxdataviewmodelitemsadded}
b6b9d556 240
854cdb09 241\func{virtual bool}{ItemsAdded}{\param{const wxDataViewItem\& }{parent}, \param{const wxDataViewItemArray\& }{items}}
b6b9d556 242
854cdb09
RR
243Call this to inform the model that several items have been added
244to the data.
245
d1e660b5 246
854cdb09
RR
247\membersection{wxDataViewModel::ItemsChanged}\label{wxdataviewmodelitemschanged}
248
249\func{virtual bool}{ItemsChanged}{\param{const wxDataViewItemArray\& }{items}}
250
251Call this to inform the model that several items have changed.
252
6608fdab
RR
253This will eventually emit wxEVT\_DATAVIEW\_ITEM\_VALUE\_CHANGED
254events (in which the column fields will not be set) to the user.
255
d1e660b5 256
854cdb09
RR
257\membersection{wxDataViewModel::ItemsDeleted}\label{wxdataviewmodelitemsdeleted}
258
259\func{virtual bool}{ItemsDeleted}{\param{const wxDataViewItem\& }{parent}, \param{const wxDataViewItemArray\& }{items}}
260
261Call this to inform the model that several items have been deleted.
b6b9d556 262
d1e660b5 263
1ab4aff2 264\membersection{wxDataViewModel::RemoveNotifier}\label{wxdataviewmodelremovenotifier}
b6b9d556 265
1ab4aff2 266\func{void}{RemoveNotifier}{\param{wxDataViewModelNotifier* }{notifier}}
b6b9d556 267
1ab4aff2 268Remove the {\it notifier} from the list of notifiers.
b6b9d556 269
d1e660b5 270
1ab4aff2 271\membersection{wxDataViewModel::Resort}\label{wxdataviewmodelresort}
b6b9d556 272
09711964 273\func{virtual void}{Resort}{\void}
b6b9d556 274
1ab4aff2
RR
275Call this to initiate a resort after the sort function has
276been changed.
b6b9d556 277
d1e660b5 278
1ab4aff2 279\membersection{wxDataViewModel::SetValue}\label{wxdataviewmodelsetvalue}
b6b9d556 280
09711964 281\func{virtual bool}{SetValue}{\param{const wxVariant\& }{variant}, \param{const wxDataViewItem\& }{item}, \param{unsigned int }{col}}
b6b9d556 282
1ab4aff2
RR
283This gets called in order to set a value in the data model.
284The most common scenario is that the wxDataViewCtrl calls
285this method after the user changed some data in the view.
286Afterwards \helpref{ValueChanged}{wxdataviewmodelvaluechanged}
287has to be called!
b6b9d556 288
d1e660b5 289
1ab4aff2 290\membersection{wxDataViewModel::ValueChanged}\label{wxdataviewmodelvaluechanged}
b6b9d556 291
09711964 292\func{virtual bool}{ValueChanged}{\param{const wxDataViewItem\& }{item}, \param{unsigned int }{col}}
b6b9d556 293
6608fdab
RR
294Call this to inform this model that a value in the model has
295been changed. This is also called from wxDataViewCtrl's
296internal editing code, e.g. when editing a text field
297in the control.
298
299This will eventually emit a wxEVT\_DATAVIEW\_ITEM\_VALUE\_CHANGED
300event to the user.
b6b9d556 301