]> git.saurik.com Git - wxWidgets.git/blob - interface/wx/dataview.h
Ensure that the overall table border doesn't get overdrawn by cell borders with a...
[wxWidgets.git] / interface / wx / dataview.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: dataview.h
3 // Purpose: interface of wxDataView* classes
4 // Author: wxWidgets team
5 // Licence: wxWindows licence
6 /////////////////////////////////////////////////////////////////////////////
7
8
9 /**
10 @class wxDataViewModel
11
12 wxDataViewModel is the base class for all data model to be displayed by a
13 wxDataViewCtrl.
14
15 All other models derive from it and must implement its pure virtual functions
16 in order to define a complete data model. In detail, you need to override
17 wxDataViewModel::IsContainer, wxDataViewModel::GetParent, wxDataViewModel::GetChildren,
18 wxDataViewModel::GetColumnCount, wxDataViewModel::GetColumnType and
19 wxDataViewModel::GetValue in order to define the data model which acts as an
20 interface between your actual data and the wxDataViewCtrl.
21
22 Note that wxDataViewModel does not define the position or index of any item
23 in the control because different controls might display the same data differently.
24 wxDataViewModel does provide a wxDataViewModel::Compare method which the
25 wxDataViewCtrl may use to sort the data either in conjunction with a column
26 header or without (see wxDataViewModel::HasDefaultCompare).
27
28 wxDataViewModel (as indeed the entire wxDataViewCtrl code) is using wxVariant
29 to store data and its type in a generic way. wxVariant can be extended to contain
30 almost any data without changes to the original class. To a certain extent,
31 you can use (the somewhat more elegant) wxAny instead of wxVariant as there
32 is code to convert between the two, but it is unclear what impact this will
33 have on performance.
34
35 Since you will usually allow the wxDataViewCtrl to change your data
36 through its graphical interface, you will also have to override
37 wxDataViewModel::SetValue which the wxDataViewCtrl will call when a change
38 to some data has been committed.
39
40 If the data represented by the model is changed by something else than its
41 associated wxDataViewCtrl, the control has to be notified about the change.
42 Depending on what happened you need to call one of the following methods:
43 - wxDataViewModel::ValueChanged,
44 - wxDataViewModel::ItemAdded,
45 - wxDataViewModel::ItemDeleted,
46 - wxDataViewModel::ItemChanged,
47 - wxDataViewModel::Cleared.
48
49 There are plural forms for notification of addition, change or removal of
50 several item at once. See:
51 - wxDataViewModel::ItemsAdded,
52 - wxDataViewModel::ItemsDeleted,
53 - wxDataViewModel::ItemsChanged.
54
55 This class maintains a list of wxDataViewModelNotifier which link this class
56 to the specific implementations on the supported platforms so that e.g. calling
57 wxDataViewModel::ValueChanged on this model will just call
58 wxDataViewModelNotifier::ValueChanged for each notifier that has been added.
59 You can also add your own notifier in order to get informed about any changes
60 to the data in the list model.
61
62 Currently wxWidgets provides the following models apart from the base model:
63 wxDataViewIndexListModel, wxDataViewVirtualListModel, wxDataViewTreeStore,
64 wxDataViewListStore.
65
66 Note that wxDataViewModel is reference counted, derives from wxRefCounter
67 and cannot be deleted directly as it can be shared by several wxDataViewCtrls.
68 This implies that you need to decrease the reference count after
69 associating the model with a control like this:
70
71 @code
72 wxDataViewCtrl *musicCtrl = new wxDataViewCtrl( this, wxID_ANY );
73 wxDataViewModel *musicModel = new MyMusicModel;
74 m_musicCtrl->AssociateModel( musicModel );
75 musicModel->DecRef(); // avoid memory leak !!
76
77 // add columns now
78 @endcode
79
80 A potentially better way to avoid memory leaks is to use wxObjectDataPtr
81
82 @code
83 wxObjectDataPtr<MyMusicModel> musicModel;
84
85 wxDataViewCtrl *musicCtrl = new wxDataViewCtrl( this, wxID_ANY );
86 musicModel = new MyMusicModel;
87 m_musicCtrl->AssociateModel( musicModel.get() );
88
89 // add columns now
90 @endcode
91
92
93 @library{wxadv}
94 @category{dvc}
95 */
96 class wxDataViewModel : public wxRefCounter
97 {
98 public:
99 /**
100 Constructor.
101 */
102 wxDataViewModel();
103
104 /**
105 Adds a wxDataViewModelNotifier to the model.
106 */
107 void AddNotifier(wxDataViewModelNotifier* notifier);
108
109 /**
110 Change the value of the given item and update the control to reflect
111 it.
112
113 This function simply calls SetValue() and, if it succeeded,
114 ValueChanged().
115
116 @since 2.9.1
117
118 @param variant
119 The new value.
120 @param item
121 The item (row) to update.
122 @param col
123 The column to update.
124 @return
125 @true if both SetValue() and ValueChanged() returned @true.
126 */
127 bool ChangeValue(const wxVariant& variant,
128 const wxDataViewItem& item,
129 unsigned int col);
130
131 /**
132 Called to inform the model that all data has been cleared.
133 The control will reread the data from the model again.
134 */
135 virtual bool Cleared();
136
137 /**
138 The compare function to be used by control. The default compare function
139 sorts by container and other items separately and in ascending order.
140 Override this for a different sorting behaviour.
141
142 @see HasDefaultCompare().
143 */
144 virtual int Compare(const wxDataViewItem& item1,
145 const wxDataViewItem& item2,
146 unsigned int column,
147 bool ascending) const;
148
149 /**
150 Override this to indicate that the item has special font attributes.
151 This only affects the wxDataViewTextRendererText renderer.
152
153 The base class version always simply returns @false.
154
155 @see wxDataViewItemAttr.
156
157 @param item
158 The item for which the attribute is requested.
159 @param col
160 The column of the item for which the attribute is requested.
161 @param attr
162 The attribute to be filled in if the function returns @true.
163 @return
164 @true if this item has an attribute or @false otherwise.
165 */
166 virtual bool GetAttr(const wxDataViewItem& item, unsigned int col,
167 wxDataViewItemAttr& attr) const;
168
169 /**
170 Override this to indicate that the item should be disabled.
171
172 Disabled items are displayed differently (e.g. grayed out) and cannot
173 be interacted with.
174
175 The base class version always returns @true, thus making all items
176 enabled by default.
177
178 @param item
179 The item whose enabled status is requested.
180 @param col
181 The column of the item whose enabled status is requested.
182 @return
183 @true if this item should be enabled, @false otherwise.
184
185 @note Currently disabling items is not supported by the wxOSX/Carbon
186 implementation.
187
188 @since 2.9.2
189 */
190 virtual bool IsEnabled(const wxDataViewItem &item,
191 unsigned int col) const;
192
193 /**
194 Override this so the control can query the child items of an item.
195 Returns the number of items.
196 */
197 virtual unsigned int GetChildren(const wxDataViewItem& item,
198 wxDataViewItemArray& children) const = 0;
199
200 /**
201 Override this to indicate the number of columns in the model.
202 */
203 virtual unsigned int GetColumnCount() const = 0;
204
205 /**
206 Override this to indicate what type of data is stored in the
207 column specified by @a col.
208
209 This should return a string indicating the type of data as reported by wxVariant.
210 */
211 virtual wxString GetColumnType(unsigned int col) const = 0;
212
213 /**
214 Override this to indicate which wxDataViewItem representing the parent
215 of @a item or an invalid wxDataViewItem if the root item is
216 the parent item.
217 */
218 virtual wxDataViewItem GetParent(const wxDataViewItem& item) const = 0;
219
220 /**
221 Override this to indicate the value of @a item.
222 A wxVariant is used to store the data.
223 */
224 virtual void GetValue(wxVariant& variant, const wxDataViewItem& item,
225 unsigned int col) const = 0;
226
227 /**
228 Override this method to indicate if a container item merely acts as a
229 headline (or for categorisation) or if it also acts a normal item with
230 entries for further columns. By default returns @false.
231 */
232 virtual bool HasContainerColumns(const wxDataViewItem& item) const;
233
234 /**
235 Override this to indicate that the model provides a default compare
236 function that the control should use if no wxDataViewColumn has been
237 chosen for sorting. Usually, the user clicks on a column header for
238 sorting, the data will be sorted alphanumerically.
239
240 If any other order (e.g. by index or order of appearance) is required,
241 then this should be used.
242 See wxDataViewIndexListModel for a model which makes use of this.
243 */
244 virtual bool HasDefaultCompare() const;
245
246 /**
247 Return true if there is a value in the given column of this item.
248
249 All normal items have values in all columns but the container items
250 only show their label in the first column (@a col == 0) by default (but
251 see HasContainerColumns()). So this function always returns true for
252 the first column while for the other ones it returns true only if the
253 item is not a container or HasContainerColumns() was overridden to
254 return true for it.
255
256 @since 2.9.1
257 */
258 bool HasValue(const wxDataViewItem& item, unsigned col) const;
259
260 /**
261 Override this to indicate of @a item is a container, i.e.\ if
262 it can have child items.
263 */
264 virtual bool IsContainer(const wxDataViewItem& item) const = 0;
265
266 /**
267 Call this to inform the model that an item has been added to the data.
268 */
269 bool ItemAdded(const wxDataViewItem& parent,
270 const wxDataViewItem& item);
271
272 /**
273 Call this to inform the model that an item has changed.
274
275 This will eventually emit a @c wxEVT_DATAVIEW_ITEM_VALUE_CHANGED
276 event (in which the column fields will not be set) to the user.
277 */
278 bool ItemChanged(const wxDataViewItem& item);
279
280 /**
281 Call this to inform the model that an item has been deleted from the data.
282 */
283 bool ItemDeleted(const wxDataViewItem& parent,
284 const wxDataViewItem& item);
285
286 /**
287 Call this to inform the model that several items have been added to the data.
288 */
289 bool ItemsAdded(const wxDataViewItem& parent,
290 const wxDataViewItemArray& items);
291
292 /**
293 Call this to inform the model that several items have changed.
294
295 This will eventually emit @c wxEVT_DATAVIEW_ITEM_VALUE_CHANGED
296 events (in which the column fields will not be set) to the user.
297 */
298 bool ItemsChanged(const wxDataViewItemArray& items);
299
300 /**
301 Call this to inform the model that several items have been deleted.
302 */
303 bool ItemsDeleted(const wxDataViewItem& parent,
304 const wxDataViewItemArray& items);
305
306 /**
307 Remove the @a notifier from the list of notifiers.
308 */
309 void RemoveNotifier(wxDataViewModelNotifier* notifier);
310
311 /**
312 Call this to initiate a resort after the sort function has been changed.
313 */
314 virtual void Resort();
315
316 /**
317 This gets called in order to set a value in the data model.
318
319 The most common scenario is that the wxDataViewCtrl calls this method
320 after the user changed some data in the view.
321
322 This is the function you need to override in your derived class but if
323 you want to call it, ChangeValue() is usually more convenient as
324 otherwise you need to manually call ValueChanged() to update the
325 control itself.
326 */
327 virtual bool SetValue(const wxVariant& variant,
328 const wxDataViewItem& item,
329 unsigned int col) = 0;
330
331 /**
332 Call this to inform this model that a value in the model has been changed.
333 This is also called from wxDataViewCtrl's internal editing code, e.g. when
334 editing a text field in the control.
335
336 This will eventually emit a @c wxEVT_DATAVIEW_ITEM_VALUE_CHANGED
337 event to the user.
338 */
339 virtual bool ValueChanged(const wxDataViewItem& item,
340 unsigned int col);
341
342
343 virtual bool IsListModel() const;
344 virtual bool IsVirtualListModel() const;
345
346 protected:
347
348 /**
349 Destructor. This should not be called directly. Use DecRef() instead.
350 */
351 virtual ~wxDataViewModel();
352 };
353
354
355
356 /**
357 @class wxDataViewListModel
358
359 Base class with abstract API for wxDataViewIndexListModel and
360 wxDataViewVirtualListModel.
361
362 @library{wxadv}
363 @category{dvc}
364 */
365 class wxDataViewListModel : public wxDataViewModel
366 {
367 public:
368
369 /**
370 Destructor.
371 */
372 virtual ~wxDataViewListModel();
373
374 /**
375 Compare method that sorts the items by their index.
376 */
377 int Compare(const wxDataViewItem& item1,
378 const wxDataViewItem& item2,
379 unsigned int column, bool ascending) const;
380
381 /**
382 Override this to indicate that the row has special font attributes.
383 This only affects the wxDataViewTextRendererText() renderer.
384
385 The base class version always simply returns @false.
386
387 @see wxDataViewItemAttr.
388
389 @param row
390 The row for which the attribute is requested.
391 @param col
392 The column for which the attribute is requested.
393 @param attr
394 The attribute to be filled in if the function returns @true.
395 @return
396 @true if this item has an attribute or @false otherwise.
397 */
398 virtual bool GetAttrByRow(unsigned int row, unsigned int col,
399 wxDataViewItemAttr& attr) const;
400
401 /**
402 Override this if you want to disable specific items.
403
404 The base class version always returns @true, thus making all items
405 enabled by default.
406
407 @param row
408 The row of the item whose enabled status is requested.
409 @param col
410 The column of the item whose enabled status is requested.
411 @return
412 @true if the item at this row and column should be enabled,
413 @false otherwise.
414
415 @note See wxDataViewModel::IsEnabled() for the current status of
416 support for disabling the items under different platforms.
417
418 @since 2.9.2
419 */
420 virtual bool IsEnabledByRow(unsigned int row,
421 unsigned int col) const;
422
423 /**
424 Returns the number of items (or rows) in the list.
425 */
426 unsigned int GetCount() const = 0;
427
428 /**
429 Returns the position of given @e item.
430 */
431 unsigned int GetRow(const wxDataViewItem& item) const = 0;
432
433 /**
434 Override this to allow getting values from the model.
435 */
436 virtual void GetValueByRow(wxVariant& variant, unsigned int row,
437 unsigned int col) const = 0;
438
439 /**
440 Called in order to set a value in the model.
441 */
442 virtual bool SetValueByRow(const wxVariant& variant, unsigned int row,
443 unsigned int col) = 0;
444 };
445
446
447 /**
448 @class wxDataViewIndexListModel
449
450 wxDataViewIndexListModel is a specialized data model which lets you address
451 an item by its position (row) rather than its wxDataViewItem (which you can
452 obtain from this class).
453 This model also provides its own wxDataViewIndexListModel::Compare
454 method which sorts the model's data by the index.
455
456 This model is not a virtual model since the control stores each wxDataViewItem.
457 Use wxDataViewVirtualListModel if you need to display millions of items or
458 have other reason to use a virtual control.
459
460 @see wxDataViewListModel for the API.
461
462 @library{wxadv}
463 @category{dvc}
464 */
465
466 class wxDataViewIndexListModel : public wxDataViewListModel
467 {
468 public:
469 /**
470 Constructor.
471 */
472 wxDataViewIndexListModel(unsigned int initial_size = 0);
473
474 /**
475 Returns the wxDataViewItem at the given @e row.
476 */
477 wxDataViewItem GetItem(unsigned int row) const;
478
479 /**
480 Call this after if the data has to be read again from the model.
481 This is useful after major changes when calling the methods below
482 (possibly thousands of times) doesn't make sense.
483 */
484 void Reset(unsigned int new_size);
485
486 /**
487 Call this after a row has been appended to the model.
488 */
489 void RowAppended();
490
491 /**
492 Call this after a row has been changed.
493 */
494 void RowChanged(unsigned int row);
495
496 /**
497 Call this after a row has been deleted.
498 */
499 void RowDeleted(unsigned int row);
500
501 /**
502 Call this after a row has been inserted at the given position.
503 */
504 void RowInserted(unsigned int before);
505
506 /**
507 Call this after a row has been prepended to the model.
508 */
509 void RowPrepended();
510
511 /**
512 Call this after a value has been changed.
513 */
514 void RowValueChanged(unsigned int row, unsigned int col);
515
516 /**
517 Call this after rows have been deleted.
518 The array will internally get copied and sorted in descending order so
519 that the rows with the highest position will be deleted first.
520 */
521 void RowsDeleted(const wxArrayInt& rows);
522
523 };
524
525 /**
526 @class wxDataViewVirtualListModel
527
528 wxDataViewVirtualListModel is a specialized data model which lets you address
529 an item by its position (row) rather than its wxDataViewItem and as such offers
530 the exact same interface as wxDataViewIndexListModel.
531 The important difference is that under platforms other than OS X, using this
532 model will result in a truly virtual control able to handle millions of items
533 as the control doesn't store any item (a feature not supported by OS X).
534
535 @see wxDataViewListModel for the API.
536
537 @library{wxadv}
538 @category{dvc}
539 */
540
541 class wxDataViewVirtualListModel : public wxDataViewListModel
542 {
543 public:
544 /**
545 Constructor.
546 */
547 wxDataViewVirtualListModel(unsigned int initial_size = 0);
548
549 /**
550 Returns the wxDataViewItem at the given @e row.
551 */
552 wxDataViewItem GetItem(unsigned int row) const;
553
554 /**
555 Call this after if the data has to be read again from the model.
556 This is useful after major changes when calling the methods below
557 (possibly thousands of times) doesn't make sense.
558 */
559 void Reset(unsigned int new_size);
560
561 /**
562 Call this after a row has been appended to the model.
563 */
564 void RowAppended();
565
566 /**
567 Call this after a row has been changed.
568 */
569 void RowChanged(unsigned int row);
570
571 /**
572 Call this after a row has been deleted.
573 */
574 void RowDeleted(unsigned int row);
575
576 /**
577 Call this after a row has been inserted at the given position.
578 */
579 void RowInserted(unsigned int before);
580
581 /**
582 Call this after a row has been prepended to the model.
583 */
584 void RowPrepended();
585
586 /**
587 Call this after a value has been changed.
588 */
589 void RowValueChanged(unsigned int row, unsigned int col);
590
591 /**
592 Call this after rows have been deleted.
593 The array will internally get copied and sorted in descending order so
594 that the rows with the highest position will be deleted first.
595 */
596 void RowsDeleted(const wxArrayInt& rows);
597
598 };
599
600
601
602 /**
603 @class wxDataViewItemAttr
604
605 This class is used to indicate to a wxDataViewCtrl that a certain item
606 (see wxDataViewItem) has extra font attributes for its renderer.
607 For this, it is required to override wxDataViewModel::GetAttr.
608
609 Attributes are currently only supported by wxDataViewTextRendererText.
610
611 @library{wxadv}
612 @category{dvc}
613 */
614 class wxDataViewItemAttr
615 {
616 public:
617 /**
618 Constructor.
619 */
620 wxDataViewItemAttr();
621
622 /**
623 Call this to indicate that the item shall be displayed in bold text.
624 */
625 void SetBold(bool set);
626
627 /**
628 Call this to indicate that the item shall be displayed with that colour.
629 */
630 void SetColour(const wxColour& colour);
631
632 /**
633 Call this to set the background colour to use.
634
635 Currently this attribute is only supported in the generic version of
636 wxDataViewCtrl and ignored by the native GTK+ and OS X implementations.
637
638 @since 2.9.4
639 */
640 void SetBackgroundColour(const wxColour& colour);
641
642 /**
643 Call this to indicate that the item shall be displayed in italic text.
644 */
645 void SetItalic(bool set);
646
647
648 /**
649 Returns true if the colour property has been set.
650 */
651 bool HasColour() const;
652
653 /**
654 Returns this attribute's colour.
655 */
656 const wxColour& GetColour() const;
657
658 /**
659 Returns true if any property affecting the font has been set.
660 */
661 bool HasFont() const;
662
663 /**
664 Returns value of the bold property.
665 */
666 bool GetBold() const;
667
668 /**
669 Returns value of the italics property.
670 */
671 bool GetItalic() const;
672
673 /**
674 Returns true if the background colour property has been set.
675 */
676 bool HasBackgroundColour() const;
677
678 /**
679 Returns the colour to be used for the background.
680 */
681 const wxColour& GetBackgroundColour() const;
682
683 /**
684 Returns true if none of the properties have been set.
685 */
686 bool IsDefault() const;
687
688 /**
689 Return the font based on the given one with this attribute applied to it.
690 */
691 wxFont GetEffectiveFont(const wxFont& font) const;
692 };
693
694
695
696 /**
697 @class wxDataViewItem
698
699 wxDataViewItem is a small opaque class that represents an item in a wxDataViewCtrl
700 in a persistent way, i.e. independent of the position of the item in the control
701 or changes to its contents.
702
703 It must hold a unique ID of type @e void* in its only field and can be converted
704 to and from it.
705
706 If the ID is @NULL the wxDataViewItem is invalid and wxDataViewItem::IsOk will
707 return @false which used in many places in the API of wxDataViewCtrl to
708 indicate that e.g. no item was found. An ID of @NULL is also used to indicate
709 the invisible root. Examples for this are wxDataViewModel::GetParent and
710 wxDataViewModel::GetChildren.
711
712 @library{wxadv}
713 @category{dvc}
714 */
715 class wxDataViewItem
716 {
717 public:
718 //@{
719 /**
720 Constructor.
721 */
722 wxDataViewItem();
723 wxDataViewItem(const wxDataViewItem& item);
724 explicit wxDataViewItem(void* id);
725 //@}
726
727 /**
728 Returns the ID.
729 */
730 void* GetID() const;
731
732 /**
733 Returns @true if the ID is not @NULL.
734 */
735 bool IsOk() const;
736 };
737
738
739 // ----------------------------------------------------------------------------
740 // wxDataViewCtrl flags
741 // ----------------------------------------------------------------------------
742
743 // size of a wxDataViewRenderer without contents:
744 #define wxDVC_DEFAULT_RENDERER_SIZE 20
745
746 // the default width of new (text) columns:
747 #define wxDVC_DEFAULT_WIDTH 80
748
749 // the default width of new toggle columns:
750 #define wxDVC_TOGGLE_DEFAULT_WIDTH 30
751
752 // the default minimal width of the columns:
753 #define wxDVC_DEFAULT_MINWIDTH 30
754
755 // The default alignment of wxDataViewRenderers is to take
756 // the alignment from the column it owns.
757 #define wxDVR_DEFAULT_ALIGNMENT -1
758
759 #define wxDV_SINGLE 0x0000 // for convenience
760 #define wxDV_MULTIPLE 0x0001 // can select multiple items
761
762 #define wxDV_NO_HEADER 0x0002 // column titles not visible
763 #define wxDV_HORIZ_RULES 0x0004 // light horizontal rules between rows
764 #define wxDV_VERT_RULES 0x0008 // light vertical rules between columns
765
766 #define wxDV_ROW_LINES 0x0010 // alternating colour in rows
767 #define wxDV_VARIABLE_LINE_HEIGHT 0x0020 // variable line height
768
769 // events
770
771 wxEventType wxEVT_DATAVIEW_SELECTION_CHANGED;
772
773 wxEventType wxEVT_DATAVIEW_ITEM_ACTIVATED;
774 wxEventType wxEVT_DATAVIEW_ITEM_COLLAPSING;
775 wxEventType wxEVT_DATAVIEW_ITEM_COLLAPSED;
776 wxEventType wxEVT_DATAVIEW_ITEM_EXPANDING;
777 wxEventType wxEVT_DATAVIEW_ITEM_EXPANDED;
778 wxEventType wxEVT_DATAVIEW_ITEM_START_EDITING;
779 wxEventType wxEVT_DATAVIEW_ITEM_EDITING_STARTED;
780 wxEventType wxEVT_DATAVIEW_ITEM_EDITING_DONE;
781 wxEventType wxEVT_DATAVIEW_ITEM_VALUE_CHANGED;
782
783 wxEventType wxEVT_DATAVIEW_ITEM_CONTEXT_MENU;
784
785 wxEventType wxEVT_DATAVIEW_COLUMN_HEADER_CLICK;
786 wxEventType wxEVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK;
787 wxEventType wxEVT_DATAVIEW_COLUMN_SORTED;
788 wxEventType wxEVT_DATAVIEW_COLUMN_REORDERED;
789 wxEventType wxEVT_DATAVIEW_CACHE_HINT;
790
791 wxEventType wxEVT_DATAVIEW_ITEM_BEGIN_DRAG;
792 wxEventType wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE;
793 wxEventType wxEVT_DATAVIEW_ITEM_DROP;
794
795 /**
796 @class wxDataViewCtrl
797
798 wxDataViewCtrl is a control to display data either in a tree like fashion or
799 in a tabular form or both.
800
801 If you only need to display a simple tree structure with an API more like the
802 older wxTreeCtrl class, then the specialized wxDataViewTreeCtrl can be used.
803 Likewise, if you only want to display simple table structure you can use
804 the specialized wxDataViewListCtrl class. Both wxDataViewTreeCtrl and
805 wxDataViewListCtrl can be used without defining your own wxDataViewModel.
806
807 A wxDataViewItem is used to represent a (visible) item in the control.
808
809 Unlike wxListCtrl, wxDataViewCtrl doesn't get its data from the user through
810 virtual functions or by setting it directly. Instead you need to write your own
811 wxDataViewModel and associate it with this control.
812 Then you need to add a number of wxDataViewColumn to this control to define
813 what each column shall display. Each wxDataViewColumn in turn owns 1 instance
814 of a wxDataViewRenderer to render its cells.
815
816 A number of standard renderers for rendering text, dates, images, toggle,
817 a progress bar etc. are provided. Additionally, the user can write custom
818 renderers deriving from wxDataViewCustomRenderer for displaying anything.
819
820 All data transfer from the control to the model and the user code is done
821 through wxVariant which can be extended to support more data formats as necessary.
822 Accordingly, all type information uses the strings returned from wxVariant::GetType.
823
824 @beginStyleTable
825 @style{wxDV_SINGLE}
826 Single selection mode. This is the default.
827 @style{wxDV_MULTIPLE}
828 Multiple selection mode.
829 @style{wxDV_ROW_LINES}
830 Use alternating colours for rows if supported by platform and theme.
831 Currently only supported by the native GTK and OS X implementations
832 but not by the generic one.
833 @style{wxDV_HORIZ_RULES}
834 Display the separator lines between rows.
835 @style{wxDV_VERT_RULES}
836 Display the separator lines between columns.
837 @style{wxDV_VARIABLE_LINE_HEIGHT}
838 Allow variable line heights.
839 This can be inefficient when displaying large number of items.
840 @style{wxDV_NO_HEADER}
841 Do not show column headers (which are shown by default).
842 @endStyleTable
843
844 @beginEventEmissionTable{wxDataViewEvent}
845 @event{EVT_DATAVIEW_SELECTION_CHANGED(id, func)}
846 Process a @c wxEVT_DATAVIEW_SELECTION_CHANGED event.
847 @event{EVT_DATAVIEW_ITEM_ACTIVATED(id, func)}
848 Process a @c wxEVT_DATAVIEW_ITEM_ACTIVATED event. This event
849 is triggered by double clicking an item or pressing some special key
850 (usually "Enter") when it is focused.
851 @event{EVT_DATAVIEW_ITEM_START_EDITING(id, func)}
852 Process a @c wxEVT_DATAVIEW_ITEM_START_EDITING event. This
853 event can be vetoed in order to prevent editing on an item by item
854 basis.
855 @event{EVT_DATAVIEW_ITEM_EDITING_STARTED(id, func)}
856 Process a @c wxEVT_DATAVIEW_ITEM_EDITING_STARTED event.
857 @event{EVT_DATAVIEW_ITEM_EDITING_DONE(id, func)}
858 Process a @c wxEVT_DATAVIEW_ITEM_EDITING_DONE event.
859 @event{EVT_DATAVIEW_ITEM_COLLAPSING(id, func)}
860 Process a @c wxEVT_DATAVIEW_ITEM_COLLAPSING event.
861 @event{EVT_DATAVIEW_ITEM_COLLAPSED(id, func)}
862 Process a @c wxEVT_DATAVIEW_ITEM_COLLAPSED event.
863 @event{EVT_DATAVIEW_ITEM_EXPANDING(id, func)}
864 Process a @c wxEVT_DATAVIEW_ITEM_EXPANDING event.
865 @event{EVT_DATAVIEW_ITEM_EXPANDED(id, func)}
866 Process a @c wxEVT_DATAVIEW_ITEM_EXPANDED event.
867 @event{EVT_DATAVIEW_ITEM_VALUE_CHANGED(id, func)}
868 Process a @c wxEVT_DATAVIEW_ITEM_VALUE_CHANGED event.
869 @event{EVT_DATAVIEW_ITEM_CONTEXT_MENU(id, func)}
870 Process a @c wxEVT_DATAVIEW_ITEM_CONTEXT_MENU event
871 generated when the user right clicks inside the control. Notice that
872 this menu is generated even if the click didn't occur on any valid
873 item, in this case wxDataViewEvent::GetItem() simply returns an
874 invalid item.
875 @event{EVT_DATAVIEW_COLUMN_HEADER_CLICK(id, func)}
876 Process a @c wxEVT_DATAVIEW_COLUMN_HEADER_CLICK event.
877 @event{EVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK(id, func)}
878 Process a @c wxEVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK event.
879 Notice that currently this event is not generated in the native OS X
880 versions of the control.
881 @event{EVT_DATAVIEW_COLUMN_SORTED(id, func)}
882 Process a @c wxEVT_DATAVIEW_COLUMN_SORTED event.
883 @event{EVT_DATAVIEW_COLUMN_REORDERED(id, func)}
884 Process a @c wxEVT_DATAVIEW_COLUMN_REORDERED event.
885 @event{EVT_DATAVIEW_ITEM_BEGIN_DRAG(id, func)}
886 Process a @c wxEVT_DATAVIEW_ITEM_BEGIN_DRAG event.
887 @event{EVT_DATAVIEW_ITEM_DROP_POSSIBLE(id, func)}
888 Process a @c wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE event.
889 @event{EVT_DATAVIEW_ITEM_DROP(id, func)}
890 Process a @c wxEVT_DATAVIEW_ITEM_DROP event.
891 @endEventTable
892
893 Notice that this control doesn't allow to process generic mouse events such
894 as @c wxEVT_LEFT_DOWN in all ports (notably it doesn't work in wxGTK). If
895 you need to handle any mouse events not covered by the ones above, consider
896 using a custom renderer for the cells that must handle them.
897
898 @library{wxadv}
899 @category{ctrl,dvc}
900 @appearance{dataviewctrl}
901 */
902 class wxDataViewCtrl : public wxControl
903 {
904 public:
905 /**
906 Default Constructor.
907 */
908 wxDataViewCtrl();
909
910 /**
911 Constructor. Calls Create().
912 */
913 wxDataViewCtrl(wxWindow* parent, wxWindowID id,
914 const wxPoint& pos = wxDefaultPosition,
915 const wxSize& size = wxDefaultSize,
916 long style = 0,
917 const wxValidator& validator = wxDefaultValidator,
918 const wxString& name = wxDataViewCtrlNameStr);
919
920 /**
921 Destructor.
922 */
923 virtual ~wxDataViewCtrl();
924
925 /**
926 Create the control. Useful for two step creation.
927 */
928 bool Create(wxWindow* parent, wxWindowID id,
929 const wxPoint& pos = wxDefaultPosition,
930 const wxSize& size = wxDefaultSize,
931 long style = 0,
932 const wxValidator& validator = wxDefaultValidator,
933 const wxString& name = wxDataViewCtrlNameStr);
934
935 /**
936 Appends a wxDataViewColumn to the control. Returns @true on success.
937
938 Note that there is a number of short cut methods which implicitly create
939 a wxDataViewColumn and a wxDataViewRenderer for it (see below).
940 */
941 virtual bool AppendColumn(wxDataViewColumn* col);
942
943 /**
944 Prepends a wxDataViewColumn to the control. Returns @true on success.
945
946 Note that there is a number of short cut methods which implicitly create
947 a wxDataViewColumn and a wxDataViewRenderer for it.
948 */
949 virtual bool PrependColumn(wxDataViewColumn* col);
950
951 /**
952 Inserts a wxDataViewColumn to the control. Returns @true on success.
953 */
954 virtual bool InsertColumn(unsigned int pos, wxDataViewColumn* col);
955
956 //@{
957 /**
958 Appends a column for rendering a bitmap. Returns the wxDataViewColumn
959 created in the function or @NULL on failure.
960 */
961 wxDataViewColumn* AppendBitmapColumn(const wxString& label,
962 unsigned int model_column,
963 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
964 int width = -1,
965 wxAlignment align = wxALIGN_CENTER,
966 int flags = wxDATAVIEW_COL_RESIZABLE);
967 wxDataViewColumn* AppendBitmapColumn(const wxBitmap& label,
968 unsigned int model_column,
969 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
970 int width = -1,
971 wxAlignment align = wxALIGN_CENTER,
972 int flags = wxDATAVIEW_COL_RESIZABLE);
973 //@}
974
975 //@{
976 /**
977 Prepends a column for rendering a bitmap. Returns the wxDataViewColumn
978 created in the function or @NULL on failure.
979 */
980 wxDataViewColumn* PrependBitmapColumn(const wxString& label,
981 unsigned int model_column,
982 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
983 int width = -1,
984 wxAlignment align = wxALIGN_CENTER,
985 int flags = wxDATAVIEW_COL_RESIZABLE);
986 wxDataViewColumn* PrependBitmapColumn(const wxBitmap& label,
987 unsigned int model_column,
988 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
989 int width = -1,
990 wxAlignment align = wxALIGN_CENTER,
991 int flags = wxDATAVIEW_COL_RESIZABLE);
992 //@}
993
994 //@{
995 /**
996 Appends a column for rendering a date. Returns the wxDataViewColumn
997 created in the function or @NULL on failure.
998
999 @note The @a align parameter is applied to both the column header and
1000 the column renderer.
1001 */
1002 wxDataViewColumn* AppendDateColumn(const wxString& label,
1003 unsigned int model_column,
1004 wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE,
1005 int width = -1,
1006 wxAlignment align = wxALIGN_NOT,
1007 int flags = wxDATAVIEW_COL_RESIZABLE);
1008 wxDataViewColumn* AppendDateColumn(const wxBitmap& label,
1009 unsigned int model_column,
1010 wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE,
1011 int width = -1,
1012 wxAlignment align = wxALIGN_NOT,
1013 int flags = wxDATAVIEW_COL_RESIZABLE);
1014 //@}
1015
1016 //@{
1017 /**
1018 Prepends a column for rendering a date. Returns the wxDataViewColumn
1019 created in the function or @NULL on failure.
1020
1021 @note The @a align parameter is applied to both the column header and
1022 the column renderer.
1023 */
1024 wxDataViewColumn* PrependDateColumn(const wxString& label,
1025 unsigned int model_column,
1026 wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE,
1027 int width = -1,
1028 wxAlignment align = wxALIGN_NOT,
1029 int flags = wxDATAVIEW_COL_RESIZABLE);
1030 wxDataViewColumn* PrependDateColumn(const wxBitmap& label,
1031 unsigned int model_column,
1032 wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE,
1033 int width = -1,
1034 wxAlignment align = wxALIGN_NOT,
1035 int flags = wxDATAVIEW_COL_RESIZABLE);
1036 //@}
1037
1038 //@{
1039 /**
1040 Appends a column for rendering text with an icon. Returns the wxDataViewColumn
1041 created in the function or @NULL on failure.
1042 This method uses the wxDataViewIconTextRenderer class.
1043
1044 @note The @a align parameter is applied to both the column header and
1045 the column renderer.
1046 */
1047 wxDataViewColumn* AppendIconTextColumn(const wxString& label,
1048 unsigned int model_column,
1049 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1050 int width = -1,
1051 wxAlignment align = wxALIGN_NOT,
1052 int flags = wxDATAVIEW_COL_RESIZABLE);
1053 wxDataViewColumn* AppendIconTextColumn(const wxBitmap& label,
1054 unsigned int model_column,
1055 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1056 int width = -1,
1057 wxAlignment align = wxALIGN_NOT,
1058 int flags = wxDATAVIEW_COL_RESIZABLE);
1059 //@}
1060
1061 //@{
1062 /**
1063 Prepends a column for rendering text with an icon. Returns the wxDataViewColumn
1064 created in the function or @NULL on failure.
1065 This method uses the wxDataViewIconTextRenderer class.
1066
1067 @note The @a align parameter is applied to both the column header and
1068 the column renderer.
1069 */
1070 wxDataViewColumn* PrependIconTextColumn(const wxString& label,
1071 unsigned int model_column,
1072 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1073 int width = -1,
1074 wxAlignment align = wxALIGN_NOT,
1075 int flags = wxDATAVIEW_COL_RESIZABLE);
1076 wxDataViewColumn* PrependIconTextColumn(const wxBitmap& label,
1077 unsigned int model_column,
1078 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1079 int width = -1,
1080 wxAlignment align = wxALIGN_NOT,
1081 int flags = wxDATAVIEW_COL_RESIZABLE);
1082 //@}
1083
1084 //@{
1085 /**
1086 Appends a column for rendering a progress indicator. Returns the
1087 wxDataViewColumn created in the function or @NULL on failure.
1088
1089 @note The @a align parameter is applied to both the column header and
1090 the column renderer.
1091 */
1092 wxDataViewColumn* AppendProgressColumn(const wxString& label,
1093 unsigned int model_column,
1094 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1095 int width = 80,
1096 wxAlignment align = wxALIGN_CENTER,
1097 int flags = wxDATAVIEW_COL_RESIZABLE);
1098 wxDataViewColumn* AppendProgressColumn(const wxBitmap& label,
1099 unsigned int model_column,
1100 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1101 int width = 80,
1102 wxAlignment align = wxALIGN_CENTER,
1103 int flags = wxDATAVIEW_COL_RESIZABLE);
1104 //@}
1105
1106 //@{
1107 /**
1108 Prepends a column for rendering a progress indicator. Returns the
1109 wxDataViewColumn created in the function or @NULL on failure.
1110
1111 @note The @a align parameter is applied to both the column header and
1112 the column renderer.
1113 */
1114 wxDataViewColumn* PrependProgressColumn(const wxString& label,
1115 unsigned int model_column,
1116 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1117 int width = 80,
1118 wxAlignment align = wxALIGN_CENTER,
1119 int flags = wxDATAVIEW_COL_RESIZABLE);
1120 wxDataViewColumn* PrependProgressColumn(const wxBitmap& label,
1121 unsigned int model_column,
1122 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1123 int width = 80,
1124 wxAlignment align = wxALIGN_CENTER,
1125 int flags = wxDATAVIEW_COL_RESIZABLE);
1126 //@}
1127
1128 //@{
1129 /**
1130 Appends a column for rendering text. Returns the wxDataViewColumn
1131 created in the function or @NULL on failure.
1132
1133 @note The @a align parameter is applied to both the column header and
1134 the column renderer.
1135 */
1136 wxDataViewColumn* AppendTextColumn(const wxString& label,
1137 unsigned int model_column,
1138 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1139 int width = -1,
1140 wxAlignment align = wxALIGN_NOT,
1141 int flags = wxDATAVIEW_COL_RESIZABLE);
1142 wxDataViewColumn* AppendTextColumn(const wxBitmap& label,
1143 unsigned int model_column,
1144 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1145 int width = -1,
1146 wxAlignment align = wxALIGN_NOT,
1147 int flags = wxDATAVIEW_COL_RESIZABLE);
1148 //@}
1149
1150 //@{
1151 /**
1152 Prepends a column for rendering text. Returns the wxDataViewColumn
1153 created in the function or @NULL on failure.
1154
1155 @note The @a align parameter is applied to both the column header and
1156 the column renderer.
1157 */
1158 wxDataViewColumn* PrependTextColumn(const wxString& label,
1159 unsigned int model_column,
1160 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1161 int width = -1,
1162 wxAlignment align = wxALIGN_NOT,
1163 int flags = wxDATAVIEW_COL_RESIZABLE);
1164 wxDataViewColumn* PrependTextColumn(const wxBitmap& label,
1165 unsigned int model_column,
1166 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1167 int width = -1,
1168 wxAlignment align = wxALIGN_NOT,
1169 int flags = wxDATAVIEW_COL_RESIZABLE);
1170 //@}
1171
1172 //@{
1173 /**
1174 Appends a column for rendering a toggle. Returns the wxDataViewColumn
1175 created in the function or @NULL on failure.
1176
1177 @note The @a align parameter is applied to both the column header and
1178 the column renderer.
1179 */
1180 wxDataViewColumn* AppendToggleColumn(const wxString& label,
1181 unsigned int model_column,
1182 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1183 int width = 30,
1184 wxAlignment align = wxALIGN_CENTER,
1185 int flags = wxDATAVIEW_COL_RESIZABLE);
1186 wxDataViewColumn* AppendToggleColumn(const wxBitmap& label,
1187 unsigned int model_column,
1188 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1189 int width = 30,
1190 wxAlignment align = wxALIGN_CENTER,
1191 int flags = wxDATAVIEW_COL_RESIZABLE);
1192 //@}
1193
1194 //@{
1195 /**
1196 Prepends a column for rendering a toggle. Returns the wxDataViewColumn
1197 created in the function or @NULL on failure.
1198
1199 @note The @a align parameter is applied to both the column header and
1200 the column renderer.
1201 */
1202 wxDataViewColumn* PrependToggleColumn(const wxString& label,
1203 unsigned int model_column,
1204 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1205 int width = 30,
1206 wxAlignment align = wxALIGN_CENTER,
1207 int flags = wxDATAVIEW_COL_RESIZABLE);
1208 wxDataViewColumn* PrependToggleColumn(const wxBitmap& label,
1209 unsigned int model_column,
1210 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1211 int width = 30,
1212 wxAlignment align = wxALIGN_CENTER,
1213 int flags = wxDATAVIEW_COL_RESIZABLE);
1214 //@}
1215
1216 /**
1217 Associates a wxDataViewModel with the control.
1218 This increases the reference count of the model by 1.
1219 */
1220 virtual bool AssociateModel(wxDataViewModel* model);
1221
1222 /**
1223 Removes all columns.
1224 */
1225 virtual bool ClearColumns();
1226
1227 /**
1228 Collapses the item.
1229 */
1230 virtual void Collapse(const wxDataViewItem& item);
1231
1232 /**
1233 Deletes given column.
1234 */
1235 virtual bool DeleteColumn(wxDataViewColumn* column);
1236
1237 /**
1238 Programmatically starts editing given cell of @a item.
1239
1240 Doesn't do anything if the item or this column is not editable.
1241
1242 @note Currently not implemented in wxOSX/Carbon.
1243
1244 @since 2.9.4
1245 */
1246 virtual void EditItem(const wxDataViewItem& item, const wxDataViewColumn *column);
1247
1248 /**
1249 Enable drag operations using the given @a format.
1250 */
1251 virtual bool EnableDragSource( const wxDataFormat &format );
1252
1253 /**
1254 Enable drop operations using the given @a format.
1255 */
1256 virtual bool EnableDropTarget( const wxDataFormat &format );
1257
1258 /**
1259 Call this to ensure that the given item is visible.
1260 */
1261 virtual void EnsureVisible(const wxDataViewItem& item,
1262 const wxDataViewColumn* column = NULL);
1263
1264 /**
1265 Expands the item.
1266 */
1267 virtual void Expand(const wxDataViewItem& item);
1268
1269 /**
1270 Expands all ancestors of the @a item. This method also
1271 ensures that the item itself as well as all ancestor
1272 items have been read from the model by the control.
1273 */
1274 virtual void ExpandAncestors( const wxDataViewItem & item );
1275
1276 /**
1277 Returns pointer to the column. @a pos refers to the position in the
1278 control which may change after reordering columns by the user.
1279 */
1280 virtual wxDataViewColumn* GetColumn(unsigned int pos) const;
1281
1282 /**
1283 Returns the number of columns.
1284 */
1285 virtual unsigned int GetColumnCount() const;
1286
1287 /**
1288 Returns the position of the column or -1 if not found in the control.
1289 */
1290 virtual int GetColumnPosition(const wxDataViewColumn* column) const;
1291
1292 /**
1293 Returns column containing the expanders.
1294 */
1295 wxDataViewColumn* GetExpanderColumn() const;
1296
1297 /**
1298 Returns the currently focused item.
1299
1300 This is the item that the keyboard commands apply to. It may be invalid
1301 if there is no focus currently.
1302
1303 This method is mostly useful for the controls with @c wxDV_MULTIPLE
1304 style as in the case of single selection it returns the same thing as
1305 GetSelection().
1306
1307 Notice that under all platforms except Mac OS X the currently focused
1308 item may be selected or not but under OS X the current item is always
1309 selected.
1310
1311 @see SetCurrentItem(), GetCurrentColumn()
1312
1313 @since 2.9.2
1314 */
1315 wxDataViewItem GetCurrentItem() const;
1316
1317 /**
1318 Returns the column that currently has focus.
1319
1320 If the focus is set to individual cell within the currently focused
1321 item (as opposed to being on the item as a whole), then this is the
1322 column that the focus is on.
1323
1324 Returns NULL if no column currently has focus.
1325
1326 @see GetCurrentItem()
1327
1328 @since 2.9.4
1329 */
1330 wxDataViewColumn *GetCurrentColumn() const;
1331
1332 /**
1333 Returns indentation.
1334 */
1335 int GetIndent() const;
1336
1337 /**
1338 Returns item rectangle.
1339
1340 This method is currently not implemented at all in wxGTK and only
1341 implemented for non-@NULL @a col argument in wxOSX. It is fully
1342 implemented in the generic version of the control.
1343
1344 @param item
1345 A valid item.
1346 @param col
1347 If non-@NULL, the rectangle returned corresponds to the
1348 intersection of the item with the specified column. If @NULL, the
1349 rectangle spans all the columns.
1350 */
1351 virtual wxRect GetItemRect(const wxDataViewItem& item,
1352 const wxDataViewColumn* col = NULL) const;
1353
1354 /**
1355 Returns pointer to the data model associated with the control (if any).
1356 */
1357 wxDataViewModel* GetModel();
1358
1359 /**
1360 Returns the number of currently selected items.
1361
1362 This method may be called for both the controls with single and
1363 multiple selections and returns the number of selected item, possibly
1364 0, in any case.
1365
1366 @since 2.9.3
1367 */
1368 virtual int GetSelectedItemsCount() const;
1369
1370 /**
1371 Returns first selected item or an invalid item if none is selected.
1372
1373 This method may be called for both the controls with single and
1374 multiple selections but returns an invalid item if more than one item
1375 is selected in the latter case, use HasSelection() to determine if
1376 there are any selected items when using multiple selection.
1377 */
1378 virtual wxDataViewItem GetSelection() const;
1379
1380 /**
1381 Fills @a sel with currently selected items and returns their number.
1382
1383 This method may be called for both the controls with single and
1384 multiple selections. In the single selection case it returns the array
1385 with at most one element in it.
1386
1387 @see GetSelectedItemsCount()
1388 */
1389 virtual int GetSelections(wxDataViewItemArray& sel) const;
1390
1391 /**
1392 Returns the wxDataViewColumn currently responsible for sorting
1393 or @NULL if none has been selected.
1394 */
1395 virtual wxDataViewColumn* GetSortingColumn() const;
1396
1397 /**
1398 Returns true if any items are currently selected.
1399
1400 This method may be called for both the controls with single and
1401 multiple selections.
1402
1403 Calling this method is equivalent to calling GetSelectedItemsCount()
1404 and comparing its result with 0 but is more clear and might also be
1405 implemented more efficiently in the future.
1406
1407 @since 2.9.3
1408 */
1409 bool HasSelection() const;
1410
1411 /**
1412 Hittest.
1413 */
1414 virtual void HitTest(const wxPoint& point, wxDataViewItem& item,
1415 wxDataViewColumn*& col) const;
1416
1417 /**
1418 Return @true if the item is expanded.
1419 */
1420 virtual bool IsExpanded(const wxDataViewItem& item) const;
1421
1422 /**
1423 Return @true if the item is selected.
1424 */
1425 virtual bool IsSelected(const wxDataViewItem& item) const;
1426
1427 /**
1428 Select the given item.
1429
1430 In single selection mode this changes the (unique) currently selected
1431 item. In multi selection mode, the @a item is selected and the
1432 previously selected items remain selected.
1433 */
1434 virtual void Select(const wxDataViewItem& item);
1435
1436 /**
1437 Select all items.
1438 */
1439 virtual void SelectAll();
1440
1441 /**
1442 Set which column shall contain the tree-like expanders.
1443 */
1444 void SetExpanderColumn(wxDataViewColumn* col);
1445
1446 /**
1447 Changes the currently focused item.
1448
1449 The @a item parameter must be valid, there is no way to remove the
1450 current item from the control.
1451
1452 In single selection mode, calling this method is the same as calling
1453 Select() and is thus not very useful. In multiple selection mode this
1454 method only moves the current item however without changing the
1455 selection except under OS X where the current item is always selected,
1456 so calling SetCurrentItem() selects @a item if it hadn't been selected
1457 before.
1458
1459 @see GetCurrentItem()
1460
1461 @since 2.9.2
1462 */
1463 void SetCurrentItem(const wxDataViewItem& item);
1464
1465 /**
1466 Sets the indentation.
1467 */
1468 void SetIndent(int indent);
1469
1470 /**
1471 Sets the selection to the array of wxDataViewItems.
1472 */
1473 virtual void SetSelections(const wxDataViewItemArray& sel);
1474
1475 /**
1476 Unselect the given item.
1477 */
1478 virtual void Unselect(const wxDataViewItem& item);
1479
1480 /**
1481 Unselect all item.
1482 This method only has effect if multiple selections are allowed.
1483 */
1484 virtual void UnselectAll();
1485
1486 /**
1487 Sets the row height.
1488
1489 This function can only be used when all rows have the same height, i.e.
1490 when wxDV_VARIABLE_LINE_HEIGHT flag is not used.
1491
1492 Currently this is implemented in the generic and native GTK versions
1493 only and nothing is done (and @false returned) when using OS X port.
1494
1495 Also notice that this method can only be used to increase the row
1496 height compared with the default one (as determined by the return value
1497 of wxDataViewRenderer::GetSize()), if it is set to a too small value
1498 then the minimum required by the renderers will be used.
1499
1500 @return @true if the line height was changed or @false otherwise.
1501
1502 @since 2.9.2
1503 */
1504 virtual bool SetRowHeight(int rowHeight);
1505 };
1506
1507
1508
1509 /**
1510 @class wxDataViewModelNotifier
1511
1512 A wxDataViewModelNotifier instance is owned by a wxDataViewModel and mirrors
1513 its notification interface.
1514 See the documentation of that class for further information.
1515
1516 @library{wxadv}
1517 @category{dvc}
1518 */
1519 class wxDataViewModelNotifier
1520 {
1521 public:
1522 /**
1523 Constructor.
1524 */
1525 wxDataViewModelNotifier();
1526
1527 /**
1528 Destructor.
1529 */
1530 virtual ~wxDataViewModelNotifier();
1531
1532 /**
1533 Called by owning model.
1534 */
1535 virtual bool Cleared() = 0;
1536
1537 /**
1538 Get owning wxDataViewModel.
1539 */
1540 wxDataViewModel* GetOwner() const;
1541
1542 /**
1543 Called by owning model.
1544
1545 @return Always return @true from this function in derived classes.
1546 */
1547 virtual bool ItemAdded(const wxDataViewItem& parent,
1548 const wxDataViewItem& item) = 0;
1549
1550 /**
1551 Called by owning model.
1552
1553 @return Always return @true from this function in derived classes.
1554 */
1555 virtual bool ItemChanged(const wxDataViewItem& item) = 0;
1556
1557 /**
1558 Called by owning model.
1559
1560 @return Always return @true from this function in derived classes.
1561 */
1562 virtual bool ItemDeleted(const wxDataViewItem& parent,
1563 const wxDataViewItem& item) = 0;
1564
1565 /**
1566 Called by owning model.
1567
1568 @return Always return @true from this function in derived classes.
1569 */
1570 virtual bool ItemsAdded(const wxDataViewItem& parent,
1571 const wxDataViewItemArray& items);
1572
1573 /**
1574 Called by owning model.
1575
1576 @return Always return @true from this function in derived classes.
1577 */
1578 virtual bool ItemsChanged(const wxDataViewItemArray& items);
1579
1580 /**
1581 Called by owning model.
1582
1583 @return Always return @true from this function in derived classes.
1584 */
1585 virtual bool ItemsDeleted(const wxDataViewItem& parent,
1586 const wxDataViewItemArray& items);
1587
1588 /**
1589 Called by owning model.
1590 */
1591 virtual void Resort() = 0;
1592
1593 /**
1594 Set owner of this notifier. Used internally.
1595 */
1596 void SetOwner(wxDataViewModel* owner);
1597
1598 /**
1599 Called by owning model.
1600
1601 @return Always return @true from this function in derived classes.
1602 */
1603 virtual bool ValueChanged(const wxDataViewItem& item, unsigned int col) = 0;
1604 };
1605
1606
1607 /**
1608 The mode of a data-view cell; see wxDataViewRenderer for more info.
1609 */
1610 enum wxDataViewCellMode
1611 {
1612 /**
1613 The cell only displays information and cannot be manipulated or
1614 otherwise interacted with in any way.
1615
1616 Note that this doesn't mean that the row being drawn can't be selected,
1617 just that a particular element of it cannot be individually modified.
1618 */
1619 wxDATAVIEW_CELL_INERT,
1620
1621 /**
1622 Indicates that the cell can be @em activated by clicking it or using
1623 keyboard.
1624
1625 Activating a cell is an alternative to showing inline editor when the
1626 value can be edited in a simple way that doesn't warrant full editor
1627 control. The most typical use of cell activation is toggling the
1628 checkbox in wxDataViewToggleRenderer; others would be e.g. an embedded
1629 volume slider or a five-star rating column.
1630
1631 The exact means of activating a cell are platform-dependent, but they
1632 are usually similar to those used for inline editing of values.
1633 Typically, a cell would be activated by Space or Enter keys or by left
1634 mouse click.
1635
1636 @note Do not confuse this with item activation in wxDataViewCtrl
1637 and the wxEVT_DATAVIEW_ITEM_ACTIVATED event. That one is
1638 used for activating the item (or, to put it differently, the
1639 entire row) similarly to analogous messages in wxTreeCtrl and
1640 wxListCtrl, and the effect differs (play a song, open a file
1641 etc.). Cell activation, on the other hand, is all about
1642 interacting with the individual cell.
1643
1644 @see wxDataViewCustomRenderer::ActivateCell()
1645 */
1646 wxDATAVIEW_CELL_ACTIVATABLE,
1647
1648 /**
1649 Indicates that the user can edit the data in-place in an inline editor
1650 control that will show up when the user wants to edit the cell.
1651
1652 A typical example of this behaviour is changing the filename in a file
1653 managers.
1654
1655 Editing is typically triggered by slowly double-clicking the cell or by
1656 a platform-dependent keyboard shortcut (F2 is typical on Windows, Space
1657 and/or Enter is common elsewhere and supported on Windows too).
1658
1659 @see wxDataViewCustomRenderer::CreateEditorCtrl()
1660 */
1661 wxDATAVIEW_CELL_EDITABLE
1662 };
1663
1664 /**
1665 The values of this enum controls how a wxDataViewRenderer should display
1666 its contents in a cell.
1667 */
1668 enum wxDataViewCellRenderState
1669 {
1670 wxDATAVIEW_CELL_SELECTED = 1,
1671 wxDATAVIEW_CELL_PRELIT = 2,
1672 wxDATAVIEW_CELL_INSENSITIVE = 4,
1673 wxDATAVIEW_CELL_FOCUSED = 8
1674 };
1675
1676 /**
1677 @class wxDataViewRenderer
1678
1679 This class is used by wxDataViewCtrl to render the individual cells.
1680 One instance of a renderer class is owned by a wxDataViewColumn.
1681 There is a number of ready-to-use renderers provided:
1682 - wxDataViewTextRenderer,
1683 - wxDataViewIconTextRenderer,
1684 - wxDataViewToggleRenderer,
1685 - wxDataViewProgressRenderer,
1686 - wxDataViewBitmapRenderer,
1687 - wxDataViewDateRenderer,
1688 - wxDataViewSpinRenderer.
1689 - wxDataViewChoiceRenderer.
1690
1691 Additionally, the user can write their own renderers by deriving from
1692 wxDataViewCustomRenderer.
1693
1694 The ::wxDataViewCellMode and ::wxDataViewCellRenderState flags accepted
1695 by the constructors respectively controls what actions the cell data allows
1696 and how the renderer should display its contents in a cell.
1697
1698 @library{wxadv}
1699 @category{dvc}
1700 */
1701 class wxDataViewRenderer : public wxObject
1702 {
1703 public:
1704 /**
1705 Constructor.
1706 */
1707 wxDataViewRenderer(const wxString& varianttype,
1708 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1709 int align = wxDVR_DEFAULT_ALIGNMENT );
1710
1711 /**
1712 Enable or disable replacing parts of the item text with ellipsis to
1713 make it fit the column width.
1714
1715 This method only makes sense for the renderers working with text, such
1716 as wxDataViewTextRenderer or wxDataViewIconTextRenderer.
1717
1718 By default wxELLIPSIZE_MIDDLE is used.
1719
1720 @param mode
1721 Ellipsization mode, use wxELLIPSIZE_NONE to disable.
1722
1723 @since 2.9.1
1724 */
1725 void EnableEllipsize(wxEllipsizeMode mode = wxELLIPSIZE_MIDDLE);
1726
1727 /**
1728 Disable replacing parts of the item text with ellipsis.
1729
1730 If ellipsizing is disabled, the string will be truncated if it doesn't
1731 fit.
1732
1733 This is the same as @code EnableEllipsize(wxELLIPSIZE_NONE) @endcode.
1734
1735 @since 2.9.1
1736 */
1737 void DisableEllipsize();
1738
1739 /**
1740 Returns the alignment. See SetAlignment()
1741 */
1742 virtual int GetAlignment() const;
1743
1744 /**
1745 Returns the ellipsize mode used by the renderer.
1746
1747 If the return value is wxELLIPSIZE_NONE, the text is simply truncated
1748 if it doesn't fit.
1749
1750 @see EnableEllipsize()
1751 */
1752 wxEllipsizeMode GetEllipsizeMode() const;
1753
1754 /**
1755 Returns the cell mode.
1756 */
1757 virtual wxDataViewCellMode GetMode() const;
1758
1759 /**
1760 Returns pointer to the owning wxDataViewColumn.
1761 */
1762 wxDataViewColumn* GetOwner() const;
1763
1764 /**
1765 This methods retrieves the value from the renderer in order to
1766 transfer the value back to the data model.
1767
1768 Returns @false on failure.
1769 */
1770 virtual bool GetValue(wxVariant& value) const = 0;
1771
1772 /**
1773 Returns a string with the type of the wxVariant supported by this renderer.
1774 */
1775 wxString GetVariantType() const;
1776
1777 /**
1778 Sets the alignment of the renderer's content.
1779 The default value of @c wxDVR_DEFAULT_ALIGMENT indicates that the content
1780 should have the same alignment as the column header.
1781
1782 The method is not implemented under OS X and the renderer always aligns
1783 its contents as the column header on that platform. The other platforms
1784 support both vertical and horizontal alignment.
1785 */
1786 virtual void SetAlignment( int align );
1787 /**
1788 Sets the owning wxDataViewColumn.
1789 This is usually called from within wxDataViewColumn.
1790 */
1791 void SetOwner(wxDataViewColumn* owner);
1792
1793 /**
1794 Set the value of the renderer (and thus its cell) to @a value.
1795 The internal code will then render this cell with this data.
1796 */
1797 virtual bool SetValue(const wxVariant& value) = 0;
1798
1799 /**
1800 Before data is committed to the data model, it is passed to this
1801 method where it can be checked for validity. This can also be
1802 used for checking a valid range or limiting the user input in
1803 a certain aspect (e.g. max number of characters or only alphanumeric
1804 input, ASCII only etc.). Return @false if the value is not valid.
1805
1806 Please note that due to implementation limitations, this validation
1807 is done after the editing control already is destroyed and the
1808 editing process finished.
1809 */
1810 virtual bool Validate(wxVariant& value);
1811
1812
1813 virtual bool HasEditorCtrl() const;
1814 virtual wxWindow* CreateEditorCtrl(wxWindow * parent,
1815 wxRect labelRect,
1816 const wxVariant& value);
1817 virtual bool GetValueFromEditorCtrl(wxWindow * editor,
1818 wxVariant& value);
1819 virtual bool StartEditing( const wxDataViewItem &item, wxRect labelRect );
1820 virtual void CancelEditing();
1821 virtual bool FinishEditing();
1822 wxWindow *GetEditorCtrl();
1823
1824 protected:
1825 wxDataViewCtrl* GetView() const;
1826 };
1827
1828
1829
1830 /**
1831 @class wxDataViewTextRenderer
1832
1833 wxDataViewTextRenderer is used for rendering text.
1834 It supports in-place editing if desired.
1835
1836 @library{wxadv}
1837 @category{dvc}
1838 */
1839 class wxDataViewTextRenderer : public wxDataViewRenderer
1840 {
1841 public:
1842 /**
1843 The ctor.
1844 */
1845 wxDataViewTextRenderer(const wxString& varianttype = "string",
1846 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1847 int align = wxDVR_DEFAULT_ALIGNMENT );
1848 };
1849
1850
1851
1852 /**
1853 @class wxDataViewIconTextRenderer
1854
1855 The wxDataViewIconTextRenderer class is used to display text with
1856 a small icon next to it as it is typically done in a file manager.
1857
1858 This classes uses the wxDataViewIconText helper class to store its data.
1859 wxDataViewIconText can be converted to and from a wxVariant using the left
1860 shift operator.
1861
1862 @library{wxadv}
1863 @category{dvc}
1864 */
1865 class wxDataViewIconTextRenderer : public wxDataViewRenderer
1866 {
1867 public:
1868 /**
1869 The ctor.
1870 */
1871 wxDataViewIconTextRenderer(const wxString& varianttype = "wxDataViewIconText",
1872 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1873 int align = wxDVR_DEFAULT_ALIGNMENT );
1874 };
1875
1876
1877
1878 /**
1879 @class wxDataViewProgressRenderer
1880
1881 This class is used by wxDataViewCtrl to render progress bars.
1882
1883 @library{wxadv}
1884 @category{dvc}
1885 */
1886 class wxDataViewProgressRenderer : public wxDataViewRenderer
1887 {
1888 public:
1889 /**
1890 The ctor.
1891 */
1892 wxDataViewProgressRenderer(const wxString& label = wxEmptyString,
1893 const wxString& varianttype = "long",
1894 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1895 int align = wxDVR_DEFAULT_ALIGNMENT );
1896 };
1897
1898
1899
1900 /**
1901 @class wxDataViewSpinRenderer
1902
1903 This is a specialized renderer for rendering integer values.
1904 It supports modifying the values in-place by using a wxSpinCtrl.
1905 The renderer only support variants of type @e long.
1906
1907 @library{wxadv}
1908 @category{dvc}
1909 */
1910 class wxDataViewSpinRenderer : public wxDataViewCustomRenderer
1911 {
1912 public:
1913 /**
1914 Constructor.
1915 @a min and @a max indicate the minimum and maximum values for the wxSpinCtrl.
1916 */
1917 wxDataViewSpinRenderer(int min, int max,
1918 wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE,
1919 int align = wxDVR_DEFAULT_ALIGNMENT);
1920 };
1921
1922
1923
1924 /**
1925 @class wxDataViewToggleRenderer
1926
1927 This class is used by wxDataViewCtrl to render toggle controls.
1928
1929 @library{wxadv}
1930 @category{dvc}
1931 */
1932 class wxDataViewToggleRenderer : public wxDataViewRenderer
1933 {
1934 public:
1935 /**
1936 The ctor.
1937 */
1938 wxDataViewToggleRenderer(const wxString& varianttype = "bool",
1939 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
1940 int align = wxDVR_DEFAULT_ALIGNMENT);
1941 };
1942
1943
1944 /**
1945 A wxDataViewCtrl renderer using wxChoice control and values of strings in
1946 it.
1947
1948 This class is used by wxDataViewCtrl to render choice controls.
1949 It stores a string so that SetValue() and GetValue() operate
1950 on a variant holding a string.
1951
1952 @see wxDataViewChoiceByIndexRenderer
1953
1954 @library{wxadv}
1955 @category{dvc}
1956 */
1957
1958 class wxDataViewChoiceRenderer: public wxDataViewRenderer
1959 {
1960 public:
1961 /**
1962 The ctor.
1963 */
1964 wxDataViewChoiceRenderer( const wxArrayString &choices,
1965 wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE,
1966 int alignment = wxDVR_DEFAULT_ALIGNMENT );
1967
1968 /**
1969 Returns the choice referred to by index.
1970 */
1971 wxString GetChoice(size_t index) const;
1972
1973 /**
1974 Returns all choices.
1975 */
1976 const wxArrayString& GetChoices() const;
1977 };
1978
1979
1980 /**
1981 A wxDataViewCtrl renderer using wxChoice control and indexes into it.
1982
1983 Unlike its base wxDataViewChoiceRenderer class, this one stores the choice
1984 index, i.e. an @c int, in the variant used by its SetValue() and
1985 GetValue().
1986
1987 @library{wxadv}
1988 @category{dvc}
1989 */
1990 class wxDataViewChoiceByIndexRenderer : public wxDataViewChoiceRenderer
1991 {
1992 public:
1993 /**
1994 The ctor.
1995 */
1996 wxDataViewChoiceByIndexRenderer( const wxArrayString &choices,
1997 wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE,
1998 int alignment = wxDVR_DEFAULT_ALIGNMENT );
1999 };
2000
2001
2002 /**
2003 @class wxDataViewDateRenderer
2004
2005 This class is used by wxDataViewCtrl to render calendar controls.
2006
2007 @library{wxadv}
2008 @category{dvc}
2009 */
2010 class wxDataViewDateRenderer : public wxDataViewRenderer
2011 {
2012 public:
2013 /**
2014 The ctor.
2015 */
2016 wxDataViewDateRenderer(const wxString& varianttype = "datetime",
2017 wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE,
2018 int align = wxDVR_DEFAULT_ALIGNMENT);
2019 };
2020
2021
2022
2023 /**
2024 @class wxDataViewCustomRenderer
2025
2026 You need to derive a new class from wxDataViewCustomRenderer in
2027 order to write a new renderer.
2028
2029 You need to override at least wxDataViewRenderer::SetValue, wxDataViewRenderer::GetValue,
2030 wxDataViewCustomRenderer::GetSize and wxDataViewCustomRenderer::Render.
2031
2032 If you want your renderer to support in-place editing then you also need to override
2033 wxDataViewCustomRenderer::HasEditorCtrl, wxDataViewCustomRenderer::CreateEditorCtrl
2034 and wxDataViewCustomRenderer::GetValueFromEditorCtrl.
2035
2036 Note that a special event handler will be pushed onto that editor control
2037 which handles @e \<ENTER\> and focus out events in order to end the editing.
2038
2039 @library{wxadv}
2040 @category{dvc}
2041 */
2042 class wxDataViewCustomRenderer : public wxDataViewRenderer
2043 {
2044 public:
2045 /**
2046 Constructor.
2047 */
2048 wxDataViewCustomRenderer(const wxString& varianttype = "string",
2049 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
2050 int align = wxDVR_DEFAULT_ALIGNMENT);
2051
2052 /**
2053 Destructor.
2054 */
2055 virtual ~wxDataViewCustomRenderer();
2056
2057 /**
2058 Override this to react to cell @em activation. Activating a cell is an
2059 alternative to showing inline editor when the value can be edited in a
2060 simple way that doesn't warrant full editor control. The most typical
2061 use of cell activation is toggling the checkbox in
2062 wxDataViewToggleRenderer; others would be e.g. an embedded volume
2063 slider or a five-star rating column.
2064
2065 The exact means of activating a cell are platform-dependent, but they
2066 are usually similar to those used for inline editing of values.
2067 Typically, a cell would be activated by Space or Enter keys or by left
2068 mouse click.
2069
2070 This method will only be called if the cell has the
2071 wxDATAVIEW_CELL_ACTIVATABLE mode.
2072
2073 @param cell
2074 Coordinates of the activated cell's area.
2075 @param model
2076 The model to manipulate in response.
2077 @param item
2078 Activated item.
2079 @param col
2080 Activated column of @a item.
2081 @param mouseEvent
2082 If the activation was triggered by mouse click, contains the
2083 corresponding event. Is @NULL otherwise (for keyboard activation).
2084 Mouse coordinates are adjusted to be relative to the cell.
2085
2086 @since 2.9.3
2087
2088 @note Do not confuse this method with item activation in wxDataViewCtrl
2089 and the wxEVT_DATAVIEW_ITEM_ACTIVATED event. That one is
2090 used for activating the item (or, to put it differently, the
2091 entire row) similarly to analogous messages in wxTreeCtrl and
2092 wxListCtrl, and the effect differs (play a song, open a file
2093 etc.). Cell activation, on the other hand, is all about
2094 interacting with the individual cell.
2095
2096 @see CreateEditorCtrl()
2097 */
2098 virtual bool ActivateCell(const wxRect& cell,
2099 wxDataViewModel* model,
2100 const wxDataViewItem & item,
2101 unsigned int col,
2102 const wxMouseEvent *mouseEvent);
2103
2104 /**
2105 Override this to create the actual editor control once editing
2106 is about to start.
2107
2108 This method will only be called if the cell has the
2109 wxDATAVIEW_CELL_EDITABLE mode. Editing is typically triggered by slowly
2110 double-clicking the cell or by a platform-dependent keyboard shortcut
2111 (F2 is typical on Windows, Space and/or Enter is common elsewhere and
2112 supported on Windows too).
2113
2114 @param parent
2115 The parent of the editor control.
2116 @param labelRect
2117 Indicates the position and size of the editor control. The control
2118 should be created in place of the cell and @a labelRect should be
2119 respected as much as possible.
2120 @param value
2121 Initial value of the editor.
2122
2123 An example:
2124 @code
2125 {
2126 long l = value;
2127 return new wxSpinCtrl( parent, wxID_ANY, wxEmptyString,
2128 labelRect.GetTopLeft(), labelRect.GetSize(), 0, 0, 100, l );
2129 }
2130 @endcode
2131
2132 @see ActivateCell()
2133 */
2134 virtual wxWindow* CreateEditorCtrl(wxWindow* parent,
2135 wxRect labelRect,
2136 const wxVariant& value);
2137
2138 /**
2139 Return the attribute to be used for rendering.
2140
2141 This function may be called from Render() implementation to use the
2142 attributes defined for the item if the renderer supports them.
2143
2144 Notice that when Render() is called, the wxDC object passed to it is
2145 already set up to use the correct attributes (e.g. its font is set to
2146 bold or italic version if wxDataViewItemAttr::GetBold() or GetItalic()
2147 returns true) so it may not be necessary to call it explicitly if you
2148 only want to render text using the items attributes.
2149
2150 @since 2.9.1
2151 */
2152 const wxDataViewItemAttr& GetAttr() const;
2153
2154 /**
2155 Return size required to show content.
2156 */
2157 virtual wxSize GetSize() const = 0;
2158
2159 /**
2160 Override this so that the renderer can get the value from the editor
2161 control (pointed to by @a editor):
2162 @code
2163 {
2164 wxSpinCtrl *sc = (wxSpinCtrl*) editor;
2165 long l = sc->GetValue();
2166 value = l;
2167 return true;
2168 }
2169 @endcode
2170 */
2171 virtual bool GetValueFromEditorCtrl(wxWindow* editor,
2172 wxVariant& value);
2173
2174 /**
2175 Override this and make it return @true in order to
2176 indicate that this renderer supports in-place editing.
2177 */
2178 virtual bool HasEditorCtrl() const;
2179
2180 /**
2181 Override this to react to a left click. This method will only be
2182 called in @c wxDATAVIEW_CELL_ACTIVATABLE mode. This method is
2183 deprecated, please use ActivateCell instead.
2184 */
2185 virtual bool LeftClick( wxPoint cursor,
2186 wxRect cell,
2187 wxDataViewModel * model,
2188 const wxDataViewItem & item,
2189 unsigned int col );
2190
2191 /**
2192 Override this to react to the activation of a cell. This method is
2193 deprecated, please use ActivateCell instead.
2194 */
2195 virtual bool Activate(wxRect cell,
2196 wxDataViewModel * model,
2197 const wxDataViewItem & item,
2198 unsigned int col);
2199
2200
2201 /**
2202 Override this to render the cell.
2203 Before this is called, wxDataViewRenderer::SetValue was called
2204 so that this instance knows what to render.
2205 */
2206 virtual bool Render(wxRect cell, wxDC* dc, int state) = 0;
2207
2208 /**
2209 This method should be called from within Render() whenever you need to
2210 render simple text.
2211 This will ensure that the correct colour, font and vertical alignment will
2212 be chosen so the text will look the same as text drawn by native renderers.
2213 */
2214 void RenderText(const wxString& text, int xoffset, wxRect cell,
2215 wxDC* dc, int state);
2216
2217 /**
2218 Override this to start a drag operation. Not yet supported.
2219 */
2220 virtual bool StartDrag(const wxPoint& cursor,
2221 const wxRect& cell,
2222 wxDataViewModel* model,
2223 const wxDataViewItem & item,
2224 unsigned int col);
2225
2226 protected:
2227 /**
2228 Helper for GetSize() implementations, respects attributes.
2229 */
2230 wxSize GetTextExtent(const wxString& str) const;
2231 };
2232
2233
2234
2235 /**
2236 @class wxDataViewBitmapRenderer
2237
2238 This class is used by wxDataViewCtrl to render bitmap controls.
2239
2240 @library{wxadv}
2241 @category{dvc}
2242 */
2243 class wxDataViewBitmapRenderer : public wxDataViewRenderer
2244 {
2245 public:
2246 /**
2247 The ctor.
2248 */
2249 wxDataViewBitmapRenderer(const wxString& varianttype = "wxBitmap",
2250 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
2251 int align = wxDVR_DEFAULT_ALIGNMENT);
2252 };
2253
2254
2255 /**
2256 The flags used by wxDataViewColumn.
2257 Can be combined together.
2258 */
2259 enum wxDataViewColumnFlags
2260 {
2261 wxDATAVIEW_COL_RESIZABLE = 1,
2262 wxDATAVIEW_COL_SORTABLE = 2,
2263 wxDATAVIEW_COL_REORDERABLE = 4,
2264 wxDATAVIEW_COL_HIDDEN = 8
2265 };
2266
2267 /**
2268 @class wxDataViewColumn
2269
2270 This class represents a column in a wxDataViewCtrl.
2271 One wxDataViewColumn is bound to one column in the data model to which the
2272 wxDataViewCtrl has been associated.
2273
2274 An instance of wxDataViewRenderer is used by this class to render its data.
2275
2276 @library{wxadv}
2277 @category{dvc}
2278 */
2279 class wxDataViewColumn : public wxSettableHeaderColumn
2280 {
2281 public:
2282 /**
2283 Constructs a text column.
2284
2285 @param title
2286 The title of the column.
2287 @param renderer
2288 The class which will render the contents of this column.
2289 @param model_column
2290 The index of the model's column which is associated with this object.
2291 @param width
2292 The width of the column.
2293 The @c wxDVC_DEFAULT_WIDTH value is the fixed default value.
2294 @param align
2295 The alignment of the column title.
2296 @param flags
2297 One or more flags of the ::wxDataViewColumnFlags enumeration.
2298 */
2299 wxDataViewColumn(const wxString& title,
2300 wxDataViewRenderer* renderer,
2301 unsigned int model_column,
2302 int width = wxDVC_DEFAULT_WIDTH,
2303 wxAlignment align = wxALIGN_CENTER,
2304 int flags = wxDATAVIEW_COL_RESIZABLE);
2305
2306 /**
2307 Constructs a bitmap column.
2308
2309 @param bitmap
2310 The bitmap of the column.
2311 @param renderer
2312 The class which will render the contents of this column.
2313 @param model_column
2314 The index of the model's column which is associated with this object.
2315 @param width
2316 The width of the column.
2317 The @c wxDVC_DEFAULT_WIDTH value is the fixed default value.
2318 @param align
2319 The alignment of the column title.
2320 @param flags
2321 One or more flags of the ::wxDataViewColumnFlags enumeration.
2322 */
2323 wxDataViewColumn(const wxBitmap& bitmap,
2324 wxDataViewRenderer* renderer,
2325 unsigned int model_column,
2326 int width = wxDVC_DEFAULT_WIDTH,
2327 wxAlignment align = wxALIGN_CENTER,
2328 int flags = wxDATAVIEW_COL_RESIZABLE);
2329
2330 /**
2331 Returns the index of the column of the model, which this
2332 wxDataViewColumn is displaying.
2333 */
2334 unsigned int GetModelColumn() const;
2335
2336 /**
2337 Returns the owning wxDataViewCtrl.
2338 */
2339 wxDataViewCtrl* GetOwner() const;
2340
2341 /**
2342 Returns the renderer of this wxDataViewColumn.
2343
2344 @see wxDataViewRenderer.
2345 */
2346 wxDataViewRenderer* GetRenderer() const;
2347 };
2348
2349
2350
2351 /**
2352 @class wxDataViewListCtrl
2353
2354 This class is a wxDataViewCtrl which internally uses a wxDataViewListStore
2355 and forwards most of its API to that class.
2356
2357 The purpose of this class is to offer a simple way to display and
2358 edit a small table of data without having to write your own wxDataViewModel.
2359
2360 @code
2361 wxDataViewListCtrl *listctrl = new wxDataViewListCtrl( parent, wxID_ANY );
2362
2363 listctrl->AppendToggleColumn( "Toggle" );
2364 listctrl->AppendTextColumn( "Text" );
2365
2366 wxVector<wxVariant> data;
2367 data.push_back( wxVariant(true) );
2368 data.push_back( wxVariant("row 1") );
2369 listctrl->AppendItem( data );
2370
2371 data.clear();
2372 data.push_back( wxVariant(false) );
2373 data.push_back( wxVariant("row 3") );
2374 listctrl->AppendItem( data );
2375 @endcode
2376
2377 @beginStyleTable
2378 See wxDataViewCtrl for the list of supported styles.
2379 @endStyleTable
2380
2381 @beginEventEmissionTable
2382 See wxDataViewCtrl for the list of events emitted by this class.
2383 @endEventTable
2384
2385 @library{wxadv}
2386 @category{ctrl,dvc}
2387
2388 @since 2.9.0
2389 */
2390 class wxDataViewListCtrl: public wxDataViewCtrl
2391 {
2392 public:
2393 /**
2394 Default ctor.
2395 */
2396 wxDataViewListCtrl();
2397
2398 /**
2399 Constructor. Calls Create().
2400 */
2401 wxDataViewListCtrl( wxWindow *parent, wxWindowID id,
2402 const wxPoint& pos = wxDefaultPosition,
2403 const wxSize& size = wxDefaultSize, long style = wxDV_ROW_LINES,
2404 const wxValidator& validator = wxDefaultValidator );
2405
2406 /**
2407 Destructor. Deletes the image list if any.
2408 */
2409 ~wxDataViewListCtrl();
2410
2411 /**
2412 Creates the control and a wxDataViewListStore as its internal model.
2413 */
2414 bool Create( wxWindow *parent, wxWindowID id,
2415 const wxPoint& pos = wxDefaultPosition,
2416 const wxSize& size = wxDefaultSize, long style = wxDV_ROW_LINES,
2417 const wxValidator& validator = wxDefaultValidator );
2418
2419 //@{
2420 /**
2421 Returns the store.
2422 */
2423 wxDataViewListStore *GetStore();
2424 const wxDataViewListStore *GetStore() const;
2425 //@}
2426
2427 /**
2428 Returns the position of given @e item or wxNOT_FOUND if it's
2429 not a valid item.
2430
2431 @since 2.9.2
2432 */
2433 int ItemToRow(const wxDataViewItem &item) const;
2434
2435 /**
2436 Returns the wxDataViewItem at the given @e row.
2437
2438 @since 2.9.2
2439 */
2440 wxDataViewItem RowToItem(int row) const;
2441
2442 //@{
2443 /**
2444 @name Selection handling functions
2445 */
2446
2447 /**
2448 Returns index of the selected row or wxNOT_FOUND.
2449
2450 @see wxDataViewCtrl::GetSelection()
2451
2452 @since 2.9.2
2453 */
2454 int GetSelectedRow() const;
2455
2456 /**
2457 Selects given row.
2458
2459 @see wxDataViewCtrl::Select()
2460
2461 @since 2.9.2
2462 */
2463 void SelectRow(unsigned row);
2464
2465 /**
2466 Unselects given row.
2467
2468 @see wxDataViewCtrl::Unselect()
2469
2470 @since 2.9.2
2471 */
2472 void UnselectRow(unsigned row);
2473
2474 /**
2475 Returns true if @a row is selected.
2476
2477 @see wxDataViewCtrl::IsSelected()
2478
2479 @since 2.9.2
2480 */
2481 bool IsRowSelected(unsigned row) const;
2482
2483 //@}
2484
2485 /**
2486 @name Column management functions
2487 */
2488 //@{
2489
2490 /**
2491 Appends a column to the control and additionally appends a
2492 column to the store with the type string.
2493 */
2494 virtual bool AppendColumn( wxDataViewColumn *column );
2495
2496 /**
2497 Appends a column to the control and additionally appends a
2498 column to the list store with the type @a varianttype.
2499 */
2500 void AppendColumn( wxDataViewColumn *column, const wxString &varianttype );
2501
2502 /**
2503 Appends a text column to the control and the store.
2504
2505 See wxDataViewColumn::wxDataViewColumn for more info about
2506 the parameters.
2507 */
2508 wxDataViewColumn *AppendTextColumn( const wxString &label,
2509 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
2510 int width = -1, wxAlignment align = wxALIGN_LEFT,
2511 int flags = wxDATAVIEW_COL_RESIZABLE );
2512
2513 /**
2514 Appends a toggle column to the control and the store.
2515
2516 See wxDataViewColumn::wxDataViewColumn for more info about
2517 the parameters.
2518 */
2519 wxDataViewColumn *AppendToggleColumn( const wxString &label,
2520 wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE,
2521 int width = -1, wxAlignment align = wxALIGN_LEFT,
2522 int flags = wxDATAVIEW_COL_RESIZABLE );
2523
2524 /**
2525 Appends a progress column to the control and the store.
2526
2527 See wxDataViewColumn::wxDataViewColumn for more info about
2528 the parameters.
2529 */
2530 wxDataViewColumn *AppendProgressColumn( const wxString &label,
2531 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
2532 int width = -1, wxAlignment align = wxALIGN_LEFT,
2533 int flags = wxDATAVIEW_COL_RESIZABLE );
2534
2535 /**
2536 Appends an icon-and-text column to the control and the store.
2537
2538 See wxDataViewColumn::wxDataViewColumn for more info about
2539 the parameters.
2540 */
2541 wxDataViewColumn *AppendIconTextColumn( const wxString &label,
2542 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
2543 int width = -1, wxAlignment align = wxALIGN_LEFT,
2544 int flags = wxDATAVIEW_COL_RESIZABLE );
2545
2546 /**
2547 Inserts a column to the control and additionally inserts a
2548 column to the store with the type string.
2549 */
2550 virtual bool InsertColumn( unsigned int pos, wxDataViewColumn *column );
2551
2552 /**
2553 Inserts a column to the control and additionally inserts a
2554 column to the list store with the type @a varianttype.
2555 */
2556 void InsertColumn( unsigned int pos, wxDataViewColumn *column,
2557 const wxString &varianttype );
2558
2559 /**
2560 Prepends a column to the control and additionally prepends a
2561 column to the store with the type string.
2562 */
2563 virtual bool PrependColumn( wxDataViewColumn *column );
2564
2565 /**
2566 Prepends a column to the control and additionally prepends a
2567 column to the list store with the type @a varianttype.
2568 */
2569 void PrependColumn( wxDataViewColumn *column, const wxString &varianttype );
2570
2571 //@}
2572
2573
2574 /**
2575 @name Item management functions
2576 */
2577 //@{
2578
2579 /**
2580 Appends an item (=row) to the control and store.
2581 */
2582 void AppendItem( const wxVector<wxVariant> &values, wxUIntPtr data = NULL );
2583
2584 /**
2585 Prepends an item (=row) to the control and store.
2586 */
2587 void PrependItem( const wxVector<wxVariant> &values, wxUIntPtr data = NULL );
2588
2589 /**
2590 Inserts an item (=row) to the control and store.
2591 */
2592 void InsertItem( unsigned int row, const wxVector<wxVariant> &values, wxUIntPtr data = NULL );
2593
2594 /**
2595 Delete the row at position @a row.
2596 */
2597 void DeleteItem( unsigned row );
2598
2599 /**
2600 Delete all items (= all rows).
2601 */
2602 void DeleteAllItems();
2603
2604 /**
2605 Returns the number of items (=rows) in the control
2606
2607 @since 2.9.4
2608 */
2609 unsigned int GetItemCount() const;
2610
2611 /**
2612 Returns the client data associated with the item.
2613
2614 @see SetItemData()
2615
2616 @since 2.9.4
2617 */
2618 wxUIntPtr GetItemData(const wxDataViewItem& item) const;
2619
2620 /**
2621 Sets the value in the store and update the control.
2622 */
2623 void SetValue( const wxVariant &value, unsigned int row, unsigned int col );
2624
2625 /**
2626 Returns the value from the store.
2627 */
2628 void GetValue( wxVariant &value, unsigned int row, unsigned int col );
2629
2630 /**
2631 Sets the value in the store and update the control.
2632
2633 This method assumes that the string is stored in respective
2634 column.
2635 */
2636 void SetTextValue( const wxString &value, unsigned int row, unsigned int col );
2637
2638 /**
2639 Returns the value from the store.
2640
2641 This method assumes that the string is stored in respective
2642 column.
2643 */
2644 wxString GetTextValue( unsigned int row, unsigned int col ) const;
2645
2646 /**
2647 Sets the value in the store and update the control.
2648
2649 This method assumes that the boolean value is stored in
2650 respective column.
2651 */
2652 void SetToggleValue( bool value, unsigned int row, unsigned int col );
2653
2654 /**
2655 Returns the value from the store.
2656
2657 This method assumes that the boolean value is stored in
2658 respective column.
2659 */
2660 bool GetToggleValue( unsigned int row, unsigned int col ) const;
2661
2662 /**
2663 Associates a client data pointer with the given item.
2664
2665 Notice that the control does @e not take ownership of the pointer for
2666 compatibility with wxListCtrl. I.e. it will @e not delete the pointer
2667 (if it is a pointer and not a number) itself, it is up to you to do it.
2668
2669 @see GetItemData()
2670
2671 @since 2.9.4
2672 */
2673 void SetItemData(const wxDataViewItem& item, wxUIntPtr data);
2674
2675 //@}
2676 };
2677
2678
2679 /**
2680 @class wxDataViewTreeCtrl
2681
2682 This class is a wxDataViewCtrl which internally uses a wxDataViewTreeStore
2683 and forwards most of its API to that class.
2684 Additionally, it uses a wxImageList to store a list of icons.
2685
2686 The main purpose of this class is to provide a simple upgrade path for code
2687 using wxTreeCtrl.
2688
2689 @beginStyleTable
2690 See wxDataViewCtrl for the list of supported styles.
2691 @endStyleTable
2692
2693 @beginEventEmissionTable
2694 See wxDataViewCtrl for the list of events emitted by this class.
2695 @endEventTable
2696
2697 @library{wxadv}
2698 @category{ctrl,dvc}
2699
2700 @since 2.9.0
2701
2702 @appearance{dataviewtreectrl}
2703 */
2704 class wxDataViewTreeCtrl : public wxDataViewCtrl
2705 {
2706 public:
2707 /**
2708 Default ctor.
2709 */
2710 wxDataViewTreeCtrl();
2711
2712 /**
2713 Constructor.
2714
2715 Calls Create().
2716 */
2717 wxDataViewTreeCtrl(wxWindow* parent, wxWindowID id,
2718 const wxPoint& pos = wxDefaultPosition,
2719 const wxSize& size = wxDefaultSize,
2720 long style = wxDV_NO_HEADER | wxDV_ROW_LINES,
2721 const wxValidator& validator = wxDefaultValidator);
2722
2723 /**
2724 Destructor. Deletes the image list if any.
2725 */
2726 virtual ~wxDataViewTreeCtrl();
2727
2728 /**
2729 Appends a container to the given @a parent.
2730 */
2731 wxDataViewItem AppendContainer(const wxDataViewItem& parent,
2732 const wxString& text,
2733 int icon = -1,
2734 int expanded = -1,
2735 wxClientData* data = NULL);
2736
2737 /**
2738 Appends an item to the given @a parent.
2739 */
2740 wxDataViewItem AppendItem(const wxDataViewItem& parent,
2741 const wxString& text,
2742 int icon = -1,
2743 wxClientData* data = NULL);
2744
2745 /**
2746 Creates the control and a wxDataViewTreeStore as its internal model.
2747
2748 The default tree column created by this method is an editable column
2749 using wxDataViewIconTextRenderer as its renderer.
2750 */
2751 bool Create(wxWindow* parent, wxWindowID id,
2752 const wxPoint& pos = wxDefaultPosition,
2753 const wxSize& size = wxDefaultSize,
2754 long style = wxDV_NO_HEADER | wxDV_ROW_LINES,
2755 const wxValidator& validator = wxDefaultValidator);
2756
2757 /**
2758 Calls the identical method from wxDataViewTreeStore.
2759 */
2760 void DeleteAllItems();
2761
2762 /**
2763 Calls the identical method from wxDataViewTreeStore.
2764 */
2765 void DeleteChildren(const wxDataViewItem& item);
2766
2767 /**
2768 Calls the identical method from wxDataViewTreeStore.
2769 */
2770 void DeleteItem(const wxDataViewItem& item);
2771
2772 /**
2773 Calls the identical method from wxDataViewTreeStore.
2774 */
2775 int GetChildCount(const wxDataViewItem& parent) const;
2776
2777 /**
2778 Returns the image list.
2779 */
2780 wxImageList* GetImageList();
2781
2782 /**
2783 Calls the identical method from wxDataViewTreeStore.
2784 */
2785 wxClientData* GetItemData(const wxDataViewItem& item) const;
2786
2787 /**
2788 Calls the identical method from wxDataViewTreeStore.
2789 */
2790 const wxIcon& GetItemExpandedIcon(const wxDataViewItem& item) const;
2791
2792 /**
2793 Calls the identical method from wxDataViewTreeStore.
2794 */
2795 const wxIcon& GetItemIcon(const wxDataViewItem& item) const;
2796
2797 /**
2798 Calls the identical method from wxDataViewTreeStore.
2799 */
2800 wxString GetItemText(const wxDataViewItem& item) const;
2801
2802 /**
2803 Calls the identical method from wxDataViewTreeStore.
2804 */
2805 wxDataViewItem GetNthChild(const wxDataViewItem& parent,
2806 unsigned int pos) const;
2807
2808 //@{
2809 /**
2810 Returns the store.
2811 */
2812 wxDataViewTreeStore* GetStore();
2813 const wxDataViewTreeStore* GetStore() const;
2814 //@}
2815
2816 /**
2817 Calls the same method from wxDataViewTreeStore but uses
2818 an index position in the image list instead of a wxIcon.
2819 */
2820 wxDataViewItem InsertContainer(const wxDataViewItem& parent,
2821 const wxDataViewItem& previous,
2822 const wxString& text,
2823 int icon = -1,
2824 int expanded = -1,
2825 wxClientData* data = NULL);
2826
2827 /**
2828 Calls the same method from wxDataViewTreeStore but uses
2829 an index position in the image list instead of a wxIcon.
2830 */
2831 wxDataViewItem InsertItem(const wxDataViewItem& parent,
2832 const wxDataViewItem& previous,
2833 const wxString& text,
2834 int icon = -1,
2835 wxClientData* data = NULL);
2836
2837 /**
2838 Returns true if item is a container.
2839 */
2840 bool IsContainer( const wxDataViewItem& item );
2841
2842 /**
2843 Calls the same method from wxDataViewTreeStore but uses
2844 an index position in the image list instead of a wxIcon.
2845 */
2846 wxDataViewItem PrependContainer(const wxDataViewItem& parent,
2847 const wxString& text,
2848 int icon = -1,
2849 int expanded = -1,
2850 wxClientData* data = NULL);
2851
2852 /**
2853 Calls the same method from wxDataViewTreeStore but uses
2854 an index position in the image list instead of a wxIcon.
2855 */
2856 wxDataViewItem PrependItem(const wxDataViewItem& parent,
2857 const wxString& text,
2858 int icon = -1,
2859 wxClientData* data = NULL);
2860
2861 /**
2862 Sets the image list.
2863 */
2864 void SetImageList(wxImageList* imagelist);
2865
2866 /**
2867 Calls the identical method from wxDataViewTreeStore.
2868 */
2869 void SetItemData(const wxDataViewItem& item, wxClientData* data);
2870
2871 /**
2872 Calls the identical method from wxDataViewTreeStore.
2873 */
2874 void SetItemExpandedIcon(const wxDataViewItem& item,
2875 const wxIcon& icon);
2876
2877 /**
2878 Calls the identical method from wxDataViewTreeStore.
2879 */
2880 void SetItemIcon(const wxDataViewItem& item, const wxIcon& icon);
2881
2882 /**
2883 Calls the identical method from wxDataViewTreeStore.
2884 */
2885 void SetItemText(const wxDataViewItem& item,
2886 const wxString& text);
2887 };
2888
2889
2890 /**
2891 @class wxDataViewListStore
2892
2893 wxDataViewListStore is a specialised wxDataViewModel for storing
2894 a simple table of data. Since it derives from wxDataViewIndexListModel
2895 its data is be accessed by row (i.e. by index) instead of only
2896 by wxDataViewItem.
2897
2898 This class actually stores the values (therefore its name)
2899 and implements all virtual methods from the base classes so it can be
2900 used directly without having to derive any class from it, but it is
2901 mostly used from within wxDataViewListCtrl.
2902
2903 @library{wxadv}
2904 @category{dvc}
2905 */
2906
2907 class wxDataViewListStore: public wxDataViewIndexListModel
2908 {
2909 public:
2910 /**
2911 Constructor
2912 */
2913 wxDataViewListStore();
2914
2915 /**
2916 Destructor
2917 */
2918 ~wxDataViewListStore();
2919
2920 /**
2921 Prepends a data column.
2922
2923 @a variantype indicates the type of values store in the column.
2924
2925 This does not automatically fill in any (default) values in
2926 rows which exist in the store already.
2927 */
2928 void PrependColumn( const wxString &varianttype );
2929
2930 /**
2931 Inserts a data column before @a pos.
2932
2933 @a variantype indicates the type of values store in the column.
2934
2935 This does not automatically fill in any (default) values in
2936 rows which exist in the store already.
2937 */
2938 void InsertColumn( unsigned int pos, const wxString &varianttype );
2939
2940 /**
2941 Appends a data column.
2942
2943 @a variantype indicates the type of values store in the column.
2944
2945 This does not automatically fill in any (default) values in
2946 rows which exist in the store already.
2947 */
2948 void AppendColumn( const wxString &varianttype );
2949
2950 /**
2951 Appends an item (=row) and fills it with @a values.
2952
2953 The values must match the values specifies in the column
2954 in number and type. No (default) values are filled in
2955 automatically.
2956 */
2957 void AppendItem( const wxVector<wxVariant> &values, wxUIntPtr data = NULL );
2958
2959 /**
2960 Prepends an item (=row) and fills it with @a values.
2961
2962 The values must match the values specifies in the column
2963 in number and type. No (default) values are filled in
2964 automatically.
2965 */
2966 void PrependItem( const wxVector<wxVariant> &values, wxUIntPtr data = NULL );
2967
2968 /**
2969 Inserts an item (=row) and fills it with @a values.
2970
2971 The values must match the values specifies in the column
2972 in number and type. No (default) values are filled in
2973 automatically.
2974 */
2975 void InsertItem( unsigned int row, const wxVector<wxVariant> &values, wxUIntPtr data = NULL );
2976
2977 /**
2978 Delete the item (=row) at position @a pos.
2979 */
2980 void DeleteItem( unsigned pos );
2981
2982 /**
2983 Delete all item (=all rows) in the store.
2984 */
2985 void DeleteAllItems();
2986
2987 /**
2988 Returns the number of items (=rows) in the control
2989
2990 @since 2.9.4
2991 */
2992 unsigned int GetItemCount() const;
2993
2994 /**
2995 Returns the client data associated with the item.
2996
2997 @see SetItemData()
2998
2999 @since 2.9.4
3000 */
3001 wxUIntPtr GetItemData(const wxDataViewItem& item) const;
3002
3003 /**
3004 Overridden from wxDataViewModel
3005 */
3006 virtual unsigned int GetColumnCount() const;
3007
3008 /**
3009 Overridden from wxDataViewModel
3010 */
3011 virtual wxString GetColumnType( unsigned int col ) const;
3012
3013 /**
3014 Sets the client data associated with the item.
3015
3016 Notice that this class does @e not take ownership of the passed in
3017 pointer and will not delete it.
3018
3019 @see GetItemData()
3020
3021 @since 2.9.4
3022 */
3023 void SetItemData(const wxDataViewItem& item, wxUIntPtr data);
3024
3025 /**
3026 Overridden from wxDataViewIndexListModel
3027 */
3028 virtual void GetValueByRow( wxVariant &value,
3029 unsigned int row, unsigned int col ) const;
3030
3031 /**
3032 Overridden from wxDataViewIndexListModel
3033 */
3034 virtual bool SetValueByRow( const wxVariant &value,
3035 unsigned int row, unsigned int col );
3036 };
3037
3038
3039 /**
3040 @class wxDataViewTreeStore
3041
3042 wxDataViewTreeStore is a specialised wxDataViewModel for storing simple
3043 trees very much like wxTreeCtrl does and it offers a similar API.
3044
3045 This class actually stores the entire tree and the values (therefore its name)
3046 and implements all virtual methods from the base class so it can be used directly
3047 without having to derive any class from it, but it is mostly used from within
3048 wxDataViewTreeCtrl.
3049
3050 @library{wxadv}
3051 @category{dvc}
3052 */
3053 class wxDataViewTreeStore : public wxDataViewModel
3054 {
3055 public:
3056 /**
3057 Constructor. Creates the invisible root node internally.
3058 */
3059 wxDataViewTreeStore();
3060
3061 /**
3062 Destructor.
3063 */
3064 virtual ~wxDataViewTreeStore();
3065
3066 /**
3067 Append a container.
3068 */
3069 wxDataViewItem AppendContainer(const wxDataViewItem& parent,
3070 const wxString& text,
3071 const wxIcon& icon = wxNullIcon,
3072 const wxIcon& expanded = wxNullIcon,
3073 wxClientData* data = NULL);
3074
3075 /**
3076 Append an item.
3077 */
3078 wxDataViewItem AppendItem(const wxDataViewItem& parent,
3079 const wxString& text,
3080 const wxIcon& icon = wxNullIcon,
3081 wxClientData* data = NULL);
3082
3083 /**
3084 Delete all item in the model.
3085 */
3086 void DeleteAllItems();
3087
3088 /**
3089 Delete all children of the item, but not the item itself.
3090 */
3091 void DeleteChildren(const wxDataViewItem& item);
3092
3093 /**
3094 Delete this item.
3095 */
3096 void DeleteItem(const wxDataViewItem& item);
3097
3098 /**
3099 Return the number of children of item.
3100 */
3101 int GetChildCount(const wxDataViewItem& parent) const;
3102
3103 /**
3104 Returns the client data associated with the item.
3105 */
3106 wxClientData* GetItemData(const wxDataViewItem& item) const;
3107
3108 /**
3109 Returns the icon to display in expanded containers.
3110 */
3111 const wxIcon& GetItemExpandedIcon(const wxDataViewItem& item) const;
3112
3113 /**
3114 Returns the icon of the item.
3115 */
3116 const wxIcon& GetItemIcon(const wxDataViewItem& item) const;
3117
3118 /**
3119 Returns the text of the item.
3120 */
3121 wxString GetItemText(const wxDataViewItem& item) const;
3122
3123 /**
3124 Returns the nth child item of item.
3125 */
3126 wxDataViewItem GetNthChild(const wxDataViewItem& parent,
3127 unsigned int pos) const;
3128
3129 /**
3130 Inserts a container after @a previous.
3131 */
3132 wxDataViewItem InsertContainer(const wxDataViewItem& parent,
3133 const wxDataViewItem& previous,
3134 const wxString& text,
3135 const wxIcon& icon = wxNullIcon,
3136 const wxIcon& expanded = wxNullIcon,
3137 wxClientData* data = NULL);
3138
3139 /**
3140 Inserts an item after @a previous.
3141 */
3142 wxDataViewItem InsertItem(const wxDataViewItem& parent,
3143 const wxDataViewItem& previous,
3144 const wxString& text,
3145 const wxIcon& icon = wxNullIcon,
3146 wxClientData* data = NULL);
3147
3148 /**
3149 Inserts a container before the first child item or @a parent.
3150 */
3151 wxDataViewItem PrependContainer(const wxDataViewItem& parent,
3152 const wxString& text,
3153 const wxIcon& icon = wxNullIcon,
3154 const wxIcon& expanded = wxNullIcon,
3155 wxClientData* data = NULL);
3156
3157 /**
3158 Inserts an item before the first child item or @a parent.
3159 */
3160 wxDataViewItem PrependItem(const wxDataViewItem& parent,
3161 const wxString& text,
3162 const wxIcon& icon = wxNullIcon,
3163 wxClientData* data = NULL);
3164
3165 /**
3166 Sets the client data associated with the item.
3167 */
3168 void SetItemData(const wxDataViewItem& item, wxClientData* data);
3169
3170 /**
3171 Sets the expanded icon for the item.
3172 */
3173 void SetItemExpandedIcon(const wxDataViewItem& item,
3174 const wxIcon& icon);
3175
3176 /**
3177 Sets the icon for the item.
3178 */
3179 void SetItemIcon(const wxDataViewItem& item, const wxIcon& icon);
3180 };
3181
3182
3183 /**
3184 @class wxDataViewIconText
3185
3186 wxDataViewIconText is used by wxDataViewIconTextRenderer for data transfer.
3187 This class can be converted to and from a wxVariant.
3188
3189 @library{wxadv}
3190 @category{dvc}
3191 */
3192 class wxDataViewIconText : public wxObject
3193 {
3194 public:
3195 //@{
3196 /**
3197 Constructor.
3198 */
3199 wxDataViewIconText(const wxString& text = wxEmptyString,
3200 const wxIcon& icon = wxNullIcon);
3201 wxDataViewIconText(const wxDataViewIconText& other);
3202 //@}
3203
3204 /**
3205 Gets the icon.
3206 */
3207 const wxIcon& GetIcon() const;
3208
3209 /**
3210 Gets the text.
3211 */
3212 wxString GetText() const;
3213
3214 /**
3215 Set the icon.
3216 */
3217 void SetIcon(const wxIcon& icon);
3218
3219 /**
3220 Set the text.
3221 */
3222 void SetText(const wxString& text);
3223 };
3224
3225
3226
3227 /**
3228 @class wxDataViewEvent
3229
3230 This is the event class for the wxDataViewCtrl notifications.
3231
3232 @beginEventTable{wxDataViewEvent}
3233 @event{EVT_DATAVIEW_SELECTION_CHANGED(id, func)}
3234 Process a @c wxEVT_DATAVIEW_SELECTION_CHANGED event.
3235 @event{EVT_DATAVIEW_ITEM_ACTIVATED(id, func)}
3236 Process a @c wxEVT_DATAVIEW_ITEM_ACTIVATED event.
3237 @event{EVT_DATAVIEW_ITEM_EDITING_STARTED(id, func)}
3238 Process a @c wxEVT_DATAVIEW_ITEM_EDITING_STARTED event.
3239 @event{EVT_DATAVIEW_ITEM_EDITING_DONE(id, func)}
3240 Process a @c wxEVT_DATAVIEW_ITEM_EDITING_DONE event.
3241 @event{EVT_DATAVIEW_ITEM_COLLAPSING(id, func)}
3242 Process a @c wxEVT_DATAVIEW_ITEM_COLLAPSING event.
3243 @event{EVT_DATAVIEW_ITEM_COLLAPSED(id, func)}
3244 Process a @c wxEVT_DATAVIEW_ITEM_COLLAPSED event.
3245 @event{EVT_DATAVIEW_ITEM_EXPANDING(id, func)}
3246 Process a @c wxEVT_DATAVIEW_ITEM_EXPANDING event.
3247 @event{EVT_DATAVIEW_ITEM_EXPANDED(id, func)}
3248 Process a @c wxEVT_DATAVIEW_ITEM_EXPANDED event.
3249 @event{EVT_DATAVIEW_ITEM_VALUE_CHANGED(id, func)}
3250 Process a @c wxEVT_DATAVIEW_ITEM_VALUE_CHANGED event.
3251 @event{EVT_DATAVIEW_ITEM_CONTEXT_MENU(id, func)}
3252 Process a @c wxEVT_DATAVIEW_ITEM_CONTEXT_MENU event.
3253 @event{EVT_DATAVIEW_COLUMN_HEADER_CLICK(id, func)}
3254 Process a @c wxEVT_DATAVIEW_COLUMN_HEADER_CLICK event.
3255 @event{EVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK(id, func)}
3256 Process a @c wxEVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK event.
3257 @event{EVT_DATAVIEW_COLUMN_SORTED(id, func)}
3258 Process a @c wxEVT_DATAVIEW_COLUMN_SORTED event.
3259 @event{EVT_DATAVIEW_COLUMN_REORDERED(id, func)}
3260 Process a @c wxEVT_DATAVIEW_COLUMN_REORDERED event.
3261 Currently this even is only generated when using the native OSX
3262 version.
3263 @event{EVT_DATAVIEW_ITEM_BEGIN_DRAG(id, func)}
3264 Process a @c wxEVT_DATAVIEW_ITEM_BEGIN_DRAG event.
3265 @event{EVT_DATAVIEW_ITEM_DROP_POSSIBLE(id, func)}
3266 Process a @c wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE event.
3267 @event{EVT_DATAVIEW_ITEM_DROP(id, func)}
3268 Process a @c wxEVT_DATAVIEW_ITEM_DROP event.
3269 @event{EVT_DATAVIEW_CACHE_HINT(id, func)}
3270 Process a @c wxEVT_DATAVIEW_CACHE_HINT event.
3271 @endEventTable
3272
3273 @library{wxadv}
3274 @category{events,dvc}
3275 */
3276 class wxDataViewEvent : public wxNotifyEvent
3277 {
3278 public:
3279 /**
3280 Constructor. Typically used by wxWidgets internals only.
3281 */
3282 wxDataViewEvent(wxEventType commandType = wxEVT_NULL,
3283 int winid = 0);
3284
3285 /**
3286 Returns the position of the column in the control or -1
3287 if no column field was set by the event emitter.
3288 */
3289 int GetColumn() const;
3290
3291 /**
3292 Returns a pointer to the wxDataViewColumn from which
3293 the event was emitted or @NULL.
3294 */
3295 wxDataViewColumn* GetDataViewColumn() const;
3296
3297 /**
3298 Returns the wxDataViewModel associated with the event.
3299 */
3300 wxDataViewModel* GetModel() const;
3301
3302 /**
3303 Returns the position of a context menu event in screen coordinates.
3304 */
3305 wxPoint GetPosition() const;
3306
3307 /**
3308 Returns a reference to a value.
3309 */
3310 const wxVariant& GetValue() const;
3311
3312 /**
3313 Can be used to determine whether the new value is going to be accepted
3314 in wxEVT_DATAVIEW_ITEM_EDITING_DONE handler.
3315
3316 Returns @true if editing the item was cancelled or if the user tried to
3317 enter an invalid value (refused by wxDataViewRenderer::Validate()). If
3318 this method returns @false, it means that the value in the model is
3319 about to be changed to the new one.
3320
3321 Notice that wxEVT_DATAVIEW_ITEM_EDITING_DONE event handler can
3322 call wxNotifyEvent::Veto() to prevent this from happening.
3323
3324 Currently support for setting this field and for vetoing the change is
3325 only available in the generic version of wxDataViewCtrl, i.e. under MSW
3326 but not GTK nor OS X.
3327
3328 @since 2.9.3
3329 */
3330 bool IsEditCancelled() const;
3331
3332 /**
3333 Sets the column index associated with this event.
3334 */
3335 void SetColumn(int col);
3336
3337 /**
3338 For @c wxEVT_DATAVIEW_COLUMN_HEADER_CLICK only.
3339 */
3340 void SetDataViewColumn(wxDataViewColumn* col);
3341
3342 /**
3343 Sets the dataview model associated with this event.
3344 */
3345 void SetModel(wxDataViewModel* model);
3346
3347 /**
3348 Sets the value associated with this event.
3349 */
3350 void SetValue(const wxVariant& value);
3351
3352 /**
3353 Set wxDataObject for data transfer within a drag operation.
3354 */
3355 void SetDataObject( wxDataObject *obj );
3356
3357 /**
3358 Gets the wxDataFormat during a drop operation.
3359 */
3360 wxDataFormat GetDataFormat() const;
3361
3362 /**
3363 Gets the data size for a drop data transfer.
3364 */
3365 size_t GetDataSize() const;
3366
3367 /**
3368 Gets the data buffer for a drop data transfer.
3369 */
3370 void *GetDataBuffer() const;
3371
3372 /**
3373 Specify the kind of the drag operation to perform.
3374
3375 This method can be used inside a wxEVT_DATAVIEW_ITEM_BEGIN_DRAG
3376 handler in order to configure the drag operation. Valid values are
3377 ::wxDrag_CopyOnly (default), ::wxDrag_AllowMove (allow the data to be
3378 moved) and ::wxDrag_DefaultMove.
3379
3380 Currently it is only honoured by the generic version of wxDataViewCtrl
3381 (used e.g. under MSW) and not supported by the native GTK and OS X
3382 versions.
3383
3384 @see GetDropEffect()
3385
3386 @since 2.9.4
3387 */
3388 void SetDragFlags(int flags);
3389
3390 /**
3391 Returns the effect the user requested to happen to the dropped data.
3392
3393 This function can be used inside
3394 wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE and
3395 wxEVT_DATAVIEW_ITEM_DROP handlers and returns whether the user
3396 is trying to copy (the return value is ::wxDragCopy) or move (if the
3397 return value is ::wxDragMove) the data.
3398
3399 Currently this is only available when using the generic version of
3400 wxDataViewCtrl (used e.g. under MSW) and always returns ::wxDragNone in
3401 the GTK and OS X native versions.
3402
3403 @since 2.9.4
3404 */
3405 wxDragResult GetDropEffect() const;
3406
3407 /**
3408 Return the first row that will be displayed.
3409 */
3410 int GetCacheFrom() const;
3411
3412 /**
3413 Return the last row that will be displayed.
3414 */
3415 int GetCacheTo() const;
3416
3417
3418
3419
3420 wxDataViewItem GetItem() const;
3421 void SetItem( const wxDataViewItem &item );
3422 void SetEditCanceled(bool editCancelled);
3423 void SetPosition( int x, int y );
3424 void SetCache(int from, int to);
3425 wxDataObject *GetDataObject() const;
3426 void SetDataFormat( const wxDataFormat &format );
3427 void SetDataSize( size_t size );
3428 void SetDataBuffer( void* buf );
3429 int GetDragFlags() const;
3430 void SetDropEffect( wxDragResult effect );
3431
3432 };
3433