Spec-Zone.ru › GTK 3.20

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 Run First
void check-resize Run Last
void remove Run First
void set-focus-child Run First

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

struct GtkContainer
struct GtkContainerClass
перечисление 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, свойства дочерних элементов также могут быть помечены как переводимые с использованием тех же атрибутов «переводимый», «комментарии» и «контекст», которые используются для обычных свойств.

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

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

staticvoid
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 forthis 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().

Параметры

объект

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

Параметры

контейнер

GtkContainer

виджет

виджет, который будет размещён внутри 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(), так как это удалит его из контейнера и поможет разорвать любые циклы ссылок.

Параметры

контейнер

GtkContainer

виджет

текущий дочерний элемент 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() для получения дополнительных сведений.

Параметры

контейнер

GtkContainer

виджет

виджет, который будет размещён внутри 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().

Параметры

контейнер

GtkContainer

Возвращает

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

gtk_container_set_resize_mode ()

void
gtk_container_set_resize_mode (GtkContainer *container,
                               GtkResizeMode resize_mode);

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

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

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

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

Параметры

контейнер

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() вызовами.

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

Параметры

контейнер

GtkContainer

обработчик

обработчик.

[вызов область]

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

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

gtk_container_get_children ()

GList *
gtk_container_get_children (GtkContainer *container);

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

Параметры

контейнер

объект GtkContainer

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

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

[тип-элемента GtkWidget][перенос-контейнера]

gtk_container_get_path_for_child ()

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

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

Параметры

контейнер

объект GtkContainer

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

дочерний элемент 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 контейнера в заданное значение.

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

Параметры

контейнер

объект GtkContainer

нужны_перерисовки

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

gtk_container_get_focus_child ()

GtkWidget *
gtk_container_get_focus_child (GtkContainer *container);

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

Параметры

контейнер

объект GtkContainer

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

Виджет-дочерний элемент, который получит фокус внутри container, когда conatiner получит фокус, или NULL, если такой элемент не задан.

[nullable][перенос не требуется]

С: 2.14

gtk_container_set_focus_child ()

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

Устанавливает или сбрасывает (если child равен NULL) дочерний элемент с фокусом для container.

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

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

Параметры

контейнер

объект GtkContainer

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

GtkWidget или NULL.

[allow-none]

gtk_container_get_focus_vadjustment ()

GtkAdjustment *
gtk_container_get_focus_vadjustment (GtkContainer *container);

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

Параметры

контейнер

объект GtkContainer

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

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

[nullable][перенос не требуется]

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() для установки горизонтальной настройки.

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

Параметры

контейнер

объект GtkContainer

настройка

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

gtk_container_get_focus_hadjustment ()

GtkAdjustment *
gtk_container_get_focus_hadjustment (GtkContainer *container);

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

Параметры

контейнер

объект GtkContainer

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

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

[nullable][перенос не требуется]

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

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

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

child_property

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

callback

обратный вызов.

[scope call][closure callback_data]

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

border_width

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

a GtkContainer

focusable_widgets

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

[transfer none][element-type GtkWidget]

gtk_container_unset_focus_chain ()

void
gtk_container_unset_focus_chain (GtkContainer *container);

Удаляет цепочку фокуса, явно установленную с помощью 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

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

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

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

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]

С: 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

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

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

новый выделенный массив NULL-завершённый массив 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

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

структура GtkContainer

struct GtkContainer;

структура 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

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

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

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

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

Свойство “child”

  “child”                    GtkWidget *

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

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

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

  “resize-mode”              GtkResizeMode

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

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

Значение по умолчанию: 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.20/GtkContainer.html

Spec-Zone.ru

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