LINUX.ORG.RU

вопрос по GtkNotebook


0

0

Здравствуйте. У меня тута такой вопрос - есть GtkNotebook с кучей страниц, как обратиться к конкретной странице и получить ее свойства ? Конкретно - мне нужно при переключении между табами менять заголовок окна в соответствии с меткой на текущей странице.


#include <gtk/gtk.h>

gboolean switch_cb (GtkNotebook *nb, gpointer nb_page, gint page, gpointer data)
{
  GtkWidget *window = GTK_WIDGET(data);
  GtkWidget *child;
  GtkWidget *tab;
  
  child = gtk_notebook_get_nth_page (nb, page);
  tab = gtk_notebook_get_tab_label(nb, child);
  
  gtk_window_set_title (GTK_WINDOW(window), gtk_label_get_text (GTK_LABEL(tab)));
  
  return FALSE;
}

int main( int argc,
          char *argv[] )
{
    GtkWidget *window;
    GtkWidget *notebook;

    GtkWidget *label;
    GtkWidget *tab;
    int i;
    
    gtk_init (&argc, &argv);
    
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    
    g_signal_connect (G_OBJECT (window), "delete_event",
	              G_CALLBACK (gtk_main_quit), NULL);
    
    gtk_container_set_border_width (GTK_CONTAINER (window), 10);

    notebook = gtk_notebook_new ();
    
    g_signal_connect (G_OBJECT(notebook), "switch-page", G_CALLBACK(switch_cb), window);
    
    for (i = 0; i < 5; i++) 
    {   
        gchar *text;
	text = g_strdup_printf ("Label %d", i);

	label = gtk_label_new (text);
	tab = gtk_label_new (text);
	gtk_notebook_append_page (GTK_NOTEBOOK (notebook), label, tab);
	g_free (text);
    }
      
    gtk_container_add (GTK_CONTAINER (window), notebook);
    gtk_widget_show_all (window);
    
    
    gtk_main ();
    
    return 0;
}

anonymous
()
Ответ на: комментарий от anonymous

Ага, спасибо, я сам уже разобрался. Тут другой вопрос нарисовался - как мне сделать нечто подобное:

const gchar *buf = gtk_notebook_get_tab_label_text(notebook,num_child); gchar *t = "Conversation with "; gtk_window_set_title(GTK_WINDOW(win_fixed),t+buf);

Вот как мне правильно сложить два куска текста ?

NeoNMaN
() автор топика
Ответ на: комментарий от NeoNMaN

gchar *buf;

buf = g_strconcat ("Conversation with ", gtk_notebook_get_tab_label_text (notebook, num_child), NULL);
gtk_window_set_title (GTK_WINDOW(win), buf);
g_free (buf);

------------------------------------------
gchar *buf;

buf = g_strdup_printf ("Conversation with %s", gtk_notebook_get_tab_label_text (notebook, num_child));
gtk_window_set_title (GTK_WINDOW(win), buf);
g_free (buf);

anonymous
()
Ответ на: комментарий от NeoNMaN

#include <gtk/gtk.h>

int main( int argc,
          char *argv[] )
{
    GtkWidget *window;
    GtkWidget *notebook;
    GtkWidget *hbox;
    GtkWidget *image;

    GtkWidget *label;
    GtkWidget *tab;
    
    gtk_init (&argc, &argv);
    
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    
    g_signal_connect (G_OBJECT (window), "delete_event",
	              G_CALLBACK (gtk_main_quit), NULL);
    
    gtk_container_set_border_width (GTK_CONTAINER (window), 10);

    notebook = gtk_notebook_new ();
    
    hbox = gtk_hbox_new (0, FALSE);
    label = gtk_label_new ("Hello");
    tab = gtk_label_new ("World");
    image = gtk_image_new_from_stock (GTK_STOCK_OPEN,GTK_ICON_SIZE_MENU);
    gtk_box_pack_start (GTK_BOX(hbox),image, TRUE, TRUE,0);
    gtk_box_pack_start (GTK_BOX(hbox),tab, TRUE, TRUE, 0);
    gtk_widget_show_all (hbox);
    gtk_notebook_append_page (GTK_NOTEBOOK (notebook), label, hbox);

    gtk_container_add (GTK_CONTAINER (window), notebook);
    gtk_widget_show_all (window);
    
    
    gtk_main ();
    
    return 0;
}

anonymous
()
Ответ на: комментарий от anonymous

я так понимаю это добавляет изображение в качестве содержимого самой странички, а мне надо иконки непосредственно на заголовке, около лейбла

NeoNMaN
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.