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"
24 // ----------------------------------------------------------------------------
25 // wxDataViewCtrl flags
26 // ----------------------------------------------------------------------------
28 // ----------------------------------------------------------------------------
29 // wxDataViewCtrl globals
30 // ----------------------------------------------------------------------------
32 class WXDLLIMPEXP_CORE wxDataViewModel
;
33 class WXDLLIMPEXP_CORE wxDataViewListModel
;
34 class WXDLLIMPEXP_CORE wxDataViewCtrl
;
35 class WXDLLIMPEXP_CORE wxDataViewColumn
;
36 class WXDLLIMPEXP_CORE wxDataViewCell
;
38 extern WXDLLEXPORT_DATA(const wxChar
) wxDataViewCtrlNameStr
[];
40 // ---------------------------------------------------------
42 // ---------------------------------------------------------
44 class wxDataViewModel
: public wxObject
48 virtual ~wxDataViewModel() { }
51 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewModel
)
54 // ---------------------------------------------------------
55 // wxDataViewListModelNotifier
56 // ---------------------------------------------------------
59 class wxDataViewListModelNotifier
: public wxObject
62 wxDataViewListModelNotifier() { }
63 virtual ~wxDataViewListModelNotifier() { }
65 virtual bool RowAppended() = 0;
66 virtual bool RowPrepended() = 0;
67 virtual bool RowInserted( size_t before
) = 0;
68 virtual bool RowDeleted( size_t row
) = 0;
69 virtual bool RowChanged( size_t row
) = 0;
70 virtual bool ValueChanged( size_t col
, size_t row
) = 0;
71 virtual bool Cleared() = 0;
73 void SetOwner( wxDataViewListModel
*owner
) { m_owner
= owner
; }
74 wxDataViewListModel
*GetOwner() { return m_owner
; }
77 wxDataViewListModel
*m_owner
;
80 // ---------------------------------------------------------
81 // wxDataViewListModel
82 // ---------------------------------------------------------
84 class wxDataViewViewingColumn
: public wxObject
87 wxDataViewViewingColumn( wxDataViewColumn
*view_column
, size_t model_column
)
89 m_viewColumn
= view_column
;
90 m_modelColumn
= model_column
;
93 wxDataViewColumn
*m_viewColumn
;
97 class wxDataViewListModel
: public wxDataViewModel
100 wxDataViewListModel();
101 virtual ~wxDataViewListModel();
103 virtual size_t GetNumberOfRows() = 0;
104 virtual size_t GetNumberOfCols() = 0;
105 // return type as reported by wxVariant
106 virtual wxString
GetColType( size_t col
) = 0;
107 // get value into a wxVariant
108 virtual wxVariant
GetValue( size_t col
, size_t row
) = 0;
109 // set value, call ValueChanged() afterwards!
110 virtual bool SetValue( wxVariant
&variant
, size_t col
, size_t row
) = 0;
112 // delegated notifiers
113 virtual bool RowAppended();
114 virtual bool RowPrepended();
115 virtual bool RowInserted( size_t before
);
116 virtual bool RowDeleted( size_t row
);
117 virtual bool RowChanged( size_t row
);
118 virtual bool ValueChanged( size_t col
, size_t row
);
119 virtual bool Cleared();
122 virtual void AddViewingColumn( wxDataViewColumn
*view_column
, size_t model_column
);
123 virtual void RemoveViewingColumn( wxDataViewColumn
*column
);
125 virtual void AddNotifier( wxDataViewListModelNotifier
*notifier
);
126 virtual void RemoveNotifier( wxDataViewListModelNotifier
*notifier
);
129 wxList m_viewingColumns
;
132 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewListModel
)
135 // ---------------------------------------------------------
136 // wxDataViewSortedListModel
137 // ---------------------------------------------------------
139 typedef int (wxCALLBACK
*wxDataViewListModelCompare
)
140 (size_t row1
, size_t row2
, size_t col
, wxDataViewListModel
* model
);
142 WX_DEFINE_SORTED_EXPORTED_ARRAY_SIZE_T(size_t, wxDataViewSortedIndexArray
);
144 class wxDataViewSortedListModel
: public wxDataViewListModel
147 wxDataViewSortedListModel( wxDataViewListModel
*child
);
148 virtual ~wxDataViewSortedListModel();
150 virtual size_t GetNumberOfRows();
151 virtual size_t GetNumberOfCols();
152 // return type as reported by wxVariant
153 virtual wxString
GetColType( size_t col
);
154 // get value into a wxVariant
155 virtual wxVariant
GetValue( size_t col
, size_t row
);
156 // set value, call ValueChanged() afterwards!
157 virtual bool SetValue( wxVariant
&variant
, size_t col
, size_t row
);
159 // delegated notifiers
160 virtual bool RowAppended();
161 virtual bool RowPrepended();
162 virtual bool RowInserted( size_t before
);
163 virtual bool RowDeleted( size_t row
);
164 virtual bool RowChanged( size_t row
);
165 virtual bool ValueChanged( size_t col
, size_t row
);
166 virtual bool Cleared();
168 virtual void Resort();
171 wxDataViewListModel
*m_child
;
172 wxDataViewSortedIndexArray m_array
;
175 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewSortedListModel
)
178 // ---------------------------------------------------------
179 // wxDataViewCellBase
180 // ---------------------------------------------------------
182 enum wxDataViewCellMode
184 wxDATAVIEW_CELL_INERT
,
185 wxDATAVIEW_CELL_ACTIVATABLE
,
186 wxDATAVIEW_CELL_EDITABLE
189 enum wxDataViewCellRenderState
191 wxDATAVIEW_CELL_SELECTED
= 1,
192 wxDATAVIEW_CELL_PRELIT
= 2,
193 wxDATAVIEW_CELL_INSENSITIVE
= 4,
194 wxDATAVIEW_CELL_FOCUSED
= 8
197 class wxDataViewCellBase
: public wxObject
200 wxDataViewCellBase( const wxString
&varianttype
, wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
);
202 virtual bool SetValue( const wxVariant
&value
) { return true; }
203 virtual bool GetValue( wxVariant
&value
) { return true; }
204 virtual bool Validate( wxVariant
&value
) { return true; }
206 wxString
GetVariantType() { return m_variantType
; }
208 void SetOwner( wxDataViewColumn
*owner
) { m_owner
= owner
; }
209 wxDataViewColumn
* GetOwner() { return m_owner
; }
212 wxDataViewCellMode m_mode
;
213 wxString m_variantType
;
214 wxDataViewColumn
*m_owner
;
217 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCellBase
)
220 // ---------------------------------------------------------
221 // wxDataViewColumnBase
222 // ---------------------------------------------------------
224 enum wxDataViewColumnFlags
226 wxDATAVIEW_COL_RESIZABLE
= 1,
227 wxDATAVIEW_COL_SORTABLE
= 2,
228 wxDATAVIEW_COL_HIDDEN
= 4
231 class wxDataViewColumnBase
: public wxObject
234 wxDataViewColumnBase( const wxString
&title
, wxDataViewCell
*cell
, size_t model_column
, int flags
= 0 );
235 ~wxDataViewColumnBase();
237 virtual void SetTitle( const wxString
&title
);
238 virtual wxString
GetTitle();
240 wxDataViewCell
* GetCell() { return m_cell
; }
242 size_t GetModelColumn() { return m_model_column
; }
244 void SetOwner( wxDataViewCtrl
*owner
) { m_owner
= owner
; }
245 wxDataViewCtrl
*GetOwner() { return m_owner
; }
248 wxDataViewCtrl
*m_ctrl
;
249 wxDataViewCell
*m_cell
;
253 wxDataViewCtrl
*m_owner
;
256 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewColumnBase
)
259 // ---------------------------------------------------------
260 // wxDataViewCtrlBase
261 // ---------------------------------------------------------
263 class wxDataViewCtrlBase
: public wxControl
266 wxDataViewCtrlBase();
267 ~wxDataViewCtrlBase();
269 virtual bool AssociateModel( wxDataViewListModel
*model
);
270 wxDataViewListModel
* GetModel();
272 virtual bool AppendTextColumn( const wxString
&label
, size_t model_column
);
273 virtual bool AppendToggleColumn( const wxString
&label
, size_t model_column
);
274 virtual bool AppendProgressColumn( const wxString
&label
, size_t model_column
);
275 virtual bool AppendDateColumn( const wxString
&label
, size_t model_column
);
276 virtual bool AppendColumn( wxDataViewColumn
*col
);
277 virtual size_t GetNumberOfColumns();
278 virtual bool DeleteColumn( size_t pos
);
279 virtual bool ClearColumns();
280 virtual wxDataViewColumn
* GetColumn( size_t pos
);
283 wxDataViewListModel
*m_model
;
287 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCtrlBase
)
290 #if defined(__WXGTK20__)
291 #include "wx/gtk/dataview.h"
292 #elif defined(__WXMAC__)
293 #include "wx/mac/dataview.h"
295 #include "wx/generic/dataview.h"
298 #endif // wxUSE_DATAVIEWCTRL
301 // _WX_DATAVIEW_H_BASE_