GtkFlowBox
GtkFlowBox — Контейнер, позволяющий перестраивать своих дочерние элементы.
Функции
Свойства
| gboolean | активировать-при-одиночном-щелчке | Чтение / Запись |
| guint | интервал-между-столбцами | Чтение / Запись |
| gboolean | однородный | Чтение / Запись |
| guint | максимум-элементов-в-строке | Чтение / Запись |
| guint | минимум-элементов-в-строке | Чтение / Запись |
| guint | интервал-между-строками | Чтение / Запись |
| GtkSelectionMode | режим-выделения | Чтение / Запись |
Сигналы
Типы и Значения
| struct | GtkFlowBox |
| struct | GtkFlowBoxChild |
Иерархия объектов
GObject ╰── GInitiallyUnowned ╰── GtkWidget ╰── GtkContainer ├── GtkBin │ ╰── GtkFlowBoxChild ╰── GtkFlowBox
Реализованные интерфейсы
GtkFlowBox реализует AtkImplementorIface, GtkBuildable и GtkOrientable.
GtkFlowBoxChild реализует AtkImplementorIface и GtkBuildable.
Файлы заголовков
#include <gtk/gtk.h>
Описание
GtkFlowBox располагает дочерние виджеты последовательно в соответствии с его ориентацией.
Например, при горизонтальной ориентации виджеты будут размещены слева направо, начиная новую строку под предыдущей по мере необходимости. Уменьшение ширины в этом случае потребует больше строк, поэтому будет запрошен больший размер высоты.
Аналогично, при вертикальной ориентации виджеты будут размещены сверху вниз, начиная новый столбец справа по мере необходимости. Уменьшение высоты потребует больше столбцов, поэтому будет запрошен больший размер ширины.
Дочерние элементы GtkFlowBox могут динамически сортироваться и фильтроваться.
Хотя у GtkFlowBox должны быть только дочерние элементы типа GtkFlowBoxChild, вы можете добавить любой виджет с помощью gtk_container_add(), и виджет GtkFlowBoxChild будет автоматически вставлен между контейнером и виджетом.
См. также GtkListBox.
GtkFlowBox был добавлен в GTK+ 3.12.
CSS-узлы
flowbox ├── flowboxchild │ ╰── <child> ├── flowboxchild │ ╰── <child> ┊ ╰── [rubberband]
GtkFlowBox использует единственный CSS-узел с именем flowbox. GtkFlowBoxChild использует единственный CSS-узел с именем flowboxchild. Для выделения с эффектом резинки используется под-узел с именем rubberband.
Функции
gtk_flow_box_new ()
GtkWidget *
gtk_flow_box_new (void); Создаёт GtkFlowBox.
Возвращает
новый контейнер GtkFlowBox
С момента: 3.12
gtk_flow_box_insert ()
void gtk_flow_box_insert (GtkFlowBox *box,GtkWidget *widget,gint position);
Вставляет widget в box по позиции position .
Если задана функция сортировки, виджет будет фактически вставлен в рассчитанную позицию, и эта функция имеет тот же эффект, что и gtk_container_add().
Если position равно -1 или больше, чем общее количество дочерних элементов в box , то widget будет добавлен в конец.
Параметры
box | ||
widget | the GtkWidget для добавления | |
position | позиция для вставки |
С момента: 3.12
gtk_flow_box_get_child_at_index ()
GtkFlowBoxChild * gtk_flow_box_get_child_at_index (GtkFlowBox *box,gint idx);
Возвращает n-ый дочерний элемент в box .
Параметры
box | ||
idx | позиция дочернего элемента |
Возвращает
дочерний виджет, который всегда будет GtkFlowBoxChild или NULL в случае, если дочернего виджета с данным индексом не существует.
[transfer none][nullable]
С момента: 3.12
gtk_flow_box_set_hadjustment ()
void gtk_flow_box_set_hadjustment (GtkFlowBox *box,GtkAdjustment *adjustment);
Подключает корректировку к обработке фокуса в box . Корректировка также используется для автоматической прокрутки во время выделения резиновым прямоугольником. См. gtk_scrolled_window_get_hadjustment() для типичного способа получения корректировки и gtk_flow_box_set_vadjustment() для установки вертикальной корректировки.
Корректировки должны быть в пикселях и в той же системе координат, что и выделение для непосредственных дочерних элементов ящика.
Параметры
box | ||
adjustment | корректировка, которая должна быть скорректирована при перемещении фокуса среди потомков |
С момента: 3.12
gtk_flow_box_set_vadjustment ()
void gtk_flow_box_set_vadjustment (GtkFlowBox *box,GtkAdjustment *adjustment);
Подключает корректировку к обработке фокуса в box . Корректировка также используется для автоматической прокрутки во время выделения резиновым прямоугольником. См. gtk_scrolled_window_get_vadjustment() для типичного способа получения корректировки и gtk_flow_box_set_hadjustment() для установки горизонтальной корректировки.
Корректировки должны быть в пикселях и в той же системе координат, что и выделение для непосредственных дочерних элементов ящика.
Параметры
box | ||
adjustment | корректировка, которая должна быть скорректирована при перемещении фокуса среди потомков |
С момента: 3.12
gtk_flow_box_set_homogeneous ()
void gtk_flow_box_set_homogeneous (GtkFlowBox *box,gboolean homogeneous);
Устанавливает свойство “homogeneous” для box , определяя, будут ли все дочерние элементы box занимать равное пространство в ящике.
С момента: 3.12
gtk_flow_box_get_homogeneous ()
gboolean
gtk_flow_box_get_homogeneous (GtkFlowBox *box); Возвращает, является ли ящик однородным (все дочерние элементы имеют одинаковый размер). См. gtk_box_set_homogeneous().
Параметры
box |
Возвращает
TRUE, если ящик однородный.
С момента: 3.12
gtk_flow_box_set_row_spacing ()
void gtk_flow_box_set_row_spacing (GtkFlowBox *box,guint spacing);
Устанавливает вертикальное расстояние между дочерними элементами. См. свойство “row-spacing”.
Параметры
box | ||
spacing | расстояние |
С момента: 3.12
gtk_flow_box_get_row_spacing ()
guint
gtk_flow_box_get_row_spacing (GtkFlowBox *box); Получает вертикальное расстояние.
Параметры
box |
Возвращает
вертикальное расстояние
С момента: 3.12
gtk_flow_box_set_column_spacing ()
void gtk_flow_box_set_column_spacing (GtkFlowBox *box,guint spacing);
Устанавливает горизонтальное пространство между элементами. См. свойство “column-spacing”.
Параметры
box | ||
spacing | используемое пространство |
Since: 3.12
gtk_flow_box_get_column_spacing ()
guint
gtk_flow_box_get_column_spacing (GtkFlowBox *box); Возвращает горизонтальное пространство.
Параметры
box |
Возвращает
горизонтальное пространство
Since: 3.12
gtk_flow_box_set_min_children_per_line ()
void gtk_flow_box_set_min_children_per_line (GtkFlowBox *box,guint n_children);
Устанавливает минимальное количество элементов для выравнивания в ориентации box перед переходом на новую строку.
Параметры
box | ||
n_children | минимальное количество элементов на строке |
Since: 3.12
gtk_flow_box_get_min_children_per_line ()
guint
gtk_flow_box_get_min_children_per_line
(GtkFlowBox *box); Возвращает минимальное количество элементов на строке.
Параметры
box |
Возвращает
минимальное количество элементов на строке
Since: 3.12
gtk_flow_box_set_max_children_per_line ()
void gtk_flow_box_set_max_children_per_line (GtkFlowBox *box,guint n_children);
Устанавливает максимальное количество элементов, для которых запрашивается и выделяется место в ориентации box.
Установка максимального количества элементов на строке ограничивает общий запрос на естественный размер, чтобы он не превышал n_children элементов в заданной ориентации.
Параметры
box | ||
n_children | максимальное количество элементов на строке |
Since: 3.12
gtk_flow_box_get_max_children_per_line ()
guint
gtk_flow_box_get_max_children_per_line
(GtkFlowBox *box); Возвращает максимальное количество элементов на строке.
Параметры
box |
Возвращает
максимальное количество элементов на строке
Since: 3.12
gtk_flow_box_set_activate_on_single_click ()
void gtk_flow_box_set_activate_on_single_click (GtkFlowBox *box,gboolean single);
Если single равно TRUE, элементы будут активироваться при нажатии один раз, в противном случае требуется двойной щелчок.
Параметры
box | ||
single |
|
Since: 3.12
gtk_flow_box_get_activate_on_single_click ()
gboolean
gtk_flow_box_get_activate_on_single_click
(GtkFlowBox *box); Возвращает, активируются ли элементы при одиночном щелчке.
Параметры
box |
Since: 3.12
GtkFlowBoxForeachFunc ()
void (*GtkFlowBoxForeachFunc) (GtkFlowBox *box,GtkFlowBoxChild *child,gpointer user_data);
Функция, используемая gtk_flow_box_selected_foreach(). Она будет вызвана для каждого выделенного элемента box.
Параметры
box | ||
child | ||
user_data | пользовательские данные. | [closure] |
Since: 3.12
gtk_flow_box_selected_foreach ()
void gtk_flow_box_selected_foreach (GtkFlowBox *box,GtkFlowBoxForeachFunc func,gpointer data);
Вызывает функцию для каждого выделенного элемента.
Обратите внимание, что выборку нельзя изменить внутри этой функции.
Параметры
box | ||
func | функция для вызова для каждого выделенного элемента. | [scope call] |
data | пользовательские данные, передаваемые функции |
Since: 3.12
gtk_flow_box_get_selected_children ()
GList *
gtk_flow_box_get_selected_children (GtkFlowBox *box); Создаёт список всех выделенных элементов.
Параметры
box |
Возвращает
A GList содержащий GtkWidget для каждого выделенного элемента. Освободите с помощью g_list_free(), когда закончите.
[element-type GtkFlowBoxChild][transfer container]
Since: 3.12
gtk_flow_box_select_child ()
void gtk_flow_box_select_child (GtkFlowBox *box,GtkFlowBoxChild *child);
Выбирает один дочерний элемент box, если режим выбора это позволяет.
Параметры
box | объект GtkFlowBox | |
child | дочерний элемент |
С: 3.12
gtk_flow_box_unselect_child ()
void gtk_flow_box_unselect_child (GtkFlowBox *box,GtkFlowBoxChild *child);
Отменяет выбор одного дочернего элемента box, если режим выбора это позволяет.
Параметры
box | объект GtkFlowBox | |
child | дочерний элемент |
С: 3.12
gtk_flow_box_select_all ()
void
gtk_flow_box_select_all (GtkFlowBox *box); Выбирает все дочерние элементы box, если режим выбора это позволяет.
Параметры
box | объект GtkFlowBox |
С: 3.12
gtk_flow_box_unselect_all ()
void
gtk_flow_box_unselect_all (GtkFlowBox *box); Отменяет выбор всех дочерних элементов box, если режим выбора это позволяет.
Параметры
box | объект GtkFlowBox |
С: 3.12
gtk_flow_box_set_selection_mode ()
void gtk_flow_box_set_selection_mode (GtkFlowBox *box,GtkSelectionMode mode);
Устанавливает как работает выбор в box. Подробности см. в GtkSelectionMode.
Параметры
box | объект GtkFlowBox | |
mode | новый режим выбора |
С: 3.12
gtk_flow_box_get_selection_mode ()
GtkSelectionMode
gtk_flow_box_get_selection_mode (GtkFlowBox *box); Получает режим выбора box.
Параметры
box | объект GtkFlowBox |
Возвращает
С: 3.12
GtkFlowBoxFilterFunc ()
gboolean (*GtkFlowBoxFilterFunc) (GtkFlowBoxChild *child,gpointer user_data);
Функция, которая вызывается при изменении или добавлении дочернего элемента. Она позволяет управлять отображением дочернего элемента.
Параметры
child | GtkFlowBoxChild который может быть отфильтрован | |
user_data | данные пользователя. | [closure] |
С: 3.12
gtk_flow_box_set_filter_func ()
void gtk_flow_box_set_filter_func (GtkFlowBox *box,GtkFlowBoxFilterFunc filter_func,gpointer user_data,GDestroyNotify destroy);
Установив функцию фильтра для box, можно динамически определять, какие дочерние элементы отображать. Например, для реализации функции поиска, которая отображает только дочерние элементы, соответствующие поисковым запросам.
Функция filter_func будет вызываться для каждого дочернего элемента после вызова, и она будет продолжать вызываться каждый раз, когда дочерний элемент меняется (через gtk_flow_box_child_changed()) или когда вызывается gtk_flow_box_invalidate_filter().
Обратите внимание, что использование функции фильтра несовместимо с использованием модели (см. gtk_flow_box_bind_model()).
Параметры
box | объект GtkFlowBox | |
filter_func | обратный вызов, позволяющий фильтровать отображаемые дочерние элементы. | [closure user_data][allow-none] |
user_data | данные пользователя, передаваемые | |
destroy | уведомление об уничтожении |
С: 3.12
gtk_flow_box_invalidate_filter ()
void
gtk_flow_box_invalidate_filter (GtkFlowBox *box); Обновляет фильтрацию всех дочерних элементов.
Вызывайте эту функцию, когда результат функции фильтра для box изменяется по внешним причинам. Например, это используется, если функция фильтра просто ищет определенный поисковый термин, а запись со строкой изменилась.
Параметры
box | объект GtkFlowBox |
С: 3.12
GtkFlowBoxSortFunc ()
gint (*GtkFlowBoxSortFunc) (GtkFlowBoxChild *child1,GtkFlowBoxChild *child2,gpointer user_data);
Функция для сравнения двух дочерних элементов, чтобы определить, какой должен быть первым.
Параметры
child1 | первый дочерний элемент | |
child2 | второй дочерний элемент | |
user_data | данные пользователя. | [closure] |
Возвращает
< 0, если child1 должен быть перед child2, 0, если они равны, и > 0 в противном случае
С: 3.12
gtk_flow_box_set_sort_func ()
void gtk_flow_box_set_sort_func (GtkFlowBox *box,GtkFlowBoxSortFunc sort_func,gpointer user_data,GDestroyNotify destroy);
Установив функцию сортировки для box, можно динамически переупорядочить дочерние элементы ячейки, основываясь на содержимом этих элементов.
Функция sort_func будет вызвана для каждого дочернего элемента после вызова и будет продолжать вызываться каждый раз, когда дочерний элемент изменяется (через gtk_flow_box_child_changed()) и при вызове gtk_flow_box_invalidate_sort().
Обратите внимание, что использование функции сортировки несовместимо с использованием модели (см. gtk_flow_box_bind_model()).
Параметры
box | ||
sort_func | функция сортировки. | [closure user_data][allow-none] |
user_data | данные пользователя, передаваемые функции | |
destroy | функция уведомления об уничтожении для |
С момента: 3.12
gtk_flow_box_invalidate_sort ()
void
gtk_flow_box_invalidate_sort (GtkFlowBox *box); Обновляет сортировку всех дочерних элементов.
Вызывается, когда результат функции сортировки для box изменяется по внешним причинам.
Параметры
box |
С момента: 3.12
GtkFlowBoxCreateWidgetFunc ()
GtkWidget * (*GtkFlowBoxCreateWidgetFunc) (gpointer item,gpointer user_data);
Вызывается для ячеек потокового типа, привязанных к GListModel с помощью gtk_flow_box_bind_model() для каждого элемента, добавляемого в модель.
Параметры
item | элемент из модели, для которого необходимо создать виджет | |
user_data | данные пользователя из |
С момента: 3.18
gtk_flow_box_bind_model ()
void gtk_flow_box_bind_model (GtkFlowBox *box,GListModel *model,GtkFlowBoxCreateWidgetFunc create_widget_func,gpointer user_data,GDestroyNotify user_data_free_func);
Привязывает model к box.
Если box уже был привязан к модели, предыдущая привязка уничтожается.
Содержимое box очищается и заполняется виджетами, представляющими элементы из model. box обновляется при каждом изменении model. Если model равен NULL, box остается пустым.
Неопределено добавлять или удалять виджеты напрямую (например, с помощью gtk_flow_box_insert() или gtk_container_add()), когда box привязан к модели.
Обратите внимание, что использование модели несовместимо с функциями фильтрации и сортировки в GtkFlowBox. При использовании модели фильтрация и сортировка должны быть реализованы в модели.
Параметры
box | ||
model | GListModel для привязки к | [allow-none] |
create_widget_func | функция, создающая виджеты для элементов | |
user_data | данные пользователя, передаваемые функции | |
user_data_free_func | функция для освобождения |
С момента: 3.18
gtk_flow_box_child_new ()
GtkWidget *
gtk_flow_box_child_new (void); Создает новый GtkFlowBoxChild для использования в качестве дочернего элемента GtkFlowBox.
Возвращает
новый GtkFlowBoxChild
С момента: 3.12
gtk_flow_box_child_get_index ()
gint
gtk_flow_box_child_get_index (GtkFlowBoxChild *child); Возвращает текущий индекс child в контейнере GtkFlowBox.
Параметры
child |
Возвращает
индекс child или -1, если child не находится в ячейке потокового типа.
С момента: 3.12
gtk_flow_box_child_is_selected ()
gboolean
gtk_flow_box_child_is_selected (GtkFlowBoxChild *child); Возвращает, выбран ли child в контейнере GtkFlowBox.
Параметры
child |
Возвращает
TRUE, если child выбран
С момента: 3.12
gtk_flow_box_child_changed ()
void
gtk_flow_box_child_changed (GtkFlowBoxChild *child); Помечает child как изменённое, вызывая обновление любого состояния, зависящего от него. Это влияет на сортировку и фильтрацию.
Обратите внимание, что вызовы этого метода должны синхронизироваться с данными, используемыми для функций сортировки и фильтрации. Например, если список отражает некоторый внешний набор данных, и *два* элемента изменились во внешнем наборе данных, когда вы вызываете gtk_flow_box_child_changed() для первого элемента, функция сортировки должна считывать новые данные только для первого из двух изменённых элементов, иначе пересортировка элементов будет неверной.
Это, как правило, означает, что если вы не полностью контролируете модель данных, вам нужно дублировать данные, влияющие на функции сортировки и фильтрации, в сами виджеты. Другой вариант — вызвать gtk_flow_box_invalidate_sort() при любом изменении модели, но это более затратно.
Параметры
child | элемент GtkFlowBoxChild |
С версии: 3.12
Типы и значения
struct GtkFlowBox
struct GtkFlowBox;
struct GtkFlowBoxChild
struct GtkFlowBoxChild;
Подробное описание свойств
Свойство “activate-on-single-click”
“activate-on-single-click” gboolean
Определяет, могут ли элементы активироваться одним щелчком мыши или требуется двойной щелчок.
Флаги: Чтение / Запись
Значение по умолчанию: TRUE
Свойство “column-spacing”
“column-spacing” guint
Количество горизонтального пространства между двумя элементами.
Флаги: Чтение / Запись
Значение по умолчанию: 0
Свойство “homogeneous”
“homogeneous” gboolean
Определяет, должны ли все элементы иметь одинаковый размер.
Флаги: Чтение / Запись
Значение по умолчанию: FALSE
Свойство “max-children-per-line”
“max-children-per-line” guint
Максимальное количество элементов, для которых запрашивается пространство последовательно в заданном направлении.
Флаги: Чтение / Запись
Значение по умолчанию: 7
Свойство “min-children-per-line”
“min-children-per-line” guint
Минимальное количество элементов, выделяемых последовательно в заданном направлении.
Установка минимального количества элементов в строке гарантирует, что будет запрошена разумно малая высота для минимальной ширины всей области.
Флаги: Чтение / Запись
Значение по умолчанию: 0
Свойство “row-spacing”
“row-spacing” guint
Количество вертикального пространства между двумя элементами.
Флаги: Чтение / Запись
Значение по умолчанию: 0
Свойство “selection-mode”
“selection-mode” GtkSelectionMode
Режим выделения, используемый панелью Flow Box.
Флаги: Чтение / Запись
Значение по умолчанию: GTK_SELECTION_SINGLE
Подробности сигналов
Сигнал “activate-cursor-child”
void user_function (GtkFlowBox *box, gpointer user_data)
Сигнал ::activate-cursor-child — это сигнал для привязки клавиш, который генерируется, когда пользователь активирует box.
Параметры
box | объект GtkFlowBox, на котором генерируется сигнал | |
user_data | данные пользователя, заданные при подключении обработчика сигнала. |
Флаги: Действие
Сигнал “child-activated”
void user_function (GtkFlowBox *box, GtkFlowBoxChild *child, gpointer user_data)
Сигнал ::child-activated генерируется, когда пользователь активирует дочерний элемент.
Параметры
box | объект GtkFlowBox, на котором генерируется сигнал | |
child | дочерний элемент, который активирован | |
user_data | данные пользователя, заданные при подключении обработчика сигнала. |
Флаги: Выполнять последним
Сигнал “move-cursor”
gboolean user_function (GtkFlowBox *box, GtkMovementStep step, gint count, gpointer user_data)
Сигнал ::move-cursor — это сигнал для привязки клавиш, который генерируется при инициировании пользователем перемещения курсора.
Приложениям не следует подключаться к нему, но они могут генерировать его с помощью g_signal_emit_by_name(), если им нужно программно управлять курсором.
Стандартные привязки к этому сигналу представлены в двух вариантах: вариант со Shift-модификатором расширяет выделение, а вариант без Shift-модификатора не делает этого. Перечисление всех комбинаций клавиш здесь невозможно.
Стрелки перемещают на один дочерний элемент
Клавиши Home/End перемещают к концам области
Клавиши PageUp/PageDown перемещают по страницам вертикально
Параметры
box | объект GtkFlowBox, на котором генерируется сигнал | |
step | размер перемещения, как GtkMovementStep | |
count | количество единиц | |
user_data | данные пользователя, заданные при подключении обработчика сигнала. |
Возвращаемое значение
TRUE, чтобы остановить вызов других обработчиков для события. FALSE, чтобы распространить событие дальше.
Флаги: Действие
Сигнал “select-all”
void user_function (GtkFlowBox *box, gpointer user_data)
Сигнал ::select-all — это сигнал для привязки клавиш, который генерируется для выделения всех дочерних элементов области, если режим выделения позволяет это.
Стандартная привязка для этого сигнала — Ctrl-a.
Параметры
box | объект GtkFlowBox, на котором генерируется сигнал | |
user_data | данные пользователя, заданные при подключении обработчика сигнала. |
Флаги: Действие
Сигнал “selected-children-changed”
void user_function (GtkFlowBox *box, gpointer user_data)
Сигнал ::selected-children-changed генерируется при изменении набора выделенных дочерних элементов.
Используйте gtk_flow_box_selected_foreach() или gtk_flow_box_get_selected_children() для получения выделенных дочерних элементов.
Параметры
box | объект GtkFlowBox, на котором генерируется сигнал | |
user_data | данные пользователя, заданные при подключении обработчика сигнала. |
Флаги: Выполнять первым
Сигнал “toggle-cursor-child”
void user_function (GtkFlowBox *box, gpointer user_data)
Сигнал ::toggle-cursor-child — это сигнал для привязки клавиш, который переключает выделение дочернего элемента, у которого фокус.
Стандартная привязка для этого сигнала — Ctrl-Пробел.
Параметры
box | объект GtkFlowBox, на котором генерируется сигнал | |
user_data | данные пользователя, заданные при подключении обработчика сигнала. |
Флаги: Действие
Сигнал “unselect-all”
void user_function (GtkFlowBox *box, gpointer user_data)
Сигнал ::unselect-all — это сигнал для привязки клавиш, который генерируется для отмены выделения всех дочерних элементов области, если режим выделения позволяет это.
Стандартная привязка для этого сигнала — Ctrl-Shift-a.
Параметры
box | объект GtkFlowBox, на котором генерируется сигнал | |
user_data | данные пользователя, заданные при подключении обработчика сигнала. |
Флаги: Действие
Сигнал “activate”
void user_function (GtkFlowBoxChild *child, gpointer user_data)
Сигнал ::activate генерируется, когда пользователь активирует дочерний виджет в GtkFlowBox, нажав или дважды щелкнув левой кнопкой мыши, или нажав клавиши Пробел или Enter.
Хотя этот сигнал используется как сигнал для привязки клавиш, его могут использовать приложения для собственных целей.
Параметры
child | Дочерний элемент, на котором генерируется сигнал | |
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/GtkFlowBox.html