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 wxDataViewCtrl
;
33 class WXDLLIMPEXP_CORE wxDataViewColumn
;
34 class WXDLLIMPEXP_CORE wxDataViewCell
;
36 extern WXDLLEXPORT_DATA(const wxChar
) wxDataViewCtrlNameStr
[];
38 // ---------------------------------------------------------
40 // ---------------------------------------------------------
42 class wxDataViewModel
: public wxObject
46 virtual ~wxDataViewModel() { }
49 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewModel
)
52 // ---------------------------------------------------------
53 // wxDataViewListModelNotifier
54 // ---------------------------------------------------------
56 class wxDataViewListModelNotifier
59 wxDataViewListModelNotifier() { }
60 virtual ~wxDataViewListModelNotifier() { }
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;
72 // ---------------------------------------------------------
73 // wxDataViewListModel
74 // ---------------------------------------------------------
76 class wxDataViewListModel
: public wxDataViewModel
79 wxDataViewListModel();
80 virtual ~wxDataViewListModel();
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;
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();
101 virtual void AddViewingColumn( wxDataViewColumn
*view_column
, size_t model_column
);
102 virtual void RemoveViewingColumn( wxDataViewColumn
*column
);
105 virtual void SetNotifier( wxDataViewListModelNotifier
*notifier
);
106 virtual wxDataViewListModelNotifier
* GetNotifier();
109 wxDataViewListModelNotifier
*m_notifier
;
110 wxList m_viewingColumns
;
113 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewListModel
)
116 // ---------------------------------------------------------
117 // wxDataViewSortedListModel
118 // ---------------------------------------------------------
120 typedef int (wxCALLBACK
*wxDataViewListModelCompare
)
121 (size_t row1
, size_t row2
, size_t col
, wxDataViewListModel
* model
);
123 WX_DEFINE_SORTED_EXPORTED_ARRAY_SIZE_T(size_t, wxDataViewSortedIndexArray
);
125 class wxDataViewSortedListModel
: public wxDataViewListModel
128 wxDataViewSortedListModel( wxDataViewListModel
*child
);
129 virtual ~wxDataViewSortedListModel();
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
);
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();
150 void SetNotifier( wxDataViewListModelNotifier
*notifier
);
151 wxDataViewListModelNotifier
* GetNotifier();
154 wxDataViewListModel
*m_child
;
155 wxDataViewSortedIndexArray m_array
;
158 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewSortedListModel
)
161 // ---------------------------------------------------------
162 // wxDataViewCellBase
163 // ---------------------------------------------------------
165 enum wxDataViewCellMode
167 wxDATAVIEW_CELL_INERT
,
168 wxDATAVIEW_CELL_ACTIVATABLE
,
169 wxDATAVIEW_CELL_EDITABLE
172 enum wxDataViewCellRenderState
174 wxDATAVIEW_CELL_SELECTED
= 1,
175 wxDATAVIEW_CELL_PRELIT
= 2,
176 wxDATAVIEW_CELL_INSENSITIVE
= 4,
177 wxDATAVIEW_CELL_FOCUSED
= 8
180 class wxDataViewCellBase
: public wxObject
183 wxDataViewCellBase( const wxString
&varianttype
, wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
);
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; }
189 wxString
GetVariantType() { return m_variantType
; }
191 void SetOwner( wxDataViewColumn
*owner
) { m_owner
= owner
; }
192 wxDataViewColumn
* GetOwner() { return m_owner
; }
195 wxDataViewCellMode m_mode
;
196 wxString m_variantType
;
197 wxDataViewColumn
*m_owner
;
200 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCellBase
)
203 // ---------------------------------------------------------
204 // wxDataViewColumnBase
205 // ---------------------------------------------------------
207 enum wxDataViewColumnFlags
209 wxDATAVIEW_COL_RESIZABLE
= 1,
210 wxDATAVIEW_COL_SORTABLE
= 2,
211 wxDATAVIEW_COL_HIDDEN
= 4
214 class wxDataViewColumnBase
: public wxObject
217 wxDataViewColumnBase( const wxString
&title
, wxDataViewCell
*cell
, size_t model_column
, int flags
= 0 );
218 ~wxDataViewColumnBase();
220 virtual void SetTitle( const wxString
&title
);
221 virtual wxString
GetTitle();
223 wxDataViewCell
* GetCell() { return m_cell
; }
225 size_t GetModelColumn() { return m_model_column
; }
227 void SetOwner( wxDataViewCtrl
*owner
) { m_owner
= owner
; }
228 wxDataViewCtrl
*GetOwner() { return m_owner
; }
231 wxDataViewCtrl
*m_ctrl
;
232 wxDataViewCell
*m_cell
;
236 wxDataViewCtrl
*m_owner
;
239 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewColumnBase
)
242 // ---------------------------------------------------------
243 // wxDataViewCtrlBase
244 // ---------------------------------------------------------
246 class wxDataViewCtrlBase
: public wxControl
249 wxDataViewCtrlBase();
250 ~wxDataViewCtrlBase();
252 virtual bool AssociateModel( wxDataViewListModel
*model
);
253 wxDataViewListModel
* GetModel();
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
);
266 wxDataViewListModel
*m_model
;
270 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCtrlBase
)
273 #if defined(__WXGTK20__)
274 #include "wx/gtk/dataview.h"
275 #elif defined(__WXMAC__)
276 #include "wx/mac/dataview.h"
278 #include "wx/generic/dataview.h"
281 #endif // wxUSE_DATAVIEWCTRL
284 // _WX_DATAVIEW_H_BASE_