1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/common/datavcmn.cpp
3 // Purpose: wxDataViewCtrl base classes and common parts
4 // Author: Robert Roebling
7 // Copyright: (c) 2006, Robert Roebling
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
11 // For compilers that support precompilation, includes "wx.h".
12 #include "wx/wxprec.h"
20 #if wxUSE_DATAVIEWCTRL
22 #include "wx/object.h"
23 #include "wx/dataview.h"
27 // ---------------------------------------------------------
29 // ---------------------------------------------------------
31 IMPLEMENT_ABSTRACT_CLASS(wxDataViewModel
, wxObject
)
33 // ---------------------------------------------------------
34 // wxDataViewListModel
35 // ---------------------------------------------------------
37 class wxDataViewViewingColumn
: public wxObject
40 wxDataViewViewingColumn( wxDataViewColumn
*view_column
, size_t model_column
)
42 m_viewColumn
= view_column
;
43 m_modelColumn
= model_column
;
46 wxDataViewColumn
*m_viewColumn
;
51 IMPLEMENT_ABSTRACT_CLASS(wxDataViewListModel
, wxDataViewModel
)
53 wxDataViewListModel::wxDataViewListModel()
56 m_viewingColumns
.DeleteContents( true );
59 wxDataViewListModel::~wxDataViewListModel()
65 bool wxDataViewListModel::RowAppended()
68 return m_notifier
->RowAppended();
73 bool wxDataViewListModel::RowPrepended()
76 return m_notifier
->RowPrepended();
81 bool wxDataViewListModel::RowInserted( size_t before
)
84 return m_notifier
->RowInserted( before
);
89 bool wxDataViewListModel::RowDeleted( size_t row
)
92 return m_notifier
->RowDeleted( row
);
97 bool wxDataViewListModel::RowChanged( size_t row
)
100 return m_notifier
->RowChanged( row
);
105 bool wxDataViewListModel::ValueChanged( size_t col
, size_t row
)
110 ret
= m_notifier
->ValueChanged( col
, row
);
112 wxNode
*node
= m_viewingColumns
.GetFirst();
115 wxDataViewViewingColumn
* tmp
= (wxDataViewViewingColumn
*) node
->GetData();
117 if (tmp
->m_modelColumn
== col
)
118 m_notifier
->ValueChanged( tmp
->m_viewColumn
, col
, row
);
120 node
= node
->GetNext();
126 bool wxDataViewListModel::Cleared()
129 return m_notifier
->Cleared();
134 void wxDataViewListModel::AddViewingColumn( wxDataViewColumn
*view_column
, size_t model_column
)
136 m_viewingColumns
.Append( new wxDataViewViewingColumn( view_column
, model_column
) );
139 void wxDataViewListModel::RemoveViewingColumn( wxDataViewColumn
*column
)
141 wxNode
*node
= m_viewingColumns
.GetFirst();
144 wxDataViewViewingColumn
* tmp
= (wxDataViewViewingColumn
*) node
->GetData();
146 if (tmp
->m_viewColumn
== column
)
148 m_viewingColumns
.DeleteObject( tmp
);
152 node
= node
->GetNext();
156 void wxDataViewListModel::SetNotifier( wxDataViewListModelNotifier
*notifier
)
161 m_notifier
= notifier
;
164 wxDataViewListModelNotifier
* wxDataViewListModel::GetNotifier()
169 // ---------------------------------------------------------
170 // wxDataViewCellBase
171 // ---------------------------------------------------------
173 IMPLEMENT_ABSTRACT_CLASS(wxDataViewCellBase
, wxObject
)
175 wxDataViewCellBase::wxDataViewCellBase( const wxString
&varianttype
, wxDataViewCellMode mode
)
177 m_variantType
= varianttype
;
181 // ---------------------------------------------------------
182 // wxDataViewColumnBase
183 // ---------------------------------------------------------
185 IMPLEMENT_ABSTRACT_CLASS(wxDataViewColumnBase
, wxObject
)
187 wxDataViewColumnBase::wxDataViewColumnBase( const wxString
&title
, wxDataViewCell
*cell
, size_t model_column
, int flags
)
190 m_model_column
= model_column
;
194 m_cell
->SetOwner( (wxDataViewColumn
*) this );
197 wxDataViewColumnBase::~wxDataViewColumnBase()
204 GetOwner()->GetModel()->RemoveViewingColumn( (wxDataViewColumn
*) this );
208 void wxDataViewColumnBase::SetTitle( const wxString
&title
)
213 wxString
wxDataViewColumnBase::GetTitle()
218 // ---------------------------------------------------------
219 // wxDataViewCtrlBase
220 // ---------------------------------------------------------
222 IMPLEMENT_ABSTRACT_CLASS(wxDataViewCtrlBase
, wxControl
)
224 wxDataViewCtrlBase::wxDataViewCtrlBase()
227 m_cols
.DeleteContents( true );
230 wxDataViewCtrlBase::~wxDataViewCtrlBase()
236 bool wxDataViewCtrlBase::AssociateModel( wxDataViewListModel
*model
)
246 wxDataViewListModel
* wxDataViewCtrlBase::GetModel()
251 bool wxDataViewCtrlBase::AppendTextColumn( const wxString
&label
, size_t model_column
)
253 return AppendColumn( new wxDataViewColumn( label
, new wxDataViewTextCell(), model_column
) );
256 bool wxDataViewCtrlBase::AppendToggleColumn( const wxString
&label
, size_t model_column
)
258 return AppendColumn( new wxDataViewColumn( label
, new wxDataViewToggleCell(), model_column
) );
261 bool wxDataViewCtrlBase::AppendProgressColumn( const wxString
&label
, size_t model_column
)
263 return AppendColumn( new wxDataViewColumn( label
, new wxDataViewProgressCell(), model_column
) );
266 bool wxDataViewCtrlBase::AppendDateColumn( const wxString
&label
, size_t model_column
)
268 return AppendColumn( new wxDataViewColumn( label
, new wxDataViewDateCell(), model_column
) );
271 bool wxDataViewCtrlBase::AppendColumn( wxDataViewColumn
*col
)
273 m_cols
.Append( (wxObject
*) col
);
274 col
->SetOwner( (wxDataViewCtrl
*) this );
275 m_model
->AddViewingColumn( col
, col
->GetModelColumn() );
279 size_t wxDataViewCtrlBase::GetNumberOfColumns()
281 return m_cols
.GetCount();
284 bool wxDataViewCtrlBase::DeleteColumn( size_t pos
)
289 bool wxDataViewCtrlBase::ClearColumns()
294 wxDataViewColumn
* wxDataViewCtrlBase::GetColumn( size_t pos
)
296 return (wxDataViewColumn
*) m_cols
[ pos
];