]> git.saurik.com Git - wxWidgets.git/commitdiff
Corrected/added support for column headers with icon and text
authorRobert Roebling <robert@roebling.de>
Sat, 12 Apr 2008 20:07:53 +0000 (20:07 +0000)
committerRobert Roebling <robert@roebling.de>
Sat, 12 Apr 2008 20:07:53 +0000 (20:07 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53147 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/dataview.h
samples/dataview/dataview.cpp
src/gtk/dataview.cpp
src/mac/carbon/dataview.cpp

index 52f89899c400e3f5e224614352c6651604e556a2..244ca45410bdfc653ca91ed30c8268771b138e74 100644 (file)
@@ -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();
index 14d66161b27985381935f8f89099188e399a99bc..be5ccb6f31ff02e101f3a1b33663268dc3e6b4f4 100644 (file)
@@ -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 );
index 518590545fe9d0ff91e7c8425f8a6646e0fbe641..f93c64c06dc08bfdff4298fc0a66e22ac79725e9 100644 (file)
@@ -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 );
     }
 }
 
index c3ee3ab5c7893a9132a9a93dcf6c2f1fcfa8a459..99b593cdb93b90c9857e622f0e8d1fcad327ebb8 100644 (file)
@@ -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&) */