Основы программирования в Linux
Шрифт:
tree_store = gtk_tree_store_new(N_COLUMNS,
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
while (i < res1 && i < MAX_CD_RESULT) {
res2 = get_cd(cd_res.cd_id[i], &cd);
/* В модель вставляется новая строка */
gtk_tree_store_append(tree_store, &parent_iter, NULL);
gtk_tree_store_set(tree_store, &parent_iter, COLUMN_TITLE,
cd.title, COLUMN_ARTIST, cd.artist_name, COLUMN_CATALOGUE,
cd.catalogue, -1);
res3 = get_cd_tracks(cd_res.cd_id[i++], &ct);
j = 0;
/* Заполнение дерева дорожками текущего компакт-диска */
while (j < res3) {
sprintf(track_title, " Track %d. ", j+1);
strcat(track_title, ct.track[j++]);
gtk_tree_store_append(tree_store, &child_iter, &parent_iter);
gtk_tree_store_set(tree_store, &child_iter,
COLUMN_TITLE, track_title, -1);
}
}
gtk_tree_view_set_model(GTK_TREE_VIEW(treeview),
GTK_TREE_MODEL(tree_store));
}
10. Диалоговое окно
addcd
немодальное. Следовательно, перед его созданием и отображением вы проверяете, не активно ли оно уже:
void on_addcd_activate(GtkMenuItem* menuitem, gpointer user_data) {
if (addcd_dialog != NULL) return;
addcd_dialog = create_addcd_dialog;
gtk_widget_show_all(addcd_dialog);
}
gboolean close_app(GtkWidget * window, gpointer data) {
gboolean exit;
if ((exit = confirm_exit)) {
quit_app(NULL, NULL);
}
return exit;
}
11. Когда вы щелкаете мышью кнопку About (О программе), раскрывается стандартное поле
about
среды GNOME:
void on_about_activate(GtkMenuItem* menuitem, gpointer user_data) {
const char* authors[] = {"Wrox Press", NULL};
GtkWidget* about = gnome_about_new("CD Database", "1.0",
" (c) Wrox Press", "Beginning Linux Programming",
(const char **)authors, NULL, "Translators", NULL);
gtk_widget_show(about);
}
Упражнение 16.14. Файл main.c
Введите следующий программный код в файл main.с, содержащий функцию
main
программы. 1. После операторов
include
вы ссылаетесь на поля ввода имени пользователя и пароля из файла interface.c:
#include <stdio.h>
#include <stdlib.h>
#include "app_gnome.h"
extern GtkWidget* username_entry;
extern GtkWidget* password_entry;
gint main(gint argc, gchar *argv[]) {
GtkWidget *main_window;
GtkWidget *login_dialog;
const char *user_const;
const char *pass_const;
gchar username[100];
gchar password[100];
gint result;
2. Инициализируйте как обычно библиотеки GNOME и затем создайте и отобразите на экране главное окно и диалоговое окно вашей регистрации:
gnome_program_init("CdDatabase", "0.1", LIBGNOMEUI_MODULE, argc, argv,
GNOME_PARAM_APP_DATADIR, "", NULL);
main_window = create_main_window;
gtk_widget_show_all(main_window);
login_dialog = create_login_dialog;
3. Вы ждете в цикле, пока пользователь не введет корректную комбинацию имени пользователя и пароля. Он может выйти из приложения, щелкнув мышью кнопку Cancel, причем в этом случае ему придется подтвердить свое действие:
while (1) {
result = gtk_dialog_run(GTK_DIALOG(login_dialog));
if (result != GTK_RESPONSE_ACCEPT) {
if (confirm_exit) return 0;
else continue;
}
user_const = gtk_entry_get_text(GTK_ENTRY(username_entry));
pass_const = gtk_entry_get_text(GTK_ENTRY(password_entry));
strcpy(username, user_const);
strcpy(password, pass_const);
if (database_start(username, password) == TRUE) break;
4. Если функция
database_start
завершается аварийно, вы выводите сообщение и диалоговое окно регистрации снова отображается на экране:
GtkWidget* error_dialog =
gtk_message_dialog_new(GTK_WINDOW(main_window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
Поделиться:
Популярные книги
Звездная Кровь. Экзарх II
2. Экзарх
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Второгодка. Книга 2. Око за око
2. Второгодка
Фантастика:
героическая фантастика
альтернативная история
фэнтези
5.00
рейтинг книги
На границе империй. Том 10. Часть 13
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Сердце Дракона. нейросеть в мире боевых искусств (главы 1-650)
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.51
рейтинг книги
Боярышня Дуняша 2
2. Боярышня
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
ЖЛ 8
8. Живой лед
Фантастика:
аниме
5.60
рейтинг книги
Искатель 2
2. Валинор
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Охотник
Фантастика:
фэнтези
боевая фантастика
5.40
рейтинг книги
Убивать чтобы жить 4
4. УЧЖ
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Ваше Сиятельство 3
3. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ты - наша
1. Наша
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Отмороженный 13.0
13. Отмороженный
Фантастика:
боевая фантастика
попаданцы
рпг
фантастика: прочее
фэнтези
5.00
рейтинг книги
Я не князь. Книга XIII
13. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00