virtual bool RowInserted( size_t before ) = 0;
virtual bool RowDeleted( size_t row ) = 0;
virtual bool RowChanged( size_t row ) = 0;
- virtual bool ValueChanged( size_t row, size_t col ) = 0;
+ virtual bool ValueChanged( size_t col, size_t row ) = 0;
virtual bool Cleared() = 0;
+ virtual bool ValueChanged( wxDataViewColumn *view_column, size_t model_column, size_t row ) = 0;
};
// ---------------------------------------------------------
bool RowChanged( size_t row );
bool ValueChanged( size_t col, size_t row );
bool Cleared();
+
+ // Used internally
+ void AddViewingColumn( wxDataViewColumn *view_column, size_t model_column );
+ void RemoveViewingColumn( wxDataViewColumn *column );
+ // Used internally
void SetNotifier( wxDataViewListModelNotifier *notifier );
wxDataViewListModelNotifier* GetNotifier();
private:
wxDataViewListModelNotifier *m_notifier;
+ wxList m_viewingColumns;
protected:
DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewListModel)
// wxDataViewListModel
// ---------------------------------------------------------
+class wxDataViewViewingColumn: public wxObject
+{
+public:
+ wxDataViewViewingColumn( wxDataViewColumn *view_column, size_t model_column )
+ {
+ m_viewColumn = view_column;
+ m_modelColumn = model_column;
+ }
+
+ wxDataViewColumn *m_viewColumn;
+ size_t m_modelColumn;
+};
+
+
IMPLEMENT_ABSTRACT_CLASS(wxDataViewListModel, wxDataViewModel)
wxDataViewListModel::wxDataViewListModel()
{
m_notifier = NULL;
+ m_viewingColumns.DeleteContents( true );
}
wxDataViewListModel::~wxDataViewListModel()
bool wxDataViewListModel::ValueChanged( size_t col, size_t row )
{
+ bool ret = false;
+
if (m_notifier)
- return m_notifier->ValueChanged( col, row );
+ ret = m_notifier->ValueChanged( col, row );
- return false;
+ wxNode *node = m_viewingColumns.GetFirst();
+ while (node)
+ {
+ wxDataViewViewingColumn* tmp = (wxDataViewViewingColumn*) node->GetData();
+
+ if (tmp->m_modelColumn == col)
+ m_notifier->ValueChanged( tmp->m_viewColumn, col, row );
+
+ node = node->GetNext();
+ }
+
+ return ret;
}
bool wxDataViewListModel::Cleared()
return false;
}
+void wxDataViewListModel::AddViewingColumn( wxDataViewColumn *view_column, size_t model_column )
+{
+ m_viewingColumns.Append( new wxDataViewViewingColumn( view_column, model_column ) );
+}
+
+void wxDataViewListModel::RemoveViewingColumn( wxDataViewColumn *column )
+{
+ wxNode *node = m_viewingColumns.GetFirst();
+ while (node)
+ {
+ wxDataViewViewingColumn* tmp = (wxDataViewViewingColumn*) node->GetData();
+
+ if (tmp->m_viewColumn == column)
+ {
+ m_viewingColumns.DeleteObject( tmp );
+ return;
+ }
+
+ node = node->GetNext();
+ }
+}
+
void wxDataViewListModel::SetNotifier( wxDataViewListModelNotifier *notifier )
{
if (m_notifier)
{
if (m_cell)
delete m_cell;
+
+ if (GetOwner())
+ {
+ GetOwner()->GetModel()->RemoveViewingColumn( (wxDataViewColumn*) this );
+ }
}
void wxDataViewColumnBase::SetTitle( const wxString &title )
{
m_cols.Append( (wxObject*) col );
col->SetOwner( (wxDataViewCtrl*) this );
+ m_model->AddViewingColumn( col, col->GetModelColumn() );
return true;
}
virtual bool RowChanged( size_t row );
virtual bool ValueChanged( size_t col, size_t row );
virtual bool Cleared();
+ virtual bool ValueChanged( wxDataViewColumn *view_column, size_t model_column, size_t row );
GtkWxListStore *m_gtk_store;
wxDataViewListModel *m_wx_model;
return false;
}
+bool wxGtkDataViewListModelNotifier::ValueChanged( wxDataViewColumn *view_column, size_t model_column, size_t row )
+{
+ return false;
+}
+
// ---------------------------------------------------------
// wxDataViewCell
// ---------------------------------------------------------