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

ЖАНРЫ

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

Поделиться с друзьями: