]> git.saurik.com Git - wxWidgets.git/blob - include/wx/dataview.h
Added wxDataViewSortedListModel, which doesn't work
[wxWidgets.git] / include / wx / dataview.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/dataview.h
3 // Purpose: wxDataViewCtrl base classes
4 // Author: Robert Roebling
5 // Modified by:
6 // Created: 08.01.06
7 // RCS-ID: $Id$
8 // Copyright: (c) Robert Roebling
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifndef _WX_DATAVIEW_H_BASE_
13 #define _WX_DATAVIEW_H_BASE_
14
15 #include "wx/defs.h"
16
17 #if wxUSE_DATAVIEWCTRL
18
19 #include "wx/control.h"
20 #include "wx/textctrl.h"
21 #include "wx/bitmap.h"
22 #include "wx/variant.h"
23
24 // ----------------------------------------------------------------------------
25 // wxDataViewCtrl flags
26 // ----------------------------------------------------------------------------
27
28 // ----------------------------------------------------------------------------
29 // wxDataViewCtrl globals
30 // ----------------------------------------------------------------------------
31
32 class WXDLLIMPEXP_CORE wxDataViewCtrl;
33 class WXDLLIMPEXP_CORE wxDataViewColumn;
34 class WXDLLIMPEXP_CORE wxDataViewCell;
35
36 extern WXDLLEXPORT_DATA(const wxChar) wxDataViewCtrlNameStr[];
37
38 // ---------------------------------------------------------
39 // wxDataViewModel
40 // ---------------------------------------------------------
41
42 class wxDataViewModel: public wxObject
43 {
44 public:
45 wxDataViewModel() { }
46 virtual ~wxDataViewModel() { }
47
48 protected:
49 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewModel)
50 };
51
52 // ---------------------------------------------------------
53 // wxDataViewListModelNotifier
54 // ---------------------------------------------------------
55
56 class wxDataViewListModelNotifier
57 {
58 public:
59 wxDataViewListModelNotifier() { }
60 virtual ~wxDataViewListModelNotifier() { }
61
62 virtual bool RowAppended() = 0;
63 virtual bool RowPrepended() = 0;
64 virtual bool RowInserted( size_t before ) = 0;
65 virtual bool RowDeleted( size_t row ) = 0;
66 virtual bool RowChanged( size_t row ) = 0;
67 virtual bool ValueChanged( size_t col, size_t row ) = 0;
68 virtual bool Cleared() = 0;
69 virtual bool ValueChanged( wxDataViewColumn *view_column, size_t model_column, size_t row ) = 0;
70 };
71
72 // ---------------------------------------------------------
73 // wxDataViewListModel
74 // ---------------------------------------------------------
75
76 class wxDataViewListModel: public wxDataViewModel
77 {
78 public:
79 wxDataViewListModel();
80 virtual ~wxDataViewListModel();
81
82 virtual size_t GetNumberOfRows() = 0;
83 virtual size_t GetNumberOfCols() = 0;
84 // return type as reported by wxVariant
85 virtual wxString GetColType( size_t col ) = 0;
86 // get value into a wxVariant
87 virtual wxVariant GetValue( size_t col, size_t row ) = 0;
88 // set value, call ValueChanged() afterwards!
89 virtual bool SetValue( wxVariant &variant, size_t col, size_t row ) = 0;
90
91 // delegated notifiers
92 virtual bool RowAppended();
93 virtual bool RowPrepended();
94 virtual bool RowInserted( size_t before );
95 virtual bool RowDeleted( size_t row );
96 virtual bool RowChanged( size_t row );
97 virtual bool ValueChanged( size_t col, size_t row );
98 virtual bool Cleared();
99
100 // Used internally
101 virtual void AddViewingColumn( wxDataViewColumn *view_column, size_t model_column );
102 virtual void RemoveViewingColumn( wxDataViewColumn *column );
103
104 // Used internally
105 virtual void SetNotifier( wxDataViewListModelNotifier *notifier );
106 virtual wxDataViewListModelNotifier* GetNotifier();
107
108 private:
109 wxDataViewListModelNotifier *m_notifier;
110 wxList m_viewingColumns;
111
112 protected:
113 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewListModel)
114 };
115
116 // ---------------------------------------------------------
117 // wxDataViewSortedListModel
118 // ---------------------------------------------------------
119
120 typedef int (wxCALLBACK *wxDataViewListModelCompare)
121 (size_t row1, size_t row2, size_t col, wxDataViewListModel* model );
122
123 WX_DEFINE_SORTED_EXPORTED_ARRAY_SIZE_T(size_t, wxDataViewSortedIndexArray );
124
125 class wxDataViewSortedListModel: public wxDataViewListModel
126 {
127 public:
128 wxDataViewSortedListModel( wxDataViewListModel *child );
129 virtual ~wxDataViewSortedListModel();
130
131 virtual size_t GetNumberOfRows();
132 virtual size_t GetNumberOfCols();
133 // return type as reported by wxVariant
134 virtual wxString GetColType( size_t col );
135 // get value into a wxVariant
136 virtual wxVariant GetValue( size_t col, size_t row );
137 // set value, call ValueChanged() afterwards!
138 virtual bool SetValue( wxVariant &variant, size_t col, size_t row );
139
140 // delegated notifiers
141 virtual bool RowAppended();
142 virtual bool RowPrepended();
143 virtual bool RowInserted( size_t before );
144 virtual bool RowDeleted( size_t row );
145 virtual bool RowChanged( size_t row );
146 virtual bool ValueChanged( size_t col, size_t row );
147 virtual bool Cleared();
148
149 // Used internally
150 void SetNotifier( wxDataViewListModelNotifier *notifier );
151 wxDataViewListModelNotifier* GetNotifier();
152
153 private:
154 wxDataViewListModel *m_child;
155 wxDataViewSortedIndexArray m_array;
156
157 protected:
158 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewSortedListModel)
159 };
160
161 // ---------------------------------------------------------
162 // wxDataViewCellBase
163 // ---------------------------------------------------------
164
165 enum wxDataViewCellMode
166 {
167 wxDATAVIEW_CELL_INERT,
168 wxDATAVIEW_CELL_ACTIVATABLE,
169 wxDATAVIEW_CELL_EDITABLE
170 };
171
172 enum wxDataViewCellRenderState
173 {
174 wxDATAVIEW_CELL_SELECTED = 1,
175 wxDATAVIEW_CELL_PRELIT = 2,
176 wxDATAVIEW_CELL_INSENSITIVE = 4,
177 wxDATAVIEW_CELL_FOCUSED = 8
178 };
179
180 class wxDataViewCellBase: public wxObject
181 {
182 public:
183 wxDataViewCellBase( const wxString &varianttype, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT );
184
185 virtual bool SetValue( const wxVariant &value ) { return true; }
186 virtual bool GetValue( wxVariant &value ) { return true; }
187 virtual bool Validate( wxVariant &value ) { return true; }
188
189 wxString GetVariantType() { return m_variantType; }
190
191 void SetOwner( wxDataViewColumn *owner ) { m_owner = owner; }
192 wxDataViewColumn* GetOwner() { return m_owner; }
193
194 protected:
195 wxDataViewCellMode m_mode;
196 wxString m_variantType;
197 wxDataViewColumn *m_owner;
198
199 protected:
200 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCellBase)
201 };
202
203 // ---------------------------------------------------------
204 // wxDataViewColumnBase
205 // ---------------------------------------------------------
206
207 enum wxDataViewColumnFlags
208 {
209 wxDATAVIEW_COL_RESIZABLE = 1,
210 wxDATAVIEW_COL_SORTABLE = 2,
211 wxDATAVIEW_COL_HIDDEN = 4
212 };
213
214 class wxDataViewColumnBase: public wxObject
215 {
216 public:
217 wxDataViewColumnBase( const wxString &title, wxDataViewCell *cell, size_t model_column, int flags = 0 );
218 ~wxDataViewColumnBase();
219
220 virtual void SetTitle( const wxString &title );
221 virtual wxString GetTitle();
222
223 wxDataViewCell* GetCell() { return m_cell; }
224
225 size_t GetModelColumn() { return m_model_column; }
226
227 void SetOwner( wxDataViewCtrl *owner ) { m_owner = owner; }
228 wxDataViewCtrl *GetOwner() { return m_owner; }
229
230 private:
231 wxDataViewCtrl *m_ctrl;
232 wxDataViewCell *m_cell;
233 int m_model_column;
234 int m_flags;
235 wxString m_title;
236 wxDataViewCtrl *m_owner;
237
238 protected:
239 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewColumnBase)
240 };
241
242 // ---------------------------------------------------------
243 // wxDataViewCtrlBase
244 // ---------------------------------------------------------
245
246 class wxDataViewCtrlBase: public wxControl
247 {
248 public:
249 wxDataViewCtrlBase();
250 ~wxDataViewCtrlBase();
251
252 virtual bool AssociateModel( wxDataViewListModel *model );
253 wxDataViewListModel* GetModel();
254
255 virtual bool AppendTextColumn( const wxString &label, size_t model_column );
256 virtual bool AppendToggleColumn( const wxString &label, size_t model_column );
257 virtual bool AppendProgressColumn( const wxString &label, size_t model_column );
258 virtual bool AppendDateColumn( const wxString &label, size_t model_column );
259 virtual bool AppendColumn( wxDataViewColumn *col );
260 virtual size_t GetNumberOfColumns();
261 virtual bool DeleteColumn( size_t pos );
262 virtual bool ClearColumns();
263 virtual wxDataViewColumn* GetColumn( size_t pos );
264
265 private:
266 wxDataViewListModel *m_model;
267 wxList m_cols;
268
269 protected:
270 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCtrlBase)
271 };
272
273 #if defined(__WXGTK20__)
274 #include "wx/gtk/dataview.h"
275 #elif defined(__WXMAC__)
276 #include "wx/mac/dataview.h"
277 #else
278 #include "wx/generic/dataview.h"
279 #endif
280
281 #endif // wxUSE_DATAVIEWCTRL
282
283 #endif
284 // _WX_DATAVIEW_H_BASE_