TOC

タブアプリに

Webブラウザも現在はTabブラウザ(e.g. firefox, IE7, opera...)が多くなりましたが、タブでページを切り替えられると便利なことがあります。GTK+ではそれをNotebook Widgetを使って表現します。

#include <gtk/gtk.h>

int main(int argc,char *argv[]){
  GtkWidget *window;
  GtkWidget *vbox;
  GtkWidget *menubar;
  GtkWidget *tablabel;
  GtkWidget *label;
  GtkWidget *label2;
  GtkWidget *notebook;
  GtkWidget *statusbar;
  GtkWidget *file_menu;
  GtkWidget *help_menu;
  GtkWidget *File_Item;
  GtkWidget *Load_item;
  GtkWidget *Quit_item;
  GtkWidget *Help_Item;
  GtkWidget *About_item;
  gtk_init(&argc,&argv);
  window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title(GTK_WINDOW(window),"Program");
  gtk_window_set_default_size(GTK_WINDOW(window),640,480);
  vbox=gtk_vbox_new(FALSE,0);
  gtk_container_add(GTK_CONTAINER(window),vbox);

  menubar=gtk_menu_bar_new();
  gtk_box_pack_start(GTK_BOX(vbox),menubar,FALSE,TRUE,0);

  file_menu=gtk_menu_new();
  File_Item=gtk_menu_item_new_with_label("File");
  Load_item=gtk_menu_item_new_with_label("Load");
  Quit_item=gtk_menu_item_new_with_label("Quit");

  gtk_menu_shell_append (GTK_MENU_SHELL (file_menu), Load_item);
  gtk_menu_shell_append (GTK_MENU_SHELL (file_menu), Quit_item);
  gtk_menu_item_set_submenu (GTK_MENU_ITEM (File_Item), file_menu);
  gtk_menu_shell_append (GTK_MENU_SHELL (menubar), File_Item);
  gtk_widget_show(Load_item);
  gtk_widget_show(Quit_item);
  gtk_widget_show(File_Item);
  gtk_widget_show(file_menu);

  help_menu=gtk_menu_new();
  Help_Item=gtk_menu_item_new_with_label("Help");
  About_item=gtk_menu_item_new_with_label("About");

  gtk_menu_shell_append (GTK_MENU_SHELL (help_menu), About_item);
  gtk_menu_item_set_submenu (GTK_MENU_ITEM (Help_Item), help_menu);
  gtk_menu_shell_append (GTK_MENU_SHELL (menubar), Help_Item);
  gtk_widget_show(About_item);
  gtk_widget_show(Help_Item);
  gtk_widget_show(help_menu);

  gtk_widget_show(menubar);

  tablabel=gtk_label_new("tab");
  label=gtk_label_new("Hello World");
  label2=gtk_label_new("Hello World2");

  notebook=gtk_notebook_new();
  gtk_notebook_append_page(GTK_NOTEBOOK(notebook),label,tablabel);
  gtk_notebook_append_page(GTK_NOTEBOOK(notebook),label2,NULL);
  gtk_box_pack_start(GTK_BOX(vbox),notebook,TRUE,TRUE,0);
  gtk_widget_show(tablabel);
  gtk_widget_show(label);
  gtk_widget_show(label2);
  gtk_widget_show(notebook);

  statusbar=gtk_statusbar_new();
  gtk_box_pack_start(GTK_BOX(vbox),statusbar,FALSE,TRUE,0);
  gtk_statusbar_push(GTK_STATUSBAR(statusbar),1,"Hello World");

  gtk_widget_show(statusbar);

  gtk_widget_show(vbox);
  gtk_widget_show(window);

  g_signal_connect(Quit_item,"activate",gtk_main_quit,NULL);
  g_signal_connect(window,"destroy",gtk_main_quit,NULL);

  gtk_main();
  return 0;
}

解説

内容は前回の「メニューバー+ステータスバー」と殆どかわりませんが、新たにnokebookが追加されています。gtk_notebook_new()でノートブックを作成し、gtk_notebook_append_page()でページを増やしています。このプログラムの場合、ページは2ページあり、1ページ目はタブの名前が「tab」であるのに対し、2ページ目はデフォルトです。

戻る / index