X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7dea20f60aa688bdebb58b1157ed6903508aeff4..ff58644a54af11b74b8e9b33a00de8496c531566:/src/gtk/dataview.cpp?ds=inline diff --git a/src/gtk/dataview.cpp b/src/gtk/dataview.cpp index 5f31a0fa05..0ecca2c7f1 100644 --- a/src/gtk/dataview.cpp +++ b/src/gtk/dataview.cpp @@ -76,11 +76,11 @@ public: // dnd iface gboolean row_draggable( GtkTreeDragSource *drag_source, GtkTreePath *path ); gboolean drag_data_delete( GtkTreeDragSource *drag_source, GtkTreePath* path ); - gboolean drag_data_get( GtkTreeDragSource *drag_source, GtkTreePath *path, + gboolean drag_data_get( GtkTreeDragSource *drag_source, GtkTreePath *path, GtkSelectionData *selection_data ); - gboolean drag_data_received( GtkTreeDragDest *drag_dest, GtkTreePath *dest, + gboolean drag_data_received( GtkTreeDragDest *drag_dest, GtkTreePath *dest, GtkSelectionData *selection_data ); - gboolean row_drop_possible( GtkTreeDragDest *drag_dest, GtkTreePath *dest_path, + gboolean row_drop_possible( GtkTreeDragDest *drag_dest, GtkTreePath *dest_path, GtkSelectionData *selection_data ); // notifactions from wxDataViewModel @@ -462,7 +462,7 @@ wxgtk_tree_model_sortable_init (GtkTreeSortableIface *iface) iface->has_default_sort_func = wxgtk_tree_model_has_default_sort_func; } -static void +static void wxgtk_tree_model_drag_source_init(GtkTreeDragSourceIface *iface) { iface->row_draggable = wxgtk_tree_model_row_draggable; @@ -470,7 +470,7 @@ wxgtk_tree_model_drag_source_init(GtkTreeDragSourceIface *iface) iface->drag_data_get = wxgtk_tree_model_drag_data_get; } -static void +static void wxgtk_tree_model_drag_dest_init (GtkTreeDragDestIface *iface) { iface->drag_data_received = wxgtk_tree_model_drag_data_received; @@ -592,13 +592,13 @@ wxgtk_tree_model_iter_next (GtkTreeModel *tree_model, GtkTreeIter *iter) { GtkWxTreeModel *wxtree_model = (GtkWxTreeModel *) tree_model; - + if (wxtree_model->stamp != iter->stamp) wxPrintf( "crash\n" ); g_return_val_if_fail (GTK_IS_WX_TREE_MODEL (wxtree_model), FALSE); g_return_val_if_fail (wxtree_model->stamp == iter->stamp, FALSE); - + return wxtree_model->internal->iter_next( iter ); } @@ -661,76 +661,76 @@ wxgtk_tree_model_iter_parent (GtkTreeModel *tree_model, } /* drag'n'drop iface */ -static gboolean +static gboolean wxgtk_tree_model_row_draggable (GtkTreeDragSource *drag_source, GtkTreePath *path) { GtkWxTreeModel *wxtree_model = (GtkWxTreeModel *) drag_source; g_return_val_if_fail (GTK_IS_WX_TREE_MODEL (wxtree_model), FALSE); - + return wxtree_model->internal->row_draggable( drag_source, path ); } -static gboolean +static gboolean wxgtk_tree_model_drag_data_delete (GtkTreeDragSource *drag_source, GtkTreePath *path) { GtkWxTreeModel *wxtree_model = (GtkWxTreeModel *) drag_source; g_return_val_if_fail (GTK_IS_WX_TREE_MODEL (wxtree_model), FALSE); - + return wxtree_model->internal->drag_data_delete( drag_source, path ); } -static gboolean +static gboolean wxgtk_tree_model_drag_data_get (GtkTreeDragSource *drag_source, GtkTreePath *path, GtkSelectionData *selection_data) { GtkWxTreeModel *wxtree_model = (GtkWxTreeModel *) drag_source; g_return_val_if_fail (GTK_IS_WX_TREE_MODEL (wxtree_model), FALSE); - + #if 0 wxPrintf( "drag_get_data\n"); - + wxGtkString atom_selection(gdk_atom_name(selection_data->selection)); wxPrintf( "selection %s\n", wxString::FromAscii(atom_selection) ); - + wxGtkString atom_target(gdk_atom_name(selection_data->target)); wxPrintf( "target %s\n", wxString::FromAscii(atom_target) ); - + wxGtkString atom_type(gdk_atom_name(selection_data->type)); wxPrintf( "type %s\n", wxString::FromAscii(atom_type) ); wxPrintf( "format %d\n", selection_data->format ); #endif - + return wxtree_model->internal->drag_data_get( drag_source, path, selection_data ); } -static gboolean +static gboolean wxgtk_tree_model_drag_data_received (GtkTreeDragDest *drag_dest, GtkTreePath *dest, GtkSelectionData *selection_data) { GtkWxTreeModel *wxtree_model = (GtkWxTreeModel *) drag_dest; g_return_val_if_fail (GTK_IS_WX_TREE_MODEL (wxtree_model), FALSE); - + return wxtree_model->internal->drag_data_received( drag_dest, dest, selection_data ); } -static gboolean +static gboolean wxgtk_tree_model_row_drop_possible (GtkTreeDragDest *drag_dest, GtkTreePath *dest_path, GtkSelectionData *selection_data) { GtkWxTreeModel *wxtree_model = (GtkWxTreeModel *) drag_dest; g_return_val_if_fail (GTK_IS_WX_TREE_MODEL (wxtree_model), FALSE); - + return wxtree_model->internal->row_drop_possible( drag_dest, dest_path, selection_data ); } /* sortable iface */ -static gboolean +static gboolean wxgtk_tree_model_get_sort_column_id (GtkTreeSortable *sortable, gint *sort_column_id, GtkSortType *order) @@ -759,7 +759,7 @@ wxgtk_tree_model_get_sort_column_id (GtkTreeSortable *sortable, wxDataViewColumn *gs_lastLeftClickHeader = NULL; -static void +static void wxgtk_tree_model_set_sort_column_id (GtkTreeSortable *sortable, gint sort_column_id, GtkSortType order) @@ -792,7 +792,7 @@ wxgtk_tree_model_set_sort_column_id (GtkTreeSortable *sortable, gs_lastLeftClickHeader = NULL; } -static void +static void wxgtk_tree_model_set_sort_func (GtkTreeSortable *sortable, gint WXUNUSED(sort_column_id), GtkTreeIterCompareFunc func, @@ -817,7 +817,7 @@ void wxgtk_tree_model_set_default_sort_func (GtkTreeSortable *sorta gboolean wxgtk_tree_model_has_default_sort_func (GtkTreeSortable *sortable) { g_return_val_if_fail (GTK_IS_WX_TREE_MODEL (sortable), FALSE ); - + return FALSE; } @@ -1080,7 +1080,7 @@ gtk_wx_cell_renderer_render (GtkCellRenderer *renderer, rect.y += cell_area->y; rect.width -= renderer->xpad * 2; rect.height -= renderer->ypad * 2; - + GdkRectangle dummy; if (gdk_rectangle_intersect (expose_area, &rect, &dummy)) { @@ -1172,12 +1172,6 @@ gtk_wx_cell_renderer_activate( if (cell->Activate( renderrect, model, item, model_col )) ret = true; } - if (button_event->button == 3) - { - if (cell->RightClick( pt, renderrect, model, item, model_col )) - ret = true; - } - wxrenderer->last_click = button_event->time; return ret; @@ -1331,14 +1325,14 @@ bool wxGtkDataViewModelNotifier::ValueChanged( const wxDataViewItem &item, unsig 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(); - + 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; } @@ -1418,15 +1412,21 @@ void wxDataViewRenderer::SetMode( wxDataViewCellMode mode ) GtkCellRendererMode gtkMode; switch (mode) { - case wxDATAVIEW_CELL_INERT: - gtkMode = GTK_CELL_RENDERER_MODE_INERT; - break; - case wxDATAVIEW_CELL_ACTIVATABLE: - gtkMode = GTK_CELL_RENDERER_MODE_ACTIVATABLE; - break; - case wxDATAVIEW_CELL_EDITABLE: - gtkMode = GTK_CELL_RENDERER_MODE_EDITABLE; - break; + case wxDATAVIEW_CELL_INERT: + gtkMode = GTK_CELL_RENDERER_MODE_INERT; + break; + + case wxDATAVIEW_CELL_ACTIVATABLE: + gtkMode = GTK_CELL_RENDERER_MODE_ACTIVATABLE; + break; + + case wxDATAVIEW_CELL_EDITABLE: + gtkMode = GTK_CELL_RENDERER_MODE_EDITABLE; + break; + + default: + wxFAIL_MSG( "unknown wxDataViewCellMode value" ); + return; } // This value is most often ignored in GtkTreeView @@ -1446,15 +1446,21 @@ wxDataViewCellMode wxDataViewRenderer::GetMode() const switch (g_value_get_enum(&gvalue)) { - case GTK_CELL_RENDERER_MODE_INERT: - ret = wxDATAVIEW_CELL_INERT; - break; - case GTK_CELL_RENDERER_MODE_ACTIVATABLE: - ret = wxDATAVIEW_CELL_ACTIVATABLE; - break; - case GTK_CELL_RENDERER_MODE_EDITABLE: - ret = wxDATAVIEW_CELL_EDITABLE; - break; + default: + wxFAIL_MSG( "unknown GtkCellRendererMode value" ); + // fall through (we have to return something) + + case GTK_CELL_RENDERER_MODE_INERT: + ret = wxDATAVIEW_CELL_INERT; + break; + + case GTK_CELL_RENDERER_MODE_ACTIVATABLE: + ret = wxDATAVIEW_CELL_ACTIVATABLE; + break; + + case GTK_CELL_RENDERER_MODE_EDITABLE: + ret = wxDATAVIEW_CELL_EDITABLE; + break; } g_value_unset( &gvalue ); @@ -1462,8 +1468,21 @@ wxDataViewCellMode wxDataViewRenderer::GetMode() const return ret; } -void wxDataViewRenderer::SetAlignment( int align ) +void wxDataViewRenderer::GtkUpdateAlignment() { + int align = m_alignment; + + // query alignment from column ? + if (align == -1) + { + // None there yet + if (GetOwner() == NULL) + return; + + align = GetOwner()->GetAlignment(); + align |= wxALIGN_CENTRE_VERTICAL; + } + // horizontal alignment: gfloat xalign = 0.0; @@ -1493,40 +1512,16 @@ void wxDataViewRenderer::SetAlignment( int align ) g_value_unset( &gvalue2 ); } -int wxDataViewRenderer::GetAlignment() const +void wxDataViewRenderer::SetAlignment( int align ) { - int ret = 0; - GValue gvalue; - - // horizontal alignment: - - g_object_get( G_OBJECT(m_renderer), "xalign", &gvalue, NULL ); - float xalign = g_value_get_float( &gvalue ); - if (xalign < 0.5) - ret |= wxALIGN_LEFT; - else if (xalign == 0.5) - ret |= wxALIGN_CENTER_HORIZONTAL; - else - ret |= wxALIGN_RIGHT; - g_value_unset( &gvalue ); - - - // vertical alignment: - - g_object_get( G_OBJECT(m_renderer), "yalign", &gvalue, NULL ); - float yalign = g_value_get_float( &gvalue ); - if (yalign < 0.5) - ret |= wxALIGN_TOP; - else if (yalign == 0.5) - ret |= wxALIGN_CENTER_VERTICAL; - else - ret |= wxALIGN_BOTTOM; - g_value_unset( &gvalue ); - - return ret; + m_alignment = align; + GtkUpdateAlignment(); } - +int wxDataViewRenderer::GetAlignment() const +{ + return m_alignment; +} // --------------------------------------------------------- // wxDataViewTextRenderer @@ -1813,7 +1808,7 @@ public: GtkWidget *widget = window->m_treeview; // Set later m_gdkwindow = NULL; - + m_window = window; m_context = window->GtkGetPangoDefaultContext(); @@ -1832,9 +1827,9 @@ class wxDataViewCtrlDC: public wxWindowDC public: wxDataViewCtrlDC( wxDataViewCtrl *window ) : wxWindowDC( new wxDataViewCtrlDCImpl( this, window ) ) - { } + { } }; - + // --------------------------------------------------------- // wxDataViewCustomRenderer @@ -1856,7 +1851,7 @@ wxDataViewCustomRenderer::wxDataViewCustomRenderer( const wxString &varianttype, Init(mode, align); } -void wxDataViewCustomRenderer::RenderText( const wxString &text, int xoffset, +void wxDataViewCustomRenderer::RenderText( const wxString &text, int xoffset, wxRect WXUNUSED(cell), wxDC *WXUNUSED(dc), int WXUNUSED(state) ) { #if 0 @@ -2149,7 +2144,7 @@ bool wxDataViewIconTextRenderer::SetValue( const wxVariant &value ) return true; } -bool wxDataViewIconTextRenderer::GetValue( wxVariant &value ) const +bool wxDataViewIconTextRenderer::GetValue( wxVariant &WXUNUSED(value) ) const { return false; } @@ -2182,12 +2177,14 @@ wxSize wxDataViewIconTextRenderer::GetSize() const return size; } -wxControl* wxDataViewIconTextRenderer::CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ) +wxControl* wxDataViewIconTextRenderer::CreateEditorCtrl( + wxWindow *WXUNUSED(parent), wxRect WXUNUSED(labelRect), const wxVariant &WXUNUSED(value) ) { return NULL; } -bool wxDataViewIconTextRenderer::GetValueFromEditorCtrl( wxControl* editor, wxVariant &value ) +bool wxDataViewIconTextRenderer::GetValueFromEditorCtrl( + wxControl* WXUNUSED(editor), wxVariant &WXUNUSED(value) ) { return false; } @@ -2198,7 +2195,7 @@ bool wxDataViewIconTextRenderer::GetValueFromEditorCtrl( wxControl* editor, wxVa static gboolean -gtk_dataview_header_button_press_callback( GtkWidget *widget, +gtk_dataview_header_button_press_callback( GtkWidget *WXUNUSED(widget), GdkEventButton *gdk_event, wxDataViewColumn *column ) { @@ -2208,7 +2205,7 @@ gtk_dataview_header_button_press_callback( GtkWidget *widget, if (gdk_event->button == 1) { gs_lastLeftClickHeader = column; - + wxDataViewCtrl *dv = column->GetOwner(); wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK, dv->GetId() ); event.SetDataViewColumn( column ); @@ -2239,7 +2236,7 @@ static void wxGtkTreeCellDataFunc( GtkTreeViewColumn *column, } -static void wxGtkTreeCellDataFunc( GtkTreeViewColumn *column, +static void wxGtkTreeCellDataFunc( GtkTreeViewColumn *WXUNUSED(column), GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, @@ -2254,7 +2251,7 @@ static void wxGtkTreeCellDataFunc( GtkTreeViewColumn *column, wxDataViewModel *wx_model = tree_model->internal->GetDataViewModel(); - if (!wx_model->IsIndexListModel()) + if (!wx_model->IsVirtualListModel()) { if (wx_model->IsContainer( item )) @@ -2435,14 +2432,7 @@ void wxDataViewColumn::Init(wxAlignment align, int flags, int width) SetFlags( flags ); SetAlignment( align ); - // NOTE: we prefer not to call SetMinWidth(wxDVC_DEFAULT_MINWIDTH); - // as GTK+ is smart and unless explicitely told, will set the minimal - // width to the title's lenght, which is a better default - - // the GTK_TREE_VIEW_COLUMN_FIXED is required by the "fixed height" mode - // that we use for the wxDataViewCtrl - gtk_tree_view_column_set_fixed_width( column, width < 0 ? wxDVC_DEFAULT_WIDTH : width ); - gtk_tree_view_column_set_sizing( column, GTK_TREE_VIEW_COLUMN_FIXED ); + SetWidth( width ); gtk_tree_view_column_pack_end( column, renderer, TRUE ); @@ -2563,6 +2553,9 @@ void wxDataViewColumn::SetAlignment( wxAlignment align ) xalign = 0.5; gtk_tree_view_column_set_alignment( column, xalign ); + + if (m_renderer && m_renderer->GetAlignment() == -1) + m_renderer->GtkUpdateAlignment(); } wxAlignment wxDataViewColumn::GetAlignment() const @@ -2646,7 +2639,25 @@ int wxDataViewColumn::GetWidth() const void wxDataViewColumn::SetWidth( int width ) { - gtk_tree_view_column_set_fixed_width( GTK_TREE_VIEW_COLUMN(m_column), width ); + if (width < 0) + { +#if 1 + gtk_tree_view_column_set_sizing( GTK_TREE_VIEW_COLUMN(m_column), GTK_TREE_VIEW_COLUMN_FIXED ); + + // TODO find a better calculation + gtk_tree_view_column_set_fixed_width( GTK_TREE_VIEW_COLUMN(m_column), wxDVC_DEFAULT_WIDTH ); +#else + // this is unpractical for large numbers of items and disables + // user resizing, which is totally unexpected + gtk_tree_view_column_set_sizing( GTK_TREE_VIEW_COLUMN(m_column), GTK_TREE_VIEW_COLUMN_AUTOSIZE ); +#endif + } + else + { + gtk_tree_view_column_set_sizing( GTK_TREE_VIEW_COLUMN(m_column), GTK_TREE_VIEW_COLUMN_FIXED ); + + gtk_tree_view_column_set_fixed_width( GTK_TREE_VIEW_COLUMN(m_column), width ); + } } void wxDataViewColumn::SetReorderable( bool reorderable ) @@ -2733,7 +2744,7 @@ wxDataViewCtrlInternal::wxDataViewCtrlInternal( wxDataViewCtrl *owner, m_sort_column = -1; m_dataview_sort_column = NULL; - if (!m_wx_model->IsIndexListModel()) + if (!m_wx_model->IsVirtualListModel()) InitTree(); } @@ -2773,56 +2784,61 @@ void wxDataViewCtrlInternal::BuildBranch( wxGtkTreeModelNode *node ) // GTK+ dnd iface -gboolean wxDataViewCtrlInternal::row_draggable( GtkTreeDragSource *WXUNUSED(drag_source), +gboolean wxDataViewCtrlInternal::row_draggable( GtkTreeDragSource *WXUNUSED(drag_source), GtkTreePath *path ) { GtkTreeIter iter; if (!get_iter( &iter, path )) return FALSE; - + wxDataViewItem item( (void*) iter.user_data ); return m_wx_model->IsDraggable( item ); } -gboolean wxDataViewCtrlInternal::drag_data_delete( GtkTreeDragSource *WXUNUSED(drag_source), - GtkTreePath* path ) +gboolean +wxDataViewCtrlInternal::drag_data_delete(GtkTreeDragSource *WXUNUSED(drag_source), + GtkTreePath *WXUNUSED(path)) { return FALSE; } -gboolean wxDataViewCtrlInternal::drag_data_get( 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 ); - + wxDataFormat format( selection_data->target ); - + size_t size = m_wx_model->GetDragDataSize( item, format ); if (size == 0) return FALSE; - + void *data = malloc( size ); - + m_wx_model->GetDragData( item, format, data, size ); - + gtk_selection_data_set( selection_data, selection_data->target, 8, (const guchar*) data, size ); free( data ); - + return TRUE; } -gboolean wxDataViewCtrlInternal::drag_data_received( GtkTreeDragDest *WXUNUSED(drag_dest), - GtkTreePath *dest, GtkSelectionData *selection_data ) +gboolean +wxDataViewCtrlInternal::drag_data_received(GtkTreeDragDest *WXUNUSED(drag_dest), + GtkTreePath *WXUNUSED(dest), + GtkSelectionData *WXUNUSED(selection_data)) { return FALSE; } -gboolean wxDataViewCtrlInternal::row_drop_possible( GtkTreeDragDest *WXUNUSED(drag_dest), - GtkTreePath *dest_path, GtkSelectionData *selection_data ) +gboolean +wxDataViewCtrlInternal::row_drop_possible(GtkTreeDragDest *WXUNUSED(drag_dest), + GtkTreePath *WXUNUSED(dest_path), + GtkSelectionData *WXUNUSED(selection_data)) { return FALSE; } @@ -2835,25 +2851,25 @@ bool wxDataViewCtrlInternal::Cleared() { 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; } void wxDataViewCtrlInternal::Resort() { - if (!m_wx_model->IsIndexListModel()) + if (!m_wx_model->IsVirtualListModel()) m_root->Resort(); } bool wxDataViewCtrlInternal::ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item ) { - if (!m_wx_model->IsIndexListModel()) + if (!m_wx_model->IsVirtualListModel()) { wxGtkTreeModelNode *parent_node = FindNode( parent ); if (m_wx_model->IsContainer( item )) @@ -2867,7 +2883,7 @@ bool wxDataViewCtrlInternal::ItemAdded( const wxDataViewItem &parent, const wxDa bool wxDataViewCtrlInternal::ItemDeleted( const wxDataViewItem &parent, const wxDataViewItem &item ) { - if (!m_wx_model->IsIndexListModel()) + if (!m_wx_model->IsVirtualListModel()) { wxGtkTreeModelNode *parent_node = FindNode( parent ); parent_node->DeleteChild( item.GetID() ); @@ -2904,7 +2920,7 @@ bool wxDataViewCtrlInternal::ValueChanged( const wxDataViewItem &item, unsigned GtkTreeModelFlags wxDataViewCtrlInternal::get_flags() { - if (m_wx_model->IsIndexListModel()) + if (m_wx_model->IsVirtualListModel()) return GTK_TREE_MODEL_LIST_ONLY; else return GTK_TREE_MODEL_ITERS_PERSIST; @@ -2912,7 +2928,7 @@ GtkTreeModelFlags wxDataViewCtrlInternal::get_flags() gboolean wxDataViewCtrlInternal::get_iter( GtkTreeIter *iter, GtkTreePath *path ) { - if (m_wx_model->IsIndexListModel()) + if (m_wx_model->IsVirtualListModel()) { wxDataViewIndexListModel *wx_model = (wxDataViewIndexListModel*) m_wx_model; @@ -2972,7 +2988,7 @@ GtkTreePath *wxDataViewCtrlInternal::get_path( GtkTreeIter *iter ) { GtkTreePath *retval = gtk_tree_path_new (); - if (m_wx_model->IsIndexListModel()) + if (m_wx_model->IsVirtualListModel()) { // user_data is just the index int i = (wxUIntPtr) iter->user_data; @@ -2999,7 +3015,7 @@ GtkTreePath *wxDataViewCtrlInternal::get_path( GtkTreeIter *iter ) gboolean wxDataViewCtrlInternal::iter_next( GtkTreeIter *iter ) { - if (m_wx_model->IsIndexListModel()) + if (m_wx_model->IsVirtualListModel()) { wxDataViewIndexListModel *wx_model = (wxDataViewIndexListModel*) m_wx_model; @@ -3033,7 +3049,7 @@ gboolean wxDataViewCtrlInternal::iter_next( GtkTreeIter *iter ) gboolean wxDataViewCtrlInternal::iter_children( GtkTreeIter *iter, GtkTreeIter *parent ) { - if (m_wx_model->IsIndexListModel()) + if (m_wx_model->IsVirtualListModel()) { // this is a list, nodes have no children if (parent) @@ -3066,7 +3082,7 @@ gboolean wxDataViewCtrlInternal::iter_children( GtkTreeIter *iter, GtkTreeIter * gboolean wxDataViewCtrlInternal::iter_has_child( GtkTreeIter *iter ) { - if (m_wx_model->IsIndexListModel()) + if (m_wx_model->IsVirtualListModel()) { // this is a list, nodes have no children return FALSE; @@ -3089,7 +3105,7 @@ gboolean wxDataViewCtrlInternal::iter_has_child( GtkTreeIter *iter ) gint wxDataViewCtrlInternal::iter_n_children( GtkTreeIter *iter ) { - if (m_wx_model->IsIndexListModel()) + if (m_wx_model->IsVirtualListModel()) { wxDataViewIndexListModel *wx_model = (wxDataViewIndexListModel*) m_wx_model; @@ -3116,7 +3132,7 @@ gint wxDataViewCtrlInternal::iter_n_children( GtkTreeIter *iter ) gboolean wxDataViewCtrlInternal::iter_nth_child( GtkTreeIter *iter, GtkTreeIter *parent, gint n ) { - if (m_wx_model->IsIndexListModel()) + if (m_wx_model->IsVirtualListModel()) { wxDataViewIndexListModel *wx_model = (wxDataViewIndexListModel*) m_wx_model; @@ -3157,7 +3173,7 @@ gboolean wxDataViewCtrlInternal::iter_nth_child( GtkTreeIter *iter, GtkTreeIter gboolean wxDataViewCtrlInternal::iter_parent( GtkTreeIter *iter, GtkTreeIter *child ) { - if (m_wx_model->IsIndexListModel()) + if (m_wx_model->IsVirtualListModel()) { return FALSE; } @@ -3337,7 +3353,7 @@ wxGtkTreeModelNode *wxDataViewCtrlInternal::FindParentNode( const wxDataViewItem //----------------------------------------------------------------------------- static void -wxdataview_selection_changed_callback( GtkTreeSelection* selection, wxDataViewCtrl *dv ) +wxdataview_selection_changed_callback( GtkTreeSelection* WXUNUSED(selection), wxDataViewCtrl *dv ) { if (!GTK_WIDGET_REALIZED(dv->m_widget)) return; @@ -3349,8 +3365,8 @@ wxdataview_selection_changed_callback( GtkTreeSelection* selection, wxDataViewCt } static void -wxdataview_row_activated_callback( GtkTreeView* treeview, GtkTreePath *path, - GtkTreeViewColumn *column, wxDataViewCtrl *dv ) +wxdataview_row_activated_callback( GtkTreeView* WXUNUSED(treeview), GtkTreePath *path, + GtkTreeViewColumn *WXUNUSED(column), wxDataViewCtrl *dv ) { wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, dv->GetId() ); @@ -3363,8 +3379,8 @@ wxdataview_row_activated_callback( GtkTreeView* treeview, GtkTreePath *path, } static gboolean -wxdataview_test_expand_row_callback( GtkTreeView* treeview, GtkTreeIter* iter, - GtkTreePath *path, wxDataViewCtrl *dv ) +wxdataview_test_expand_row_callback( GtkTreeView* WXUNUSED(treeview), GtkTreeIter* iter, + GtkTreePath *WXUNUSED(path), wxDataViewCtrl *dv ) { wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING, dv->GetId() ); @@ -3377,8 +3393,8 @@ wxdataview_test_expand_row_callback( GtkTreeView* treeview, GtkTreeIter* iter, } static void -wxdataview_row_expanded_callback( GtkTreeView* treeview, GtkTreeIter* iter, - GtkTreePath *path, wxDataViewCtrl *dv ) +wxdataview_row_expanded_callback( GtkTreeView* WXUNUSED(treeview), GtkTreeIter* iter, + GtkTreePath *WXUNUSED(path), wxDataViewCtrl *dv ) { wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED, dv->GetId() ); @@ -3389,8 +3405,8 @@ wxdataview_row_expanded_callback( GtkTreeView* treeview, GtkTreeIter* iter, } static gboolean -wxdataview_test_collapse_row_callback( GtkTreeView* treeview, GtkTreeIter* iter, - GtkTreePath *path, wxDataViewCtrl *dv ) +wxdataview_test_collapse_row_callback( GtkTreeView* WXUNUSED(treeview), GtkTreeIter* iter, + GtkTreePath *WXUNUSED(path), wxDataViewCtrl *dv ) { wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING, dv->GetId() ); @@ -3403,8 +3419,8 @@ wxdataview_test_collapse_row_callback( GtkTreeView* treeview, GtkTreeIter* iter, } static void -wxdataview_row_collapsed_callback( GtkTreeView* treeview, GtkTreeIter* iter, - GtkTreePath *path, wxDataViewCtrl *dv ) +wxdataview_row_collapsed_callback( GtkTreeView* WXUNUSED(treeview), GtkTreeIter* iter, + GtkTreePath *WXUNUSED(path), wxDataViewCtrl *dv ) { wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSED, dv->GetId() ); @@ -3436,7 +3452,7 @@ static void wxInsertChildInDataViewCtrl( wxWindowGTK* parent, wxWindowGTK* child static void gtk_dataviewctrl_size_callback( GtkWidget *WXUNUSED(widget), - GtkAllocation *alloc, + GtkAllocation *WXUNUSED(gtk_alloc), wxDataViewCtrl *win ) { wxWindowList::compatibility_iterator node = win->GetChildren().GetFirst(); @@ -3464,7 +3480,7 @@ void gtk_dataviewctrl_size_callback( GtkWidget *WXUNUSED(widget), //----------------------------------------------------------------------------- static gboolean -gtk_dataview_motion_notify_callback( GtkWidget *widget, +gtk_dataview_motion_notify_callback( GtkWidget *WXUNUSED(widget), GdkEventMotion *gdk_event, wxDataViewCtrl *dv ) { @@ -3594,12 +3610,11 @@ bool wxDataViewCtrl::Create(wxWindow *parent, wxWindowID id, g_signal_connect (m_treeview, "size_allocate", G_CALLBACK (gtk_dataviewctrl_size_callback), this); - gs_target.target = "UTF8_STRING"; + gs_target.target = const_cast("UTF8_STRING"); gs_target.flags = 0; - gs_target.info = -1; - gtk_tree_view_enable_model_drag_source( GTK_TREE_VIEW(m_treeview), + gs_target.info = static_cast(-1); + gtk_tree_view_enable_model_drag_source( GTK_TREE_VIEW(m_treeview), GDK_BUTTON1_MASK, &gs_target, 1, (GdkDragAction) GDK_ACTION_COPY ); - #ifdef __WXGTK26__ if (!gtk_check_version(2,6,0)) @@ -3664,7 +3679,7 @@ bool wxDataViewCtrl::Create(wxWindow *parent, wxWindowID id, g_signal_connect (m_treeview, "button_press_event", G_CALLBACK (gtk_dataview_button_press_callback), this); - + return true; } @@ -3687,11 +3702,11 @@ bool wxDataViewCtrl::AssociateModel( wxDataViewModel *model ) { delete m_internal; m_internal = NULL; - + delete m_notifier; m_notifier = NULL; } - + if (!wxDataViewCtrlBase::AssociateModel( model )) return false; @@ -3718,6 +3733,15 @@ bool wxDataViewCtrl::AppendColumn( wxDataViewColumn *col ) m_cols.Append( col ); +#ifdef __WXGTK26__ + if (!gtk_check_version(2,6,0)) + { + if (gtk_tree_view_column_get_sizing( GTK_TREE_VIEW_COLUMN(col->GetGtkHandle()) ) != + GTK_TREE_VIEW_COLUMN_FIXED) + gtk_tree_view_set_fixed_height_mode( GTK_TREE_VIEW(m_treeview), FALSE ); + } +#endif + gtk_tree_view_append_column( GTK_TREE_VIEW(m_treeview), GTK_TREE_VIEW_COLUMN(col->GetGtkHandle()) ); @@ -3731,6 +3755,15 @@ bool wxDataViewCtrl::PrependColumn( wxDataViewColumn *col ) m_cols.Insert( col ); +#ifdef __WXGTK26__ + if (!gtk_check_version(2,6,0)) + { + if (gtk_tree_view_column_get_sizing( GTK_TREE_VIEW_COLUMN(col->GetGtkHandle()) ) != + GTK_TREE_VIEW_COLUMN_FIXED) + gtk_tree_view_set_fixed_height_mode( GTK_TREE_VIEW(m_treeview), FALSE ); + } +#endif + gtk_tree_view_insert_column( GTK_TREE_VIEW(m_treeview), GTK_TREE_VIEW_COLUMN(col->GetGtkHandle()), 0 ); @@ -3982,7 +4015,8 @@ void wxDataViewCtrl::UnselectAll() GtkEnableSelectionEvents(); } -void wxDataViewCtrl::EnsureVisible( const wxDataViewItem & item, const wxDataViewColumn *column ) +void wxDataViewCtrl::EnsureVisible(const wxDataViewItem& item, + const wxDataViewColumn *WXUNUSED(column)) { GtkTreeIter iter; iter.user_data = (gpointer) item.GetID(); @@ -3991,15 +4025,17 @@ void wxDataViewCtrl::EnsureVisible( const wxDataViewItem & item, const wxDataVie gtk_tree_path_free( path ); } -void wxDataViewCtrl::HitTest( const wxPoint &point, - wxDataViewItem &item, wxDataViewColumn *&column ) const +void wxDataViewCtrl::HitTest(const wxPoint& WXUNUSED(point), + wxDataViewItem& item, + wxDataViewColumn *& column) const { item = wxDataViewItem(0); column = NULL; } -wxRect wxDataViewCtrl::GetItemRect( const wxDataViewItem &item, - const wxDataViewColumn *column ) const +wxRect +wxDataViewCtrl::GetItemRect(const wxDataViewItem& WXUNUSED(item), + const wxDataViewColumn *WXUNUSED(column)) const { return wxRect(); }