Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Далее показано, как бы вы создавали диалоговое окно с кнопками OK и Cancel, которое возвращает
GTK_RESPONSE_ACCEPT
GTK_RESPONSE_REJECT
GtkWidget *dialog = gtk_dialog_new_with_buttons("Important question",
parent_window,
GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK,
GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL,
GTK_RESPONSE_REJECT, NULL);
Мы остановились на двух кнопках, но на самом деле на количество кнопок в диалоговом окне нет ограничений. Более того, вы можете выбирать из ряда флагов типа отклика. Флаги
accept
reject
accept
GtkResponseType enum
Естественно, вы должны вставить содержимое в ваше диалоговое окно и для этого объект
GtkDialog
GtkVBox
GtkWidget *vbox = GTK_DIALOG(dialog)->vbox;
Этот
GtkVBox
gtk_box_pack_start
После того как диалоговое окно создано, следующий шаг — представить его пользователю и ждать от него ответа. Сделать это можно двумя способами: в модальном режиме, который блокирует весь ввод за исключением диалогового окна, или в немодальном режиме, который воспринимает диалоговое окно как любое другое окно. Давайте сначала рассмотрим запуск модального диалогового окна.
Модальное диалоговое окно
Модальное диалоговое окно заставляет пользователя ответить до того, как сможет выполниться любое другое действие. Оно полезно в тех ситуациях, когда пользователь собирается сделать что-то, сопряженное с серьезными последствиями, или нужно вывести сообщения об ошибках и предупреждениях.
Диалоговое окно можно сделать модальным, установив флаг
GTK_DIALOG_MODAL
gtk_widget_show
gtk_dialog_run
Когда пользователь нажимает кнопку (или диалоговое окно уничтожается), функция
gtk_dialog_run
int
enum
<b>typedef enum {</b>
<b> GTK_RESPONSE_NONE = -1,</b>
<b> GTK_RESPONSE_REJECT = -2,</b>
<b> GTK_RESPONSE_ACCEPT = -3,</b>
<b> GTK_RESPONSE_DELETE_EVENT = -4</b>
<b> GTK_RESPONSE_OK = -5,</b>
<b> GTK_RESPONSE_CANCEL = -6,</b>
<b> GTK_RESPONSE_CLOSE = -7,</b>
<b> GTK_RESPONSE_YES = -8,</b>
<b> GTK_RESPONSE_NO = -9,</b>
<b> GTK_RESPONSE_APPLY = -10,</b>
<b> GTK_RESPONSE_HELP = -11</b>
<b>} GtkResponseType;</b>
Теперь мы можем объяснить код отклика, передаваемый в функцию
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
Немодальные диалоговые окна
Мы рассмотрели, как применять функцию
gtk_dialog_run
gtk_dialog_run
GtkDialog
Связывание сигнала обратного вызова выполняется обычным образом с той лишь разницей, что у функции обратного вызова появляется дополнительный аргумент отклика, играющий ту же роль, что код возврата функции
gtk_dialog_run
void dialog_button_clicked(GtkWidget *dialog, gint response,
gpointer user_data) {
switch (response) {