]> git.saurik.com Git - wxWidgets.git/commitdiff
Applied patch [ 579219 ] wxNotebook:SetPadding added
authorJulian Smart <julian@anthemion.co.uk>
Thu, 8 Aug 2002 10:11:32 +0000 (10:11 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Thu, 8 Aug 2002 10:11:32 +0000 (10:11 +0000)
This allows changing the padding of the icons and text
in the tab of a wxNotebook for wxGTK.

Since the container in the tab is only a horizontal
container only the width component is used. Negative
values are acceptable so no checks were made.

It now defaults to a padding of 0 on the sides and 1 in
between the icon and label, looks good for a few
"themes" I tried.

Note: Unfortunately there is no function to set the
padding on the left or right side of a widget.
gtk_box_set_child_packing sets padding on BOTH sides of
a widget so you'd get double the spacing between an
icon and the label. To get around this, the icon (if
there was one) is removed and added back. That way the
icon will provide the padding on the left and the label
will provide the padding between and to the right. It
looks nice for all sizes. The
gtk_container_set_border_width unforuntately only adds
borders to ALL sides equally.

A simple check is to add m_notebook->SetPadding in one
in the spinctrl callback in the controls sample. (set
appropriate range too -10,20). Note that the tab sizes
change to fit the width of the panel, if appropriate,
and so the spacing between the icon and label changes
accordingly. This isn't a bug, but it does look weird
as you scan up and down the spacing (which nobody would
normally do).

I also changed all wxGtkNotebookPage variables to
nb_page so that "int page" would be used to mean the
page number. Just cosmetic for consistency with the
rest of the functions that were already like that.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16412 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/notebook.tex
include/wx/gtk/notebook.h
include/wx/gtk1/notebook.h
src/gtk/notebook.cpp
src/gtk1/notebook.cpp

index a35d4dd3f682c4a3b84c58d50dcbeaf9b3e878e6..9f91ec35dc05a2892da1f6c8856894d44f6143f7 100644 (file)
@@ -263,12 +263,16 @@ ownership of the image list, you must delete it yourself.
 
 Sets the amount of space around each page's icon and label, in pixels.
 
+{\bf NB:} The vertical padding cannot be changed in wxGTK.
+
 \membersection{wxNotebook::SetPageSize}\label{wxnotebooksetpagesize}
 
 \func{void}{SetPageSize}{\param{const wxSize\&}{ size}}
 
 Sets the width and height of the pages.
 
+{\bf NB:} This method is currently not implemented for wxGTK.
+
 \membersection{wxNotebook::SetPageImage}\label{wxnotebooksetpageimage}
 
 \func{bool}{SetPageImage}{\param{int}{ page}, \param{int }{image}}
index d65e1a147971709b567e9879b19d9a25ba9f19b6..b046c6526136a1f7f903e616a6b75003496f82cf 100644 (file)
@@ -127,6 +127,9 @@ protected:
     virtual wxNotebookPage *DoRemovePage(int nPage);
 
 private:
+
+    int m_padding;
+
     DECLARE_DYNAMIC_CLASS(wxNotebook)
     DECLARE_EVENT_TABLE()
 };
index d65e1a147971709b567e9879b19d9a25ba9f19b6..b046c6526136a1f7f903e616a6b75003496f82cf 100644 (file)
@@ -127,6 +127,9 @@ protected:
     virtual wxNotebookPage *DoRemovePage(int nPage);
 
 private:
+
+    int m_padding;
+
     DECLARE_DYNAMIC_CLASS(wxNotebook)
     DECLARE_EVENT_TABLE()
 };
index edd509368564080fa147240dfcf19191f973c169..fe5e5417203b2317784fcbf7cb0a524d9663cd43 100644 (file)
@@ -190,8 +190,8 @@ static gint gtk_notebook_key_press_callback( GtkWidget *widget, GdkEventKey *gdk
     if ((gdk_event->keyval == GDK_Tab) || (gdk_event->keyval == GDK_ISO_Left_Tab))
     {
         int sel = win->GetSelection();
-        wxGtkNotebookPage *page = win->GetNotebookPage(sel);
-        wxCHECK_MSG( page, FALSE, _T("invalid selection in wxNotebook") );
+        wxGtkNotebookPage *nb_page = win->GetNotebookPage(sel);
+        wxCHECK_MSG( nb_page, FALSE, _T("invalid selection in wxNotebook") );
 
         wxNavigationKeyEvent event;
         event.SetEventObject( win );
@@ -235,6 +235,7 @@ END_EVENT_TABLE()
 
 void wxNotebook::Init()
 {
+    m_padding = 0;
     m_imageList = (wxImageList *) NULL;
     m_pagesData.DeleteContents( TRUE );
     m_selection = -1;
@@ -316,9 +317,9 @@ int wxNotebook::GetSelection() const
 
     if ( m_selection == -1 )
     {
-        GList *pages = GTK_NOTEBOOK(m_widget)->children;
+        GList *nb_pages = GTK_NOTEBOOK(m_widget)->children;
 
-        if (g_list_length(pages) != 0)
+        if (g_list_length(nb_pages) != 0)
         {
             GtkNotebook *notebook = GTK_NOTEBOOK(m_widget);
 
@@ -326,7 +327,7 @@ int wxNotebook::GetSelection() const
             if ( cur != NULL )
             {
                 wxConstCast(this, wxNotebook)->m_selection =
-                    g_list_index( pages, cur );
+                    g_list_index( nb_pages, cur );
             }
         }
     }
@@ -470,7 +471,7 @@ bool wxNotebook::SetPageImage( int page, int image )
         pixmapwid = gtk_pixmap_new (pixmap, mask );
 
         /* CHECKME: Are these pack flags okay? */
-        gtk_box_pack_start(GTK_BOX(nb_page->m_box), pixmapwid, FALSE, FALSE, 3);
+        gtk_box_pack_start(GTK_BOX(nb_page->m_box), pixmapwid, FALSE, FALSE, m_padding);
         gtk_widget_show(pixmapwid);
     }
     else
@@ -489,9 +490,31 @@ void wxNotebook::SetPageSize( const wxSize &WXUNUSED(size) )
     wxFAIL_MSG( wxT("wxNotebook::SetPageSize not implemented") );
 }
 
-void wxNotebook::SetPadding( const wxSize &WXUNUSED(padding) )
+void wxNotebook::SetPadding( const wxSize &padding )
 {
-    wxFAIL_MSG( wxT("wxNotebook::SetPadding not implemented") );
+    wxCHECK_RET( m_widget != NULL, wxT("invalid notebook") );
+
+    m_padding = padding.GetWidth();
+
+    int i;
+    for (i=0; i<int(GetPageCount()); i++)
+    {
+        wxGtkNotebookPage* nb_page = GetNotebookPage(i);
+        wxASSERT(nb_page != NULL);
+
+        if (nb_page->m_image != -1)
+        {
+            // gtk_box_set_child_packing sets padding on BOTH sides
+            // icon provides left padding, label provides center and right
+            int image = nb_page->m_image;
+            SetPageImage(i,-1);
+            SetPageImage(i,image);
+        }
+        wxASSERT(nb_page->m_label);
+        gtk_box_set_child_packing(GTK_BOX(nb_page->m_box),
+                                  GTK_WIDGET(nb_page->m_label),
+                                  FALSE, FALSE, m_padding, GTK_PACK_END);
+    }
 }
 
 void wxNotebook::SetTabSize(const wxSize& WXUNUSED(sz))
@@ -569,30 +592,30 @@ bool wxNotebook::InsertPage( int position,
 
     GtkNotebook *notebook = GTK_NOTEBOOK(m_widget);
 
-    wxGtkNotebookPage *page = new wxGtkNotebookPage();
+    wxGtkNotebookPage *nb_page = new wxGtkNotebookPage();
 
     if ( position == GetPageCount() )
-        m_pagesData.Append( page );
+        m_pagesData.Append( nb_page );
     else
-        m_pagesData.Insert( m_pagesData.Item( position ), page );
+        m_pagesData.Insert( m_pagesData.Item( position ), nb_page );
 
     m_pages.Insert(win, position);
 
-    page->m_box = gtk_hbox_new( FALSE, 0 );
-    gtk_container_border_width( GTK_CONTAINER(page->m_box), 2 );
+    nb_page->m_box = gtk_hbox_new( FALSE, 1 );
+    gtk_container_border_width( GTK_CONTAINER(nb_page->m_box), 2 );
 
     gtk_signal_connect( GTK_OBJECT(win->m_widget), "size_allocate",
       GTK_SIGNAL_FUNC(gtk_page_size_callback), (gpointer)win );
 
     if (position < 0)
-        gtk_notebook_append_page( notebook, win->m_widget, page->m_box );
+        gtk_notebook_append_page( notebook, win->m_widget, nb_page->m_box );
     else
-        gtk_notebook_insert_page( notebook, win->m_widget, page->m_box, position );
+        gtk_notebook_insert_page( notebook, win->m_widget, nb_page->m_box, position );
 
-    page->m_page = (GtkNotebookPage*) g_list_last(notebook->children)->data;
+    nb_page->m_page = (GtkNotebookPage*) g_list_last(notebook->children)->data;
 
     /* set the label image */
-    page->m_image = imageId;
+    nb_page->m_image = imageId;
 
     if (imageId != -1)
     {
@@ -608,21 +631,20 @@ bool wxNotebook::InsertPage( int position,
 
         GtkWidget *pixmapwid = gtk_pixmap_new (pixmap, mask );
 
-        gtk_box_pack_start(GTK_BOX(page->m_box), pixmapwid, FALSE, FALSE, 3);
+        gtk_box_pack_start(GTK_BOX(nb_page->m_box), pixmapwid, FALSE, FALSE, m_padding);
 
         gtk_widget_show(pixmapwid);
     }
 
     /* set the label text */
-    page->m_text = text;
-    if (page->m_text.IsEmpty()) page->m_text = wxT("");
-
-    page->m_label = GTK_LABEL( gtk_label_new( wxGTK_CONV( page->m_text ) ) );
-    gtk_box_pack_end( GTK_BOX(page->m_box), GTK_WIDGET(page->m_label), FALSE, FALSE, 3 );
-
+    nb_page->m_text = text;
+    if (nb_page->m_text.IsEmpty()) nb_page->m_text = wxT("");
+  
+    nb_page->m_label = GTK_LABEL( gtk_label_new(nb_page->m_text.mbc_str()) );
+    gtk_box_pack_end( GTK_BOX(nb_page->m_box), GTK_WIDGET(nb_page->m_label), FALSE, FALSE, m_padding );
+  
     /* show the label */
-    gtk_widget_show( GTK_WIDGET(page->m_label) );
-
+    gtk_widget_show( GTK_WIDGET(nb_page->m_label) );
     if (select && (m_pagesData.GetCount() > 1))
     {
         if (position < 0)
index edd509368564080fa147240dfcf19191f973c169..fe5e5417203b2317784fcbf7cb0a524d9663cd43 100644 (file)
@@ -190,8 +190,8 @@ static gint gtk_notebook_key_press_callback( GtkWidget *widget, GdkEventKey *gdk
     if ((gdk_event->keyval == GDK_Tab) || (gdk_event->keyval == GDK_ISO_Left_Tab))
     {
         int sel = win->GetSelection();
-        wxGtkNotebookPage *page = win->GetNotebookPage(sel);
-        wxCHECK_MSG( page, FALSE, _T("invalid selection in wxNotebook") );
+        wxGtkNotebookPage *nb_page = win->GetNotebookPage(sel);
+        wxCHECK_MSG( nb_page, FALSE, _T("invalid selection in wxNotebook") );
 
         wxNavigationKeyEvent event;
         event.SetEventObject( win );
@@ -235,6 +235,7 @@ END_EVENT_TABLE()
 
 void wxNotebook::Init()
 {
+    m_padding = 0;
     m_imageList = (wxImageList *) NULL;
     m_pagesData.DeleteContents( TRUE );
     m_selection = -1;
@@ -316,9 +317,9 @@ int wxNotebook::GetSelection() const
 
     if ( m_selection == -1 )
     {
-        GList *pages = GTK_NOTEBOOK(m_widget)->children;
+        GList *nb_pages = GTK_NOTEBOOK(m_widget)->children;
 
-        if (g_list_length(pages) != 0)
+        if (g_list_length(nb_pages) != 0)
         {
             GtkNotebook *notebook = GTK_NOTEBOOK(m_widget);
 
@@ -326,7 +327,7 @@ int wxNotebook::GetSelection() const
             if ( cur != NULL )
             {
                 wxConstCast(this, wxNotebook)->m_selection =
-                    g_list_index( pages, cur );
+                    g_list_index( nb_pages, cur );
             }
         }
     }
@@ -470,7 +471,7 @@ bool wxNotebook::SetPageImage( int page, int image )
         pixmapwid = gtk_pixmap_new (pixmap, mask );
 
         /* CHECKME: Are these pack flags okay? */
-        gtk_box_pack_start(GTK_BOX(nb_page->m_box), pixmapwid, FALSE, FALSE, 3);
+        gtk_box_pack_start(GTK_BOX(nb_page->m_box), pixmapwid, FALSE, FALSE, m_padding);
         gtk_widget_show(pixmapwid);
     }
     else
@@ -489,9 +490,31 @@ void wxNotebook::SetPageSize( const wxSize &WXUNUSED(size) )
     wxFAIL_MSG( wxT("wxNotebook::SetPageSize not implemented") );
 }
 
-void wxNotebook::SetPadding( const wxSize &WXUNUSED(padding) )
+void wxNotebook::SetPadding( const wxSize &padding )
 {
-    wxFAIL_MSG( wxT("wxNotebook::SetPadding not implemented") );
+    wxCHECK_RET( m_widget != NULL, wxT("invalid notebook") );
+
+    m_padding = padding.GetWidth();
+
+    int i;
+    for (i=0; i<int(GetPageCount()); i++)
+    {
+        wxGtkNotebookPage* nb_page = GetNotebookPage(i);
+        wxASSERT(nb_page != NULL);
+
+        if (nb_page->m_image != -1)
+        {
+            // gtk_box_set_child_packing sets padding on BOTH sides
+            // icon provides left padding, label provides center and right
+            int image = nb_page->m_image;
+            SetPageImage(i,-1);
+            SetPageImage(i,image);
+        }
+        wxASSERT(nb_page->m_label);
+        gtk_box_set_child_packing(GTK_BOX(nb_page->m_box),
+                                  GTK_WIDGET(nb_page->m_label),
+                                  FALSE, FALSE, m_padding, GTK_PACK_END);
+    }
 }
 
 void wxNotebook::SetTabSize(const wxSize& WXUNUSED(sz))
@@ -569,30 +592,30 @@ bool wxNotebook::InsertPage( int position,
 
     GtkNotebook *notebook = GTK_NOTEBOOK(m_widget);
 
-    wxGtkNotebookPage *page = new wxGtkNotebookPage();
+    wxGtkNotebookPage *nb_page = new wxGtkNotebookPage();
 
     if ( position == GetPageCount() )
-        m_pagesData.Append( page );
+        m_pagesData.Append( nb_page );
     else
-        m_pagesData.Insert( m_pagesData.Item( position ), page );
+        m_pagesData.Insert( m_pagesData.Item( position ), nb_page );
 
     m_pages.Insert(win, position);
 
-    page->m_box = gtk_hbox_new( FALSE, 0 );
-    gtk_container_border_width( GTK_CONTAINER(page->m_box), 2 );
+    nb_page->m_box = gtk_hbox_new( FALSE, 1 );
+    gtk_container_border_width( GTK_CONTAINER(nb_page->m_box), 2 );
 
     gtk_signal_connect( GTK_OBJECT(win->m_widget), "size_allocate",
       GTK_SIGNAL_FUNC(gtk_page_size_callback), (gpointer)win );
 
     if (position < 0)
-        gtk_notebook_append_page( notebook, win->m_widget, page->m_box );
+        gtk_notebook_append_page( notebook, win->m_widget, nb_page->m_box );
     else
-        gtk_notebook_insert_page( notebook, win->m_widget, page->m_box, position );
+        gtk_notebook_insert_page( notebook, win->m_widget, nb_page->m_box, position );
 
-    page->m_page = (GtkNotebookPage*) g_list_last(notebook->children)->data;
+    nb_page->m_page = (GtkNotebookPage*) g_list_last(notebook->children)->data;
 
     /* set the label image */
-    page->m_image = imageId;
+    nb_page->m_image = imageId;
 
     if (imageId != -1)
     {
@@ -608,21 +631,20 @@ bool wxNotebook::InsertPage( int position,
 
         GtkWidget *pixmapwid = gtk_pixmap_new (pixmap, mask );
 
-        gtk_box_pack_start(GTK_BOX(page->m_box), pixmapwid, FALSE, FALSE, 3);
+        gtk_box_pack_start(GTK_BOX(nb_page->m_box), pixmapwid, FALSE, FALSE, m_padding);
 
         gtk_widget_show(pixmapwid);
     }
 
     /* set the label text */
-    page->m_text = text;
-    if (page->m_text.IsEmpty()) page->m_text = wxT("");
-
-    page->m_label = GTK_LABEL( gtk_label_new( wxGTK_CONV( page->m_text ) ) );
-    gtk_box_pack_end( GTK_BOX(page->m_box), GTK_WIDGET(page->m_label), FALSE, FALSE, 3 );
-
+    nb_page->m_text = text;
+    if (nb_page->m_text.IsEmpty()) nb_page->m_text = wxT("");
+  
+    nb_page->m_label = GTK_LABEL( gtk_label_new(nb_page->m_text.mbc_str()) );
+    gtk_box_pack_end( GTK_BOX(nb_page->m_box), GTK_WIDGET(nb_page->m_label), FALSE, FALSE, m_padding );
+  
     /* show the label */
-    gtk_widget_show( GTK_WIDGET(page->m_label) );
-
+    gtk_widget_show( GTK_WIDGET(nb_page->m_label) );
     if (select && (m_pagesData.GetCount() > 1))
     {
         if (position < 0)