static GnomeUIInfo filemenu[] = {
GNOMEUIINFO_MENU_NEW_ITEM("_New CD", NULL, on_addcd_activate, NULL),
GNOMEUIINFO_SEPARATOR,
GNOMEUIINFO_MENU_EXIT_ITEM(close_app, NULL),
GNOMEUIINFO_END
};
static GnomeUIInfo helpmenu[] = {
GNOMEUIINFO_MENU_ABOUT_ITEM(on_about_activate, NULL),
GNOMEUIINFO_END
};
static GnomeUIInfo menubar[] = {
GNOMEUIINFO_MENU_FILE_TREE(filemenu),
GNOMEUIINFO_MENU_HELP_TREE(helpmenu),
GNOMEUIINFO_END
};
5. Теперь вы создаете главное окно, вставляете меню и панель инструментов, задаете их размер, центрируете относительно экрана и собираете виджеты, формирующие интерфейс. Учтите, что эта функция не отображает окно на экране, а просто возвращает указатель на окно:
GtkWidget *create_main_window() {
GtkWidget* toolbar;
GtkWidget* vbox;
GtkWidget* hbox;
GtkWidget* label;
GtkWidget* entry;
GtkWidget *search_button;
GtkWidget* scrolledwindow;
GtkCellRenderer *renderer;
app = gnome_app_new("GnomeCD", "CD Database");
gtk_window_set_position(GTK_WINDOW(app), GTK_WIN_POS_CENTER);
gtk_window_set_defeult_size(GTK_WINDOW(app ), 540, 480);
gnome_app_create_menus(GNOME_APP(app), menubar);
6. Создайте панель инструментов с помощью стандартных пиктограмм GTK+ и свяжите с ней функции обратного вызова:
toolbar = gtk_toolbar_new();
gnome_app_add_toolbar(GNOME_APP(app), GTK_TOOLBAR(toolbar),
"toolbar", BONOBO_DOCK_ITEM_BEH_EXCLUSIVE,
BONOBO_DOCK_TOP, 1, 0, 0);
gtk_container_set_border_width(GTK_CONTAINER(toolbar), 1);
gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), "gtk-add", "Add new CD",
NULL, GTK_SIGNAL_FUNC(on_addcd_activate), NULL, -1);
gtk_toolbar_insert_space(GTK_TOOLBAR(toolbar), 1);
gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), "gtk-quit",
"Quit the Application", NULL, GTK_SIGNAL_FUNC(on_quit_activate), NULL, -1);
7. Затем вы создаете виджеты, используемые для поиска компакт-диска:
label = gtk_label_new("Search String:");
entry = gtk_entry_new();
search_button = gtk_button_new_with_label("Search");
8. Окно gtk_scrolled_window
предоставляет полосы прокрутки, позволяя виджету (в данном случае GtkTreeView
) превышать размеры окна:
scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
9. Далее скомпонуйте интерфейс, применяя стандартным способом виджеты-контейнеры:
vbox = gtk_vbox_new(FALSE, 0);
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 6);
gtk_box_pack_start(GTK_BOX(hbox), search_button, FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(vbox), scrolledwindow, TRUE, TRUE, 0);
10. Затем создайте виджет GtkTreeView
, вставьте три столбца и поместите его в окно GtkScrolledWindow
:
treeview = gtk_tree_view_new();
renderer = gtk_cell_renderer_text_new();