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