Книга: Основы программирования в Linux
Модальное диалоговое окно
Модальное диалоговое окно
Модальное диалоговое окно заставляет пользователя ответить до того, как сможет выполниться любое другое действие. Оно полезно в тех ситуациях, когда пользователь собирается сделать что-то, сопряженное с серьезными последствиями, или нужно вывести сообщения об ошибках и предупреждениях.
Диалоговое окно можно сделать модальным, установив флаг GTK_DIALOG_MODAL
и вызвав функцию gtk_widget_show
, но есть лучший путь. Функция gtk_dialog_run
выполнит за вас всю тяжелую работу, остановив дальнейшее выполнение программы до тех пор, пока не будет нажата кнопка в диалоговом окне.
Когда пользователь нажимает кнопку (или диалоговое окно уничтожается), функция gtk_dialog_run
возвращает результат типа int
, указывающий на кнопку, нажатую пользователем. В GTK+ очень кстати определен тип enum
для описания возможных значений.
typedef enum {
GTK_RESPONSE_NONE = -1,
GTK_RESPONSE_REJECT = -2,
GTK_RESPONSE_ACCEPT = -3,
GTK_RESPONSE_DELETE_EVENT = -4
GTK_RESPONSE_OK = -5,
GTK_RESPONSE_CANCEL = -6,
GTK_RESPONSE_CLOSE = -7,
GTK_RESPONSE_YES = -8,
GTK_RESPONSE_NO = -9,
GTK_RESPONSE_APPLY = -10,
GTK_RESPONSE_HELP = -11
} GtkResponseType;
Теперь мы можем объяснить код отклика, передаваемый в функцию gtk_dialog_new_with_buttons
, — это код возврата типа GtkResponseType
, который функция gtk_dialog_run
возвращает, когда нажата кнопка. Если диалоговое окно уничтожается (это происходит, например, когда пользователь щелкает кнопкой мыши пиктограмму закрытия), вы получаете результат GTK_RESPONSE_NONE
.
Для вызова соответствующих операторов идеально подходит конструкция switch
:
GtkWidget* dialog = create_dialog();
int result = gtk_dialog_run(GTK_DIALOG(dialog));
switch(result) {
case GTK_RESPONSE_ACCEPT:
delete_file();
break;
сазе GTK_RESPONSE_REJECT:
do_nothing();
break;
default:
dialog_was_cancelled();
break;
}
gtk_widget_destroy(dialog);
Это все, что есть для простых модальных окон в комплекте инструментов GTK+. Как видите, включен очень небольшой программный код и потрачено немного усилий. В конце нужно только провести чистку с помощью функции gtk_widget_destroy
.
Если вам понадобится немодальное диалоговое окно, все будет не так просто. Вы не сможете использовать функцию gtk_dialog_run
, вместо нее придется связать функции обратного вызова с кнопками диалогового окна.
- Работа с окном Add Watch
- Файлы без расширения, как правило, текстовые. Как сделать, чтобы при двойном щелчке кнопкой мыши они открывались в Блокн...
- Что такое окно
- Во время загрузки появляется окно с запросом пароля, но раскладка используется русская, а у меня пароль на английском. К...
- Как добавить свою папку в окно открытия документа?
- После переустановки Windows нет доступа к папке Мои документы или нельзя удалить оставшуюся от старой системы папку Docu...
- Листинг 9.3. Пример JavaScript-файла, закрывающего всплывающее окно
- Как свернуть или развернуть окно?
- Урок 1.4. Программа Блокнот. Основы работы с текстом
- Запуск программы Блокнот и работа с меню
- Окно программы Paint
- Окно Персонализация