Чтение онлайн

на главную - закладки

Жанры

Основы программирования в 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;

Поделиться:
Популярные книги

Лекарь Империи 5

Карелин Сергей Витальевич
5. Лекарь Империи
Фантастика:
городское фэнтези
аниме
героическая фантастика
попаданцы
5.00
рейтинг книги
Лекарь Империи 5

Петля, Кадетский корпус. Книга первая

Алексеев Евгений Артемович
1. Петля
Фантастика:
боевая фантастика
попаданцы
аниме
6.11
рейтинг книги
Петля, Кадетский корпус. Книга первая

На границе империй. Том 9. Часть 3

INDIGO
16. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 3

Тринадцатый VIII

NikL
8. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый VIII

Черный маг императора

Герда Александр
1. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Черный маг императора

Революция

Валериев Игорь
9. Ермак
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Революция

Переиграть войну! Пенталогия

Рыбаков Артем Олегович
Переиграть войну!
Фантастика:
героическая фантастика
альтернативная история
8.25
рейтинг книги
Переиграть войну! Пенталогия

Золушка вне правил

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.83
рейтинг книги
Золушка вне правил

На границе империй. Том 7. Часть 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
На границе империй. Том 7. Часть 4

Петля, Кадетский корпус. Книга третья

Алексеев Евгений Артемович
3. Петля
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Петля, Кадетский корпус. Книга третья

Я все еще барон

Дрейк Сириус
4. Дорогой барон!
Фантастика:
боевая фантастика
5.00
рейтинг книги
Я все еще барон

Проданная Истинная. Месть по-драконьи

Белова Екатерина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Проданная Истинная. Месть по-драконьи

Диверсант

Вайс Александр
2. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Диверсант

Отмороженный 9.0

Гарцевич Евгений Александрович
9. Отмороженный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Отмороженный 9.0