GtkDialog
GtkDialog — Создание всплывающих окон
Функции
| GtkWidget * | gtk_dialog_new () |
| GtkWidget * | gtk_dialog_new_with_buttons () |
| 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 () |
| int | gtk_dialog_get_response_for_widget () |
| GtkWidget * | gtk_dialog_get_widget_for_response () |
| GtkWidget * | gtk_dialog_get_content_area () |
| GtkWidget * | gtk_dialog_get_header_bar () |
Свойства
| int | use-header-bar | Чтение / Запись / Только для создания |
Типы и значения
| struct | GtkDialog |
| struct | GtkDialogClass |
| перечисление | GtkDialogFlags |
| перечисление | GtkResponseType |
Иерархия объектов
GObject
╰── GInitiallyUnowned
╰── GtkWidget
╰── GtkWindow
╰── GtkDialog
├── GtkAppChooserDialog
├── GtkColorChooserDialog
├── GtkFileChooserDialog
├── GtkFontChooserDialog
├── GtkMessageDialog
├── GtkPageSetupUnixDialog
╰── GtkPrintUnixDialog
Реализованные интерфейсы
GtkDialog реализует GtkAccessible, GtkBuildable, GtkConstraintTarget, GtkNative, GtkShortcutManager и GtkRoot.
Файлы
#include <gtk/gtk.h>
Описание
Диалоговые окна — удобный способ запросить у пользователя небольшое количество информации, например, чтобы отобразить сообщение, задать вопрос или выполнить другие задачи, которые не требуют значительных усилий со стороны пользователя.
Основная область GtkDialog называется "областью содержимого", и вы можете заполнить её виджетами, такими как GtkLabel или GtkEntry, чтобы представить пользователю свою информацию, вопросы или задачи. Кроме того, диалоговые окна позволяют добавлять "виджеты действий". Чаще всего виджетами действий являются кнопки. В зависимости от платформы виджеты действий могут быть представлены в строке заголовка в верхней части окна или в нижней части окна. Для добавления виджетов действий используйте 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_new() или gtk_dialog_new_with_buttons(). Рекомендуется использовать gtk_dialog_new_with_buttons(); оно позволяет установить заголовок диалогового окна, некоторые удобные флаги и добавить простые кнопки.
Модальное диалоговое окно (то есть диалоговое окно, которое блокирует остальную часть приложения от ввода пользователя) можно создать, вызвав gtk_window_set_modal() для диалогового окна. Используйте макрос GTK_WINDOW() для преобразования виджета, возвращаемого из gtk_dialog_new(), в GtkWindow. При использовании gtk_dialog_new_with_buttons() вы также можете передать флаг GTK_DIALOG_MODAL, чтобы сделать диалоговое окно модальным.
Для простого диалогового окна в следующем примере GtkMessageDialog сэкономит усилия. Но вам нужно будет вручную создать содержимое диалогового окна, если в нём больше, чем просто сообщение.
Пример простого использования GtkDialog:
GtkDialog как GtkBuildable
Реализация GtkDialog интерфейса GtkBuildable экспонирует content_area как внутреннего дочернего элемента с именем “content_area”.
GtkDialog поддерживает пользовательский элемент <action-widgets>, который может содержать несколько элементов <action-widget>. Атрибут "response" указывает числовой ответ, а содержимое элемента — это идентификатор виджета (который должен быть дочерним элементом диалогового окна action_area). Чтобы отметить ответ как стандартный, установите атрибут "default" элемента <action-widget> в значение true.
GtkDialog поддерживает добавление виджетов действий, указав "action" в качестве атрибута "type" элемента <child>. Виджет будет добавлен либо в область действий, либо в строку заголовка диалогового окна в зависимости от свойства "use-header-bar". Идентификатор ответа должен быть связан с виджетом действия с помощью элемента <action-widgets>.
Пример фрагмента определения пользовательского интерфейса GtkDialog:
Универсальный доступ
GtkDialog использует роль GTK_ACCESSIBLE_ROLE_DIALOG.
Функции
gtk_dialog_new ()
GtkWidget *
gtk_dialog_new (void); Создаёт новое диалоговое окно.
Элементы управления не следует добавлять непосредственно в этот GtkWindow, а в content_area и action_area, как описано выше.
Возвращаемое значение
новое диалоговое окно в виде GtkWidget
gtk_dialog_new_with_buttons ()
GtkWidget * gtk_dialog_new_with_buttons (const char *title,GtkWindow *parent,GtkDialogFlags flags,const char *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” с соответствующим идентификатором ответа. Если диалоговое окно получит событие закрытия, оно выпустит ::response с идентификатором ответа GTK_RESPONSE_DELETE_EVENT. Однако, уничтожение диалогового окна не вызывает сигнал ::response, поэтому будьте внимательны, опираясь на ::response при использовании флага GTK_DIALOG_DESTROY_WITH_PARENT.
Кнопки располагаются слева направо, поэтому первая кнопка в списке будет самой левой кнопкой в диалоговом окне.
Вот простой пример:
// Function to open a dialog box with a message
void
quick_message (GtkWindow *parent, char *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_window_destroy),
dialog);
// Add the label, and show everything we’ve added
gtk_box_append (GTK_BOX (content_area), label);
gtk_widget_show (dialog);
}Параметры
title | Заголовок диалогового окна или | [allow-none] |
parent | Временный родитель диалогового окна или | [allow-none] |
flags | ||
first_button_text | текст первой кнопки или | [allow-none] |
... | идентификатор ответа для первой кнопки, затем дополнительные кнопки, завершающиеся |
Возвращаемое значение
новое диалоговое окно GtkDialog
gtk_dialog_response ()
void gtk_dialog_response (GtkDialog *dialog,int response_id);
Выпускает сигнал “response” с заданным идентификатором ответа.
Используется для указания того, что пользователь каким-либо образом ответил на диалоговое окно.
Параметры
dialog | диалоговое окно GtkDialog | |
response_id | идентификатор ответа |
gtk_dialog-add-button ()
GtkWidget * gtk_dialog_add_button (GtkDialog *dialog,const char *button_text,int response_id);
Добавляет кнопку с заданным текстом и настраивает её так, чтобы при нажатии на неё вызывался сигнал “response” с заданным response_id. Кнопка добавляется в конец области действий диалогового окна. Возвращается виджет кнопки, но обычно он вам не нужен.
Параметры
dialog | диалоговое окно GtkDialog | |
button_text | текст кнопки | |
response_id | идентификатор ответа для кнопки |
gtk_dialog_add_buttons ()
void gtk_dialog_add_buttons (GtkDialog *dialog,const char *first_button_text,...);
Добавляет дополнительные кнопки, аналогично многократному вызову gtk_dialog_add_button(). Список аргументов должен быть NULL-завершён, как в gtk_dialog_new_with_buttons(). Каждая кнопка должна иметь и текст, и идентификатор ответа.
Параметры
dialog | диалоговое окно GtkDialog | |
first_button_text | текст кнопки | |
... | идентификатор ответа для первой кнопки, затем пары текст-идентификатор_ответа |
gtk_dialog_add_action_widget ()
void gtk_dialog_add_action_widget (GtkDialog *dialog,GtkWidget *child,int response_id);
Добавляет активируемый виджет в область действий диалогового окна GtkDialog, связывая обработчик сигнала, который выпустит сигнал “response” на диалоговом окне при активации виджета. Виджет добавляется в конец области действий диалогового окна. Если вы хотите добавить неактивируемый виджет, просто поместите его в поле action_area структуры GtkDialog.
Параметры
dialog | диалоговое окно GtkDialog | |
child | активируемый виджет | |
response_id | идентификатор ответа для |
gtk_dialog_set_default_response ()
void gtk_dialog_set_default_response (GtkDialog *dialog,int response_id);
Устанавливает последний виджет в области действий диалогового окна с заданным response_id в качестве виджета по умолчанию для диалогового окна. Нажатие «Enter» обычно активирует виджет по умолчанию.
Параметры
dialog | диалоговое окно GtkDialog | |
response_id | идентификатор ответа |
gtk_dialog_set_response_sensitive ()
void gtk_dialog_set_response_sensitive (GtkDialog *dialog,int response_id,gboolean setting);
Вызывает gtk_widget_set_sensitive (widget, @setting) для каждого виджета в области действий диалогового окна с заданным response_id. Удобный способ сделать кнопки диалогового окна активными/неактивными.
Параметры
dialog | диалоговое окно GtkDialog | |
response_id | идентификатор ответа | |
setting |
|
gtk_dialog_get_response_for_widget ()
int gtk_dialog_get_response_for_widget (GtkDialog *dialog,GtkWidget *widget);
Получает идентификатор ответа виджета в области действий диалога.
Параметры
dialog | объект GtkDialog | |
widget | виджет в области действий |
Возвращает
идентификатор ответа widget или GTK_RESPONSE_NONE, если у widget нет установленного идентификатора ответа.
gtk_dialog_get_widget_for_response ()
GtkWidget * gtk_dialog_get_widget_for_response (GtkDialog *dialog,int response_id);
Получает кнопку виджета, использующую заданный идентификатор ответа в области действий диалога.
Параметры
dialog | объект GtkDialog | |
response_id | идентификатор ответа, используемый виджетом |
Возвращает
кнопку виджета, использующую заданный response_id, или NULL.
[nullable][transfer none]
gtk_dialog_get_content_area ()
GtkWidget *
gtk_dialog_get_content_area (GtkDialog *dialog); Возвращает область содержимого dialog.
Параметры
dialog | объект GtkDialog |
gtk_dialog_get_header_bar ()
GtkWidget *
gtk_dialog_get_header_bar (GtkDialog *dialog); Возвращает панель заголовка dialog. Обратите внимание, что панель заголовка используется диалогом только если свойство “use-header-bar” равно TRUE.
Параметры
dialog | объект GtkDialog |
Возвращает
панель заголовка.
[type Gtk.HeaderBar][transfer none]
Типы и значения
struct GtkDialog
struct GtkDialog;
Структура GtkDialog содержит только закрытые поля и не должна использоваться напрямую.
struct GtkDialogClass
struct GtkDialogClass {
GtkWindowClass parent_class;
void (* response) (GtkDialog *dialog, int response_id);
/* Keybinding signals */
void (* close) (GtkDialog *dialog);
};
Члены
| Сигнал, генерируемый при активации виджета действия. | |
| Сигнал, генерируемый при использовании пользователем сочетания клавиш для закрытия диалога. |
перечисление GtkDialogFlags
Флаги, используемые для влияния на создание диалога.
Члены
GTK_DIALOG_MODAL | Делает созданный диалог модальным, см. | |
GTK_DIALOG_DESTROY_WITH_PARENT | Уничтожает диалог при уничтожении родительского окна, см. | |
GTK_DIALOG_USE_HEADER_BAR | Создать диалог с действиями на панели заголовка вместо области действий |
перечисление 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
Подробное описание сигналов
Сигнал “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-old.gnome.org/gtk4/4.0/GtkDialog.html