GtkDialog
GtkDialog — Создание всплывающих окон
Функции
| GtkWidget * | gtk_dialog_new () |
| GtkWidget * | gtk_dialog_new_with_buttons () |
| gint | gtk_dialog_run () |
| void | gtk_dialog_response () |
| GtkWidget * | gtk_dialog_add_button () |
| void | gtk_dialog_add_buttons () |
| void | gtk_dialog_add_action_widget () |
| void | gtk_dialog_set_default_response () |
| void | gtk_dialog_set_response_sensitive () |
| gint | gtk_dialog_get_response_for_widget () |
| GtkWidget * | gtk_dialog_get_widget_for_response () |
| GtkWidget * | gtk_dialog_get_action_area () |
| GtkWidget * | gtk_dialog_get_content_area () |
| GtkWidget * | gtk_dialog_get_header_bar () |
| gboolean | gtk_alternative_dialog_button_order () |
| void | gtk_dialog_set_alternative_button_order () |
| void | gtk_dialog_set_alternative_button_order_from_array () |
Свойства
| int | use-header-bar | Чтение/Запись/Только создание |
Стилизованные свойства
| int | action-area-border | Чтение |
| int | button-spacing | Чтение |
| int | content-area-border | Чтение |
| int | content-area-spacing | Чтение |
Типы и значения
| 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(); это позволяет задать заголовок диалогового окна, некоторые удобные флаги и добавить простые кнопки.
Если «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. Кнопки расположены слева направо, поэтому первая кнопка в списке будет самой левой кнопкой в диалоговом окне.
Вот простой пример:
Параметры
title | Заголовок диалогового окна, или | [allow-none] |
parent | Временный родитель диалогового окна, или | [allow-none] |
flags | ||
first_button_text | текст первой кнопки, или | [allow-none] |
... | идентификатор ответа для первой кнопки, затем дополнительные кнопки, завершаемые |
Возвращает
новый 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 . Удобный способ сделать кнопки диалога чувствительными/нечувствительными.
Параметры
dialog | ||
response_id | идентификатор ответа | |
setting |
|
gtk_dialog_get_response_for_widget ()
gint gtk_dialog_get_response_for_widget (GtkDialog *dialog,GtkWidget *widget);
Получает идентификатор ответа виджета в области действий диалога.
Параметры
dialog | ||
widget | виджет в области действий |
Возвращает
идентификатор ответа widget , или GTK_RESPONSE_NONE, если у widget нет установленного идентификатора ответа.
Since: 2.8
gtk_dialog_get_widget_for_response ()
GtkWidget * gtk_dialog_get_widget_for_response (GtkDialog *dialog,gint response_id);
Получает кнопку виджета, использующую данный идентификатор ответа в области действий диалога.
Параметры
dialog | ||
response_id | идентификатор ответа, используемый виджетом |
Возвращает
кнопку виджета, использующую данный response_id, или NULL.
[nullable][transfer none]
Since: 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 |
Возвращает
область действий.
[type Gtk.Box][transfer none]
Since: 2.14
gtk_dialog_get_content_area ()
GtkWidget *
gtk_dialog_get_content_area (GtkDialog *dialog); Возвращает область содержимого dialog .
Параметры
dialog |
Since: 2.14
gtk_dialog_get_header_bar ()
GtkWidget *
gtk_dialog_get_header_bar (GtkDialog *dialog); Возвращает строку заголовка dialog. Обратите внимание, что строка заголовка используется диалогом только если свойство “use-header-bar” установлено в TRUE.
Параметры
dialog |
Возвращает
строку заголовка.
[type Gtk.HeaderBar][transfer none]
Since: 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, чтобы получать уведомления при изменении настроек порядка кнопок.
Параметры
экран | экран GdkScreen или | [allow-none] |
Возвращаемое значение
Использование альтернативного порядка кнопок
С версии: 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);
}Параметры
диалоговое_окно | диалоговое окно GtkDialog | |
первый_идентификатор_ответа | идентификатор ответа, используемый кнопками | |
... | список дополнительных идентификаторов ответов кнопок |
С версии: 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() для получения дополнительной информации.
Эта функция предназначена для использования языковыми интерфейсами.
Параметры
диалоговое_окно | диалоговое окно GtkDialog | |
n_params | количество идентификаторов ответов в | |
новый_порядок | массив идентификаторов ответов кнопок | [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+ оставляет значения 0 и выше для идентификаторов ответов, определённых приложением.
Члены
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” int
TRUE если диалог использует GtkHeaderBar для кнопок действий вместо области действий.
По техническим причинам это свойство объявлено как целочисленное, но вы должны устанавливать его только в значение TRUE или FALSE.
Владелец: GtkDialog
Флаги: Чтение / Запись / Только для создания
Допустимые значения: [-1,1]
Значение по умолчанию: -1
С версии: 3.12
Подробное описание стилевых свойств
Стилевое свойство “action-area-border”
“action-area-border” int
Ширина стандартной рамки, используемой вокруг области действий диалога, как возвращается функцией gtk_dialog_get_action_area(), если функция gtk_container_set_border_width() не вызывалась непосредственно для этого виджета.
Владелец: GtkDialog
Флаги: Только для чтения
Допустимые значения: >= 0
Значение по умолчанию: 5
Стилевое свойство “button-spacing”
“button-spacing” int
Отступ между кнопками.
Владелец: GtkDialog
Флаги: Только для чтения
Допустимые значения: >= 0
Значение по умолчанию: 6
Стилевое свойство “content-area-border”
“content-area-border” int
Ширина стандартной рамки, используемой вокруг области содержимого диалога, как возвращается функцией gtk_dialog_get_content_area(), если функция gtk_container_set_border_width() не вызывалась непосредственно для этого виджета.
Владелец: GtkDialog
Флаги: Только для чтения
Допустимые значения: >= 0
Значение по умолчанию: 2
Стилевое свойство “content-area-spacing”
“content-area-spacing” int
Стандартный отступ между элементами области содержимого диалога, как возвращается функцией gtk_dialog_get_content_area(), если функция gtk_box_set_spacing() не вызывалась непосредственно для этого виджета.
Владелец: GtkDialog
Флаги: Только для чтения
Допустимые значения: >= 0
Значение по умолчанию: 0
С версии: 2.16
Подробное описание сигналов
Сигнал “close”
void user_function (GtkDialog *dialog, gpointer user_data)
Сигнал ::close — это сигнал для привязки клавиш, который генерируется, когда пользователь закрывает диалог с помощью привязанной клавиши.
По умолчанию для этого сигнала назначена клавиша Escape.
Параметры
user_data | данные пользователя, заданные при подключении обработчика сигнала. |
Флаги: Действие
Сигнал “response”
void user_function (GtkDialog *dialog, int 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.24/GtkDialog.html