From d2505ba254cfdba8e87f5b1d81cd842f6b453a7c Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Thu, 5 Jul 2007 19:15:03 +0000 Subject: [PATCH] Getting closer to working tree/list wxDataViewCtrl. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47153 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- samples/dataview/dataview.cpp | 9 +++++++++ src/gtk/dataview.cpp | 36 ++++++++++++++++++++++++++--------- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/samples/dataview/dataview.cpp b/samples/dataview/dataview.cpp index 457c81f1d9..d9c9acb851 100644 --- a/samples/dataview/dataview.cpp +++ b/samples/dataview/dataview.cpp @@ -191,6 +191,15 @@ public: } virtual wxDataViewItem GetNthChild( const wxDataViewItem &parent, unsigned int n ) const { + if (!parent.IsOk()) + { + // root node + if (n == 0) + return wxDataViewItem( 1 ); + + return wxDataViewItem( 0 ); + } + int ID = parent.GetID(); switch (ID) { diff --git a/src/gtk/dataview.cpp b/src/gtk/dataview.cpp index 17b3a894ee..74ac9a4dba 100644 --- a/src/gtk/dataview.cpp +++ b/src/gtk/dataview.cpp @@ -267,15 +267,19 @@ wxgtk_tree_model_get_iter (GtkTreeModel *tree_model, wxDataViewItem item; + wxPrintf( "get_iter depth: %d\n", depth ); + int i; for (i = 0; i < depth; i++) { gint pos = gtk_tree_path_get_indices (path)[i]; item = model->GetNthChild( item, (unsigned int) pos ); + wxPrintf( "pos %d\n", pos ); + if (!item.IsOk()) { - wxPrintf( wxT("wrong item from path\n") ); + wxPrintf( "wrong item from path\n" ); return FALSE; } } @@ -438,18 +442,32 @@ wxgtk_tree_model_iter_nth_child (GtkTreeModel *tree_model, GtkWxTreeModel *wxtree_model = (GtkWxTreeModel *) tree_model; g_return_val_if_fail (GTK_IS_WX_TREE_MODEL (wxtree_model), FALSE); - g_return_val_if_fail (wxtree_model->stamp == parent->stamp, FALSE); - wxDataViewModel *model = wxtree_model->model; - wxDataViewItem item( (wxUint32) parent->user_data ); - item = model->GetNthChild( item, n ); + if (!parent) + { + wxDataViewItem item; + item = model->GetNthChild( item, n ); + + if (!item.IsOk()) + return FALSE; - if (!item.IsOk()) - return FALSE; + iter->stamp = wxtree_model->stamp; + iter->user_data = (gpointer) item.GetID(); + } + else + { + g_return_val_if_fail (wxtree_model->stamp == parent->stamp, FALSE); - iter->stamp = wxtree_model->stamp; - iter->user_data = (gpointer) item.GetID(); + wxDataViewItem item( (wxUint32) parent->user_data ); + item = model->GetNthChild( item, n ); + + if (!item.IsOk()) + return FALSE; + + iter->stamp = wxtree_model->stamp; + iter->user_data = (gpointer) item.GetID(); + } return TRUE; } -- 2.47.2