GtkDialog
GtkDialog — Создание всплывающих окон
Функции
Свойства
| gint | use-header-bar | Чтение/Запись/Только для создания |
Стилизованные свойства
| gint | action-area-border | Только для чтения |
| gint | button-spacing | Только для чтения |
| gint | content-area-border | Только для чтения |
| gint | content-area-spacing | Только для чтения |
Сигналы
| void | close | Действие |
| void | response | Выполнить последним |
Типы и значения
| struct | GtkDialog |
| struct | GtkDialogClass |
| enum | GtkDialogFlags |
| enum | GtkResponseType |
Иерархия объектов
GObject ╰── GInitiallyUnowned ╰── GtkWidget ╰── GtkContainer ╰── GtkBin ╰── GtkWindow ╰── GtkDialog ├── GtkAboutDialog ├── GtkAppChooserDialog ├── GtkColorChooserDialog ├── GtkColorSelectionDialog ├── GtkFileChooserDialog ├── GtkFontChooserDialog ├── GtkFontSelectionDialog ├── GtkMessageDialog ├── GtkPageSetupUnixDialog ├── GtkPrintUnixDialog ╰── GtkRecentChooserDialog
Реализованные интерфейсы
GtkDialog реализует AtkImplementorIface и GtkBuildable.
Включения
#include <gtk/gtk.h>
Описание
Диалоговые окна — удобный способ запросить у пользователя небольшое количество данных, например, для отображения сообщения, вопроса или чего-либо другого, что не требует от пользователя значительных усилий.
GTK+ рассматривает диалог как окно, разделенное по вертикали. Верхняя часть — это GtkVBox, в котором должны быть размещены виджеты, такие как GtkLabel или GtkEntry. Нижняя область известна как «область действий». Обычно она используется для размещения кнопок в диалоговом окне, которые могут выполнять функции, такие как «Отмена», «ОК» или «Применить».
Диалоговые окна GtkDialog создаются с помощью вызова gtk_dialog_new() или gtk_dialog_new_with_buttons(). Рекомендуется использовать gtk_dialog_new_with_buttons(); оно позволяет задать заголовок диалогового окна, некоторые удобные флаги и добавить простые кнопки.
Если «диалог» — это недавно созданное диалоговое окно, к двум основным областям окна можно получить доступ через gtk_dialog_get_content_area() и gtk_dialog_get_action_area(), как показано в примере ниже.
Модальное диалоговое окно (то есть такое, которое блокирует остальную часть приложения от ввода пользователя) можно создать, вызвав gtk_window_set_modal() для диалогового окна. Используйте макрос GTK_WINDOW() для преобразования виджета, возвращаемого из gtk_dialog_new(), в GtkWindow. При использовании gtk_dialog_new_with_buttons(), вы также можете передать флаг GTK_DIALOG_MODAL для создания модального диалогового окна.
Если вы добавляете кнопки в GtkDialog с помощью gtk_dialog_new_with_buttons(), gtk_dialog_add_button(), gtk_dialog_add_buttons() или gtk_dialog_add_action_widget(), нажатие кнопки генерирует сигнал под названием «response» с идентификатором ответа, который вы указали. GTK+ никогда не присваивает значение положительным идентификаторам ответа; они полностью определяются пользователем. Но для удобства вы можете использовать идентификаторы ответа в перечислении GtkResponseType (у всех них есть значения меньше нуля). Если диалоговое окно получает событие закрытия, сигнал «response» будет сгенерирован с идентификатором ответа GTK_RESPONSE_DELETE_EVENT.
Если вы хотите заблокировать ожидание возврата диалогового окна перед возвратом потока управления в свой код, вы можете вызвать gtk_dialog_run(). Эта функция запускает рекурсивный главный цикл и ждет ответа пользователя на диалоговое окно, возвращая идентификатор ответа, соответствующий нажатой пользователями кнопке.
Для простого диалогового окна в следующем примере, на практике вы, вероятно, будете использовать GtkMessageDialog, чтобы сэкономить время. Но вам придется создавать содержимое диалогового окна вручную, если в нем будет больше, чем простое сообщение.
Пример использования простого GtkDialog:
GtkDialog в качестве GtkBuildable
Реализация GtkDialog интерфейса GtkBuildable предоставляет vbox и action_area в качестве внутренних дочерних элементов с именами «vbox» и «action_area».
GtkDialog поддерживает пользовательский элемент <action-widgets>, который может содержать несколько элементов <action-widget>. Атрибут «response» задаёт числовой ответ, а содержимое элемента — это идентификатор виджета (который должен быть дочерним элементом диалогового окна action_area). Чтобы отметить ответ как по умолчанию, установите атрибут «default» элемента <action-widget> в значение true.
GtkDialog поддерживает добавление виджетов действий путём указания «action» в качестве атрибута «type» элемента <child>. Виджет будет добавлен либо в область действий, либо в заголовок диалогового окна, в зависимости от свойства «use-header-bar». Идентификатор ответа должен быть связан с виджетом действий, используя элемент <action-widgets>.
Пример фрагмента определения пользовательского интерфейса GtkDialog:
Функции
gtk_dialog_new ()
GtkWidget *
gtk_dialog_new (void); Создаёт новый диалоговый ящик.
Элементы управления не должны быть размещены непосредственно в этой GtkWindow, а в vbox и action_area , как описано выше.
Возвращает
новый диалог в виде GtkWidget
gtk_dialog_new_with_buttons ()
GtkWidget * gtk_dialog_new_with_buttons (const gchar *title,GtkWindow *parent,GtkDialogFlags flags,const gchar *first_button_text,...);
Создаёт новый GtkDialog с заголовком title (или NULL для значения по умолчанию; см. gtk_window_set_title()) и временным родителем parent (или NULL для отсутствия; см. gtk_window_set_transient_for()). Аргумент flags может использоваться для того, чтобы диалог стал модальным (GTK_DIALOG_MODAL) и/или был уничтожен вместе со своим временным родителем (GTK_DIALOG_DESTROY_WITH_PARENT). После flags, должны следовать пары текстовых обозначений/идентификаторов ответов кнопок, завершающиеся NULL указателем. Текст кнопок может быть произвольным. Идентификатор ответа может быть любым положительным числом или одним из значений перечисления GtkResponseType. Если пользователь нажимает одну из этих кнопок диалога, GtkDialog выпустит сигнал “response” с соответствующим идентификатором ответа. Если GtkDialog получает сигнал “delete-event”, он выпустит ::response с идентификатором ответа GTK_RESPONSE_DELETE_EVENT. Однако, уничтожение диалога не вызывает сигнал ::response; поэтому будьте осторожны, полагаясь на ::response при использовании флага GTK_DIALOG_DESTROY_WITH_PARENT. Кнопки расположены слева направо, поэтому первая кнопка в списке будет самой левой кнопкой в диалоге.
Вот простой пример:
Параметры
Возвращает
новый GtkDialog
gtk_dialog_run ()
gint
gtk_dialog_run (GtkDialog *dialog); Блокирует рекурсивный главный цикл, пока dialog не выпустит сигнал “response” или не будет уничтожен. Если диалог уничтожен во время вызова gtk_dialog_run(), gtk_dialog_run() возвращает GTK_RESPONSE_NONE. В противном случае возвращает идентификатор ответа из выпущенного сигнала ::response.
Перед входом в рекурсивный главный цикл, gtk_dialog_run() вызывает gtk_widget_show() для диалога. Обратите внимание, что вам все ещё нужно самостоятельно отображать любые дочерние элементы диалога.
Во время gtk_dialog_run(), стандартное поведение сигнала “delete-event” отключено; если диалог получит ::delete_event, он не будет уничтожен, как обычно уничтожаются окна, и gtk_dialog_run() вернёт GTK_RESPONSE_DELETE_EVENT. Кроме того, во время gtk_dialog_run() диалог будет модальным. Вы можете принудительно заставить gtk_dialog_run() вернуть значение в любой момент, вызвав gtk_dialog_response() для выпуска сигнала ::response. Уничтожение диалога во время gtk_dialog_run() — очень плохая идея, так как ваш код после выполнения не узнает, был ли диалог уничтожен или нет.
После того, как gtk_dialog_run() вернёт значение, вы отвечаете за скрытие или уничтожение диалога, если вы этого хотите.
Типичное использование этой функции может быть:
Обратите внимание, что, хотя рекурсивный главный цикл имитирует модальный диалог (он предотвращает взаимодействие пользователя с другими окнами в той же группе окон, пока диалог выполняется), такие обратные вызовы, как таймеры, отслеживание каналов ввода-вывода, перетаскивание и т.д., будут вызываться во время вызова gtk_dialog_run().
Параметры
dialog |
Возвращает
идентификатор ответа
gtk_dialog_response ()
void gtk_dialog_response (GtkDialog *dialog,gint response_id);
Выпускает сигнал “response” с указанным идентификатором ответа. Используется для указания того, что пользователь каким-то образом ответил на диалог; как правило, вы или gtk_dialog_run() будете отслеживать сигнал ::response и предпринимать соответствующие действия.
Параметры
dialog | ||
response_id | идентификатор ответа |
gtk_dialog_add_button ()
GtkWidget * gtk_dialog_add_button (GtkDialog *dialog,const gchar *button_text,gint response_id);
Добавляет кнопку с заданным текстом и настраивает её так, чтобы при нажатии на неё генерировалось событие “response” с заданным response_id . Кнопка добавляется в конец области действий диалога. Возвращается виджет кнопки, но обычно вам он не нужен.
Параметры
dialog | объект GtkDialog | |
button_text | текст кнопки | |
response_id | ID ответа для кнопки |
gtk_dialog_add_buttons ()
void gtk_dialog_add_buttons (GtkDialog *dialog,const gchar *first_button_text,...);
Добавляет несколько кнопок, аналогично многократному вызову gtk_dialog_add_button(). Список аргументов должен быть завершен NULL, как и в gtk_dialog_new_with_buttons(). Каждая кнопка должна иметь текст и ID ответа.
Параметры
dialog | объект GtkDialog | |
first_button_text | текст кнопки | |
... | ID ответа для первой кнопки, затем пары «текст-ID ответа» |
gtk_dialog_add_action_widget ()
void gtk_dialog_add_action_widget (GtkDialog *dialog,GtkWidget *child,gint response_id);
Добавляет активируемый виджет в область действий GtkDialog, связывая обработчик события, который сгенерирует сигнал “response” диалога при активации виджета. Виджет добавляется в конец области действий диалога. Если нужно добавить неактивируемый виджет, просто поместите его в поле action_area структуры GtkDialog.
Параметры
dialog | объект GtkDialog | |
child | активируемый виджет | |
response_id | ID ответа для |
gtk_dialog_set_default_response ()
void gtk_dialog_set_default_response (GtkDialog *dialog,gint response_id);
Устанавливает последний виджет в области действий диалога с заданным response_id в качестве виджета по умолчанию для диалога. Нажатие «Ввод» обычно активирует виджет по умолчанию.
Параметры
dialog | объект GtkDialog | |
response_id | ID ответа |
gtk_dialog_set_response_sensitive ()
void gtk_dialog_set_response_sensitive (GtkDialog *dialog,gint response_id,gboolean setting);
Вызывает gtk_widget_set_sensitive (widget, @setting) для каждого виджета в области действий диалога с заданным response_id . Удобный способ сделать кнопки диалога чувствительными/нечувствительными.
gtk_dialog_get_response_for_widget ()
gint gtk_dialog_get_response_for_widget (GtkDialog *dialog,GtkWidget *widget);
Получает ID ответа для виджета в области действий диалога.
Параметры
dialog | объект GtkDialog | |
widget | виджет в области действий |
Возвращаемое значение
ID ответа для widget , или GTK_RESPONSE_NONE, если для widget не установлен ID ответа.
С версии: 2.8
gtk_dialog_get_widget_for_response ()
GtkWidget * gtk_dialog_get_widget_for_response (GtkDialog *dialog,gint response_id);
Получает кнопку виджета, использующую заданный ID ответа в области действий диалога.
Параметры
dialog | объект GtkDialog | |
response_id | ID ответа, используемый виджетом |
Возвращаемое значение
кнопку виджета, использующую заданный response_id, или NULL.
[nullable][transfer none]
С версии: 2.20
gtk_dialog_get_action_area ()
GtkWidget *
gtk_dialog_get_action_area (GtkDialog *dialog); gtk_dialog_get_action_area устарел с версии 3.12 и не должен использоваться в новом коде.
Прямой доступ к области действий не рекомендуется; используйте gtk_dialog_add_button() и т.д.
Возвращает область действий dialog.
Параметры
dialog | объект GtkDialog |
Возвращаемое значение
область действий.
[transfer none]
С версии: 2.14
gtk_dialog_get_header_bar ()
GtkWidget *
gtk_dialog_get_header_bar (GtkDialog *dialog); Возвращает панель заголовка диалогового окна dialog. Обратите внимание, что панель заголовка используется диалоговым окном только если свойство “use-header-bar” имеет значение TRUE.
Параметры
dialog | объект GtkDialog |
Возвращаемое значение
панель заголовка.
[transfer none]
С: 3.12
gtk_alternative_dialog_button_order ()
gboolean
gtk_alternative_dialog_button_order (GdkScreen *screen); gtk_alternative_dialog_button_order устарело начиная с версии 3.10 и не должно использоваться в новых кодах.
Устарело
Возвращает TRUE, если диалоговые окна должны использовать альтернадный порядок кнопок на экране screen. Подробнее об альтернадном порядке кнопок см. gtk_dialog_set_alternative_button_order().
Если вам необходимо использовать эту функцию, вы, вероятно, должны подключиться к сигналу ::notify:gtk-alternative-button-order для объекта GtkSettings, связанного с screen, чтобы быть уведомлённым о любых изменениях настроек порядка кнопок.
Возвращаемое значение
Значение, определяющее, использовать ли альтернадный порядок кнопок
С: 2.6
gtk_dialog_set_alternative_button_order ()
void gtk_dialog_set_alternative_button_order (GtkDialog *dialog,gint first_response_id,...);
gtk_dialog_set_alternative_button_order устарело начиная с версии 3.10 и не должно использоваться в новых кодах.
Устарело
Устанавливает альтернадный порядок кнопок. Если значение свойства “gtk-alternative-button-order” равно TRUE, кнопки диалогового окна переупорядочиваются в соответствии с порядком идентификаторов ответов, переданных в эту функцию.
По умолчанию, диалоговые окна GTK+ используют порядок кнопок, рекомендованный Руководством по разработке интерфейса пользователя GNOME, с кнопкой подтверждения справа, а кнопкой отмены слева от неё. Но встроенные диалоговые окна GTK+ и GtkMessageDialogs предоставляют альтернативный порядок кнопок, который более подходит для некоторых платформ, например, Windows.
Используйте эту функцию после добавления всех кнопок в диалоговое окно, как показано в примере:
// Function to open a dialog box with a message void quick_message(GtkWindow*parent,gchar*message) { GtkWidget*dialog,*label,*content_area; GtkDialogFlags flags; // Create the widgets flags = GTK_DIALOG_DESTROY_WITH_PARENT; dialog =gtk_dialog_new_with_buttons("Message", parent, flags, _("_OK"), GTK_RESPONSE_NONE, NULL); content_area =gtk_dialog_get_content_area(GTK_DIALOG(dialog)); label =gtk_label_new(message); // Ensure that the dialog box is destroyed when the user responds g_signal_connect_swapped(dialog, "response", G_CALLBACK(gtk_widget_destroy), dialog); // Add the label, and show everything we’ve added gtk_container_add(GTK_CONTAINER(content_area), label); gtk_widget_show_all(dialog); }
Параметры
dialog | объект GtkDialog | |
first_response_id | идентификатор ответа, используемый кнопками | |
... | список дополнительных идентификаторов ответов кнопок |
С: 2.6
gtk_dialog_set_alternative_button_order_from_array ()
void gtk_dialog_set_alternative_button_order_from_array (GtkDialog *dialog,gint n_params,gint *new_order);
gtk_dialog_set_alternative_button_order_from_array устарело начиная с версии 3.10 и не должно использоваться в новых кодах.
Устарело
Устанавливает альтернадный порядок кнопок. Если значение свойства “gtk-alternative-button-order” равно TRUE, кнопки диалогового окна переупорядочиваются в соответствии с порядком идентификаторов ответов в new_order.
См. gtk_dialog_set_alternative_button_order() для получения дополнительной информации.
Эта функция предназначена для использования языковыми библиотекми.
Параметры
dialog | объект GtkDialog | |
n_params | количество идентификаторов ответов в | |
new_order | массив идентификаторов ответов кнопок | [array length=n_params] |
С: 2.6
Типы и значения
структура GtkDialog
struct GtkDialog;
Структура GtkDialog содержит только приватные поля и не должна напрямую использоваться.
структура GtkDialogClass
struct GtkDialogClass {
GtkWindowClass parent_class;
void (* response) (GtkDialog *dialog, gint response_id);
/* Keybinding signals */
void (* close) (GtkDialog *dialog);
};
Члены
| Сигнал, испускаемый при активации виджета действия. | |
| Сигнал, испускаемый, когда пользователь использует сочетание клавиш для закрытия диалога. |
перечисление GtkDialogFlags
Флаги, используемые для управления созданием диалога.
Члены
GTK_DIALOG_MODAL | Делает созданный диалог модальным, см. | |
GTK_DIALOG_DESTROY_WITH_PARENT | Уничтожить диалог при уничтожении родительского окна, см. | |
GTK_DIALOG_USE_HEADER_BAR | Создать диалог с действиями в строке заголовка вместо области действий. С версии 3.12. |
перечисление GtkResponseType
Предварительно определенные значения для использования в качестве идентификаторов ответа в gtk_dialog_add_button(). Все предварительно определенные значения являются отрицательными, GTK+ оставляет положительные значения для идентификаторов ответа, определённых приложением.
Члены
GTK_RESPONSE_NONE | Возвращается, если у виджета действия нет идентификатора ответа или если диалог скрыт или уничтожен программно. | |
GTK_RESPONSE_REJECT | Общий идентификатор ответа, не используется диалогами GTK+ | |
GTK_RESPONSE_ACCEPT | Общий идентификатор ответа, не используется диалогами GTK+ | |
GTK_RESPONSE_DELETE_EVENT | Возвращается, если диалог удален | |
GTK_RESPONSE_OK | Возвращается кнопками «ОК» в диалогах GTK+ | |
GTK_RESPONSE_CANCEL | Возвращается кнопками «Отмена» в диалогах GTK+ | |
GTK_RESPONSE_CLOSE | Возвращается кнопками «Закрыть» в диалогах GTK+ | |
GTK_RESPONSE_YES | Возвращается кнопками «Да» в диалогах GTK+ | |
GTK_RESPONSE_NO | Возвращается кнопками «Нет» в диалогах GTK+ | |
GTK_RESPONSE_APPLY | Возвращается кнопками «Применить» в диалогах GTK+ | |
GTK_RESPONSE_HELP | Возвращается кнопками «Справка» в диалогах GTK+ |
Подробности свойств
Свойство “use-header-bar”
“use-header-bar” gint
TRUE, если диалог использует GtkHeaderBar для кнопок действий вместо области действий.
По техническим причинам это свойство объявлено как целочисленное, но вы должны устанавливать только значения TRUE или FALSE.
Флаги: Чтение / Запись / Только для создания
Допустимые значения: [-1,1]
Значение по умолчанию: -1
С версии: 3.12
Подробности свойств стиля
Свойство стиля “action-area-border”
“action-area-border” gint
Ширина границы по умолчанию, используемая вокруг области действий диалога, возвращаемая gtk_dialog_get_action_area(), если gtk_container_set_border_width() не вызывался для этого виджета напрямую.
Флаги: Чтение
Допустимые значения: >= 0
Значение по умолчанию: 5
Свойство стиля “button-spacing”
“button-spacing” gint
Отступ между кнопками.
Флаги: Чтение
Допустимые значения: >= 0
Значение по умолчанию: 6
Свойство стиля “content-area-border”
“content-area-border” gint
Ширина границы по умолчанию, используемая вокруг области содержимого диалога, возвращаемая gtk_dialog_get_content_area(), если gtk_container_set_border_width() не вызывался для этого виджета напрямую.
Флаги: Чтение
Допустимые значения: >= 0
Значение по умолчанию: 2
Свойство стиля “content-area-spacing”
“content-area-spacing” gint
Отступ по умолчанию между элементами области содержимого диалога, возвращаемый gtk_dialog_get_content_area(), если gtk_box_set_spacing() не вызывался для этого виджета напрямую.
Флаги: Чтение
Допустимые значения: >= 0
Значение по умолчанию: 0
С версии: 2.16
Подробности сигналов
Сигнал “close”
void user_function (GtkDialog *arg0, gpointer user_data)
Сигнал ::close — это сигнал сочетания клавиш, который испускается, когда пользователь использует сочетание клавиш для закрытия диалога.
По умолчанию для этого сигнала назначена клавиша Escape.
Параметры
user_data | Данные пользователя, установленные при подключении обработчика сигнала. |
Флаги: Действие
Сигнал “response”
void user_function (GtkDialog *dialog, gint response_id, gpointer user_data)
Испускается при нажатии виджета действия, получении диалогом события удаления или вызове программистом приложения gtk_dialog_response(). При событии удаления идентификатор ответа — GTK_RESPONSE_DELETE_EVENT. В противном случае он зависит от того, какой виджет действия был нажат.
Параметры
dialog | объект, на котором испускается сигнал | |
response_id | идентификатор ответа | |
user_data | Данные пользователя, установленные при подключении обработчика сигнала. |
Флаги: Выполнение последним
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer.gnome.org/gtk3/3.20/GtkDialog.html