Основы программирования в Linux
Шрифт:
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;
gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview),
COLUMN_TITLE, "Title", renderer, "text", COLUMN_TITLE, NULL);
gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview),
COLUMN_ARTIST, "Artist", renderer, "text", CQLUMN_ARTIST, NULL);
gtk_tree_view_insert_column_with_attrihutes(GTK_TREE_VIEW(treeview),
COLUMN_CATALOGUE, "Catalogue", renderer, "text", COLUMN_CATALOGUE, NULL);
gtk_tree_view_set_search_column(GTK_TREE_VIEW(treeview),
COLUMN_TITLE);
gtk_container_add(GTK_CONTAINER(scrolledwindow), treeview);
11. В заключение задайте содержимое главного окна, вставьте строку состояния
GnomeApp
и подсоедините нужные обратные вызовы:
gnome_app_set_contents(GNOMEAPP(app), vbox);
appbar = gnome_appbar_new(FALSE, TRUE, GNOME_PREFERENCES_NEVER);
gnome_app_set_statusbar(GNOME_APP(app), appbar);
gnome_app_install_menu_hints(GNOME_APP(app), menubar);
g_signal_connect(GTK_OBJECT(search_button), "clicked",
GTK_SIGNAL_FUNC(on_search_button_clicked), entry);
g_signal_connect(GTK_OBJECT(app), "delete_event",
GTK_SIGNAL_FUNC(delete_event_handler), NULL);
g_signal_connect(GTK_OBJECT(app), "destroy",
GTK_SIGNAL_FUNC(quit_app), NULL);
return app;
}
12.
GtkWidget *create_addcd_dialog {
artist_entry = gtk_entry_new;
title_entry = gtk_entry_new;
catalogue_entry = gtk_entry_new;
GtkWidget* dialog = gtk_dialog_new_with_buttons("Add CD",
app,
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK,
GTK_RESPONSE_ACCEPT,
GTK_STOCK_CANCEL,
GTK_RESPONSE_REJECT,
NULL);
add_widget_with_label(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),
"Artist", artist_entry);
add_widget_with_label(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),
"Title", title_entry);
add_widget_with_label(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),
"Catalogue", catalogue_entry);
g_signal_connect(GTK_OBJECT(dialog), "response",
GTK_SIGNAL_FUNC(addcd_dialog_button_clicked), NULL);
return dialog;
}
13. База данных требует регистрации пользователя перед выполнением запросов к ней, поэтому данная функция создает диалоговое окно для ввода имени пользователя и пароля:
GtkWidget *create_login_dialog {
GtkWidget* dialog = gtk_dialog_new_with_buttons("Database Login",
app, GTK_DIALOG_MODAL, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL);
username_entry = gtk_entry_new;
password_entry = gtk_entry_new;
gtk_entry_set_visibility(GTK_ENTRY(password_entry), FALSE);
add_widget_with_label(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),
"Username", username_entry);
add_widget_with_label(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),
"Password", password_entry);
Поделиться:
Популярные книги
Древесный маг Орловского княжества
1. Орловское княжество
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Искатель 2
2. Валинор
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Древесный маг Орловского княжества 6
6. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Тринадцатый
Фантастика:
фэнтези
рпг
7.12
рейтинг книги
Академия
2. Медорфенов
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Потомок бога
1. Локки
Фантастика:
попаданцы
альтернативная история
аниме
сказочная фантастика
5.00
рейтинг книги
Неудержимый. Книга XIV
14. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Хозяин оков II
2. Хозяин Оков
Фантастика:
юмористическое фэнтези
попаданцы
фэнтези
5.00
рейтинг книги
На границе империй. Том 7. Часть 2
8. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
6.13
рейтинг книги
На границе империй. Том 10. Часть 8
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Геном хищника. Книга четвертая
4. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Имя нам Легион. Том 7
7. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Неудержимый. Книга XXVIII
28. Неудержимый
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Возлюбленная Яра
1. Яр и Алиса
Любовные романы:
остросюжетные любовные романы
эро литература
5.00