bool ItemChanged( const wxDataViewItem &item );
bool ValueChanged( const wxDataViewItem &item, unsigned int col );
bool Cleared();
- bool BeforeReset(size_t old_Size,size_t new_size);
+ bool BeforeReset();
bool AfterReset();
void Resort();
// item can be deleted already in the model
int GetIndexOf( const wxDataViewItem &parent, const wxDataViewItem &item );
+ virtual void OnInternalIdle();
+
protected:
void InitTree();
+ void ScheduleRefresh();
+
wxGtkTreeModelNode *FindNode( const wxDataViewItem &item );
wxGtkTreeModelNode *FindNode( GtkTreeIter *iter );
wxGtkTreeModelNode *FindParentNode( const wxDataViewItem &item );
wxDataObject *m_dropDataObject;
wxGtkDataViewModelNotifier *m_notifier;
+
+ bool m_dirty;
};
virtual bool ValueChanged( const wxDataViewItem &item, unsigned int col );
virtual bool Cleared();
virtual void Resort();
- virtual bool BeforeReset(size_t old_size,size_t new_size);
+ virtual bool BeforeReset();
virtual bool AfterReset();
void UpdateLastCount();
return false;
}
-bool wxGtkDataViewModelNotifier::BeforeReset(size_t WXUNUSED(old_size), size_t WXUNUSED(new_size))
+bool wxGtkDataViewModelNotifier::BeforeReset()
{
GtkWidget *treeview = m_internal->GetOwner()->GtkGetTreeView();
gtk_tree_view_set_model( GTK_TREE_VIEW(treeview), NULL );
-
+
return true;
}
bool wxGtkDataViewModelNotifier::AfterReset()
{
- GtkWxTreeModel *wxgtk_model = m_internal->GetGtkModel();
GtkWidget *treeview = m_internal->GetOwner()->GtkGetTreeView();
+ GtkWxTreeModel *wxgtk_model = m_internal->GetGtkModel();
- gtk_tree_view_set_model( GTK_TREE_VIEW(treeview), GTK_TREE_MODEL(wxgtk_model) );
-
m_internal->Cleared();
+ gtk_tree_view_set_model( GTK_TREE_VIEW(treeview), GTK_TREE_MODEL(wxgtk_model) );
+
return true;
}
m_dragDataObject = NULL;
m_dropDataObject = NULL;
+ m_dirty = false;
+
m_gtk_model = wxgtk_tree_model_new();
m_gtk_model->internal = this;
delete m_dropDataObject;
}
+void wxDataViewCtrlInternal::ScheduleRefresh()
+{
+ m_dirty = true;
+}
+
+void wxDataViewCtrlInternal::OnInternalIdle()
+{
+ if (m_dirty)
+ {
+ GtkWidget *widget = m_owner->GtkGetTreeView();
+ gtk_widget_queue_draw( widget );
+ m_dirty = false;
+ }
+}
+
void wxDataViewCtrlInternal::InitTree()
{
wxDataViewItem item;
InitTree();
+ ScheduleRefresh();
+
return true;
}
{
if (!m_wx_model->IsVirtualListModel())
m_root->Resort();
+
+ ScheduleRefresh();
}
bool wxDataViewCtrlInternal::ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item )
parent_node->AddLeave( item.GetID() );
}
+ ScheduleRefresh();
+
return true;
}
parent_node->DeleteChild( item.GetID() );
}
+ ScheduleRefresh();
+
return true;
}
void wxDataViewCtrl::OnInternalIdle()
{
wxWindow::OnInternalIdle();
+
+ m_internal->OnInternalIdle();
unsigned int cols = GetColumnCount();
unsigned int i;
wxDataViewColumn *col = GetColumn( i );
col->OnInternalIdle();
}
+
+ if (m_ensureVisibleDefered.IsOk())
+ {
+ ExpandAncestors(m_ensureVisibleDefered);
+ GtkTreeIter iter;
+ iter.user_data = (gpointer) m_ensureVisibleDefered.GetID();
+ wxGtkTreePath path(m_internal->get_path( &iter ));
+ gtk_tree_view_scroll_to_cell( GTK_TREE_VIEW(m_treeview), path, NULL, false, 0.0, 0.0 );
+ m_ensureVisibleDefered = wxDataViewItem(0);
+ }
}
bool wxDataViewCtrl::AssociateModel( wxDataViewModel *model )
void wxDataViewCtrl::EnsureVisible(const wxDataViewItem& item,
const wxDataViewColumn *WXUNUSED(column))
{
+ m_ensureVisibleDefered = item;
ExpandAncestors(item);
GtkTreeIter iter;