Spec-Zone.ru › GTK 3.20

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 ()

Свойства

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. Кнопки расположены слева направо, поэтому первая кнопка в списке будет самой левой кнопкой в диалоге.

Вот простой пример:

Параметры

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

объект GtkDialog

button_text

текст кнопки

response_id

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(). Каждая кнопка должна иметь текст и 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 ответа для child

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 . Удобный способ сделать кнопки диалога чувствительными/нечувствительными.

Параметры

dialog

объект GtkDialog

response_id

ID ответа

setting

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

gtk_dialog_get_response_for_widget ()

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

Получает ID ответа для виджета в области действий диалога.

Параметры

dialog

объект GtkDialog

widget

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

Возвращаемое значение

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

Возвращаемое значение

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

GtkWidget *
gtk_dialog_get_content_area (GtkDialog *dialog);

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

Параметры

dialog

объект GtkDialog

Возвращаемое значение

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

[type Gtk.Box][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, чтобы быть уведомлённым о любых изменениях настроек порядка кнопок.

Параметры

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

Параметры

dialog

объект GtkDialog

first_response_id

идентификатор ответа, используемый кнопками 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() для получения дополнительной информации.

Эта функция предназначена для использования языковыми библиотекми.

Параметры

dialog

объект GtkDialog

n_params

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

new_order

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

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

Члены

response ()

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

close ()

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

перечисление 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.

перечисление 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

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

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

См. также

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.20/GtkDialog.html

Spec-Zone.ru

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