]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/dataview.cpp
Don't pop explicitly changed status messages.
[wxWidgets.git] / src / gtk / dataview.cpp
index 68a660db66a03625700ddb9eae08a345aedaed62..85fcee31858bc2d3543d769391de98e13e35eaac 100644 (file)
@@ -540,7 +540,7 @@ wxgtk_tree_model_get_column_type (GtkTreeModel *tree_model,
     else
     {
         gtype = G_TYPE_STRING;
     else
     {
         gtype = G_TYPE_STRING;
-        // wxFAIL_MSG( _T("non-string columns not supported yet") );
+        // wxFAIL_MSG( wxT("non-string columns not supported yet") );
     }
 
     return gtype;
     }
 
     return gtype;
@@ -591,7 +591,7 @@ wxgtk_tree_model_get_value (GtkTreeModel *tree_model,
     }
     else
     {
     }
     else
     {
-        wxFAIL_MSG( _T("non-string columns not supported yet") );
+        wxFAIL_MSG( wxT("non-string columns not supported yet") );
     }
 }
 
     }
 }
 
@@ -601,9 +601,8 @@ wxgtk_tree_model_iter_next (GtkTreeModel  *tree_model,
 {
     GtkWxTreeModel *wxtree_model = (GtkWxTreeModel *) tree_model;
 
 {
     GtkWxTreeModel *wxtree_model = (GtkWxTreeModel *) tree_model;
 
-    //if (wxtree_model->stamp != iter->stamp)
-    //   wxPrintf( "crash\n" );
-    // TODO: remove this code
+    // This happens when clearing the view by calling .._set_model( NULL );
+    if (iter->stamp == 0) return FALSE;
 
     g_return_val_if_fail (GTK_IS_WX_TREE_MODEL (wxtree_model), FALSE);
     g_return_val_if_fail (wxtree_model->stamp == iter->stamp, FALSE);
 
     g_return_val_if_fail (GTK_IS_WX_TREE_MODEL (wxtree_model), FALSE);
     g_return_val_if_fail (wxtree_model->stamp == iter->stamp, FALSE);
@@ -639,7 +638,7 @@ wxgtk_tree_model_iter_n_children (GtkTreeModel *tree_model,
                                   GtkTreeIter  *iter)
 {
     GtkWxTreeModel *wxtree_model = (GtkWxTreeModel *) tree_model;
                                   GtkTreeIter  *iter)
 {
     GtkWxTreeModel *wxtree_model = (GtkWxTreeModel *) tree_model;
-    g_return_val_if_fail (GTK_IS_WX_TREE_MODEL (wxtree_model), FALSE);
+    g_return_val_if_fail (GTK_IS_WX_TREE_MODEL (wxtree_model), 0);
     g_return_val_if_fail ( !iter || wxtree_model->stamp == iter->stamp, 0);
 
     return wxtree_model->internal->iter_n_children( iter );
     g_return_val_if_fail ( !iter || wxtree_model->stamp == iter->stamp, 0);
 
     return wxtree_model->internal->iter_n_children( iter );
@@ -1489,16 +1488,9 @@ bool wxGtkDataViewModelNotifier::ValueChanged( const wxDataViewItem &item, unsig
 
 bool wxGtkDataViewModelNotifier::Cleared()
 {
 
 bool wxGtkDataViewModelNotifier::Cleared()
 {
-    gtk_tree_view_set_model( GTK_TREE_VIEW(m_owner->m_treeview), NULL );
-
-    // this will create a new GTK model
     m_owner->GtkGetInternal()->Cleared();
     m_owner->GtkGetInternal()->Cleared();
-
-    SetGtkModel( m_owner->GtkGetInternal()->GetGtkModel() );
-
-    gtk_tree_view_set_model( GTK_TREE_VIEW(m_owner->m_treeview), GTK_TREE_MODEL(m_wxgtk_model) );
-
-    return false;
+    
+    return true;
 }
 
 // ---------------------------------------------------------
 }
 
 // ---------------------------------------------------------
@@ -2580,9 +2572,11 @@ static void wxGtkTreeCellDataFunc( GtkTreeViewColumn *WXUNUSED(column),
     wx_model->GetValue( value, item, cell->GetOwner()->GetModelColumn() );
 
     if (value.GetType() != cell->GetVariantType())
     wx_model->GetValue( value, item, cell->GetOwner()->GetModelColumn() );
 
     if (value.GetType() != cell->GetVariantType())
+    {
         wxLogError( wxT("Wrong type, required: %s but: %s"),
                     value.GetType().c_str(),
                     cell->GetVariantType().c_str() );
         wxLogError( wxT("Wrong type, required: %s but: %s"),
                     value.GetType().c_str(),
                     cell->GetVariantType().c_str() );
+    }
 
     cell->SetValue( value );
 
 
     cell->SetValue( value );
 
@@ -3320,17 +3314,16 @@ wxDataViewCtrlInternal::row_drop_possible(GtkTreeDragDest *WXUNUSED(drag_dest),
 
 bool wxDataViewCtrlInternal::Cleared()
 {
 
 bool wxDataViewCtrlInternal::Cleared()
 {
+    GtkWidget* tree_widget = GetOwner()->GtkGetTreeView();
+    gtk_tree_view_set_model( GTK_TREE_VIEW(tree_widget), NULL );
+    gtk_tree_view_set_model( GTK_TREE_VIEW(tree_widget), GTK_TREE_MODEL(m_gtk_model) );
+    
     if (m_root)
     {
         delete m_root;
         InitTree();
     }
     if (m_root)
     {
         delete m_root;
         InitTree();
     }
-
-    // Create new GTK model
-    g_object_unref( m_gtk_model );
-    m_gtk_model = wxgtk_tree_model_new();
-    m_gtk_model->internal = this;
-
+    
     return true;
 }
 
     return true;
 }
 
@@ -3407,18 +3400,19 @@ GtkTreeModelFlags wxDataViewCtrlInternal::get_flags()
 
 gboolean wxDataViewCtrlInternal::get_iter( GtkTreeIter *iter, GtkTreePath *path )
 {
 
 gboolean wxDataViewCtrlInternal::get_iter( GtkTreeIter *iter, GtkTreePath *path )
 {
+
     if (m_wx_model->IsVirtualListModel())
     {
     if (m_wx_model->IsVirtualListModel())
     {
-        wxDataViewIndexListModel *wx_model = (wxDataViewIndexListModel*) m_wx_model;
-
+        wxDataViewVirtualListModel *wx_model = (wxDataViewVirtualListModel*) m_wx_model;
+    
         unsigned int i = (unsigned int)gtk_tree_path_get_indices (path)[0];
         unsigned int i = (unsigned int)gtk_tree_path_get_indices (path)[0];
-
-        if (i >= wx_model->GetLastIndex() + 1)
+        
+        if (i >= wx_model->GetCount())
             return FALSE;
 
         iter->stamp = m_gtk_model->stamp;
             return FALSE;
 
         iter->stamp = m_gtk_model->stamp;
-        // user_data is just the index
-        iter->user_data = (gpointer) i;
+        // user_data is just the index +1
+        iter->user_data = (gpointer) (i+1);
 
         return TRUE;
     }
 
         return TRUE;
     }
@@ -3469,8 +3463,8 @@ GtkTreePath *wxDataViewCtrlInternal::get_path( GtkTreeIter *iter )
 
     if (m_wx_model->IsVirtualListModel())
     {
 
     if (m_wx_model->IsVirtualListModel())
     {
-        // user_data is just the index
-        int i = (wxUIntPtr) iter->user_data;
+        // user_data is just the index +1
+        int i = ( (wxUIntPtr) iter->user_data ) -1;
         gtk_tree_path_append_index (retval, i);
     }
     else
         gtk_tree_path_append_index (retval, i);
     }
     else
@@ -3496,30 +3490,43 @@ gboolean wxDataViewCtrlInternal::iter_next( GtkTreeIter *iter )
 {
     if (m_wx_model->IsVirtualListModel())
     {
 {
     if (m_wx_model->IsVirtualListModel())
     {
-        wxDataViewIndexListModel *wx_model = (wxDataViewIndexListModel*) m_wx_model;
+        wxDataViewVirtualListModel *wx_model = (wxDataViewVirtualListModel*) m_wx_model;
 
 
-        int n = (wxUIntPtr) iter->user_data;
+        // user_data is just the index +1
+        int n = ( (wxUIntPtr) iter->user_data ) -1;
 
         if (n == -1)
 
         if (n == -1)
+        {
+            iter->user_data = NULL;
             return FALSE;
             return FALSE;
+        }
 
 
-        if (n >= (int) wx_model->GetLastIndex())
+        if (n >= (int) wx_model->GetCount()-1)
+        {
+            iter->user_data = NULL;
             return FALSE;
             return FALSE;
-
-        iter->user_data = (gpointer) ++n;
+        }
+        
+        // user_data is just the index +1 (+2 because we need the next)
+        iter->user_data = (gpointer) (n+2);
     }
     else
     {
         wxGtkTreeModelNode *parent = FindParentNode( iter );
         if( parent == NULL )
     }
     else
     {
         wxGtkTreeModelNode *parent = FindParentNode( iter );
         if( parent == NULL )
+        {
+            iter->user_data = NULL;
             return FALSE;
             return FALSE;
+        }
 
         int pos = parent->GetChildren().Index( iter->user_data );
 
         if (pos == (int) parent->GetChildCount()-1)
 
         int pos = parent->GetChildren().Index( iter->user_data );
 
         if (pos == (int) parent->GetChildCount()-1)
+        {
+            iter->user_data = NULL;
             return FALSE;
             return FALSE;
+        }
 
 
-        iter->stamp = m_gtk_model->stamp;
         iter->user_data = parent->GetChildren().Item( pos+1 );
     }
 
         iter->user_data = parent->GetChildren().Item( pos+1 );
     }
 
@@ -3535,12 +3542,20 @@ gboolean wxDataViewCtrlInternal::iter_children( GtkTreeIter *iter, GtkTreeIter *
             return FALSE;
 
         iter->stamp = m_gtk_model->stamp;
             return FALSE;
 
         iter->stamp = m_gtk_model->stamp;
-        iter->user_data = (gpointer) -1;
+        iter->user_data = (gpointer) 1;
 
         return TRUE;
     }
     else
     {
 
         return TRUE;
     }
     else
     {
+        if (iter == NULL)
+        {
+            if (m_root->GetChildCount() == 0) return FALSE;
+            iter->stamp = m_gtk_model->stamp;
+            iter->user_data = (gpointer) m_root->GetChildren().Item( 0 );
+            return TRUE;
+        }
+        
         wxDataViewItem item( (void*) parent->user_data );
 
         if (!m_wx_model->IsContainer( item ))
         wxDataViewItem item( (void*) parent->user_data );
 
         if (!m_wx_model->IsContainer( item ))
@@ -3566,11 +3581,19 @@ gboolean wxDataViewCtrlInternal::iter_has_child( GtkTreeIter *iter )
 {
     if (m_wx_model->IsVirtualListModel())
     {
 {
     if (m_wx_model->IsVirtualListModel())
     {
+        wxDataViewVirtualListModel *wx_model = (wxDataViewVirtualListModel*) m_wx_model;
+
+        if (iter == NULL)
+            return (wx_model->GetCount() > 0);
+        
         // this is a list, nodes have no children
         return FALSE;
     }
     else
     {
         // this is a list, nodes have no children
         return FALSE;
     }
     else
     {
+        if (iter == NULL)
+            return (m_root->GetChildCount() > 0);
+    
         wxDataViewItem item( (void*) iter->user_data );
 
         bool is_container = m_wx_model->IsContainer( item );
         wxDataViewItem item( (void*) iter->user_data );
 
         bool is_container = m_wx_model->IsContainer( item );
@@ -3592,10 +3615,10 @@ gint wxDataViewCtrlInternal::iter_n_children( GtkTreeIter *iter )
 {
     if (m_wx_model->IsVirtualListModel())
     {
 {
     if (m_wx_model->IsVirtualListModel())
     {
-        wxDataViewIndexListModel *wx_model = (wxDataViewIndexListModel*) m_wx_model;
+        wxDataViewVirtualListModel *wx_model = (wxDataViewVirtualListModel*) m_wx_model;
 
         if (iter == NULL)
 
         if (iter == NULL)
-            return (gint) wx_model->GetLastIndex() + 1;
+            return (gint) wx_model->GetCount();
 
         return 0;
     }
 
         return 0;
     }
@@ -3615,8 +3638,6 @@ gint wxDataViewCtrlInternal::iter_n_children( GtkTreeIter *iter )
 
         BuildBranch( parent_node );
 
 
         BuildBranch( parent_node );
 
-        // wxPrintf( "iter_n_children %d\n", parent_node->GetChildCount() );
-
         return parent_node->GetChildCount();
     }
 }
         return parent_node->GetChildCount();
     }
 }
@@ -3625,7 +3646,7 @@ gboolean wxDataViewCtrlInternal::iter_nth_child( GtkTreeIter *iter, GtkTreeIter
 {
     if (m_wx_model->IsVirtualListModel())
     {
 {
     if (m_wx_model->IsVirtualListModel())
     {
-        wxDataViewIndexListModel *wx_model = (wxDataViewIndexListModel*) m_wx_model;
+        wxDataViewVirtualListModel *wx_model = (wxDataViewVirtualListModel*) m_wx_model;
 
         if (parent)
             return FALSE;
 
         if (parent)
             return FALSE;
@@ -3633,11 +3654,12 @@ gboolean wxDataViewCtrlInternal::iter_nth_child( GtkTreeIter *iter, GtkTreeIter
         if (n < 0)
             return FALSE;
 
         if (n < 0)
             return FALSE;
 
-        if (n >= (gint) wx_model->GetLastIndex() + 1)
+        if (n >= (gint) wx_model->GetCount())
             return FALSE;
 
         iter->stamp = m_gtk_model->stamp;
             return FALSE;
 
         iter->stamp = m_gtk_model->stamp;
-        iter->user_data = (gpointer) n;
+        // user_data is just the index +1
+        iter->user_data = (gpointer) (n+1);
 
         return TRUE;
     }
 
         return TRUE;
     }
@@ -3656,8 +3678,6 @@ gboolean wxDataViewCtrlInternal::iter_nth_child( GtkTreeIter *iter, GtkTreeIter
 
         BuildBranch( parent_node );
 
 
         BuildBranch( parent_node );
 
-        // wxPrintf( "iter_nth_child %d\n", n );
-
         iter->stamp = m_gtk_model->stamp;
         iter->user_data = parent_node->GetChildren().Item( n );
 
         iter->stamp = m_gtk_model->stamp;
         iter->user_data = parent_node->GetChildren().Item( n );
 
@@ -4006,8 +4026,6 @@ gtk_dataview_motion_notify_callback( GtkWidget *WXUNUSED(widget),
             GtkTreeIter iter;
             dv->GtkGetInternal()->get_iter( &iter, path );
 
             GtkTreeIter iter;
             dv->GtkGetInternal()->get_iter( &iter, path );
 
-            // wxPrintf( "mouse %d %d\n", (int) gdk_event->x, (int) gdk_event->y );
-
             gtk_tree_path_free( path );
         }
     }
             gtk_tree_path_free( path );
         }
     }