GtkNotebook

only for RuBoard - do not distribute or recompile

GtkNotebook

The GtkNotebook widget is what VB developers might be used to calling a tab control. It has a number of tabs that the user clicks on to allow controls to exist in the same space; it hides and shows groups of controls at the same time, which have been placed together on a page (meaning that a tab shows a page, to use the terminology of some Windows tab controls).

The demo Notebook program is shown in Figure 4.6; its associated listing is of course Listing 4.6. In this program, note that you can add pages dynamically (as you can with all GTK+ widgets).

Figure 4.6. The GtkNotebook demo program running.
graphics/04fig06.gif
Listing 4.6 GtkNotebook Demo
 #include <gtk/gtk.h>  GtkWidget *frm_notebook;  GtkWidget *notebook_main;  GtkWidget *fixed_page1;  GtkWidget *vbox_page2;  void destroy_main();  void cmd_rotate_tabs_clicked();  void cmd_set_tabs_homogeneous_clicked();  void cmd_set_tabs_heterogeneous_clicked();  void cmd_add_page_clicked();  void cmd_get_page_index_clicked();  void notebook_switch_page();  gint main(gint argc, gchar *argv[])  {    GtkWidget *cmd_rotate_tabs;     GtkWidget *cmd_set_tabs_homogeneous, *cmd_set_tabs_heterogeneous;     GtkWidget *cmd_add_page, *cmd_get_page_index;     GtkWidget *lbl_tab1, *lbl_tab2;     gtk_init(&argc, &argv);     frm_notebook = gtk_window_new(GTK_WINDOW_TOPLEVEL);     gtk_window_set_title(GTK_WINDOW(frm_notebook), "Notebook Window Demo");     gtk_signal_connect(GTK_OBJECT(frm_notebook),          "destroy",          GTK_SIGNAL_FUNC(destroy_main),          NULL);       notebook_main = gtk_notebook_new();     gtk_signal_connect(GTK_OBJECT(notebook_main),          "switch-page",          GTK_SIGNAL_FUNC(notebook_switch_page),          NULL);  /* Page 1 in the Notebook widget   */  fixed_page1 = gtk_fixed_new();     lbl_tab1 = gtk_label_new("Tab 1");     cmd_rotate_tabs = gtk_button_new_with_label("Rotate Tabs");     gtk_signal_connect(GTK_OBJECT(cmd_rotate_tabs),          "clicked",          GTK_SIGNAL_FUNC(cmd_rotate_tabs_clicked),          NULL);     cmd_set_tabs_homogeneous = gtk_button_new_with_label("Set Tabs Homogeneous");     gtk_signal_connect(GTK_OBJECT(cmd_set_tabs_homogeneous),          "clicked",          GTK_SIGNAL_FUNC(cmd_set_tabs_homogeneous_clicked),          NULL);     cmd_set_tabs_heterogeneous = gtk_button_new_with_label("Set Tabs  Heterogeneous");     gtk_signal_connect(GTK_OBJECT(cmd_set_tabs_heterogeneous),          "clicked",          GTK_SIGNAL_FUNC(cmd_set_tabs_heterogeneous_clicked),          NULL);     gtk_fixed_put(GTK_FIXED(fixed_page1), cmd_rotate_tabs, 20, 20);     gtk_fixed_put(GTK_FIXED(fixed_page1), cmd_set_tabs_homogeneous, 20, 50);     gtk_fixed_put(GTK_FIXED(fixed_page1), cmd_set_tabs_heterogeneous, 20, 80);     gtk_notebook_append_page(GTK_NOTEBOOK(notebook_main), fixed_page1, lbl_tab1);  /* Now page 2   */  vbox_page2 = gtk_vbox_new(TRUE, 0);     cmd_add_page = gtk_button_new_with_label("Add a Page");     gtk_signal_connect(GTK_OBJECT(cmd_add_page),          "clicked",          GTK_SIGNAL_FUNC(cmd_add_page_clicked),          NULL);     cmd_get_page_index = gtk_button_new_with_label("Get Page Index");     gtk_signal_connect(GTK_OBJECT(cmd_get_page_index),          "clicked",          GTK_SIGNAL_FUNC(cmd_get_page_index_clicked),          NULL);     gtk_box_pack_start_defaults(GTK_BOX(vbox_page2), cmd_add_page);     gtk_box_pack_start_defaults(GTK_BOX(vbox_page2), cmd_get_page_index);     lbl_tab2 = gtk_label_new("Second Tab");     gtk_notebook_append_page(GTK_NOTEBOOK(notebook_main), vbox_page2, lbl_tab2);  /* End of second tab. You're ready for the final assembly of the   * main window.   */  gtk_container_add(GTK_CONTAINER(frm_notebook), notebook_main);     gtk_widget_show_all (frm_notebook);     gtk_main ();     return 0;  }  void destroy_main()  {   gtk_main_quit();  }  void cmd_rotate_tabs_clicked()  {    static gint tab_location = 1;     if (tab_location == 4)         tab_location = 1;     else tab_location++;     switch (tab_location)     {       case 1: gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook_main), GTK_POS_TOP);                break;        case 2: gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook_main), GTK_POS_RIGHT);                break;        case 3: gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook_main), GTK_POS_BOTTOM);                break;        case 4: gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook_main), GTK_POS_LEFT);                break;        default: g_print("Should never reach this line.\n");     }  }  void cmd_set_tabs_homogeneous_clicked()  {    gtk_notebook_set_homogeneous_tabs(GTK_NOTEBOOK(notebook_main), TRUE);  }  void cmd_set_tabs_heterogeneous_clicked()    {  /* You will notice that this has no effect when the location of the   * tabs is left or right. The behavior is the same as that of the   *  cmd_set_tabs_homogeneous_clicked()  * call in that case.   */  gtk_notebook_set_homogeneous_tabs(GTK_NOTEBOOK(notebook_main), FALSE);  }  void cmd_add_page_clicked()  {    GtkWidget *fixed;     GtkWidget *lbl;     fixed = gtk_fixed_new();     lbl = gtk_label_new("New");     gtk_notebook_append_page(GTK_NOTEBOOK(notebook_main), fixed, lbl);  /* Again, the following acts as a "refresh" command.   */  gtk_widget_show_all(notebook_main);  }  void cmd_get_page_index_clicked()  {  /* Notebook page indices are zero-based. */  g_print("Page index is %i.\n",  gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook_main)));  }  void notebook_switch_page()  {    g_print("page switched.\n");  } 
only for RuBoard - do not distribute or recompile


MySQL Building User Interfaces
MySQL: Building User Interfaces (Landmark)
ISBN: 073571049X
EAN: 2147483647
Year: 2001
Pages: 119

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net