/*
NoteBooks (avec menu de navigation)
http://www.gtk-fr.org/wakka.php?wiki=LesPagesAOnglets
gcc `pkg-config --cflags --libs gtk+-2.0` -o 21b 21b.c &&./21b
*/
#include <stdlib.h>
#include <gtk/gtk.h>
void OnButton(GtkWidget *pButton, gpointer data);
int main(int argc, char **argv)
{
GtkWidget *pWindow;
GtkWidget *pVBox;
GtkWidget *pNotebook;
GtkWidget *pButton;
gint i;
gtk_init(&argc,&argv);
pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(pWindow), "GtkNotebook");
gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
pVBox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(pWindow), pVBox);
pButton = gtk_button_new_with_label("Informations");
gtk_box_pack_start(GTK_BOX(pVBox), pButton, FALSE, FALSE, 0);
/* Creation du GtkNotebook */
pNotebook = gtk_notebook_new();
gtk_box_pack_start(GTK_BOX(pVBox), pNotebook, TRUE, TRUE, 0);
/* Position des onglets : en bas */
gtk_notebook_set_tab_pos(GTK_NOTEBOOK(pNotebook), GTK_POS_BOTTOM);
/* Ajout des boutons de navigation */
gtk_notebook_set_scrollable(GTK_NOTEBOOK(pNotebook), TRUE);
for(i = 0 ; i < 8 ; ++i)
{
GtkWidget *pLabel;
GtkWidget *pTabLabel;
GtkWidget *pMenuLabel;
gchar *sLabel;
gchar *sTabLabel;
gchar *sMenuLabel;
sLabel = g_strdup_printf("Je suis le GtkLabel numero %d", i);
sTabLabel = g_strdup_printf("Page %d", i);
sMenuLabel = g_strdup_printf("Menu -> Page %d", i);
/* Creation des differents GtkLabel */
pLabel = gtk_label_new(sLabel);
pTabLabel = gtk_label_new(sTabLabel);
pMenuLabel = gtk_label_new(sMenuLabel);
/* Insertion de la page */
gtk_notebook_append_page_menu(GTK_NOTEBOOK(pNotebook), pLabel, pTabLabel, pMenuLabel);
g_free(sLabel);
g_free(sTabLabel);
g_free(sMenuLabel);
}
/* Activation du menu popup */
gtk_notebook_popup_enable(GTK_NOTEBOOK(pNotebook));
g_signal_connect(G_OBJECT(pButton), "clicked", G_CALLBACK(OnButton), pNotebook);
gtk_widget_show_all(pWindow);
gtk_main();
return EXIT_SUCCESS;
}
void OnButton(GtkWidget *pButton, gpointer data)
{
GtkWidget *pDialog;
GtkWidget *pChild;
gint iPageNum;
const gchar *sLabel;
const gchar *sTabLabel;
const gchar *sMenuLabel;
gchar *sDialogText;
/* Recuperation de la page active */
iPageNum = gtk_notebook_get_current_page(GTK_NOTEBOOK(data));
/* Recuperation du widget enfant */
pChild = gtk_notebook_get_nth_page(GTK_NOTEBOOK(data), iPageNum);
/* Recuperation du label */
sLabel = gtk_label_get_text(GTK_LABEL(pChild));
/* Recuperation du label de l'onglet */
sTabLabel = gtk_notebook_get_tab_label_text(GTK_NOTEBOOK(data), pChild);
/* Recuperation du label du menu pop-up */
sMenuLabel = gtk_notebook_get_menu_label_text(GTK_NOTEBOOK(data), pChild);
/* Creation du label de la boite de dialogue */
sDialogText = g_strdup_printf("C'est la page %d\n"
"Le label est \"%s\"\n"
"Le label de l'onglet est \"%s\"\n"
"Le label du menu est \"%s\"\n",
iPageNum,
sLabel,
sTabLabel,
sMenuLabel);
pDialog = gtk_message_dialog_new (NULL,
GTK_DIALOG_MODAL,
GTK_MESSAGE_INFO,
GTK_BUTTONS_OK,
sDialogText);
gtk_dialog_run(GTK_DIALOG(pDialog));
gtk_widget_destroy(pDialog);
g_free(sDialogText);
}