Applied patch [ 579219 ] wxNotebook:SetPadding added
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
This commit is contained in:
@@ -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)
|
||||
|
Reference in New Issue
Block a user