Основы программирования в Linux
Шрифт:
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,
"Could not log on! — Check Username and Password");
gtk_dialog_run(GTK_DIALOG(error_dialog));
gtk_widget_destroy(error_dialog);
}
gtk_widget_destroy(login_dialog);
gtk_main;
return 0;
}
5. Для компиляции этого приложения напишите make-файл. Как и в главе 8, вам, возможно, придется указать место расположения библиотеки mysql-клиента с помощью строки, подобной приведенной далее:
– L/usr/lib/mysql
После опции
– L
поместите каталог, в котором ваша система хранит библиотеки MySQL:
all: app
app: app_mysql.c callbacks.с interface.c main.с app_gnome.h app_mysql.h
gcc -o app -I/usr/include/mysql app_mysql.с callbacks.с interface.c main.с -lmysqlclient `pkg-config --cflags --libs libgnome-2.0 libgnomeui-2.0`
clean:
rm -f app
Поделиться с друзьями: