Spec-Zone.ru › GTK 3.24

GtkContainer

GtkContainer — Базовый класс для виджетов, содержащих другие виджеты

Функции

#define GTK_IS_RESIZE_CONTAINER()
#define GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID()
void gtk_container_add ()
void gtk_container_remove ()
void gtk_container_add_with_properties ()
GtkResizeMode gtk_container_get_resize_mode ()
void gtk_container_set_resize_mode ()
void gtk_container_check_resize ()
void gtk_container_foreach ()
GList * gtk_container_get_children ()
GtkWidgetPath * gtk_container_get_path_for_child ()
void gtk_container_set_reallocate_redraws ()
GtkWidget * gtk_container_get_focus_child ()
void gtk_container_set_focus_child ()
GtkAdjustment * gtk_container_get_focus_vadjustment ()
void gtk_container_set_focus_vadjustment ()
GtkAdjustment * gtk_container_get_focus_hadjustment ()
void gtk_container_set_focus_hadjustment ()
void gtk_container_resize_children ()
GType gtk_container_child_type ()
void gtk_container_child_get ()
void gtk_container_child_set ()
void gtk_container_child_get_property ()
void gtk_container_child_set_property ()
void gtk_container_child_get_valist ()
void gtk_container_child_set_valist ()
void gtk_container_child_notify ()
void gtk_container_child_notify_by_pspec ()
void gtk_container_forall ()
guint gtk_container_get_border_width ()
void gtk_container_set_border_width ()
void gtk_container_propagate_draw ()
gboolean gtk_container_get_focus_chain ()
void gtk_container_set_focus_chain ()
void gtk_container_unset_focus_chain ()
GParamSpec * gtk_container_class_find_child_property ()
void gtk_container_class_install_child_property ()
void gtk_container_class_install_child_properties ()
GParamSpec ** gtk_container_class_list_child_properties ()
void gtk_container_class_handle_border_width ()

Свойства

guint border-width Чтение / Запись
GtkWidget * child Запись
GtkResizeMode resize-mode Чтение / Запись

Сигналы

void add Выполняется первым
void check-resize Выполняется последним
void remove Выполняется первым
void set-focus-child Выполняется первым

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

struct GtkContainer
struct GtkContainerClass
enum GtkResizeMode

Иерархия объектов

    GObject
    ╰── GInitiallyUnowned
        ╰── GtkWidget
            ╰── GtkContainer
                ├── GtkBin
                ├── GtkBox
                ├── GtkFixed
                ├── GtkFlowBox
                ├── GtkGrid
                ├── GtkHeaderBar
                ├── GtkPaned
                ├── GtkIconView
                ├── GtkLayout
                ├── GtkListBox
                ├── GtkMenuShell
                ├── GtkNotebook
                ├── GtkSocket
                ├── GtkStack
                ├── GtkTable
                ├── GtkTextView
                ├── GtkToolbar
                ├── GtkToolItemGroup
                ├── GtkToolPalette
                ╰── GtkTreeView

Реализованные интерфейсы

GtkContainer реализует AtkImplementorIface и GtkBuildable.

Файлы включения

#include <gtk/gtk.h>

Описание

Интерфейс пользователя GTK+ создается путем вложенности виджетов друг в друга. Виджеты-контейнеры являются внутренними узлами в результирующем дереве виджетов: они содержат другие виджеты. Например, вы можете иметь GtkWindow, содержащий GtkFrame, который, в свою очередь, содержит GtkLabel. Если вам нужна картинка вместо текстовой метки внутри рамки, можно заменить GtkLabel виджетом GtkImage.

В GTK+ существуют два основных типа виджетов-контейнеров. Оба являются подклассами абстрактного базового класса GtkContainer.

Первый тип виджетов-контейнеров имеет один дочерний виджет и наследуется от GtkBin. Эти контейнеры являются декораторами, которые добавляют определенный функционал к дочернему элементу. Например, GtkButton превращает свой дочерний элемент в нажимаемую кнопку; GtkFrame рисует рамку вокруг своего дочернего элемента, а GtkWindow помещает свой дочерний виджет в окно верхнего уровня.

Второй тип контейнера может иметь более одного дочернего элемента; его цель — управление макетом. Это означает, что эти контейнеры назначают размеры и позиции своим дочерним элементам. Например, GtkHBox выстраивает свои дочерние элементы в горизонтальный ряд, а GtkGrid выстраивает содержащиеся в нем виджеты в двумерной сетке.

Для реализаций GtkContainer виртуальный метод GtkContainerClass.forall() всегда требуется, так как он используется для рисования и других внутренних операций с дочерними элементами. Если реализация GtkContainer ожидает наличие дочерних элементов, не являющихся внутренними, необходимо реализовать как GtkContainerClass.add(), так и GtkContainerClass.remove(). Если реализация GtkContainer имеет внутренние дочерние элементы, они должны быть добавлены с помощью gtk_widget_set_parent() в init() и удалены с помощью gtk_widget_unparent() в реализации GtkWidgetClass.destroy(). Дополнительную информацию о реализации пользовательских виджетов можно найти на https://wiki.gnome.org/HowDoI/CustomWidgets

Высота для управления геометрией по ширине

GTK+ использует систему управления геометрией «высота для ширины» (и «ширина для высоты»). «Высота для ширины» означает, что виджет может изменять необходимое вертикальное пространство в зависимости от предоставленного горизонтального пространства (и аналогично для «ширина для высоты»).

Следует учитывать некоторые моменты при реализации виджетов-контейнеров, использующих систему управления геометрией GTK+ «высота для ширины». Во-первых, важно отметить, что контейнер должен отдавать приоритет одному из измерений, то есть виджет или контейнер может иметь только GtkSizeRequestMode, который является GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH или GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT. Однако каждый виджет и контейнер должен уметь реагировать на API для обоих измерений, то есть даже если виджет имеет режим запроса «высота для ширины», его родитель может запросить его размеры с помощью API «ширина для высоты».

Чтобы обеспечить правильную работу, при реализации контейнеров «высота для ширины» (или «ширина для высоты») необходимо соблюдать следующие рекомендации.

Каждый режим запроса включает 2 виртуальных метода. API «высота для ширины» проходят через gtk_widget_get_preferred_width(), а затем через gtk_widget_get_preferred_height_for_width(). При обработке запросов в обратном GtkSizeRequestMode важно, чтобы каждый виджет запрашивал по крайней мере достаточно места для отображения всего своего содержимого в любое время.

Когда вызывается gtk_widget_get_preferred_height() для контейнера, который имеет режим «высота для ширины», контейнер должен вернуть высоту для его минимальной ширины. Это легко достигается путем простого вызова обратных API, реализованных для него следующим образом:

Аналогично, когда вызывается gtk_widget_get_preferred_width_for_height() для контейнера или виджета, который имеет режим «высота для ширины», ему нужно только вернуть базовую минимальную ширину, как показано ниже:

Запросы «высота для ширины» обычно реализуются в терминах виртуального распределения виджетов в входном направлении. Предположим, что режим запроса «высота для ширины»; контейнер реализует виртуальную функцию get_preferred_height_for_width() путем сначала вызова gtk_widget_get_preferred_width() для каждого из своих дочерних элементов.

Для каждой потенциальной группы дочерних элементов, расположенных в ряд, значения, возвращаемые функцией gtk_widget_get_preferred_width(), должны быть собраны в массив структур GtkRequestedSize. Любое расстояние между дочерними элементами должно быть удалено из входного параметра for_width, а затем общий размер должен быть распределен с помощью функции-помощника gtk_distribute_natural_allocation().

Затем контейнер переходит к запросу предпочтительной высоты для каждого дочернего элемента, используя gtk_widget_get_preferred_height_for_width() и используя размеры, сохраненные в массиве GtkRequestedSize.

Для распределения контейнера «высота для ширины» важно учитывать, что контейнер должен отдавать приоритет одному измерению. Итак, если контейнер — это контейнер «высота для ширины», он должен сначала распределить все виджеты по горизонтали, используя массив GtkRequestedSize и gtk_distribute_natural_allocation(), а затем добавить любое дополнительное пространство (если и где это необходимо) для расширения виджета.

После добавления всего пространства для расширения контейнер предполагает, что ему была предоставлена достаточная высота для размещения всего его содержимого. В этот момент контейнер должен использовать общие горизонтальные размеры каждого виджета для запроса высоты «высота для ширины» каждого из его дочерних элементов и сохранять запросы в массиве GtkRequestedSize для любых виджетов, которые выстраиваются вертикально (для табличных контейнеров это можно обобщить на высоты и ширины строк и столбцов). Затем вертикальное пространство должно быть снова распределено с помощью gtk_distribute_natural_allocation(), учитывая при этом выделенную высоту виджета за вычетом любого вертикального отступа, добавляемого контейнером. Затем следует добавить вертикальное пространство для расширения, где это уместно и доступно, и контейнер должен приступить к фактическому размещению дочерних виджетов.

См. раздел управления геометрией GtkWidget, чтобы узнать больше о реализации управления геометрией «высота для ширины» для виджетов.

Свойства дочерних элементов

GtkContainer вводит свойства дочерних элементов. Это свойства объектов, которые не относятся ни к контейнеру, ни к содержащему виджету, а скорее к их взаимосвязи. Типичные примеры свойств дочерних элементов — это позиция или тип размещения виджета, который содержится в GtkBox.

Используйте gtk_container_class_install_child_property() для установки свойств дочерних элементов для класса контейнера и gtk_container_class_find_child_property() или gtk_container_class_list_child_properties() для получения информации о существующих свойствах дочерних элементов.

Для установки значения свойства дочернего элемента используйте gtk_container_child_set_property(), gtk_container_child_set() или gtk_container_child_set_valist(). Для получения значения свойства дочернего элемента используйте gtk_container_child_get_property(), gtk_container_child_get() или gtk_container_child_get_valist(). Для отправки уведомлений об изменениях свойств дочерних элементов используйте gtk_widget_child_notify().

GtkContainer как GtkBuildable

Реализация GtkContainer интерфейса GtkBuildable поддерживает элемент <packing> для дочерних элементов, который может содержать несколько элементов <property>, задающих свойства дочерних элементов.

Начиная с версии 2.16, свойства дочерних элементов также могут быть помечены как переводимые с помощью тех же атрибутов «translatable», «comments» и «context», что используются для обычных свойств.

Начиная с версии 3.16, контейнеры могут иметь элемент <focus-chain>, содержащий несколько элементов <widget>, по одному для каждого дочернего элемента, который должен быть добавлен в цепочку фокуса. Атрибут «name» задаёт идентификатор виджета.

Пример этих свойств в определениях пользовательского интерфейса:

static void
foo_container_get_preferred_height (GtkWidget *widget,
                                    gint *min_height,
                                    gint *nat_height)
{
   if (i_am_in_height_for_width_mode)
     {
       gint min_width;

       GTK_WIDGET_GET_CLASS (widget)->get_preferred_width (widget,
                                                           &min_width,
                                                           NULL);
       GTK_WIDGET_GET_CLASS (widget)->get_preferred_height_for_width
                                                          (widget,
                                                           min_width,
                                                           min_height,
                                                           nat_height);
     }
   else
     {
       ... many containers support both request modes, execute the
       real width-for-height request here by returning the
       collective heights of all widgets that are stacked
       vertically (or whatever is appropriate for this container)
       ...
     }
}

Функции

GTK_IS_RESIZE_CONTAINER()

#define             GTK_IS_RESIZE_CONTAINER(widget)

GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID()

#define             GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID(object, property_id, pspec)

Эта макрокоманда должна использоваться для выдачи стандартного предупреждения об неожиданных свойствах в реализациях set_child_property() и get_child_property().

Параметры

object

объект GObject, на котором был вызван set_child_property() или get_child_property()

property_id

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

pspec

объект GParamSpec свойства

gtk_container_add ()

void
gtk_container_add (GtkContainer *container,
                   GtkWidget *widget);

Добавляет widget в container. Обычно используется для простых контейнеров, таких как GtkWindow, GtkFrame или GtkButton; для более сложных контейнеров макета, таких как GtkBox или GtkGrid, эта функция выберет параметры упаковки по умолчанию, которые могут быть некорректными. Поэтому рассмотрите функции, такие как gtk_box_pack_start() и gtk_grid_attach() в качестве альтернативы gtk_container_add() в таких случаях. Виджет может быть добавлен только в один контейнер за раз; вы не можете разместить один и тот же виджет в двух разных контейнерах.

Обратите внимание, что некоторые контейнеры, такие как GtkScrolledWindow или GtkListBox, могут добавлять промежуточных потомков между добавленным виджетом и контейнером.

Параметры

container

объект GtkContainer

widget

виджет, который нужно поместить внутрь container

gtk_container_remove ()

void
gtk_container_remove (GtkContainer *container,
                      GtkWidget *widget);

Удаляет widget из container. widget должен находиться внутри container. Обратите внимание, что container будет владеть ссылкой на widget, и это может быть последняя удерживаемая ссылка; поэтому удаление виджета из его контейнера может привести к уничтожению этого виджета. Если вы хотите повторно использовать widget, вам нужно добавить к нему ссылку перед удалением из контейнера, используя g_object_ref(). Если вы не хотите повторно использовать widget, обычно более эффективно просто уничтожить его напрямую с помощью gtk_widget_destroy(), так как это удалит его из контейнера и поможет разорвать любые циклы счётчика циклической ссылки.

Параметры

container

объект GtkContainer

widget

текущий дочерний элемент container

gtk_container_add_with_properties ()

void
gtk_container_add_with_properties (GtkContainer *container,
                                   GtkWidget *widget,
                                   const gchar *first_prop_name,
                                   ...);

Добавляет widget в container, одновременно устанавливая свойства дочернего элемента. См. gtk_container_add() и gtk_container_child_set() для получения более подробной информации.

Параметры

container

объект GtkContainer

widget

виджет, который нужно поместить внутрь container

first_prop_name

имя первого свойства дочернего элемента, которое нужно установить

...

список свойств и значений, завершаемый NULL, начиная с first_prop_name

gtk_container_get_resize_mode ()

GtkResizeMode
gtk_container_get_resize_mode (GtkContainer *container);

gtk_container_get_resize_mode устарел начиная с версии 3.12 и не должен использоваться в новом коде.

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

Возвращает режим изменения размера контейнера. См. gtk_container_set_resize_mode().

Параметры

container

объект GtkContainer

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

текущий режим изменения размера

gtk_container_set_resize_mode ()

void
gtk_container_set_resize_mode (GtkContainer *container,
                               GtkResizeMode resize_mode);

gtk_container_set_resize_mode устарел начиная с версии 3.12 и не должен использоваться в новом коде.

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

Устанавливает режим изменения размера контейнера.

Режим изменения размера контейнера определяет, будет ли запрос на изменение размера передан родительскому элементу контейнера, помещен в очередь на более позднее выполнение или выполнен немедленно.

Параметры

container

объект GtkContainer

resize_mode

новый режим изменения размера

gtk_container_check_resize ()

void
gtk_container_check_resize (GtkContainer *container);

gtk_container_foreach ()

void
gtk_container_foreach (GtkContainer *container,
                       GtkCallback callback,
                       gpointer callback_data);

Вызывает callback для каждого дочернего элемента, не являющегося внутренним, container. См. gtk_container_forall() для получения подробностей о том, что представляет собой «внутренний» дочерний элемент. Для всех практических целей эта функция должна перебирать только те виджеты-потомки, которые были добавлены в контейнер приложением с явными add() вызовами.

Разрешается удалить дочерний элемент из обработчика callback.

Большинство приложений должны использовать gtk_container_foreach(), а не gtk_container_forall().

Параметры

container

объект GtkContainer

callback

обработчик.

[scope call]

callback_data

данные пользователя обработчика

gtk_container_get_children ()

GList *
gtk_container_get_children (GtkContainer *container);

Возвращает дочерние элементы контейнера, не являющиеся внутренними. Подробнее о том, что считается "внутренним" элементом, см. gtk_container_forall().

Параметры

container

объект GtkContainer

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

новый список дочерних элементов контейнера, не являющихся внутренними.

[element-type GtkWidget][transfer container]

gtk_container_get_path_for_child ()

GtkWidgetPath *
gtk_container_get_path_for_child (GtkContainer *container,
                                  GtkWidget *child);

Возвращает новый путь виджета, представляющий иерархию виджетов от верхнего уровня до и включая child .

Параметры

container

объект GtkContainer

child

дочерний элемент container

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

новый GtkWidgetPath

gtk_container_set_reallocate_redraws ()

void
gtk_container_set_reallocate_redraws (GtkContainer *container,
                                      gboolean needs_redraws);

gtk_container_set_reallocate_redraws устарел начиная с версии 3.14 и не должен использоваться в новом коде.

Вызовите gtk_widget_queue_draw() в обработчике size_allocate.

Устанавливает флаг reallocate_redraws контейнера в указанное значение.

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

Параметры

container

объект GtkContainer

needs_redraws

новое значение флага reallocate_redraws контейнера

gtk_container_get_focus_child ()

GtkWidget *
gtk_container_get_focus_child (GtkContainer *container);

Возвращает текущий виджет, получивший фокус внутри container . Это не текущий виджет с фокусом. Его можно получить, вызвав gtk_window_get_focus().

Параметры

container

объект GtkContainer

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

дочерний виджет, получивший фокус внутри container при фокусе container , или NULL если таковой не установлен.

[nullable][transfer none]

С: 2.14

gtk_container_set_focus_child ()

void
gtk_container_set_focus_child (GtkContainer *container,
                               GtkWidget *child);

Устанавливает или отменяет фокусировку дочернего элемента container, если child равно NULL.

Данная функция излучает сигнал GtkContainer::set_focus_child объекта container. Реализации GtkContainer могут переопределить стандартное поведение, переопределив обработку этого сигнала.

Эта функция в основном предназначена для использования виджетами. Приложения могут использовать gtk_widget_grab_focus() для ручного установки фокуса на определенный виджет.

Параметры

container

объект GtkContainer

child

объект GtkWidget или NULL.

[allow-none]

gtk_container_get_focus_vadjustment ()

GtkAdjustment *
gtk_container_get_focus_vadjustment (GtkContainer *container);

Получает вертикальную настройку фокуса для контейнера. Смотрите gtk_container_set_focus_vadjustment().

Параметры

container

объект GtkContainer

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

вертикальная настройка фокуса, или NULL если она не установлена.

[nullable][transfer none]

gtk_container_set_focus_vadjustment ()

void
gtk_container_set_focus_vadjustment (GtkContainer *container,
                                     GtkAdjustment *adjustment);

Подключает настройку к обработке фокуса в контейнере, так что при фокусировке дочернего элемента контейнера, настройка прокручивается для отображения этого виджета. Эта функция устанавливает вертикальное выравнивание. Смотрите gtk_scrolled_window_get_vadjustment() для типового способа получения настройки и gtk_container_set_focus_hadjustment() для установки горизонтальной настройки.

Настройки должны быть в пикселях и в той же системе координат, что и выделение для непосредственных дочерних элементов контейнера.

Параметры

container

объект GtkContainer

adjustment

настройка, которая должна быть скорректирована при перемещении фокуса среди потомков container

gtk_container_get_focus_hadjustment ()

GtkAdjustment *
gtk_container_get_focus_hadjustment (GtkContainer *container);

Получает горизонтальную настройку фокуса для контейнера. Смотрите gtk_container_set_focus_hadjustment().

Параметры

container

объект GtkContainer

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

горизонтальная настройка фокуса, или NULL если она не установлена.

[nullable][transfer none]

gtk_container_set_focus_hadjustment ()

void
gtk_container_set_focus_hadjustment (GtkContainer *container,
                                     GtkAdjustment *adjustment);

Подключает регулировку к обработке фокуса в контейнере, поэтому при получении фокуса дочерним элементом контейнера регулировка прокручивается для отображения этого виджета. Эта функция устанавливает горизонтальное выравнивание. См. gtk_scrolled_window_get_hadjustment() для типичного способа получения регулировки и gtk_container_set_focus_vadjustment() для установки вертикальной регулировки.

Регулировки должны быть в пиксельных единицах и в той же системе координат, что и выделение для непосредственных дочерних элементов контейнера.

Параметры

container

a GtkContainer

adjustment

регулировка, которая должна быть скорректирована при перемещении фокуса среди потомков container

gtk_container_resize_children ()

void
gtk_container_resize_children (GtkContainer *container);

gtk_container_resize_children устарела с версии 3.10 и не должна использоваться в новом коде.

Параметры

container

a GtkContainer

gtk_container_child_type ()

GType
gtk_container_child_type (GtkContainer *container);

Возвращает тип дочерних элементов, поддерживаемых контейнером.

Обратите внимание, что это может вернуть G_TYPE_NONE, чтобы указать, что больше дочерних элементов добавить нельзя, например, для GtkPaned, у которого уже есть два дочерних элемента.

Параметры

container

a GtkContainer

Возвращает

a GType.

gtk_container_child_get ()

void
gtk_container_child_get (GtkContainer *container,
                         GtkWidget *child,
                         const gchar *first_prop_name,
                         ...);

Получает значения одного или нескольких свойств дочерних элементов для child и container .

Параметры

container

a GtkContainer

child

виджет, являющийся дочерним элементом container

first_prop_name

имя первого свойства для получения

...

место возврата для первого свойства, необязательно дополненное парами имя/место возврата, за которыми следует NULL

gtk_container_child_set ()

void
gtk_container_child_set (GtkContainer *container,
                         GtkWidget *child,
                         const gchar *first_prop_name,
                         ...);

Устанавливает одно или несколько свойств дочерних элементов для child и container .

Параметры

container

a GtkContainer

child

виджет, являющийся дочерним элементом container

first_prop_name

имя первого свойства для установки

...

список имен и значений свойств, завершаемый NULL, начиная с first_prop_name

gtk_container_child_get_property ()

void
gtk_container_child_get_property (GtkContainer *container,
                                  GtkWidget *child,
                                  const gchar *property_name,
                                  GValue *value);

Получает значение свойства дочернего элемента для child и container .

Параметры

container

a GtkContainer

child

виджет, являющийся дочерним элементом container

property_name

имя свойства для получения

value

место для возврата значения

gtk_container_child_set_property ()

void
gtk_container_child_set_property (GtkContainer *container,
                                  GtkWidget *child,
                                  const gchar *property_name,
                                  const GValue *value);

Устанавливает свойство дочернего элемента для child и container .

Параметры

container

a GtkContainer

child

виджет, являющийся дочерним элементом container

property_name

имя свойства для установки

value

значение для установки свойства

gtk_container_child_get_valist ()

void
gtk_container_child_get_valist (GtkContainer *container,
                                GtkWidget *child,
                                const gchar *first_property_name,
                                va_list var_args);

Получает значения одного или нескольких свойств дочерних элементов для child и container .

Параметры

container

a GtkContainer

child

виджет, являющийся дочерним элементом container

first_property_name

имя первого свойства для получения

var_args

место возврата для первого свойства, необязательно дополненное парами имя/место возврата, за которыми следует NULL

gtk_container_child_set_valist ()

void
gtk_container_child_set_valist (GtkContainer *container,
                                GtkWidget *child,
                                const gchar *first_property_name,
                                va_list var_args);

Устанавливает одно или несколько свойств дочерних элементов для child и container .

Параметры

container

a GtkContainer

child

виджет, являющийся дочерним элементом container

first_property_name

имя первого свойства для установки

var_args

список имен и значений свойств, завершаемый NULL, начиная с first_prop_name

gtk_container_child_notify ()

void
gtk_container_child_notify (GtkContainer *container,
                            GtkWidget *child,
                            const gchar *child_property);

Вызывает сигнал “child-notify” для свойства дочернего элемента child_property.

Это аналог g_object_notify() для свойств дочерних элементов.

Также см. gtk_widget_child_notify().

Параметры

контейнер

контейнер GtkContainer

дочерний элемент

дочерний виджет

свойство_дочернего_элемента

имя свойства дочернего элемента, установленного в классе container

С: 3.2

gtk_container_child_notify_by_pspec ()

void
gtk_container_child_notify_by_pspec (GtkContainer *container,
                                     GtkWidget *child,
                                     GParamSpec *pspec);

Вызывает сигнал “child-notify” для свойства дочернего элемента, указанного в pspec.

Это аналог g_object_notify_by_pspec() для свойств дочерних элементов.

Параметры

контейнер

контейнер GtkContainer

дочерний элемент

дочерний виджет

pspec

GParamSpec свойства дочернего элемента, установленного в классе container

С: 3.18

gtk_container_forall ()

void
gtk_container_forall (GtkContainer *container,
                      GtkCallback callback,
                      gpointer callback_data);

Вызывает callback для каждого непосредственного дочернего элемента container, включая дочерние элементы, считающиеся «внутренними» (детали реализации контейнера). «Внутренние» дочерние элементы обычно не добавлялись пользователем контейнера, а были добавлены самой реализацией контейнера.

Большинство приложений должны использовать gtk_container_foreach(), а не gtk_container_forall().

[virtual forall]

Параметры

контейнер

GtkContainer

обработчик

обработчик.

[scope call][closure callback_data]

данные_обработчика

пользовательские данные обработчика

gtk_container_get_border_width ()

guint
gtk_container_get_border_width (GtkContainer *container);

Возвращает ширину границы контейнера. См. gtk_container_set_border_width().

Параметры

контейнер

GtkContainer

Возвращает

текущую ширину границы

gtk_container_set_border_width ()

void
gtk_container_set_border_width (GtkContainer *container,
                                guint border_width);

Устанавливает ширину границы контейнера.

Ширина границы контейнера — это количество места, которое следует оставить снаружи контейнера. Единственное исключение — GtkWindow; так как верхние окна не могут оставлять пространство снаружи, они оставляют пространство внутри. Граница добавляется по всем сторонам контейнера. Чтобы добавить пространство только с одной стороны, используйте конкретное свойство “margin” дочернего виджета, например, “margin-top”.

Параметры

контейнер

GtkContainer

ширина_границы

количество пустого пространства, которое следует оставить снаружи контейнера. Допустимые значения находятся в диапазоне от 0 до 65535 пикселей.

gtk_container_propagate_draw ()

void
gtk_container_propagate_draw (GtkContainer *container,
                              GtkWidget *child,
                              cairo_t *cr);

Когда контейнер получает вызов функции рисования, он должен отправлять синтетические вызовы “draw” всем дочерним элементам, которые не имеют собственных GdkWindows. Эта функция предоставляет удобный способ сделать это. Контейнер, получив вызов своей функции рисования “draw”, вызывает gtk_container_propagate_draw() один раз для каждого дочернего элемента, передавая cr, полученное контейнером.

gtk_container_propagate_draw() позаботится о переводе начала cr и решении вопроса о необходимости отправки рисования дочернему элементу. Это удобный и оптимизированный способ получить тот же эффект, что и вызов gtk_widget_draw() непосредственно на дочернем элементе.

В большинстве случаев контейнер может просто унаследовать реализацию “draw” от GtkContainer или выполнить некоторое рисование, а затем перейти к реализации ::draw от GtkContainer.

Параметры

контейнер

GtkContainer

дочерний элемент

дочерний элемент container

cr

контекст Cairo, переданный контейнеру. Если вы хотите использовать cr в функции рисования контейнера, рассмотрите использование cairo_save() и cairo_restore() перед вызовом этой функции.

gtk_container_get_focus_chain ()

gboolean
gtk_container_get_focus_chain (GtkContainer *container,
                               GList **focusable_widgets);

gtk_container_get_focus_chain устарело начиная с версии 3.24 и не должно использоваться в новых кодах.

Для переопределения поведения фокуса используйте сигнал GtkWidgetClass::focus.

Возвращает цепочку фокуса контейнера, если она была явно задана. Если цепочка фокуса не была явно задана, GTK+ вычисляет цепочку фокуса на основе расположения дочерних элементов. В этом случае GTK+ сохраняет NULL в focusable_widgets и возвращает FALSE.

Параметры

container

a GtkContainer

focusable_widgets

место для хранения цепочки фокуса контейнера или NULL. После использования необходимо освободить этот список, используя g_list_free(), однако дополнительные счетчики ссылок к отдельным виджетам в цепочке фокуса не добавляются.

[element-type GtkWidget][out][transfer container]

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

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

gtk_container_set_focus_chain ()

void
gtk_container_set_focus_chain (GtkContainer *container,
                               GList *focusable_widgets);

gtk_container_set_focus_chain устарело начиная с версии 3.24 и не должно использоваться в новых кодах.

Для переопределения поведения фокуса используйте сигнал GtkWidgetClass::focus.

Устанавливает цепочку фокуса, переопределяя автоматически вычисляемую GTK+.

В принципе, каждый виджет в цепочке должен быть потомком контейнера, но это не проверяется этим методом, так как разрешается установить цепочку фокуса до добавления виджетов или иметь виджет в цепочке, который не всегда отображается. Необходимые проверки выполняются при фактическом прохождении по цепочке фокуса.

Параметры

container

a GtkContainer

focusable_widgets

новая цепочка фокуса.

[transfer none][element-type GtkWidget]

gtk_container_unset_focus_chain ()

void
gtk_container_unset_focus_chain (GtkContainer *container);

gtk_container_unset_focus_chain устарело начиная с версии 3.24 и не должно использоваться в новых кодах.

Для переопределения поведения фокуса используйте сигнал GtkWidgetClass::focus.

Удаляет цепочку фокуса, явно заданную с помощью gtk_container_set_focus_chain().

Параметры

container

a GtkContainer

gtk_container_class_find_child_property ()

GParamSpec *
gtk_container_class_find_child_property
                               (GObjectClass *cclass,
                                const gchar *property_name);

Находит свойство дочернего элемента класса контейнера по имени.

Параметры

cclass

a GtkContainerClass.

[type GtkContainerClass]

property_name

имя дочернего свойства для поиска

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

the GParamSpec дочернего свойства или NULL если у class нет дочернего свойства с этим именем.

[nullable][transfer none]

gtk_container_class_install_child_property ()

void
gtk_container_class_install_child_property
                               (GtkContainerClass *cclass,
                                guint property_id,
                                GParamSpec *pspec);

Устанавливает дочернее свойство в классе контейнера.

Параметры

cclass

a GtkContainerClass

property_id

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

pspec

the GParamSpec для свойства

gtk_container_class_install_child_properties ()

void
gtk_container_class_install_child_properties
                               (GtkContainerClass *cclass,
                                guint n_pspecs,
                                GParamSpec **pspecs);

Устанавливает свойства дочерних элементов в классе контейнера.

Параметры

cclass

a GtkContainerClass

n_pspecs

длина массива GParamSpec

pspecs

массив GParamSpec, определяющий новые свойства дочерних элементов.

[array length=n_pspecs]

Since: 3.18

gtk_container_class_list_child_properties ()

GParamSpec **
gtk_container_class_list_child_properties
                               (GObjectClass *cclass,
                                guint *n_properties);

Возвращает все свойства дочерних элементов класса контейнера.

Параметры

cclass

a GtkContainerClass.

[type GtkContainerClass]

n_properties

место для возврата количества найденных свойств дочерних элементов

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

новый выделенный массив GParamSpec*, завершаемый нулём. Массив необходимо освободить с помощью g_free().

[array length=n_properties][transfer container]

gtk_container_class_handle_border_width ()

void
gtk_container_class_handle_border_width
                               (GtkContainerClass *klass);

Изменяет подкласс GtkContainerClass для автоматического добавления и удаления настройки border-width в GtkContainer. Это позволяет подклассу игнорировать ширину границы в запросах размера и методах выделения. Цель состоит в том, чтобы подкласс вызывал это в функции class_init.

gtk_container_class_handle_border_width() необходим, так как было бы слишком сложно изменить API для этого поведения по умолчанию. Поэтому подклассы должны «подключиться» к обработке border_width родительским классом.

Параметры

klass

структура класса подкласса GtkContainer

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

struct GtkContainer

struct GtkContainer;

struct GtkContainerClass

struct GtkContainerClass {
  GtkWidgetClass parent_class;

  void    (*add)       		(GtkContainer	 *container,
				 GtkWidget	 *widget);
  void    (*remove)    		(GtkContainer	 *container,
				 GtkWidget	 *widget);
  void    (*check_resize) (GtkContainer	 *container);
  void    (*forall)    		(GtkContainer	 *container,
				 gboolean	  include_internals,
				 GtkCallback	  callback,
				 gpointer	  callback_data);
  void    (*set_focus_child) (GtkContainer	 *container,
				 GtkWidget	 *child);
  GType   (*child_type)		(GtkContainer	 *container);
  gchar*  (*composite_name) (GtkContainer	 *container,
				 GtkWidget	 *child);
  void    (*set_child_property) (GtkContainer    *container,
				 GtkWidget       *child,
				 guint            property_id,
				 const GValue    *value,
				 GParamSpec      *pspec);
  void    (*get_child_property) (GtkContainer    *container,
                                 GtkWidget       *child,
				 guint            property_id,
				 GValue          *value,
				 GParamSpec      *pspec);
  GtkWidgetPath * (*get_path_for_child) (GtkContainer *container,
                                         GtkWidget    *child);
};

Базовый класс для контейнеров.

Члены

add ()

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

remove ()

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

check_resize ()

Сигнал, генерируемый при необходимости перерасчета размеров.

forall ()

Вызывает обратный вызов для каждого дочернего элемента контейнера. Обработчик обратного вызова может удалить дочерний элемент.

set_focus_child ()

Устанавливает фокусированный дочерний элемент контейнера.

child_type ()

Возвращает тип дочерних элементов, поддерживаемых контейнером.

composite_name ()

Получает составное имя виджета. Устарело: 3.10.

set_child_property ()

Устанавливает свойство дочернего элемента контейнера.

get_child_property ()

Получает свойство дочернего элемента контейнера.

get_path_for_child ()

Получить путь, представляющий всю иерархию виджетов сверху вниз, включая child .

Перечисление GtkResizeMode

Члены

GTK_RESIZE_PARENT

Передать запрос на изменение размера родительскому элементу

GTK_RESIZE_QUEUE

Очередь изменений размера для данного виджета

GTK_RESIZE_IMMEDIATE

Изменить размер немедленно. Устарело.

Подробности свойств

Свойство “border-width”

  “border-width”             guint

Ширина пустой границы вне дочерних элементов контейнера.

Владелец: GtkContainer

Флаги: Чтение / Запись

Допустимые значения: <= 65535

Значение по умолчанию: 0

Свойство “child”

  “child”                    GtkWidget *

Может быть использован для добавления нового дочернего элемента в контейнер.

Владелец: GtkContainer

Флаги: Запись

Свойство “resize-mode”

  “resize-mode”              GtkResizeMode

Указывает, как обрабатываются события изменения размера.

Владелец: GtkContainer

Флаги: Чтение / Запись

Значение по умолчанию: GTK_RESIZE_PARENT

Подробности сигналов

Сигнал “add”

void
user_function (GtkContainer *container,
               GtkWidget    *widget,
               gpointer      user_data)

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

Сигнал “check-resize”

void
user_function (GtkContainer *container,
               gpointer      user_data)

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

Сигнал “remove”

void
user_function (GtkContainer *container,
               GtkWidget    *widget,
               gpointer      user_data)

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

Сигнал “set-focus-child”

void
user_function (GtkContainer *container,
               GtkWidget    *widget,
               gpointer      user_data)

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

© 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/GtkContainer.html

Spec-Zone.ru

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