From: Robert Roebling Date: Sat, 12 Apr 2008 20:07:53 +0000 (+0000) Subject: Corrected/added support for column headers with icon and text X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/419a3607032dc850b5045c622e3f10caa9e1cf91 Corrected/added support for column headers with icon and text git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53147 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/gtk/dataview.h b/include/wx/gtk/dataview.h index 52f89899c4..244ca45410 100644 --- a/include/wx/gtk/dataview.h +++ b/include/wx/gtk/dataview.h @@ -325,6 +325,10 @@ private: // holds the GTK handle GtkWidget *m_column; + // holds GTK handles for title/bitmap in the header + GtkWidget *m_image; + GtkWidget *m_label; + // delayed connection to mouse events friend class wxDataViewCtrl; void OnInternalIdle(); diff --git a/samples/dataview/dataview.cpp b/samples/dataview/dataview.cpp index 14d66161b2..be5ccb6f31 100644 --- a/samples/dataview/dataview.cpp +++ b/samples/dataview/dataview.cpp @@ -785,7 +785,7 @@ MyFrame::MyFrame(wxFrame *frame, const wxString &title, int x, int y, int w, int m_music_model = new MyMusicModel; m_musicCtrl->AssociateModel( m_music_model.get() ); - wxDataViewTextRenderer *tr = new wxDataViewTextRenderer( wxT("string"), wxDATAVIEW_CELL_INERT, wxALIGN_RIGHT ); + wxDataViewTextRenderer *tr = new wxDataViewTextRenderer( wxT("string"), wxDATAVIEW_CELL_INERT ); wxDataViewColumn *column0 = new wxDataViewColumn( wxT("title"), tr, 0, 200, wxALIGN_LEFT, wxDATAVIEW_COL_SORTABLE | wxDATAVIEW_COL_REORDERABLE | wxDATAVIEW_COL_RESIZABLE ); m_musicCtrl->AppendColumn( column0 ); @@ -824,7 +824,7 @@ MyFrame::MyFrame(wxFrame *frame, const wxString &title, int x, int y, int w, int #if 1 m_listCtrl->AppendTextColumn (wxT("editable string"), 0, wxDATAVIEW_CELL_EDITABLE, 120, wxALIGN_RIGHT ); - m_listCtrl->AppendIconTextColumn(wxT("icon"), 1, wxDATAVIEW_CELL_INERT, 60 ); + m_listCtrl->AppendIconTextColumn(wxIcon(small1_xpm), 1, wxDATAVIEW_CELL_INERT )->SetTitle( wxT("icon") ); #else m_listCtrl->AppendTextColumn (wxT("editable string"), 0, wxDATAVIEW_CELL_EDITABLE ); m_listCtrl->AppendIconTextColumn(wxT("icon"), 1, wxDATAVIEW_CELL_INERT ); diff --git a/src/gtk/dataview.cpp b/src/gtk/dataview.cpp index 518590545f..f93c64c06d 100644 --- a/src/gtk/dataview.cpp +++ b/src/gtk/dataview.cpp @@ -2440,6 +2440,16 @@ void wxDataViewColumn::Init(wxAlignment align, int flags, int width) SetWidth( width ); + // Create container for icon and label + GtkWidget *box = gtk_hbox_new( FALSE, 1 ); + gtk_widget_show( box ); + // gtk_container_set_border_width((GtkContainer*)box, 2); + m_image = gtk_image_new(); + gtk_box_pack_start(GTK_BOX(box), m_image, FALSE, FALSE, 1); + m_label = gtk_label_new(""); + gtk_box_pack_end( GTK_BOX(box), GTK_WIDGET(m_label), FALSE, FALSE, 1 ); + gtk_tree_view_column_set_widget( column, box ); + gtk_tree_view_column_pack_end( column, renderer, TRUE ); gtk_tree_view_column_set_cell_data_func( column, renderer, @@ -2479,39 +2489,27 @@ void wxDataViewColumn::SetOwner( wxDataViewCtrl *owner ) void wxDataViewColumn::SetTitle( const wxString &title ) { - GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(m_column); - - if (m_isConnected) - { - // disconnect before column->button gets recreated - g_signal_handlers_disconnect_by_func( column->button, - (GtkWidget*) gtk_dataview_header_button_press_callback, this); - - m_isConnected = false; - } - - // FIXME: can it really happen that we don't have the owner here?? wxDataViewCtrl *ctrl = GetOwner(); - gtk_tree_view_column_set_title( column, ctrl ? wxGTK_CONV_FONT(title, ctrl->GetFont()) + gtk_label_set_text( GTK_LABEL(m_label), ctrl ? wxGTK_CONV_FONT(title, ctrl->GetFont()) : wxGTK_CONV_SYS(title) ); - - gtk_tree_view_column_set_widget( column, NULL ); + if (title.empty()) + gtk_widget_hide( m_label ); + else + gtk_widget_show( m_label ); } wxString wxDataViewColumn::GetTitle() const { - const gchar *str = gtk_tree_view_column_get_title( GTK_TREE_VIEW_COLUMN(m_column) ); - return wxConvFileName->cMB2WX(str); + return wxGTK_CONV_BACK( gtk_label_get_text( GTK_LABEL(m_label) ) ); } void wxDataViewColumn::SetBitmap( const wxBitmap &bitmap ) { wxDataViewColumnBase::SetBitmap( bitmap ); - GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(m_column); if (bitmap.Ok()) { - GtkImage *gtk_image = GTK_IMAGE( gtk_image_new() ); + GtkImage *gtk_image = GTK_IMAGE(m_image); GdkBitmap *mask = (GdkBitmap *) NULL; if (bitmap.GetMask()) @@ -2527,13 +2525,11 @@ void wxDataViewColumn::SetBitmap( const wxBitmap &bitmap ) gtk_image_set_from_pixmap(GTK_IMAGE(gtk_image), bitmap.GetPixmap(), mask); } - gtk_widget_show( GTK_WIDGET(gtk_image) ); - - gtk_tree_view_column_set_widget( column, GTK_WIDGET(gtk_image) ); + gtk_widget_show( m_image ); } else { - gtk_tree_view_column_set_widget( column, NULL ); + gtk_widget_hide( m_image ); } } diff --git a/src/mac/carbon/dataview.cpp b/src/mac/carbon/dataview.cpp index c3ee3ab5c7..99b593cdb9 100644 --- a/src/mac/carbon/dataview.cpp +++ b/src/mac/carbon/dataview.cpp @@ -174,13 +174,23 @@ static bool InitializeColumnDescription(DataBrowserListViewColumnDesc& columnDes } /* switch */ columnDescription.headerBtnDesc.btnFontStyle.font = kControlFontViewSystemFont; columnDescription.headerBtnDesc.btnFontStyle.style = normal; - columnDescription.headerBtnDesc.btnContentInfo.contentType = kControlContentIconRef; - if (columnPtr->GetBitmap().Ok()) + if (columnPtr->GetBitmap().IsOk()) + { + columnDescription.headerBtnDesc.btnContentInfo.contentType = kControlContentIconRef; #if wxCHECK_VERSION(2,9,0) columnDescription.headerBtnDesc.btnContentInfo.u.iconRef = columnPtr->GetBitmap().GetIconRef(); #else columnDescription.headerBtnDesc.btnContentInfo.u.iconRef = columnPtr->GetBitmap().GetBitmapData()->GetIconRef(); #endif + } + else + { + // not text only as we otherwise could not add a bitmap later + // columnDescription.headerBtnDesc.btnContentInfo.contentType = kControlContentTextOnly; + columnDescription.headerBtnDesc.btnContentInfo.contentType = kControlContentIconRef; + columnDescription.headerBtnDesc.btnContentInfo.u.iconRef = NULL; + } + // done: return true; } /* InitializeColumnDescription(DataBrowserListViewColumnDesc&, wxDataViewColumn const*, DataBrowserPropertyID, wxMacCFStringHolder const&) */