Spec-Zone.ru › GTK 3.22

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

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

Параметры

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

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

Возвращает

кнопку 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

a GtkDialog

Возвращает

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

[transfer none]

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

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

Типы и значения

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+ оставляет положительные значения для идентификаторов ответов, определяемых приложением.

Члены

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

См. также

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

Spec-Zone.ru

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