Литмир - Электронная Библиотека
Содержание  
A
A

 case GTK_RESPONSE_ACCEPT:

  do_stuff();

  break;

 case GTK_RESPONSE_REJECT:

  do_nothing();

  break;

 default:

  dialog_was_cancelled();

  break;

 }

 gtk_widget_destroy(dialog);

}

int main() {

 ...

 GtkWidget *dialog = create_dialog();

 g_signal_connect(GTK_OBJECT(dialog), "response",

  GTK_SIGNAL_FUNC(dialog_button_clicked), user_data);

 gtk_widget_show(dialog);

 ...

}

С немодальными диалоговыми окнами могут возникать сложности, т.к. от пользователя не требуется немедленного ответа, и он может свернуть диалоговое окно и забыть о нем. Вы должны предусмотреть действия при попытке пользователя повторно открыть диалоговое окно до закрытия первого экземпляра окна. Следует проверить, равен ли

NULL
указатель диалогового окна и если нет, повторно вывести уже открытое диалоговое окно на экран, вызвав функцию
gtk_window_present
. Вы увидите этот прием в действии в разд. "Приложение для работы с базой данных компакт-дисков" в конце данной главы.

GtkMessageDialog

Для очень простых диалоговых окон даже тип

GtkDialog
излишне сложен.

GtkDialog

 +----GtkMessageDialog

С помощью типа

GtkMessageDialog
вы можете создать информационное диалоговое окно одной строкой программного кода.

<b>GtkWidget* gtk_message_dialog_new(GtkWindow *parent,</b>

<b> GtkDialogFlags flags, GtkMessageType type,</b>

<b> GtkButtonsType buttons, const gchar *message_format, ...);</b>

Эта функция создает диалоговое окно, снабженное пиктограммами, заголовком и настраиваемыми кнопками.

Параметр
type задает готовую пиктограмму и заголовок диалогового окна в соответствии с его предполагаемым назначением; например, окно с предупреждением содержит пиктограмму предупреждения в виде треугольника. Существует четыре возможных варианта для простых диалоговых окон, с которыми вы будете сталкиваться чаще всего:

GTK_MESSAGE_INFO
;

GTK_MESSAGE_WARNING
;

GTK_MESSAGE_QUESTION
;

GTK_MESSAGE_ERROR
.

Вы также можете выбрать значение

GTK_MESSAGE_OTHER
, применяемое в тех случаях, когда не используются перечисленные типы. Для окна типа
GtkMessageDialog
можно передать тип
GtkButtonsType
(табл. 16.4) вместо перечисления всех кнопок по очереди.

Таблица 16.4

Тип
GtkButtonsType
Описание
GTK_BUTTONS_OK
Кнопка OK
GTK_BUTTONS_CLOSE
Кнопка Close
GTK_BUTTONS_CANCEL
Кнопка Cancel
GTK_BUTTONS_YES_NO
Кнопки Yes и No
GTK_BUTTONS_OK_CANCEL
Кнопки OK и Cancel
GTK_BUTTONS_NONE
Нет кнопок

Теперь остается только текст диалогового окна, который можно создать из строки подстановки, формируемой так же, как в функции

printf
. В данном примере вы спрашиваете пользователя, настаивает ли он на своем требовании удалить файл:

GtkWidget *dialog = gtk_message_dialog_new(main_window,

 GTK_DIALOG_DESTROY_WITH_PARENT,

 GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO,

 &quot;Are you sure you wish to delete %s?&quot;, filename);

result = gtk_dialog_run(GTK_DIALOG(dialog));

gtk_widget_destroy(dialog);

Это диалоговое окно будет отображаться так, как показано на рис. 16.14.

Основы программирования в Linux - image064.jpg

Рис. 16.14

Окно типа

GtkMessageDialog
— простейший способ обмена информацией или получения ответов на вопросы типа "да/нет". Вы воспользуетесь им в следующем разделе, когда примените полученные знания для создания GUI вашего приложения для работы с базой данных компакт-дисков.

Приложение для работы с базой данных компакт-дисков

В предыдущих главах вы разрабатывали базу данных компакт-дисков с помощью MySQL и интерфейса на языке С. Теперь вы увидите, как просто вставить внешний GUI средствами GNOME/GTK+ и создать пользовательский интерфейс с богатыми функциональными возможностями. 

Примечание

Для проверки примера приложения для работы с базой данных компакт-дисков у вас должны быть установлены СУБД MySQL и библиотеки разработки, т.е. должны выполняться те же самые требования, что и к аналогичному приложению в главе 8.

Из соображений простоты и ясности мы создадим базовый скелетный интерфейс, в котором реализовано лишь подмножество функций — к примеру, вы не сможете добавлять информацию о дорожках в компакт-диски или удалять CD. Но вы увидите в вашем приложении в действии виджеты, обсуждавшиеся в этой главе, и поймете, как они применяются в реальных программах.

Будет написан программный код для следующих ключевых действий:

□ регистрация в базе данных из GUI;

□ поиск компакт-диска;

□ отображение сведений о компакт-диске и его дорожках;

□ вставка компакт-диска в базу данных;

□ создание окна About (О программе);

□ формирование подтверждения при завершении работы пользователя.

Разделим код на три файла, совместно использующие заголовочный файл cdapp_gnome.h. В исходных файлах функции создания окон и диалоговых окон — функции формирования интерфейса — отделены от функций обратного вызова (упражнения 16.11-16.14).

295
{"b":"285844","o":1}