From: Vadim Zeitlin Date: Sun, 8 Aug 2010 11:37:37 +0000 (+0000) Subject: Add wxDataViewCtrl::GTKPathToItem() function and use it. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/17d98558b35b75e3cad68d96841b4fa5a0c7e6ee?ds=inline Add wxDataViewCtrl::GTKPathToItem() function and use it. No real changes, just refactor the code to use a function mapping GtkTreeIter to our wxDataViewItem and use it instead of duplicating its code everywhere. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65211 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/gtk/dataview.h b/include/wx/gtk/dataview.h index e01b0ece10..b8064ad50d 100644 --- a/include/wx/gtk/dataview.h +++ b/include/wx/gtk/dataview.h @@ -14,6 +14,8 @@ class WXDLLIMPEXP_FWD_ADV wxDataViewCtrlInternal; +struct _GtkTreePath; + // --------------------------------------------------------- // wxDataViewColumn // --------------------------------------------------------- @@ -171,6 +173,10 @@ public: GtkWidget *GtkGetTreeView() { return m_treeview; } wxDataViewCtrlInternal* GtkGetInternal() { return m_internal; } + // Convert GTK path to our item. Returned item may be invalid if get_iter() + // failed. + wxDataViewItem GTKPathToItem(struct _GtkTreePath *path) const; + virtual void OnInternalIdle(); protected: diff --git a/src/gtk/dataview.cpp b/src/gtk/dataview.cpp index 8389e4dc68..f8ecbb0b30 100644 --- a/src/gtk/dataview.cpp +++ b/src/gtk/dataview.cpp @@ -965,9 +965,8 @@ static GtkCellEditable *gtk_wx_cell_renderer_text_start_editing( wxDataViewRenderer *wx_renderer = wxgtk_renderer->wx_renderer; GtkTreePath *treepath = gtk_tree_path_new_from_string( path ); - GtkTreeIter iter; - wx_renderer->GetOwner()->GetOwner()->GtkGetInternal()->get_iter( &iter, treepath ); - wxDataViewItem item( (void*) iter.user_data );; + wxDataViewItem + item(wx_renderer->GetOwner()->GetOwner()->GTKPathToItem(treepath)); gtk_tree_path_free( treepath ); wxDataViewColumn *column = wx_renderer->GetOwner(); @@ -1163,9 +1162,7 @@ static GtkCellEditable *gtk_wx_cell_renderer_start_editing( wxRect renderrect(wxRectFromGDKRect(cell_area)); GtkTreePath *treepath = gtk_tree_path_new_from_string( path ); - GtkTreeIter iter; - cell->GetOwner()->GetOwner()->GtkGetInternal()->get_iter( &iter, treepath ); - wxDataViewItem item( (void*) iter.user_data ); + wxDataViewItem item(cell->GetOwner()->GetOwner()->GTKPathToItem(treepath)); gtk_tree_path_free( treepath ); cell->StartEditing( item, renderrect ); @@ -1293,10 +1290,7 @@ gtk_wx_cell_renderer_activate( wxDataViewModel *model = cell->GetOwner()->GetOwner()->GetModel(); GtkTreePath *treepath = gtk_tree_path_new_from_string( path ); - - GtkTreeIter iter; - cell->GetOwner()->GetOwner()->GtkGetInternal()->get_iter( &iter, treepath ); - wxDataViewItem item( iter.user_data ); + wxDataViewItem item(cell->GetOwner()->GetOwner()->GTKPathToItem(treepath)); gtk_tree_path_free( treepath ); unsigned int model_col = cell->GetOwner()->GetModelColumn(); @@ -1531,16 +1525,14 @@ wxgtk_renderer_editing_started( GtkCellRenderer *WXUNUSED(cell), GtkCellEditable event.SetDataViewColumn( column ); event.SetModel( dv->GetModel() ); GtkTreePath *tree_path = gtk_tree_path_new_from_string( path ); - GtkTreeIter iter; - dv->GtkGetInternal()->get_iter( &iter, tree_path ); + wxDataViewItem item(dv->GTKPathToItem(tree_path)); gtk_tree_path_free( tree_path ); - wxDataViewItem item( iter.user_data ); event.SetItem( item ); dv->HandleWindowEvent( event ); if (GTK_IS_CELL_EDITABLE(editable)) { - s_user_data = iter.user_data; + s_user_data = item.GetID(); g_signal_connect (GTK_CELL_EDITABLE (editable), "editing_done", G_CALLBACK (wxgtk_cell_editable_editing_done), @@ -1749,9 +1741,7 @@ wxDataViewRenderer::GtkOnTextEdited(const gchar *itempath, const wxString& str) return; GtkTreePath *path = gtk_tree_path_new_from_string( itempath ); - GtkTreeIter iter; - GetOwner()->GetOwner()->GtkGetInternal()->get_iter( &iter, path ); - wxDataViewItem item( (void*) iter.user_data );; + wxDataViewItem item(GetOwner()->GetOwner()->GTKPathToItem(path)); gtk_tree_path_free( path ); GtkOnCellChanged(value, item, GetOwner()->GetModelColumn()); @@ -2052,9 +2042,7 @@ static void wxGtkToggleRendererToggledCallback( GtkCellRendererToggle *renderer, wxDataViewModel *model = cell->GetOwner()->GetOwner()->GetModel(); GtkTreePath *gtk_path = gtk_tree_path_new_from_string( path ); - GtkTreeIter iter; - cell->GetOwner()->GetOwner()->GtkGetInternal()->get_iter( &iter, gtk_path ); - wxDataViewItem item( (void*) iter.user_data );; + wxDataViewItem item(cell->GetOwner()->GetOwner()->GTKPathToItem(gtk_path)); gtk_tree_path_free( gtk_path ); unsigned int model_col = cell->GetOwner()->GetModelColumn(); @@ -2482,9 +2470,7 @@ void wxDataViewChoiceByIndexRenderer::GtkOnTextEdited(const gchar *itempath, con return; GtkTreePath *path = gtk_tree_path_new_from_string( itempath ); - GtkTreeIter iter; - GetOwner()->GetOwner()->GtkGetInternal()->get_iter( &iter, path ); - wxDataViewItem item( (void*) iter.user_data );; + wxDataViewItem item(GetOwner()->GetOwner()->GTKPathToItem(path)); gtk_tree_path_free( path ); GtkOnCellChanged(value, item, GetOwner()->GetModelColumn()); @@ -3312,9 +3298,9 @@ gboolean wxDataViewCtrlInternal::row_draggable( GtkTreeDragSource *WXUNUSED(drag { delete m_dragDataObject; - GtkTreeIter iter; - if (!get_iter( &iter, path )) return FALSE; - wxDataViewItem item( (void*) iter.user_data ); + wxDataViewItem item(GetOwner()->GTKPathToItem(path)); + if ( !item ) + return FALSE; wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_BEGIN_DRAG, m_owner->GetId() ); event.SetEventObject( m_owner ); @@ -3345,9 +3331,9 @@ wxDataViewCtrlInternal::drag_data_delete(GtkTreeDragSource *WXUNUSED(drag_source gboolean wxDataViewCtrlInternal::drag_data_get( GtkTreeDragSource *WXUNUSED(drag_source), GtkTreePath *path, GtkSelectionData *selection_data ) { - GtkTreeIter iter; - if (!get_iter( &iter, path )) return FALSE; - wxDataViewItem item( (void*) iter.user_data ); + wxDataViewItem item(GetOwner()->GTKPathToItem(path)); + if ( !item ) + return FALSE; if (!m_dragDataObject->IsSupported( selection_data->target )) return FALSE; @@ -3377,9 +3363,9 @@ wxDataViewCtrlInternal::drag_data_received(GtkTreeDragDest *WXUNUSED(drag_dest), GtkTreePath *path, GtkSelectionData *selection_data) { - GtkTreeIter iter; - if (!get_iter( &iter, path )) return FALSE; - wxDataViewItem item( (void*) iter.user_data ); + wxDataViewItem item(GetOwner()->GTKPathToItem(path)); + if ( !item ) + return FALSE; wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_DROP, m_owner->GetId() ); event.SetEventObject( m_owner ); @@ -3402,9 +3388,9 @@ wxDataViewCtrlInternal::row_drop_possible(GtkTreeDragDest *WXUNUSED(drag_dest), GtkTreePath *path, GtkSelectionData *selection_data) { - GtkTreeIter iter; - if (!get_iter( &iter, path )) return FALSE; - wxDataViewItem item( (void*) iter.user_data ); + wxDataViewItem item(GetOwner()->GTKPathToItem(path)); + if ( !item ) + return FALSE; wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_DROP_POSSIBLE, m_owner->GetId() ); event.SetEventObject( m_owner ); @@ -4037,9 +4023,7 @@ wxdataview_row_activated_callback( GtkTreeView* WXUNUSED(treeview), GtkTreePath { wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, dv->GetId() ); - GtkTreeIter iter; - dv->GtkGetInternal()->get_iter( &iter, path ); - wxDataViewItem item( (void*) iter.user_data );; + wxDataViewItem item(dv->GTKPathToItem(path)); event.SetItem( item ); event.SetModel( dv->GetModel() ); dv->HandleWindowEvent( event ); @@ -4206,12 +4190,8 @@ gtk_dataview_button_press_callback( GtkWidget *WXUNUSED(widget), { if (path) { - GtkTreeIter iter; - dv->GtkGetInternal()->get_iter( &iter, path ); - wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, dv->GetId() ); - wxDataViewItem item( (void*) iter.user_data );; - event.SetItem( item ); + event.SetItem(dv->GTKPathToItem(path)); event.SetModel( dv->GetModel() ); bool ret = dv->HandleWindowEvent( event ); gtk_tree_path_free( path ); @@ -4339,6 +4319,14 @@ bool wxDataViewCtrl::Create(wxWindow *parent, wxWindowID id, return true; } +wxDataViewItem wxDataViewCtrl::GTKPathToItem(GtkTreePath *path) const +{ + GtkTreeIter iter; + return wxDataViewItem(path && m_internal->get_iter(&iter, path) + ? iter.user_data + : NULL); +} + void wxDataViewCtrl::OnInternalIdle() { wxWindow::OnInternalIdle(); @@ -4568,14 +4556,13 @@ wxDataViewItem wxDataViewCtrl::GetSelection() const if (list) { GtkTreePath *path = (GtkTreePath*) list->data; - GtkTreeIter iter; - m_internal->get_iter( &iter, path ); + wxDataViewItem item(GTKPathToItem(path)); // delete list g_list_foreach( list, (GFunc) gtk_tree_path_free, NULL ); g_list_free( list ); - return wxDataViewItem( (void*) iter.user_data ); + return item; } } else @@ -4583,7 +4570,7 @@ wxDataViewItem wxDataViewCtrl::GetSelection() const GtkTreeIter iter; if (gtk_tree_selection_get_selected( selection, NULL, &iter )) { - wxDataViewItem item( (void*) iter.user_data ); + wxDataViewItem item( iter.user_data ); return item; } } @@ -4606,10 +4593,7 @@ int wxDataViewCtrl::GetSelections( wxDataViewItemArray & sel ) const { GtkTreePath *path = (GtkTreePath*) list->data; - GtkTreeIter iter; - m_internal->get_iter( &iter, path ); - - sel.Add( wxDataViewItem( (void*) iter.user_data ) ); + sel.Add(GTKPathToItem(path)); list = g_list_next( list ); count++;