See also \helpref{RemoveNotifier}{wxdataviewlistmodelremovenotifier}.
-\membersection{wxDataViewListModel::AddViewingColumn}\label{wxdataviewlistmodeladdviewingcolumn}
-
-\func{void}{AddViewingColumn}{\param{wxDataViewColumn* }{view\_column}, \param{unsigned int }{model\_column}}
-
-Used internally. Used for maintaining a list of
-\helpref{wxDataViewColumn}{wxdataviewcolumn} that
-display a certain column of this model.
-
\membersection{wxDataViewListModel::Cleared}\label{wxdataviewlistmodelcleared}
\func{bool}{virtual Cleared}{\void}
See also \helpref{AddNotifier}{wxdataviewlistmodeladdnotifier}.
-\membersection{wxDataViewListModel::RemoveViewingColumn}\label{wxdataviewlistmodelremoveviewingcolumn}
-
-\func{void}{RemoveViewingColumn}{\param{wxDataViewColumn* }{column}}
-
-Used internally. Used for maintaining a list of
-\helpref{wxDataViewColumn}{wxdataviewcolumn} that
-display a certain column of this model.
-
\membersection{wxDataViewListModel::RowAppended}\label{wxdataviewlistmodelrowappended}
\func{virtual bool}{RowAppended}{\void}
class WXDLLIMPEXP_ADV wxDataViewListModel: public wxDataViewModel
{
- friend class WXDLLIMPEXP_ADV wxDataViewCtrl;
- friend class WXDLLIMPEXP_ADV wxDataViewCtrlBase;
- friend class WXDLLIMPEXP_ADV wxDataViewSortedListModel;
- friend class WXDLLIMPEXP_ADV wxDataViewColumnBase;
- friend class WXDLLIMPEXP_ADV wxGtkDataViewListModelNotifier;
-
public:
wxDataViewListModel();
virtual bool RowsReordered( unsigned int *new_order );
virtual bool Cleared();
+ void AddNotifier( wxDataViewListModelNotifier *notifier );
+ void RemoveNotifier( wxDataViewListModelNotifier *notifier );
+
protected:
// the user should not delete this class directly: he should use DecRef() instead!
virtual ~wxDataViewListModel();
- // Used internally
- void AddViewingColumn( wxDataViewColumn *view_column, unsigned int model_column );
- void RemoveViewingColumn( wxDataViewColumn *column );
-
- void AddNotifier( wxDataViewListModelNotifier *notifier );
- void RemoveNotifier( wxDataViewListModelNotifier *notifier );
-
wxList m_notifiers;
- wxList m_viewingColumns;
};
-
// ---------------------------------------------------------
// wxDataViewSortedListModel
// ---------------------------------------------------------
wxDataViewListModel::wxDataViewListModel()
{
- m_viewingColumns.DeleteContents( true );
m_notifiers.DeleteContents( true );
}
return ret;
}
-void wxDataViewListModel::AddViewingColumn( wxDataViewColumn *view_column, unsigned int model_column )
-{
- m_viewingColumns.Append( new wxDataViewViewingColumn( view_column, model_column ) );
-}
-
-void wxDataViewListModel::RemoveViewingColumn( wxDataViewColumn *column )
-{
- wxList::compatibility_iterator 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::AddNotifier( wxDataViewListModelNotifier *notifier )
{
m_notifiers.Append( notifier );
{
if (m_renderer)
delete m_renderer;
-
- if (GetOwner())
- {
- GetOwner()->GetModel()->RemoveViewingColumn( (wxDataViewColumn*) this );
- }
}
int wxDataViewColumnBase::GetFlags() const
{
m_cols.Append( (wxObject*) col );
col->SetOwner( (wxDataViewCtrl*) this );
- m_model->AddViewingColumn( col, col->GetModelColumn() );
return true;
}
// wxRect renderrect( rect.x, rect.y, rect.width, rect.height );
wxRect renderrect( cell_area->x, cell_area->y, cell_area->width, cell_area->height );
- wxDataViewListModel *model = cell->GetOwner()->GetOwner()->GetModel();
+ // wxDataViewListModel *model = cell->GetOwner()->GetOwner()->GetModel();
GtkTreePath *treepath = gtk_tree_path_new_from_string( path );
unsigned int model_row = (unsigned int)gtk_tree_path_get_indices (treepath)[0];
class wxGtkDataViewListModelNotifier: public wxDataViewListModelNotifier
{
public:
- wxGtkDataViewListModelNotifier( GtkWxListStore* gtk_store, wxDataViewListModel *wx_model );
+ wxGtkDataViewListModelNotifier( GtkWxListStore* gtk_store,
+ wxDataViewListModel *wx_model,
+ wxDataViewCtrl* ctrl );
~wxGtkDataViewListModelNotifier();
virtual bool RowAppended();
GtkWxListStore *m_gtk_store;
wxDataViewListModel *m_wx_model;
+ wxDataViewCtrl *m_owner;
};
// ---------------------------------------------------------
// ---------------------------------------------------------
wxGtkDataViewListModelNotifier::wxGtkDataViewListModelNotifier(
- GtkWxListStore* gtk_store, wxDataViewListModel *wx_model )
+ GtkWxListStore* gtk_store, wxDataViewListModel *wx_model,
+ wxDataViewCtrl *ctrl )
{
m_gtk_store = gtk_store;
m_wx_model = wx_model;
+ m_owner = ctrl;
}
wxGtkDataViewListModelNotifier::~wxGtkDataViewListModelNotifier()
bool wxGtkDataViewListModelNotifier::ValueChanged( unsigned int model_col, unsigned int model_row )
{
// This adds GTK+'s missing MVC logic for ValueChanged
- wxObjectList::compatibility_iterator
- node = GetOwner()->m_viewingColumns.GetFirst();
- while (node)
+ unsigned int index;
+ for (index = 0; index < m_owner->GetColumnCount(); index++)
{
- wxDataViewViewingColumn* viewing_column = (wxDataViewViewingColumn*) node->GetData();
- if (viewing_column->m_modelColumn == model_col)
+ wxDataViewColumn *column = m_owner->GetColumn( index );
+ if (column->GetModelColumn() == model_col)
{
- GtkTreeView *widget = GTK_TREE_VIEW(viewing_column->m_viewColumn->GetOwner()->m_treeview);
- GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(viewing_column->m_viewColumn->GetGtkHandle());
+ GtkTreeView *widget = GTK_TREE_VIEW(m_owner->m_treeview);
+ GtkTreeViewColumn *gcolumn = GTK_TREE_VIEW_COLUMN(column->GetGtkHandle());
// Get cell area
GtkTreePath *path = gtk_tree_path_new();
gtk_tree_path_append_index( path, model_row );
GdkRectangle cell_area;
- gtk_tree_view_get_cell_area( widget, path, column, &cell_area );
+ gtk_tree_view_get_cell_area( widget, path, gcolumn, &cell_area );
gtk_tree_path_free( path );
GtkAdjustment* hadjust = gtk_tree_view_get_hadjustment( widget );
double d = gtk_adjustment_get_value( hadjust );
int xdiff = (int) d;
- int ydiff = column->button->allocation.height;
+ int ydiff = gcolumn->button->allocation.height;
// Redraw
gtk_widget_queue_draw_area( GTK_WIDGET(widget),
cell_area.x - xdiff, ydiff + cell_area.y, cell_area.width, cell_area.height );
}
-
- node = node->GetNext();
}
return true;
gtk_tree_path_free (path);
// This adds GTK+'s missing MVC logic for RowsReordered
- wxObjectList::compatibility_iterator
- node = GetOwner()->m_viewingColumns.GetFirst();
- while (node)
- {
- wxDataViewViewingColumn* viewing_column = (wxDataViewViewingColumn*) node->GetData();
- GtkTreeView *widget = GTK_TREE_VIEW(viewing_column->m_viewColumn->GetOwner()->m_treeview);
- // Doesn't work yet...
- gtk_widget_queue_draw( GTK_WIDGET(widget) );
-
- node = node->GetNext();
- }
+ GtkTreeView *widget = GTK_TREE_VIEW(m_owner->m_treeview);
+ // Doesn't work yet...
+ gtk_widget_queue_draw( GTK_WIDGET(widget) );
return true;
}
GtkWxListStore *gtk_store = wxgtk_list_store_new();
gtk_store->model = model;
- m_notifier = new wxGtkDataViewListModelNotifier( gtk_store, model );
+ m_notifier = new wxGtkDataViewListModelNotifier( gtk_store, model, this );
model->AddNotifier( m_notifier );