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 | используемое расстояние |
С тех пор: 3.12
gtk_flow_box_get_column_spacing ()
guint
gtk_flow_box_get_column_spacing (GtkFlowBox *box); Получает горизонтальное расстояние.
Параметры
box |
Возвращаемое значение
горизонтальное расстояние
С тех пор: 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 | минимальное количество дочерних элементов в строке |
С тех пор: 3.12
gtk_flow_box_get_min_children_per_line ()
guint
gtk_flow_box_get_min_children_per_line
(GtkFlowBox *box); Получает минимальное количество дочерних элементов в строке.
Параметры
box |
Возвращаемое значение
минимальное количество дочерних элементов в строке
С тех пор: 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 | максимальное количество дочерних элементов в строке |
С тех пор: 3.12
gtk_flow_box_get_max_children_per_line ()
guint
gtk_flow_box_get_max_children_per_line
(GtkFlowBox *box); Получает максимальное количество дочерних элементов в строке.
Параметры
box |
Возвращаемое значение
максимальное количество дочерних элементов в строке
С тех пор: 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 |
|
С тех пор: 3.12
gtk_flow_box_get_activate_on_single_click ()
gboolean
gtk_flow_box_get_activate_on_single_click
(GtkFlowBox *box); Возвращает, активируются ли дочерние элементы при однократном щелчке.
Параметры
box |
Возвращаемое значение
TRUE, если дочерние элементы активируются при однократном щелчке, FALSE в противном случае
С тех пор: 3.12
GtkFlowBoxForeachFunc ()
void (*GtkFlowBoxForeachFunc) (GtkFlowBox *box,GtkFlowBoxChild *child,gpointer user_data);
Функция, используемая gtk_flow_box_selected_foreach(). Она вызывается для каждого выделенного дочернего элемента box.
Параметры
box | ||
child | ||
user_data | пользовательские данные. | [closure] |
С тех пор: 3.12
gtk_flow_box_selected_foreach ()
void gtk_flow_box_selected_foreach (GtkFlowBox *box,GtkFlowBoxForeachFunc func,gpointer data);
Вызывает функцию для каждого выделенного дочернего элемента.
Обратите внимание, что выборку нельзя изменять внутри этой функции.
Параметры
box | ||
func | функция, вызываемая для каждого выбранного дочернего элемента. | [scope call] |
data | пользовательские данные, передаваемые функции |
С тех пор: 3.12
gtk_flow_box_get_selected_children ()
GList *
gtk_flow_box_get_selected_children (GtkFlowBox *box); Создаёт список всех выделенных дочерних элементов.
Параметры
box |
Возвращаемое значение
GList содержащий GtkWidget каждого выделенного дочернего элемента. Освободить с помощью g_list_free(), когда закончите.
[element-type GtkFlowBoxChild][transfer container]
С: 3.12
gtk_flow_box_select_child ()
void gtk_flow_box_select_child (GtkFlowBox *box,GtkFlowBoxChild *child);
Выделяет один дочерний элемент box, если режим выделения это позволяет.
Параметры
box | ||
child | дочерний элемент |
С: 3.12
gtk_flow_box_unselect_child ()
void gtk_flow_box_unselect_child (GtkFlowBox *box,GtkFlowBoxChild *child);
Снимает выделение с одного дочернего элемента box, если режим выделения это позволяет.
Параметры
box | ||
child | дочерний элемент |
С: 3.12
gtk_flow_box_select_all ()
void
gtk_flow_box_select_all (GtkFlowBox *box); Выделяет все дочерние элементы box, если режим выделения это позволяет.
Параметры
box |
С: 3.12
gtk_flow_box_unselect-all ()
void
gtk_flow_box_unselect_all (GtkFlowBox *box); Снимает выделение со всех дочерних элементов box, если режим выделения это позволяет.
Параметры
box |
С: 3.12
gtk_flow_box_set_selection_mode ()
void gtk_flow_box_set_selection_mode (GtkFlowBox *box,GtkSelectionMode mode);
Устанавливает, как работает выделение в box. Смотрите GtkSelectionMode для подробностей.
Параметры
box | ||
mode | новый режим выделения |
С: 3.12
gtk_flow_box_get_selection_mode ()
GtkSelectionMode
gtk_flow_box_get_selection_mode (GtkFlowBox *box); Получает режим выделения box.
Параметры
box |
Возвращаемое значение
С: 3.12
GtkFlowBoxFilterFunc ()
gboolean (*GtkFlowBoxFilterFunc) (GtkFlowBoxChild *child,gpointer user_data);
Функция, которая вызывается при каждом изменении или добавлении дочернего элемента. Она позволяет управлять отображением дочернего элемента.
Параметры
child | a 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 | ||
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 |
С: 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);
Вызывается для flow boxes, связанные с 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 не находится в flow box.
С: 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 |
С: 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
Режим выбора, используемый флоу-боксом.
Флаги: Чтение / Запись
Значение по умолчанию: 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 для расширения выделения и без него — для обычного перемещения. Полный список слишком обширен.
Клавиши со стрелками перемещают на один дочерний элемент.
Клавиши 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-Space.
Параметры
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.22/GtkFlowBox.html