Allow NULL model in wxGTK's wxDataViewCtrl.

This is consistent with other ports.

Fixes #14616.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@75272 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2013-11-23 10:56:03 +00:00
parent f269f868d7
commit 210a35e384

View File

@@ -4598,6 +4598,9 @@ void wxDataViewCtrl::OnInternalIdle()
{ {
wxWindow::OnInternalIdle(); wxWindow::OnInternalIdle();
if ( !m_internal )
return;
m_internal->OnInternalIdle(); m_internal->OnInternalIdle();
unsigned int cols = GetColumnCount(); unsigned int cols = GetColumnCount();
@@ -4629,6 +4632,7 @@ bool wxDataViewCtrl::AssociateModel( wxDataViewModel *model )
bool fixed = (((GetWindowStyle() & wxDV_VARIABLE_LINE_HEIGHT) == 0) || (model->IsVirtualListModel())); bool fixed = (((GetWindowStyle() & wxDV_VARIABLE_LINE_HEIGHT) == 0) || (model->IsVirtualListModel()));
gtk_tree_view_set_fixed_height_mode( GTK_TREE_VIEW(m_treeview), fixed ); gtk_tree_view_set_fixed_height_mode( GTK_TREE_VIEW(m_treeview), fixed );
if ( model )
m_internal = new wxDataViewCtrlInternal( this, model ); m_internal = new wxDataViewCtrlInternal( this, model );
return true; return true;
@@ -4636,11 +4640,13 @@ bool wxDataViewCtrl::AssociateModel( wxDataViewModel *model )
bool wxDataViewCtrl::EnableDragSource( const wxDataFormat &format ) bool wxDataViewCtrl::EnableDragSource( const wxDataFormat &format )
{ {
wxCHECK_MSG( m_internal, false, "model must be associated before calling EnableDragSource" );
return m_internal->EnableDragSource( format ); return m_internal->EnableDragSource( format );
} }
bool wxDataViewCtrl::EnableDropTarget( const wxDataFormat &format ) bool wxDataViewCtrl::EnableDropTarget( const wxDataFormat &format )
{ {
wxCHECK_MSG( m_internal, false, "model must be associated before calling EnableDragTarget" );
return m_internal->EnableDropTarget( format ); return m_internal->EnableDropTarget( format );
} }
@@ -4769,6 +4775,7 @@ int wxDataViewCtrl::GetColumnPosition( const wxDataViewColumn *column ) const
wxDataViewColumn *wxDataViewCtrl::GetSortingColumn() const wxDataViewColumn *wxDataViewCtrl::GetSortingColumn() const
{ {
wxCHECK_MSG( m_internal, NULL, "model must be associated before calling GetSortingColumn" );
return m_internal->GetDataViewSortColumn(); return m_internal->GetDataViewSortColumn();
} }
@@ -4782,6 +4789,8 @@ void wxDataViewCtrl::Expand( const wxDataViewItem & item )
void wxDataViewCtrl::Collapse( const wxDataViewItem & item ) void wxDataViewCtrl::Collapse( const wxDataViewItem & item )
{ {
wxCHECK_RET( m_internal, "model must be associated before calling Collapse" );
GtkTreeIter iter; GtkTreeIter iter;
iter.user_data = item.GetID(); iter.user_data = item.GetID();
wxGtkTreePath path(m_internal->get_path( &iter )); wxGtkTreePath path(m_internal->get_path( &iter ));
@@ -4790,6 +4799,8 @@ void wxDataViewCtrl::Collapse( const wxDataViewItem & item )
bool wxDataViewCtrl::IsExpanded( const wxDataViewItem & item ) const bool wxDataViewCtrl::IsExpanded( const wxDataViewItem & item ) const
{ {
wxCHECK_MSG( m_internal, false, "model must be associated before calling IsExpanded" );
GtkTreeIter iter; GtkTreeIter iter;
iter.user_data = item.GetID(); iter.user_data = item.GetID();
wxGtkTreePath path(m_internal->get_path( &iter )); wxGtkTreePath path(m_internal->get_path( &iter ));
@@ -4801,7 +4812,7 @@ wxDataViewItem wxDataViewCtrl::DoGetCurrentItem() const
// The tree doesn't have any current item if it hadn't been created yet but // The tree doesn't have any current item if it hadn't been created yet but
// it's arguably not an error to call this function in this case so just // it's arguably not an error to call this function in this case so just
// return an invalid item without asserting. // return an invalid item without asserting.
if ( !m_treeview ) if ( !m_treeview || !m_internal )
return wxDataViewItem(); return wxDataViewItem();
wxGtkTreePath path; wxGtkTreePath path;
@@ -4814,6 +4825,7 @@ void wxDataViewCtrl::DoSetCurrentItem(const wxDataViewItem& item)
{ {
wxCHECK_RET( m_treeview, wxCHECK_RET( m_treeview,
"Current item can't be set before creating the control." ); "Current item can't be set before creating the control." );
wxCHECK_RET( m_internal, "model must be associated before setting current item" );
// We need to make sure the model knows about this item or the path would // We need to make sure the model knows about this item or the path would
// be invalid and gtk_tree_view_set_cursor() would silently do nothing. // be invalid and gtk_tree_view_set_cursor() would silently do nothing.
@@ -4849,7 +4861,8 @@ wxDataViewColumn *wxDataViewCtrl::GetCurrentColumn() const
void wxDataViewCtrl::EditItem(const wxDataViewItem& item, const wxDataViewColumn *column) void wxDataViewCtrl::EditItem(const wxDataViewItem& item, const wxDataViewColumn *column)
{ {
wxCHECK_RET( m_treeview, wxCHECK_RET( m_treeview,
"Current item can't be set before creating the control." ); "item can't be edited before creating the control." );
wxCHECK_RET( m_internal, "model must be associated before editing an item" );
wxCHECK_RET( item.IsOk(), "invalid item" ); wxCHECK_RET( item.IsOk(), "invalid item" );
wxCHECK_RET( column, "no column provided" ); wxCHECK_RET( column, "no column provided" );
@@ -4882,6 +4895,8 @@ int wxDataViewCtrl::GetSelectedItemsCount() const
int wxDataViewCtrl::GetSelections( wxDataViewItemArray & sel ) const int wxDataViewCtrl::GetSelections( wxDataViewItemArray & sel ) const
{ {
wxCHECK_MSG( m_internal, 0, "model must be associated before calling GetSelections" );
sel.Clear(); sel.Clear();
GtkTreeSelection *selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(m_treeview) ); GtkTreeSelection *selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(m_treeview) );
@@ -4911,6 +4926,8 @@ int wxDataViewCtrl::GetSelections( wxDataViewItemArray & sel ) const
void wxDataViewCtrl::SetSelections( const wxDataViewItemArray & sel ) void wxDataViewCtrl::SetSelections( const wxDataViewItemArray & sel )
{ {
wxCHECK_RET( m_internal, "model must be associated before calling SetSelections" );
GtkDisableSelectionEvents(); GtkDisableSelectionEvents();
GtkTreeSelection *selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(m_treeview) ); GtkTreeSelection *selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(m_treeview) );
@@ -4942,6 +4959,8 @@ void wxDataViewCtrl::SetSelections( const wxDataViewItemArray & sel )
void wxDataViewCtrl::Select( const wxDataViewItem & item ) void wxDataViewCtrl::Select( const wxDataViewItem & item )
{ {
wxCHECK_RET( m_internal, "model must be associated before calling Select" );
ExpandAncestors(item); ExpandAncestors(item);
GtkDisableSelectionEvents(); GtkDisableSelectionEvents();
@@ -4958,6 +4977,8 @@ void wxDataViewCtrl::Select( const wxDataViewItem & item )
void wxDataViewCtrl::Unselect( const wxDataViewItem & item ) void wxDataViewCtrl::Unselect( const wxDataViewItem & item )
{ {
wxCHECK_RET( m_internal, "model must be associated before calling Unselect" );
GtkDisableSelectionEvents(); GtkDisableSelectionEvents();
GtkTreeSelection *selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(m_treeview) ); GtkTreeSelection *selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(m_treeview) );
@@ -4972,6 +4993,8 @@ void wxDataViewCtrl::Unselect( const wxDataViewItem & item )
bool wxDataViewCtrl::IsSelected( const wxDataViewItem & item ) const bool wxDataViewCtrl::IsSelected( const wxDataViewItem & item ) const
{ {
wxCHECK_MSG( m_internal, false, "model must be associated before calling IsSelected" );
GtkTreeSelection *selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(m_treeview) ); GtkTreeSelection *selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(m_treeview) );
GtkTreeIter iter; GtkTreeIter iter;
@@ -5006,6 +5029,8 @@ void wxDataViewCtrl::UnselectAll()
void wxDataViewCtrl::EnsureVisible(const wxDataViewItem& item, void wxDataViewCtrl::EnsureVisible(const wxDataViewItem& item,
const wxDataViewColumn *WXUNUSED(column)) const wxDataViewColumn *WXUNUSED(column))
{ {
wxCHECK_RET( m_internal, "model must be associated before calling EnsureVisible" );
m_ensureVisibleDefered = item; m_ensureVisibleDefered = item;
ExpandAncestors(item); ExpandAncestors(item);
@@ -5019,6 +5044,8 @@ void wxDataViewCtrl::HitTest(const wxPoint& point,
wxDataViewItem& item, wxDataViewItem& item,
wxDataViewColumn *& column) const wxDataViewColumn *& column) const
{ {
wxCHECK_RET( m_internal, "model must be associated before calling HitTest" );
// gtk_tree_view_get_dest_row_at_pos() is the right one. But it does not tell the column. // gtk_tree_view_get_dest_row_at_pos() is the right one. But it does not tell the column.
// gtk_tree_view_get_path_at_pos() is the wrong function. It doesn't mind the header but returns column. // gtk_tree_view_get_path_at_pos() is the wrong function. It doesn't mind the header but returns column.
// See http://mail.gnome.org/archives/gtkmm-list/2005-January/msg00080.html // See http://mail.gnome.org/archives/gtkmm-list/2005-January/msg00080.html