Основы программирования в 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
программы. 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,
Поделиться:
Популярные книги
Безликий
2. Повелитель тайн
Фантастика:
фэнтези
эпическая фантастика
5.00
рейтинг книги
Без права на пощаду (Школа обаяния)
Детективы:
триллеры
6.25
рейтинг книги
Крепость королей. Расплата
Детективы:
исторические детективы
5.00
рейтинг книги
"Фантастика 2023-110". Компиляция. Книги 1-16
Фантастика 2023. Компиляция
Фантастика:
фэнтези
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Изменяющий-Механик. Компиляция. Книги 1-18
Собрание сочинений
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Играть... в тебя
3. Звериные повадки Симоновых
Любовные романы:
современные любовные романы
5.25
рейтинг книги
Дело о мастере добрых дел
Фантастика:
научная фантастика
6.25
рейтинг книги
Труд
Проза:
классическая проза
5.00
рейтинг книги
Уникум Потеряева
Проза:
современная проза
5.00
рейтинг книги
День без вранья (сборник)
Проза:
современная проза
6.60
рейтинг книги
Божья кузница (сборник)
Шедевры фантастики
Фантастика:
научная фантастика
6.20
рейтинг книги
Газлайтер. Том 3
3. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Дэниел Мартин
Проза:
современная проза
7.91
рейтинг книги
Я все еще барон
4. Дорогой барон!
Фантастика:
боевая фантастика
5.00