Spec-Zone.ru › GTK 3.24

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 Чтение

Сигналы

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(); это позволяет задать заголовок диалогового окна, некоторые удобные флаги и добавить простые кнопки.

Если «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

Заголовок диалогового окна, или NULL.

[allow-none]

parent

Временный родитель диалогового окна, или NULL.

[allow-none]

flags

из GtkDialogFlags

first_button_text

текст первой кнопки, или NULL.

[allow-none]

...

идентификатор ответа для первой кнопки, затем дополнительные кнопки, завершаемые NULL

Возвращает

новый 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

a GtkDialog

Возвращает

идентификатор ответа

gtk_dialog_response ()

void
gtk_dialog_response (GtkDialog *dialog,
                     gint response_id);

Вызывает сигнал “response” с указанным идентификатором ответа. Используется для указания того, что пользователь каким-то образом ответил на диалоговое окно; обычно вы или gtk_dialog_run() будете отслеживать сигнал ::response и предпринимать соответствующие действия.

Параметры

dialog

a GtkDialog

response_id

идентификатор ответа

gtk_dialog_add_button ()

GtkWidget *
gtk_dialog_add_button (GtkDialog *dialog,
                       const gchar *button_text,
                       gint response_id);

Добавляет кнопку с заданным текстом и настраивает вещи так, что нажатие кнопки вызовет сигнал “response” с заданным response_id. Кнопка добавляется в конец области действий диалогового окна. Виджет кнопки возвращается, но обычно вам он не нужен.

Параметры

dialog

a GtkDialog

button_text

текст кнопки

response_id

идентификатор ответа для кнопки

Возвращает

виджет GtkButton, который был добавлен.

[transfer none]

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

a GtkDialog

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

a GtkDialog

child

активируемый виджет

response_id

идентификатор ответа для child

gtk_dialog_set_default_response ()

void
gtk_dialog_set_default_response (GtkDialog *dialog,
                                 gint response_id);

Устанавливает последний виджет в области действий диалога с заданным response_id в качестве виджета по умолчанию для диалога. Нажатие «Enter» обычно активирует виджет по умолчанию.

Параметры

dialog

a GtkDialog

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

a GtkDialog

response_id

идентификатор ответа

setting

TRUE для чувствительности

gtk_dialog_get_response_for_widget ()

gint
gtk_dialog_get_response_for_widget (GtkDialog *dialog,
                                    GtkWidget *widget);

Получает идентификатор ответа виджета в области действий диалога.

Параметры

dialog

a GtkDialog

widget

виджет в области действий dialog

Возвращает

идентификатор ответа 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

a GtkDialog

response_id

идентификатор ответа, используемый виджетом dialog

Возвращает

кнопку виджета, использующую данный 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

a GtkDialog

Возвращает

область действий.

[type Gtk.Box][transfer none]

Since: 2.14

gtk_dialog_get_content_area ()

GtkWidget *
gtk_dialog_get_content_area (GtkDialog *dialog);

Возвращает область содержимого dialog .

Параметры

dialog

a GtkDialog

Возвращает

область содержимого GtkBox.

[type Gtk.Box][transfer none]

Since: 2.14

gtk_dialog_get_header_bar ()

GtkWidget *
gtk_dialog_get_header_bar (GtkDialog *dialog);

Возвращает строку заголовка dialog. Обратите внимание, что строка заголовка используется диалогом только если свойство “use-header-bar” установлено в TRUE.

Параметры

dialog

a GtkDialog

Возвращает

строку заголовка.

[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 или NULL для использования по умолчанию.

[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

первый_идентификатор_ответа

идентификатор ответа, используемый кнопками dialog

...

список дополнительных идентификаторов ответов кнопок dialog, завершаемый значением -1

С версии: 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

количество идентификаторов ответов в new_order

новый_порядок

массив идентификаторов ответов кнопок dialog.

[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);
};

Члены

response ()

Сигнал, генерируемый при активации элемента управления действием.

close ()

Сигнал, генерируемый при закрытии диалогового окна с помощью сочетания клавиш.

enum GtkDialogFlags

Флаги, влияющие на создание диалогового окна.

Члены

GTK_DIALOG_MODAL

Делает диалоговое окно модальным, см. gtk_window_set_modal()

GTK_DIALOG_DESTROY_WITH_PARENT

Уничтожает диалоговое окно при уничтожении родительского окна, см. gtk_window_set_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

данные пользователя, заданные при подключении обработчика сигнала.

Флаги: Выполнить последним

См. также

GtkVBox, GtkWindow, GtkButton

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API