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

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

Жанры

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

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

Гримуар темного лорда VII

Грехов Тимофей
7. Гримуар темного лорда
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда VII

Двойник короля 16

Скабер Артемий
16. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 16

Горячий старт. Часть 2

Глазачев Георгий
2. Бесконечная Империя Вечности
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Горячий старт. Часть 2

Я – Легенда

Гарцевич Евгений Александрович
1. Я - Легенда!
Фантастика:
боевая фантастика
попаданцы
рпг
фантастика: прочее
5.00
рейтинг книги
Я – Легенда

Клан

Русич Антон
2. Долгий путь домой
Фантастика:
боевая фантастика
космическая фантастика
5.60
рейтинг книги
Клан

Наследник 2

Шимохин Дмитрий
2. Старицкий
Фантастика:
попаданцы
альтернативная история
фэнтези
5.75
рейтинг книги
Наследник 2

Камень. Книга шестая

Минин Станислав
6. Камень
Фантастика:
боевая фантастика
7.64
рейтинг книги
Камень. Книга шестая

Последний реанорец. Том I и Том II

Павлов Вел
1. Высшая Речь
Фантастика:
фэнтези
7.62
рейтинг книги
Последний реанорец. Том I и Том II

Газлайтер. Том 20

Володин Григорий Григорьевич
20. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Газлайтер. Том 20

Я все еще не князь. Книга XV

Дрейк Сириус
15. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я все еще не князь. Книга XV

Мечников. Луч надежды

Алмазов Игорь
8. Жизнь Лекаря с нуля
Фантастика:
альтернативная история
аниме
фэнтези
5.00
рейтинг книги
Мечников. Луч надежды

Сфирот

Прокофьев Роман Юрьевич
8. Стеллар
Фантастика:
боевая фантастика
рпг
6.92
рейтинг книги
Сфирот

Древесный маг Орловского княжества 3

Павлов Игорь Васильевич
3. Орловское княжество
Фантастика:
аниме
сказочная фантастика
фэнтези
попаданцы
гаремник
5.00
рейтинг книги
Древесный маг Орловского княжества 3

Я еще царь. Книга XXX

Дрейк Сириус
30. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я еще царь. Книга XXX