Spec-Zone.ru › GTK 4.0

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 Чтение / Запись / Только для создания

Сигналы

void close Действие
void response Выполнение последним

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

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

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

[allow-none]

parent

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

[allow-none]

flags

из GtkDialogFlags

first_button_text

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

[allow-none]

...

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

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

новое диалоговое окно 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

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

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

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

[transfer none]

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

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

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

TRUE для активности

gtk_dialog_get_response_for_widget ()

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

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

Параметры

dialog

объект GtkDialog

widget

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

Возвращает

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

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

Возвращает

кнопку виджета, использующую заданный response_id, или NULL.

[nullable][transfer none]

gtk_dialog_get_content_area ()

GtkWidget *
gtk_dialog_get_content_area (GtkDialog *dialog);

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

Параметры

dialog

объект GtkDialog

Возвращает

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

[type Gtk.Box][transfer none]

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

Члены

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

Создать диалог с действиями на панели заголовка вместо области действий

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

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

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

См. также

GtkWindow, GtkMessageDialog

© 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

Spec-Zone.ru

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