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

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

Жанры

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

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

Sos! Мой босс кровосос!

Юнина Наталья
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Sos! Мой босс кровосос!

Черный Маг Императора 7 (CИ)

Герда Александр
7. Черный маг императора
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Черный Маг Императора 7 (CИ)

Я – Орк

Лисицин Евгений
1. Я — Орк
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я – Орк

Купеческая дочь замуж не желает

Шах Ольга
Фантастика:
фэнтези
6.89
рейтинг книги
Купеческая дочь замуж не желает

Возвышение Меркурия. Книга 4

Кронос Александр
4. Меркурий
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Возвышение Меркурия. Книга 4

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

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

Наследник и новый Новосиб

Тарс Элиан
7. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник и новый Новосиб

Законы Рода. Том 4

Flow Ascold
4. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 4

Промышленникъ

Кулаков Алексей Иванович
3. Александр Агренев
Приключения:
исторические приключения
9.13
рейтинг книги
Промышленникъ

Адъютант

Демиров Леонид
2. Мания крафта
Фантастика:
фэнтези
6.43
рейтинг книги
Адъютант

Зауряд-врач

Дроздов Анатолий Федорович
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Зауряд-врач

Измена. Не прощу

Леманн Анастасия
1. Измены
Любовные романы:
современные любовные романы
4.00
рейтинг книги
Измена. Не прощу

Я еще не князь. Книга XIV

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

Тринадцатый

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