Читать книгу 📗 "Основы программирования в 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. Диалоговое окно
addcdvoid 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 (О программе), раскрывается стандартное поле
aboutvoid 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.с, содержащий функцию
main1. После операторов
include#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, "Could not log on! — Check Username and Password"); gtk_dialog_run(GTK_DIALOG(error_dialog));