Основы программирования в Linux
Шрифт:
/* Обратный вызов для выхода из приложения */
void quit_app(GtkWidget* window, gpointer data);
/* Обратный вызов для подтверждения завершения перед выходом */
gboolean delete_event_handler(GtkWidget* window, GdkEvent *event,
gpointer data);
/* Обратный вызов, связанный с сигналом отклика диалогового окна addcd */
void addcd_dialog_button_clicked(GtkDialog * dialog, gint response,
gpointer userdata);
/*
Обратный вызов для кнопки Add CD меню и панели инструментов */
void on_addcd_activate(GtkWidget *widget, gpointer user_data);
/* Обратный вызов для кнопки меню About */
void on_about_activate(GtkWidget* widget, gpointer user_data);
/* Обратный вызов для кнопки поиска */
void on_search_button_clicked(GtkWidget *widget, gpointer userdata);
Упражнение 16.12. Файл interface.c
Первым рассмотрим файл interface.c, в котором определяются окна и диалоговые окна, применяемые в приложении.
1. Сначала несколько указателей виджетов, на которые вы ссылаетесь в файлах callbacks.c и main.c:
#include "app_gnome.h"
GtkWidget* treeview;
GtkWidget* appbar;
GtkWidget* artist_entry;
GtkWidget *title_entry;
GtkWidget *catalogue_entry;
GtkWidget *username_entry;
GtkWidget *password_entry;
2.
app
— глобальная переменная, указатель на главное окно:
static GtkWidget *арр;
3. Определите вспомогательную функцию, которая вставляет в контейнер виджет-метку с заданным текстом:
void add_widget_with_label(GtkContainer *box,
gchar *caption, GtkWidget *widget) {
GtkWidget *label = gtk_label_new(caption);
GtkWidget *hbox = gtk_hbox_new(TRUE, 4);
gtk_container_add(GTK_CONTAINER(hbox), label);
gtk_container_add(GTK_CONTAINER(hbox), widget);
gtk_container_add(box, hbox);
}
4. Определения строки меню, использующие для удобства макросы
GNOMEUIINFO
:
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;
Поделиться:
Популярные книги
Наемник
1. Вселенная EVE Online
Фантастика:
боевая фантастика
8.50
рейтинг книги
Источники силы
4. Иной в голове
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Матабар
1. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Камень. Книга восьмая
8. Камень
Фантастика:
фэнтези
боевая фантастика
7.00
рейтинг книги
Твое сердце будет разбито. Книга 1
Любовные романы:
современные любовные романы
5.50
рейтинг книги
Первый среди равных. Книга VI
6. Первый среди Равных
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Вперед в прошлое 10
10. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Огненный князь
1. Багряный восход
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Авиатор: назад в СССР
1. Авиатор
Фантастика:
попаданцы
альтернативная история
5.25
рейтинг книги
Кодекс Охотника. Книга II
2. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
боевая фантастика
юмористическое фэнтези
5.00
рейтинг книги
Афганский рубеж
1. Рубеж
Фантастика:
попаданцы
альтернативная история
7.50
рейтинг книги
Моя Академия
1. Академка
Фантастика:
попаданцы
сказочная фантастика
фэнтези
4.50
рейтинг книги
Законы Рода. Том 3
3. Граф Берестьев
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Отморозок 3
3. Отморозок
Фантастика:
попаданцы
5.00