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 |
| перечисление | GtkDialogFlags |
| перечисление | 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(); это позволяет задать заголовок диалогового окна, некоторые удобные флаги и добавить простые кнопки.
Если «dialog» — это только что созданное диалоговое окно, доступ к двум основным областям окна можно получить через 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 | ||
button_text | текст кнопки | |
response_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(). Каждая кнопка должна иметь как текст, так и идентификатор ответа.
Параметры
dialog | ||
first_button_text | текст кнопки | |
... | идентификатор ответа для первой кнопки, затем ещё пары текст-идентификатор_ответа |
gtk_dialog_add_action_widget ()
void gtk_dialog_add_action_widget (GtkDialog *dialog,GtkWidget *child,gint response_id);
Добавляет активируемый виджет в область действия GtkDialog, подключая обработчик сигналов, который будет генерировать сигнал “response” в диалоговом окне, когда виджет активируется. Виджет добавляется в конец области действия диалогового окна. Если вы хотите добавить неактивируемый виджет, просто добавьте его в поле action_area структуры GtkDialog.
Параметры
dialog | ||
child | активируемый виджет | |
response_id | идентификатор ответа для |
gtk_dialog_set_default_response ()
void gtk_dialog_set_default_response (GtkDialog *dialog,gint response_id);
Устанавливает последний виджет в области действия диалогового окна с заданным response_id в качестве виджета по умолчанию для диалогового окна. Нажатие клавиши «Enter» обычно активирует виджет по умолчанию.
Параметры
dialog | ||
response_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);
Получает идентификатор ответа виджета в области действия диалогового окна.
Параметры
dialog | ||
widget | виджет в области действия |
Возвращает
идентификатор ответа widget или GTK_RESPONSE_NONE, если у widget не установлен идентификатор ответа.
С версии: 2.8
gtk_dialog_get_widget_for_response ()
GtkWidget * gtk_dialog_get_widget_for_response (GtkDialog *dialog,gint response_id);
Получает кнопку-виджет, которая использует заданный идентификатор ответа в области действия диалогового окна.
Параметры
dialog | ||
response_id | идентификатор ответа, используемый виджетом |
Возвращает
кнопку widget, которая использует заданный 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 |
Возвращает
область действия.
[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
Типы и значения
struct GtkDialog
struct GtkDialog;
Структура GtkDialog содержит только приватные поля и не должна напрямую использоваться.
struct GtkDialogClass
struct GtkDialogClass {
GtkWindowClass parent_class;
void (* response) (GtkDialog *dialog, gint response_id);
/* Keybinding signals */
void (* close) (GtkDialog *dialog);
};
Члены
| Сигнал, генерируемый при активации виджета действия. | |
| Сигнал, генерируемый при закрытии диалога с помощью комбинации клавиш. |
enum GtkDialogFlags
Флаги, влияющие на создание диалога.
Члены
GTK_DIALOG_MODAL | Делает диалог модальным, см. | |
GTK_DIALOG_DESTROY_WITH_PARENT | Уничтожает диалог при уничтожении родительского окна, см. | |
GTK_DIALOG_USE_HEADER_BAR | Создаёт диалог с кнопками в заголовке вместо области действий. С версии 3.12. |
enum 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 | данные пользователя, заданные при подключении обработчика сигнала. |
Флаги: Run Last
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer.gnome.org/gtk3/3.22/GtkDialog.html