remove wxT() and _() macros to make the sample more readable; add File->Clear log...
[wxWidgets.git] / samples / dataview / mymodels.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: mymodels.h
3 // Purpose: wxDataViewCtrl wxWidgets sample
4 // Author: Robert Roebling
5 // Modified by: Francesco Montorsi, Bo Yang
6 // Created: 06/01/06
7 // RCS-ID: $Id$
8 // Copyright: (c) Robert Roebling
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
11
12
13 // ----------------------------------------------------------------------------
14 // MyMusicTreeModelNode: a node inside MyMusicTreeModel
15 // ----------------------------------------------------------------------------
16
17 class MyMusicTreeModelNode;
18 WX_DEFINE_ARRAY_PTR( MyMusicTreeModelNode*, MyMusicTreeModelNodePtrArray );
19
20 class MyMusicTreeModelNode
21 {
22 public:
23 MyMusicTreeModelNode( MyMusicTreeModelNode* parent,
24 const wxString &title, const wxString &artist,
25 unsigned int year )
26 {
27 m_parent = parent;
28
29 m_title = title;
30 m_artist = artist;
31 m_year = year;
32 m_quality = "good";
33
34 m_container = false;
35 }
36
37 MyMusicTreeModelNode( MyMusicTreeModelNode* parent,
38 const wxString &branch )
39 {
40 m_parent = parent;
41
42 m_title = branch;
43 m_year = -1;
44
45 m_container = true;
46 }
47
48 ~MyMusicTreeModelNode()
49 {
50 // free all our children nodes
51 size_t count = m_children.GetCount();
52 for (size_t i = 0; i < count; i++)
53 {
54 MyMusicTreeModelNode *child = m_children[i];
55 delete child;
56 }
57 }
58
59 bool IsContainer() const
60 { return m_container; }
61
62 MyMusicTreeModelNode* GetParent()
63 { return m_parent; }
64 MyMusicTreeModelNodePtrArray& GetChildren()
65 { return m_children; }
66 MyMusicTreeModelNode* GetNthChild( unsigned int n )
67 { return m_children.Item( n ); }
68 void Insert( MyMusicTreeModelNode* child, unsigned int n)
69 { m_children.Insert( child, n); }
70 void Append( MyMusicTreeModelNode* child )
71 { m_children.Add( child ); }
72 unsigned int GetChildCount() const
73 { return m_children.GetCount(); }
74
75 public: // public to avoid getters/setters
76 wxString m_title;
77 wxString m_artist;
78 int m_year;
79 wxString m_quality;
80
81 // TODO/FIXME:
82 // the GTK version of wxDVC (in particular wxDataViewCtrlInternal::ItemAdded)
83 // needs to know in advance if a node is or _will be_ a container.
84 // Thus implementing:
85 // bool IsContainer() const
86 // { return m_children.GetCount()>0; }
87 // doesn't work with wxGTK when MyMusicTreeModel::AddToClassical is called
88 // AND the classical node was removed (a new node temporary without children
89 // would be added to the control)
90 bool m_container;
91
92 private:
93 MyMusicTreeModelNode *m_parent;
94 MyMusicTreeModelNodePtrArray m_children;
95 };
96
97
98 // ----------------------------------------------------------------------------
99 // MyMusicTreeModel
100 // ----------------------------------------------------------------------------
101
102 /*
103 Implement this data model
104 Title Artist Year Judgement
105 --------------------------------------------------------------------------
106 1: My Music:
107 2: Pop music
108 3: You are not alone Michael Jackson 1995 good
109 4: Take a bow Madonna 1994 good
110 5: Classical music
111 6: Ninth Symphony Ludwig v. Beethoven 1824 good
112 7: German Requiem Johannes Brahms 1868 good
113 */
114
115 class MyMusicTreeModel: public wxDataViewModel
116 {
117 public:
118 MyMusicTreeModel();
119 ~MyMusicTreeModel()
120 {
121 delete m_root;
122 }
123
124 // helper method for wxLog
125
126 wxString GetTitle( const wxDataViewItem &item ) const;
127 int GetYear( const wxDataViewItem &item ) const;
128
129 // helper methods to change the model
130
131 void AddToClassical( const wxString &title, const wxString &artist,
132 unsigned int year );
133 void Delete( const wxDataViewItem &item );
134
135 wxDataViewItem GetNinthItem() const
136 {
137 return wxDataViewItem( m_ninth );
138 }
139
140 // override sorting to always sort branches ascendingly
141
142 int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2,
143 unsigned int column, bool ascending );
144
145 // implementation of base class virtuals to define model
146
147 virtual unsigned int GetColumnCount() const
148 {
149 return 6;
150 }
151
152 virtual wxString GetColumnType( unsigned int col ) const
153 {
154 if (col == 2)
155 return wxT("long");
156
157 return wxT("string");
158 }
159
160 virtual void GetValue( wxVariant &variant,
161 const wxDataViewItem &item, unsigned int col ) const;
162 virtual bool SetValue( const wxVariant &variant,
163 const wxDataViewItem &item, unsigned int col );
164
165 virtual wxDataViewItem GetParent( const wxDataViewItem &item ) const;
166 virtual bool IsContainer( const wxDataViewItem &item ) const;
167 virtual unsigned int GetChildren( const wxDataViewItem &parent,
168 wxDataViewItemArray &array ) const;
169
170 private:
171 MyMusicTreeModelNode* m_root;
172
173 // pointers to some "special" nodes of the tree:
174 MyMusicTreeModelNode* m_pop;
175 MyMusicTreeModelNode* m_classical;
176 MyMusicTreeModelNode* m_ninth;
177
178 // ??
179 bool m_classicalMusicIsKnownToControl;
180 };
181
182
183 // ----------------------------------------------------------------------------
184 // MyListModel
185 // ----------------------------------------------------------------------------
186
187 class MyListModel: public wxDataViewVirtualListModel
188 {
189 public:
190 MyListModel();
191
192 // helper methods to change the model
193
194 void Prepend( const wxString &text );
195 void DeleteItem( const wxDataViewItem &item );
196 void DeleteItems( const wxDataViewItemArray &items );
197 void AddMany();
198
199
200 // implementation of base class virtuals to define model
201
202 virtual unsigned int GetColumnCount() const
203 {
204 return 3;
205 }
206
207 virtual wxString GetColumnType( unsigned int col ) const
208 {
209 if (col == 1)
210 return wxT("wxDataViewIconText");
211
212 return wxT("string");
213 }
214
215 virtual unsigned int GetRowCount()
216 {
217 return m_array.GetCount();
218 }
219
220 virtual void GetValueByRow( wxVariant &variant,
221 unsigned int row, unsigned int col ) const;
222 virtual bool GetAttrByRow( unsigned int row, unsigned int col, wxDataViewItemAttr &attr );
223 virtual bool SetValueByRow( const wxVariant &variant,
224 unsigned int row, unsigned int col );
225
226 private:
227 wxArrayString m_array;
228 wxIcon m_icon[2];
229 int m_virtualItems;
230 };
231