Читать интересную книгу Основы программирования в Linux - Мэтью Нейл

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 292 293 294 295 296 297 298 299 300 ... 324
Упражнение 16.11. Файл cdapp_gnome.h

Сначала рассмотрим файл cdapp_gnome.h и функции, которые вы должны реализовать.

1. Включите в исходный текст программы заголовочные файлы среды GNOME и заголовочный файл для функций интерфейса, разработанного вами в главе 8. В данном примере программы используются файлы app_mysql.h и app_mysql.c из главы 8 и созданная там же база данных.

#include <gnome.h>

#include "app_mysql.h"

2. В типе enum обозначены столбцы виджета GtkTreeView, который вы будете применять для отображения сведений о компакт-дисках и их дорожках. 

enum {

 COLUMN_TITLE,

 COLUMN_ARTIST,

 COLUMN_CATALOGUE,

 N_COLUMNS

};

3. У вас есть три функции создания окна в файле interface.c.

GtkWidget *create_main_window();

GtkWidget *create_login_dialog();

GtkWidget *create_addcd_dialog();

4. Функции обратного вызова для пунктов меню, панели инструментов, кнопок диалогового окна и кнопки поиска находятся в файле callbacks.с.

/* Обратный вызов для выхода из приложения */

void quit_app(GtkWidget* window, gpointer data);

/* Обратный вызов для подтверждения завершения перед выходом */

gboolean delete_event_handler(GtkWidget* window, GdkEvent *event,

 gpointer data);

/* Обратный вызов, связанный с сигналом отклика диалогового окна addcd */

void addcd_dialog_button_clicked(GtkDialog * dialog, gint response,

 gpointer userdata);

/* Обратный вызов для кнопки Add CD меню и панели инструментов */

void on_addcd_activate(GtkWidget *widget, gpointer user_data);

/* Обратный вызов для кнопки меню About */

void on_about_activate(GtkWidget* widget, gpointer user_data);

/* Обратный вызов для кнопки поиска */

void on_search_button_clicked(GtkWidget *widget, gpointer userdata);

Упражнение 16.12. Файл interface.c

Первым рассмотрим файл interface.c, в котором определяются окна и диалоговые окна, применяемые в приложении.

1. Сначала несколько указателей виджетов, на которые вы ссылаетесь в файлах callbacks.c и main.c:

#include "app_gnome.h"

GtkWidget* treeview;

GtkWidget* appbar;

GtkWidget* artist_entry;

GtkWidget *title_entry;

GtkWidget *catalogue_entry;

GtkWidget *username_entry;

GtkWidget *password_entry;

2. app — глобальная переменная, указатель на главное окно:

static GtkWidget *арр;

3. Определите вспомогательную функцию, которая вставляет в контейнер виджет-метку с заданным текстом:

void add_widget_with_label(GtkContainer *box,

 gchar *caption, GtkWidget *widget) {

 GtkWidget *label = gtk_label_new(caption);

 GtkWidget *hbox = gtk_hbox_new(TRUE, 4);

 gtk_container_add(GTK_CONTAINER(hbox), label);

 gtk_container_add(GTK_CONTAINER(hbox), widget);

 gtk_container_add(box, hbox);

}

4. Определения строки меню, использующие для удобства макросы GNOMEUIINFO:

static GnomeUIInfo filemenu[] = {

 GNOMEUIINFO_MENU_NEW_ITEM("_New CD", NULL, on_addcd_activate, NULL),

 GNOMEUIINFO_SEPARATOR,

 GNOMEUIINFO_MENU_EXIT_ITEM(close_app, NULL),

 GNOMEUIINFO_END

};

static GnomeUIInfo helpmenu[] = {

 GNOMEUIINFO_MENU_ABOUT_ITEM(on_about_activate, NULL),

 GNOMEUIINFO_END

};

static GnomeUIInfo menubar[] = {

 GNOMEUIINFO_MENU_FILE_TREE(filemenu),

 GNOMEUIINFO_MENU_HELP_TREE(helpmenu),

 GNOMEUIINFO_END

};

5. Теперь вы создаете главное окно, вставляете меню и панель инструментов, задаете их размер, центрируете относительно экрана и собираете виджеты, формирующие интерфейс. Учтите, что эта функция не отображает окно на экране, а просто возвращает указатель на окно:

GtkWidget *create_main_window() {

 GtkWidget* toolbar;

 GtkWidget* vbox;

 GtkWidget* hbox;

 GtkWidget* label;

 GtkWidget* entry;

 GtkWidget *search_button;

 GtkWidget* scrolledwindow;

 GtkCellRenderer *renderer;

 app = gnome_app_new("GnomeCD", "CD Database");

 gtk_window_set_position(GTK_WINDOW(app), GTK_WIN_POS_CENTER);

 gtk_window_set_defeult_size(GTK_WINDOW(app ), 540, 480);

 gnome_app_create_menus(GNOME_APP(app), menubar);

6. Создайте панель инструментов с помощью стандартных пиктограмм GTK+ и свяжите с ней функции обратного вызова:

 toolbar = gtk_toolbar_new();

 gnome_app_add_toolbar(GNOME_APP(app), GTK_TOOLBAR(toolbar),

  "toolbar", BONOBO_DOCK_ITEM_BEH_EXCLUSIVE,

  BONOBO_DOCK_TOP, 1, 0, 0);

1 ... 292 293 294 295 296 297 298 299 300 ... 324
На этом сайте Вы можете читать книги онлайн бесплатно русская версия Основы программирования в Linux - Мэтью Нейл.

Оставить комментарий