1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxDataViewCtrl base classes
4 // Author: Robert Roebling
8 // Copyright: (c) Robert Roebling
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 #ifndef _WX_DATAVIEW_H_BASE_
13 #define _WX_DATAVIEW_H_BASE_
17 #if wxUSE_DATAVIEWCTRL
19 #include "wx/control.h"
20 #include "wx/textctrl.h"
21 #include "wx/bitmap.h"
22 #include "wx/variant.h"
25 #if defined(__WXGTK20__)
27 // #define wxUSE_GENERICDATAVIEWCTRL 1
28 #elif defined(__WXMAC__)
29 #define wxUSE_GENERICDATAVIEWCTRL 1
31 #define wxUSE_GENERICDATAVIEWCTRL 1
34 // ----------------------------------------------------------------------------
35 // wxDataViewCtrl flags
36 // ----------------------------------------------------------------------------
38 // ----------------------------------------------------------------------------
39 // wxDataViewCtrl globals
40 // ----------------------------------------------------------------------------
42 class WXDLLIMPEXP_ADV wxDataViewModel
;
43 class WXDLLIMPEXP_ADV wxDataViewListModel
;
44 class WXDLLIMPEXP_ADV wxDataViewCtrl
;
45 class WXDLLIMPEXP_ADV wxDataViewColumn
;
46 class WXDLLIMPEXP_ADV wxDataViewCell
;
48 extern WXDLLIMPEXP_DATA_ADV(const wxChar
) wxDataViewCtrlNameStr
[];
50 // ---------------------------------------------------------
52 // ---------------------------------------------------------
54 class WXDLLIMPEXP_ADV wxDataViewModel
: public wxObject
58 virtual ~wxDataViewModel() { }
61 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewModel
)
64 // ---------------------------------------------------------
65 // wxDataViewListModelNotifier
66 // ---------------------------------------------------------
69 class WXDLLIMPEXP_ADV wxDataViewListModelNotifier
: public wxObject
72 wxDataViewListModelNotifier() { }
73 virtual ~wxDataViewListModelNotifier() { }
75 virtual bool RowAppended() = 0;
76 virtual bool RowPrepended() = 0;
77 virtual bool RowInserted( size_t before
) = 0;
78 virtual bool RowDeleted( size_t row
) = 0;
79 virtual bool RowChanged( size_t row
) = 0;
80 virtual bool ValueChanged( size_t col
, size_t row
) = 0;
81 virtual bool RowsReordered( size_t *new_order
) = 0;
82 virtual bool Cleared() = 0;
84 void SetOwner( wxDataViewListModel
*owner
) { m_owner
= owner
; }
85 wxDataViewListModel
*GetOwner() { return m_owner
; }
88 wxDataViewListModel
*m_owner
;
91 // ---------------------------------------------------------
92 // wxDataViewListModel
93 // ---------------------------------------------------------
95 class WXDLLIMPEXP_ADV wxDataViewViewingColumn
: public wxObject
98 wxDataViewViewingColumn( wxDataViewColumn
*view_column
, size_t model_column
)
100 m_viewColumn
= view_column
;
101 m_modelColumn
= model_column
;
104 wxDataViewColumn
*m_viewColumn
;
105 size_t m_modelColumn
;
108 class WXDLLIMPEXP_ADV wxDataViewListModel
: public wxDataViewModel
111 wxDataViewListModel();
112 virtual ~wxDataViewListModel();
114 virtual size_t GetNumberOfRows() = 0;
115 virtual size_t GetNumberOfCols() = 0;
116 // return type as reported by wxVariant
117 virtual wxString
GetColType( size_t col
) = 0;
118 // get value into a wxVariant
119 virtual void GetValue( wxVariant
&variant
, size_t col
, size_t row
) = 0;
120 // set value, call ValueChanged() afterwards!
121 virtual bool SetValue( wxVariant
&variant
, size_t col
, size_t row
) = 0;
123 // delegated notifiers
124 virtual bool RowAppended();
125 virtual bool RowPrepended();
126 virtual bool RowInserted( size_t before
);
127 virtual bool RowDeleted( size_t row
);
128 virtual bool RowChanged( size_t row
);
129 virtual bool ValueChanged( size_t col
, size_t row
);
130 virtual bool RowsReordered( size_t *new_order
);
131 virtual bool Cleared();
134 virtual void AddViewingColumn( wxDataViewColumn
*view_column
, size_t model_column
);
135 virtual void RemoveViewingColumn( wxDataViewColumn
*column
);
137 virtual void AddNotifier( wxDataViewListModelNotifier
*notifier
);
138 virtual void RemoveNotifier( wxDataViewListModelNotifier
*notifier
);
141 wxList m_viewingColumns
;
144 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewListModel
)
147 // ---------------------------------------------------------
148 // wxDataViewSortedListModel
149 // ---------------------------------------------------------
151 typedef int (wxCALLBACK
*wxDataViewListModelCompare
)
152 (size_t row1
, size_t row2
, size_t col
, wxDataViewListModel
* model
);
154 WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_SIZE_T(size_t, wxDataViewSortedIndexArray
, WXDLLIMPEXP_ADV
);
156 class WXDLLIMPEXP_ADV wxDataViewSortedListModel
: public wxDataViewListModel
159 wxDataViewSortedListModel( wxDataViewListModel
*child
);
160 virtual ~wxDataViewSortedListModel();
162 virtual size_t GetNumberOfRows();
163 virtual size_t GetNumberOfCols();
164 // return type as reported by wxVariant
165 virtual wxString
GetColType( size_t col
);
166 // get value into a wxVariant
167 virtual void GetValue( wxVariant
&variant
, size_t col
, size_t row
);
168 // set value, call ValueChanged() afterwards!
169 virtual bool SetValue( wxVariant
&variant
, size_t col
, size_t row
);
172 virtual bool RowAppended();
173 virtual bool RowPrepended();
174 virtual bool RowInserted( size_t before
);
175 virtual bool RowDeleted( size_t row
);
176 virtual bool RowChanged( size_t row
);
177 virtual bool ValueChanged( size_t col
, size_t row
);
178 virtual bool RowsReordered( size_t *new_order
);
179 virtual bool Cleared();
181 // called if child's notifiers are called
182 bool ChildRowAppended();
183 bool ChildRowPrepended();
184 bool ChildRowInserted( size_t before
);
185 bool ChildRowDeleted( size_t row
);
186 bool ChildRowChanged( size_t row
);
187 bool ChildValueChanged( size_t col
, size_t row
);
188 bool ChildRowsReordered( size_t *new_order
);
191 virtual void Resort();
194 wxDataViewListModel
*m_child
;
195 wxDataViewSortedIndexArray m_array
;
196 wxDataViewListModelNotifier
*m_notifierOnChild
;
199 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewSortedListModel
)
202 // ---------------------------------------------------------
203 // wxDataViewCellBase
204 // ---------------------------------------------------------
206 enum wxDataViewCellMode
208 wxDATAVIEW_CELL_INERT
,
209 wxDATAVIEW_CELL_ACTIVATABLE
,
210 wxDATAVIEW_CELL_EDITABLE
213 enum wxDataViewCellRenderState
215 wxDATAVIEW_CELL_SELECTED
= 1,
216 wxDATAVIEW_CELL_PRELIT
= 2,
217 wxDATAVIEW_CELL_INSENSITIVE
= 4,
218 wxDATAVIEW_CELL_FOCUSED
= 8
221 class WXDLLIMPEXP_ADV wxDataViewCellBase
: public wxObject
224 wxDataViewCellBase( const wxString
&varianttype
, wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
);
226 virtual bool SetValue( const wxVariant
& WXUNUSED(value
) ) { return true; }
227 virtual bool GetValue( wxVariant
& WXUNUSED(value
) ) { return true; }
228 virtual bool Validate( wxVariant
& WXUNUSED(value
) ) { return true; }
230 wxString
GetVariantType() { return m_variantType
; }
231 wxDataViewCellMode
GetMode() { return m_mode
; }
233 void SetOwner( wxDataViewColumn
*owner
) { m_owner
= owner
; }
234 wxDataViewColumn
* GetOwner() { return m_owner
; }
237 wxDataViewCellMode m_mode
;
238 wxString m_variantType
;
239 wxDataViewColumn
*m_owner
;
242 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCellBase
)
245 // ---------------------------------------------------------
246 // wxDataViewColumnBase
247 // ---------------------------------------------------------
249 enum wxDataViewColumnFlags
251 wxDATAVIEW_COL_RESIZABLE
= 1,
252 wxDATAVIEW_COL_SORTABLE
= 2,
253 wxDATAVIEW_COL_HIDDEN
= 4
256 enum wxDataViewColumnSizing
258 wxDATAVIEW_COL_WIDTH_FIXED
,
259 wxDATAVIEW_COL_WIDTH_AUTO
,
260 wxDATAVIEW_COL_WIDTH_GROW
263 class WXDLLIMPEXP_ADV wxDataViewColumnBase
: public wxObject
266 wxDataViewColumnBase( const wxString
&title
, wxDataViewCell
*cell
, size_t model_column
,
267 int fixed_width
= 80, wxDataViewColumnSizing sizing
= wxDATAVIEW_COL_WIDTH_FIXED
, int flags
= 0 );
268 virtual ~wxDataViewColumnBase();
270 virtual void SetTitle( const wxString
&title
);
271 virtual wxString
GetTitle();
273 wxDataViewCell
* GetCell() { return m_cell
; }
275 size_t GetModelColumn() { return m_model_column
; }
277 void SetOwner( wxDataViewCtrl
*owner
) { m_owner
= owner
; }
278 wxDataViewCtrl
*GetOwner() { return m_owner
; }
280 virtual int GetWidth() = 0;
282 virtual void SetFixedWidth( int width
) = 0;
283 virtual int GetFixedWidth() = 0;
286 wxDataViewCtrl
*m_ctrl
;
287 wxDataViewCell
*m_cell
;
291 wxDataViewCtrl
*m_owner
;
294 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewColumnBase
)
297 // ---------------------------------------------------------
298 // wxDataViewCtrlBase
299 // ---------------------------------------------------------
301 #define wxDV_SINGLE 0x0000 // for convenience
302 #define wxDV_MULTIPLE 0x0020 // can select multiple items
304 class WXDLLIMPEXP_ADV wxDataViewCtrlBase
: public wxControl
307 wxDataViewCtrlBase();
308 virtual ~wxDataViewCtrlBase();
310 virtual bool AssociateModel( wxDataViewListModel
*model
);
311 wxDataViewListModel
* GetModel();
313 virtual bool AppendTextColumn( const wxString
&label
, size_t model_column
);
314 virtual bool AppendToggleColumn( const wxString
&label
, size_t model_column
);
315 virtual bool AppendProgressColumn( const wxString
&label
, size_t model_column
);
316 virtual bool AppendDateColumn( const wxString
&label
, size_t model_column
);
317 virtual bool AppendColumn( wxDataViewColumn
*col
);
318 virtual size_t GetNumberOfColumns();
319 virtual bool DeleteColumn( size_t pos
);
320 virtual bool ClearColumns();
321 virtual wxDataViewColumn
* GetColumn( size_t pos
);
324 wxDataViewListModel
*m_model
;
328 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCtrlBase
)
331 #if defined(wxUSE_GENERICDATAVIEWCTRL)
332 #include "wx/generic/dataview.h"
333 #elif defined(__WXGTK20__)
334 #include "wx/gtk/dataview.h"
335 #elif defined(__WXMAC__)
337 // #include "wx/mac/dataview.h"
339 #include "wx/generic/dataview.h"
342 #endif // wxUSE_DATAVIEWCTRL
345 // _WX_DATAVIEW_H_BASE_