GtkCellArea
GtkCellArea — Абстрактный класс для выравнивания GtkCellRenderers
Функции
Свойства
| GtkCellEditable * | edit-widget | Чтение |
| GtkCellRenderer * | edited-cell | Чтение |
| GtkCellRenderer * | focus-cell | Чтение / Запись |
Сигналы
Типы и значения
| struct | GtkCellArea |
| struct | GtkCellAreaClass |
Иерархия объектов
GObject ╰── GInitiallyUnowned ╰── GtkCellArea ╰── GtkCellAreaBox
Реализованные интерфейсы
GtkCellArea реализует GtkCellLayout и GtkBuildable.
Включаемые файлы
#include <gtk/gtk.h>
Описание
Класс GtkCellArea является абстрактным классом для виджетов GtkCellLayout (также называемых "виджетами компоновки"), которые взаимодействуют с произвольным количеством GtkCellRenderers и взаимодействуют с пользователем для заданной строки GtkTreeModel.
Область ячейки обрабатывает события, навигацию по фокусу, отрисовку и запросы размера и выделения для заданной строки данных.
Обычно пользователям не нужно взаимодействовать напрямую с GtkCellArea, если они не реализуют сами виджет компоновки ячеек.
Запрос размеров области
Как описано в разделе управления геометрией GtkWidget, GTK+ использует систему управления геометрией "высота для ширины" для вычисления размеров виджетов и пользовательских интерфейсов. GtkCellArea использует те же семантики для вычисления размера области для произвольного количества строк GtkTreeModel.
При запросе размера области ячейки необходимо вычислить размер для нескольких строк, и это будет выполняться по-разному различными виджетами компоновки. Например, GtkTreeViewColumn всегда выстраивает области сверху вниз, в то время как GtkIconView может потребовать, чтобы все области имели одинаковую ширину и располагали области по очереди, запрашивая высоту для дополнительных областей ячеек при выделении меньшей ширины.
Также важно, чтобы области сохраняли выравнивание ячеек с областями, отрисованными для смежных строк (ячейки могут отображаться «колонообразно» внутри области, даже если размеры ячеек разные в каждой строке). По этой причине GtkCellArea использует объект GtkCellAreaContext для хранения выравниваний и размеров по ходу выполнения (а также общий максимальный минимальный и естественный размер для всех строк, которые были вычислены с использованием указанного контекста).
Объект GtkCellAreaContext — это неявный объект, специфичный для GtkCellArea, который его создал (см. gtk_cell_area_create_context()). Владеющий виджет компоновки ячеек может создавать столько контекстов, сколько ему нужно, чтобы вычислить размеры строк, которые должны получить одинаковый размер по крайней мере в одной ориентации (горизонтально или вертикально). Однако важно, чтобы тот же GtkCellAreaContext, который использовался для запроса размеров для заданной строки GtkTreeModel, использовался при отрисовке или обработке событий для этой строки.
Чтобы запросить ширину всех строк на корневом уровне GtkTreeModel, выполните следующие действия:
Обратите внимание, что в этом примере неважно наблюдать возвращаемую минимальную и естественную ширину области для каждой строки, если только виджет компоновки ячеек фактически не заинтересован в ширине отдельных строк. Однако общая ширина хранится в сопровождающем объекте GtkCellAreaContext и может быть проконсультирована в любое время.
Это может быть полезно, поскольку виджеты GtkCellLayout обычно должны поддерживать запрос и отрисовку строк в моделях дерева с чрезвычайно большим количеством строк. Виджет GtkCellLayout в этом случае вычислит требуемую ширину строк в источнике бездействия или тайм-аута (см. g_timeout_add()), и когда виджет запрошен своей фактической шириной в GtkWidgetClass.get_preferred_width(), он может просто проконсультироваться с накопленной шириной в объекте GtkCellAreaContext.
Простой пример, где строки отрисовываются сверху вниз и занимают всю ширину виджета компоновки, будет выглядеть так:
В приведенном выше примере виджет Foo должен убедиться, что некоторые размеры строк были вычислены (количество строк, которое Foo посчитал уместным для запроса места в одной итерации таймаута), прежде чем просто возвращать требуемое место для области через GtkCellAreaContext.
Запрос высоты для ширины (или ширины для высоты) области — аналогичная задача, за исключением того, что в этом случае GtkCellAreaContext не хранит данные (на самом деле, он не знает, сколько места виджет компоновки планирует выделять для каждой строки. За виджетом компоновки остается задача отрисовать каждую строку данных с соответствующей высотой и шириной, которые были запрошены GtkCellArea).
Чтобы запросить высоту для ширины всех строк на корневом уровне GtkTreeModel, выполните следующие действия:
Обратите внимание, что в приведенном выше примере нам нужно будет кэшировать возвращаемые высоты для каждой строки, чтобы мы знали, какие размеры отрисовывать для каждой строки. Однако мы будем кэшировать высоты только в том случае, если запрос предназначен для реального выделения виджетов компоновки.
В некоторых случаях виджет компоновки запрошен высотой для произвольной ширины, это особый случай для виджетов компоновки, которым необходимо запросить размер для десятков тысяч строк. В этом случае важно, чтобы виджет компоновки вычислил один разумный блок строк и синхронно вернул эту высоту. Причина в том, что любой виджет компоновки, по крайней мере, способен синхронно вычислить достаточно высоты, чтобы заполнить высоту экрана (или высоту окна прокрутки) в ответ на один вызов GtkWidgetClass.get_preferred_height_for_width(). Возврат точной высоты для ширины, большей, чем область экрана, несущественен, так как после того, как виджет компоновки получит выделение от окна прокрутки, он просто продолжает управлять значениями полосы прокрутки, пока не потребуется больше высоты для вычисленных высот строк в фоновом режиме.
Отрисовка областей
После получения размеров областей, по крайней мере, для строк в видимой области виджета компоновки, они могут быть отрисованы во время GtkWidgetClass.draw().
Грубый пример того, как отрисовать все строки на корневом уровне, выглядит следующим образом:
Обратите внимание, что кэшированная высота в этом примере действительно зависит от того, как работает виджет компоновки. Виджет компоновки может решить присвоить каждой строке минимальную или естественную высоту, или, если ожидается, что содержимое модели поместится внутри виджета компоновки без прокрутки, имеет смысл рассчитать выделение для каждой строки во время “size-allocate” с использованием gtk_distribute_natural_allocation().
Обработка событий и управление фокусом клавиатуры
Передача событий в область так же проста, как обработка событий на любом обычном виджете, а затем их передача в API gtk_cell_area_event() по мере их поступления. Обычно GtkCellArea интересуется только событиями нажатия кнопок, однако можно реализовать некоторые настраиваемые производные области, которые заинтересованы в обработке других событий. Обработка события может привести к запуску сигнала “focus-changed”, а также “add-editable” в случае, если была нажата редактируемая ячейка, и необходимо начать редактирование. Вы можете вызвать gtk_cell_area_stop_editing() в любое время, чтобы отменить любое редактирование ячейки, которое в настоящее время выполняется.
GtkCellArea управляет фокусом клавиатуры от ячейки к ячейке аналогично GtkWidget. Для виджетов компоновки, которые поддерживают предоставление фокуса ячейкам, важно помнить, что нужно передать GTK_CELL_RENDERER_FOCUSED функциям области для строки, имеющей фокус, и указать области нарисовать фокус во время отрисовки.
Виджеты компоновки, которые принимают фокус в ячейках, должны реализовать виртуальный метод GtkWidgetClass.focus(). Виджет компоновки всегда несет ответственность за знание того, где строки GtkTreeModel отрисовываются внутри виджета, поэтому во время GtkWidgetClass.focus() виджет компоновки должен использовать методы GtkCellArea для навигации по фокусу внутри области, а затем просмотреть GtkDirectionType для передачи фокуса в смежные строки и области.
Базовый пример того, как должен быть реализован виртуальный метод GtkWidgetClass.focus():
GtkTreeIter iter; gint minimum_width; gint natural_width; valid = gtk_tree_model_get_iter_first (model, &iter); while (valid) { gtk_cell_area_apply_attributes (area, model, &iter, FALSE, FALSE); gtk_cell_area_get_preferred_width (area, context, widget, NULL, NULL); valid = gtk_tree_model_iter_next (model, &iter); } gtk_cell_area_context_get_preferred_width (context, &minimum_width, &natural_width);
Обратите внимание, что виджет компоновки отвечает за сопоставление значений GtkDirectionType с тем, как он компонует свои ячейки.
Свойства ячеек
Класс GtkCellArea вводит свойства ячеек для GtkCellRenderers очень похожим образом, как GtkContainer вводит свойства дочерних элементов для GtkWidgets. Это предоставляет некоторые общие интерфейсы для определения отношений между областями ячеек и самими ячейками. Например, в GtkCellAreaBox ячейка может «расширяться» и получать дополнительное пространство, когда области выделяется больше, чем её естественный размер, или ячейка может быть настроена на «выравнивание» с соседними строками, которые были запрошены и отрисованы с тем же GtkCellAreaContext.
Используйте gtk_cell_area_class_install_cell_property() для установки свойств ячеек для класса области ячеек и gtk_cell_area_class_find_cell_property() или gtk_cell_area_class_list_cell_properties() для получения информации о существующих свойствах ячеек.
Для установки значения свойства ячейки используйте gtk_cell_area_cell_set_property(), gtk_cell_area_cell_set() или gtk_cell_area_cell_set_valist(). Для получения значения свойства ячейки используйте gtk_cell_area_cell_get_property(), gtk_cell_area_cell_get() или gtk_cell_area_cell_get_valist().
Функции
GtkCellCallback ()
gboolean (*GtkCellCallback) (GtkCellRenderer *renderer,gpointer data);
Тип обратных функций, используемых для итерирования по рендерерам ячеек GtkCellArea, см. gtk_cell_area_foreach().
Параметры
renderer | рендерер ячейки, над которым выполняется операция | |
data | данные, предоставленные пользователем. | [closure] |
Возвращаемое значение
TRUE для остановки итерирования по ячейкам.
GtkCellAllocCallback ()
gboolean (*GtkCellAllocCallback) (GtkCellRenderer *renderer,const GdkRectangle *cell_area,const GdkRectangle *cell_background,gpointer data);
Тип обратных функций, используемых для итерирования по рендерерам ячеек и их выделенным областям внутри GtkCellArea, см. gtk_cell_area_foreach_alloc().
Параметры
renderer | рендерер ячейки, над которым выполняется операция | |
cell_area | область, выделенная для | |
cell_background | область фона для | |
data | данные, предоставленные пользователем. | [closure] |
Возвращаемое значение
TRUE для остановки итерирования по ячейкам.
GTK_CELL_AREA_WARN_INVALID_CELL_PROPERTY_ID()
#define GTK_CELL_AREA_WARN_INVALID_CELL_PROPERTY_ID(object, property_id, pspec)
Эта макрокоманда должна использоваться для вывода стандартного предупреждения об неожиданных свойствах в set_cell_property() и get_cell_property() реализациях.
Параметры
object | GObject, для которого был вызван | |
property_id | числовой идентификатор свойства | |
pspec | GParamSpec свойства |
gtk_cell_area_add ()
void gtk_cell_area_add (GtkCellArea *area,GtkCellRenderer *renderer);
Добавляет renderer в area с типовыми свойствами дочерней ячейки.
Параметры
area | ||
renderer | GtkCellRenderer для добавления в |
С: 3.0
gtk_cell_area_remove ()
void gtk_cell_area_remove (GtkCellArea *area,GtkCellRenderer *renderer);
Удаляет renderer из area .
Параметры
area | ||
renderer | GtkCellRenderer для удаления из |
С: 3.0
gtk_cell_area_has_renderer ()
gboolean gtk_cell_area_has_renderer (GtkCellArea *area,GtkCellRenderer *renderer);
Проверяет, содержит ли area renderer .
Параметры
area | ||
renderer | GtkCellRenderer для проверки |
Возвращаемое значение
TRUE, если renderer находится в area .
С: 3.0
gtk_cell_area_foreach ()
void gtk_cell_area_foreach (GtkCellArea *area,GtkCellCallback callback,gpointer callback_data);
Вызывает callback для каждого GtkCellRenderer в area .
Параметры
area | ||
callback | обратная функция GtkCellCallback для вызова. | [scope call] |
callback_data | указатель на данные, предоставленные пользователем |
С: 3.0
gtk_cell_area_foreach_alloc ()
void gtk_cell_area_foreach_alloc (GtkCellArea *area,GtkCellAreaContext *context,GtkWidget *widget,const GdkRectangle *cell_area,const GdkRectangle *background_area,GtkCellAllocCallback callback,gpointer callback_data);
Вызывает callback для каждого GtkCellRenderer в area с выделенной областью внутри cell_area .
Параметры
area | ||
context | the GtkCellAreaContext для этой строки данных. | |
widget | the GtkWidget, на который | |
cell_area | the | |
background_area | the | |
callback | the GtkCellAllocCallback для вызова. | [scope call] |
callback_data | переданный пользователем указатель на данные |
Since: 3.0
gtk_cell_area_event ()
gint gtk_cell_area_event (GtkCellArea *area,GtkCellAreaContext *context,GtkWidget *widget,GdkEvent *event,const GdkRectangle *cell_area,GtkCellRendererState flags);
Делегирует обработку событий GtkCellArea.
Параметры
area | ||
context | the GtkCellAreaContext для этой строки данных. | |
widget | the GtkWidget, на который | |
event | the GdkEvent для обработки | |
cell_area | the | |
flags | the GtkCellRendererState для |
Возвращает
TRUE, если событие было обработано area .
Since: 3.0
gtk_cell_area_render ()
void gtk_cell_area_render (GtkCellArea *area,GtkCellAreaContext *context,GtkWidget *widget,cairo_t *cr,const GdkRectangle *background_area,const GdkRectangle *cell_area,GtkCellRendererState flags,gboolean paint_focus);
Отображает ячейки area в соответствии с макетом area на widget в заданных координатах.
Параметры
area | ||
context | the GtkCellAreaContext для этой строки данных. | |
widget | the GtkWidget, на который | |
cr | the cairo_t для отрисовки | |
background_area | the | |
cell_area | the | |
flags | the GtkCellRendererState для | |
paint_focus | whether |
Since: 3.0
gtk_cell_area_get_cell_allocation ()
void gtk_cell_area_get_cell_allocation (GtkCellArea *area,GtkCellAreaContext *context,GtkWidget *widget,GtkCellRenderer *renderer,const GdkRectangle *cell_area,GdkRectangle *allocation);
Вычисляет выделение renderer внутри area, если area было бы отрисовано в cell_area .
Параметры
area | ||
context | the GtkCellAreaContext используемый для хранения размеров для | |
widget | the GtkWidget на котором | |
renderer | the GtkCellRenderer для получения выделения | |
cell_area | вся выделенная область для | |
allocation | куда сохранить выделение для | [out] |
Since: 3.0
gtk_cell_area_get_cell_at_position ()
GtkCellRenderer * gtk_cell_area_get_cell_at_position (GtkCellArea *area,GtkCellAreaContext *context,GtkWidget *widget,const GdkRectangle *cell_area,gint x,gint y,GdkRectangle *alloc_area);
Получает GtkCellRenderer по координатам x и y внутри area и необязательно возвращает полное размещение ячейки внутри cell_area.
Параметры
area | объект GtkCellArea | |
context | контекст GtkCellAreaContext, используемый для хранения размеров | |
widget | объект GtkWidget, на котором | |
cell_area | вся область размещения | |
x | координата x | |
y | координата y | |
alloc_area | место для хранения внутренней области размещения возвращённого GtkCellRenderer, или | [out][allow-none] |
С версии: 3.0
gtk_cell_area_create_context ()
GtkCellAreaContext *
gtk_cell_area_create_context (GtkCellArea *area); Создаёт контекст GtkCellAreaContext, который будет использоваться с area для всех целей. GtkCellAreaContext хранит информацию о геометрии строк, для которых он был создан. Важно использовать один и тот же контекст для одной и той же строки данных в любое время (то есть необходимо выполнять отрисовку и обработку событий с тем же GtkCellAreaContext, который был использован для запроса размера этих строк данных).
Параметры
area | объект GtkCellArea |
С версии: 3.0
gtk_cell_area_copy_context ()
GtkCellAreaContext * gtk_cell_area_copy_context (GtkCellArea *area,GtkCellAreaContext *context);
Иногда это необходимо для случаев, когда строки нуждаются в совместном использовании выравнивания в одной ориентации, но могут быть сгруппированы отдельно в противоположной ориентации.
Например, GtkIconView создаёт все значки (строки) с одинаковой шириной и ячейки в них с одинаковым горизонтальным выравниванием. Однако каждая строка значков может иметь отдельный общий размер по высоте. GtkIconView использует это для запроса высот каждой строки на основе контекста, который уже был использован для запроса всех ширин строк, которые должны быть отображены.
Параметры
area | объект GtkCellArea | |
context | контекст GtkCellAreaContext для копирования |
С версии: 3.0
gtk_cell_area_get_request_mode ()
GtkSizeRequestMode
gtk_cell_area_get_request_mode (GtkCellArea *area); Получает, предпочитает ли область макет высотой для ширины или шириной для высоты.
Параметры
area | объект GtkCellArea |
Возвращаемое значение
GtkSizeRequestMode, предпочитаемый area.
С версии: 3.0
gtk_cell_area_get_preferred_width ()
void gtk_cell_area_get_preferred_width (GtkCellArea *area,GtkCellAreaContext *context,GtkWidget *widget,gint *minimum_width,gint *natural_width);
Получает минимальную и естественную ширину области ячеек.
area будет хранить некоторую геометрическую информацию в context по ходу; при запросе размеров по произвольному количеству строк, неважно проверять minimum_width и natural_width этого вызова, но нужно обратиться к gtk_cell_area_context_get_preferred_width() после серии запросов.
Параметры
area | объект GtkCellArea | |
context | контекст GtkCellAreaContext для выполнения этого запроса | |
widget | объект GtkWidget, где | |
minimum_width | место для хранения минимальной ширины, или | [out][allow-none] |
natural_width | место для хранения естественной ширины, или | [out][allow-none] |
С версии: 3.0
gtk_cell_area_get_preferred_height_for_width ()
void gtk_cell_area_get_preferred_height_for_width (GtkCellArea *area,GtkCellAreaContext *context,GtkWidget *widget,gint width,gint *minimum_height,gint *natural_height);
Получает минимальную и естественную высоту области ячейки, если ей будет задана указанная width.
area хранит некоторую геометрическую информацию в context по ходу выполнения вызова gtk_cell_area_get_preferred_width(). Важно выполнить серию запросов gtk_cell_area_get_preferred_width() с context в первую очередь, а затем вызвать gtk_cell_area_get_preferred_height_for_width() для каждой области ячейки индивидуально, чтобы получить высоту для ширины каждой полностью запрошенной строки.
Если в какой-то момент ширина одной строки изменяется, необходимо снова запросить её с помощью gtk_cell_area_get_preferred_width(), а затем снова проверить полную ширину запрошенных строк с помощью gtk_cell_area_context_get_preferred_width().
Параметры
area | объект GtkCellArea | |
context | контекст GtkCellAreaContext, для которого уже запрошены ширины. | |
widget | объект GtkWidget, на котором | |
width | ширина, для которой необходимо проверить высоту этой области | |
minimum_height | место для хранения минимальной высоты или | [out][allow-none] |
natural_height | место для хранения естественной высоты или | [out][allow-none] |
С: 3.0
gtk_cell_area_get_preferred_height ()
void gtk_cell_area_get_preferred_height (GtkCellArea *area,GtkCellAreaContext *context,GtkWidget *widget,gint *minimum_height,gint *natural_height);
Получает начальную минимальную и естественную высоту области ячейки.
area будет хранить некоторую геометрическую информацию в context по ходу выполнения; при запросе размеров через произвольное количество строк, проверка minimum_height и natural_height этого вызова не важна, а следует обратиться к gtk_cell_area_context_get_preferred_height() после серии запросов.
Параметры
area | объект GtkCellArea | |
context | контекст GtkCellAreaContext для выполнения этого запроса | |
widget | объект GtkWidget, на котором | |
minimum_height | место для хранения минимальной высоты или | [out][allow-none] |
natural_height | место для хранения естественной высоты или | [out][allow-none] |
С: 3.0
gtk_cell_area_get_preferred_width_for_height ()
void gtk_cell_area_get_preferred_width_for_height (GtkCellArea *area,GtkCellAreaContext *context,GtkWidget *widget,gint height,gint *minimum_width,gint *natural_width);
Получает минимальную и естественную ширину области ячейки, если ей будет задана указанная height.
area хранит некоторую геометрическую информацию в context по ходу выполнения вызова gtk_cell_area_get_preferred_height(). Важно выполнить серию запросов gtk_cell_area_get_preferred_height() с context в первую очередь, а затем вызвать gtk_cell_area_get_preferred_width_for_height() для каждой области ячейки индивидуально, чтобы получить высоту для ширины каждой полностью запрошенной строки.
Если в какой-то момент высота одной строки изменяется, необходимо снова запросить её с помощью gtk_cell_area_get_preferred_height(), а затем снова проверить полную высоту запрошенных строк с помощью gtk_cell_area_context_get_preferred_height().
Параметры
area | объект GtkCellArea | |
context | контекст GtkCellAreaContext, для которого уже запрошены ширины. | |
widget | объект GtkWidget, на котором | |
height | высота, для которой необходимо проверить ширину этой области | |
minimum_width | место для хранения минимальной ширины или | [out][allow-none] |
natural_width | место для хранения естественной ширины или | [out][allow-none] |
С: 3.0
gtk_cell_area_get_current_path_string ()
const gchar *
gtk_cell_area_get_current_path_string (GtkCellArea *area); Получает строку текущего GtkTreePath для текущей применённой GtkTreeIter. Она неявно обновляется при вызове gtk_cell_area_apply_attributes() и может использоваться для взаимодействия с рендерерами из подклассов GtkCellArea.
Параметры
area |
Возвращает
Строку текущего GtkTreePath для текущих применённых атрибутов к area. Эта строка принадлежит области и не должна освобождаться.
С: 3.0
gtk_cell_area_apply_attributes ()
void gtk_cell_area_apply_attributes (GtkCellArea *area,GtkTreeModel *tree_model,GtkTreeIter *iter,gboolean is_expander,gboolean is_expanded);
Применяет все подключенные атрибуты к рендерерам в area, получая значения из tree_model.
Параметры
area | ||
tree_model | the GtkTreeModel для получения значений | |
iter | the GtkTreeIter в | |
is_expander | является ли | |
is_expanded | расширен ли |
С: 3.0
gtk_cell_area_attribute_connect ()
void gtk_cell_area_attribute_connect (GtkCellArea *area,GtkCellRenderer *renderer,const gchar *attribute,gint column);
Подключает attribute для применения значений из column для используемого GtkTreeModel.
Параметры
area | ||
renderer | the GtkCellRenderer, для которого нужно подключить атрибут | |
attribute | имя атрибута | |
column | столбец GtkTreeModel для получения значений атрибута |
С: 3.0
gtk_cell_area_attribute_disconnect ()
void gtk_cell_area_attribute_disconnect (GtkCellArea *area,GtkCellRenderer *renderer,const gchar *attribute);
Отключает attribute для renderer в area, чтобы атрибут больше не обновлялся значениями из модели.
Параметры
area | ||
renderer | the GtkCellRenderer для отключения атрибута | |
attribute | имя атрибута |
С: 3.0
gtk_cell_area_attribute_get_column ()
gint gtk_cell_area_attribute_get_column (GtkCellArea *area,GtkCellRenderer *renderer,const gchar *attribute);
Возвращает столбец модели, к которому сопоставлен атрибут, или -1, если атрибут не сопоставлен.
Параметры
area | ||
renderer | ||
attribute | атрибут рендера |
Возвращает
столбец модели, или -1
С: 3.14
gtk_cell_area_class_install_cell_property ()
void gtk_cell_area_class_install_cell_property (GtkCellAreaClass *aclass,guint property_id,GParamSpec *pspec);
Устанавливает свойство ячейки в классе области ячеек.
Параметры
aclass | ||
property_id | идентификатор свойства | |
pspec | the GParamSpec свойства |
С: 3.0
gtk_cell_area_class_find_cell_property ()
GParamSpec * gtk_cell_area_class_find_cell_property (GtkCellAreaClass *aclass,const gchar *property_name);
Ищет свойство ячейки класса области ячеек по имени.
Параметры
aclass | ||
property_name | имя свойства дочернего элемента |
Возвращает
GParamSpec дочернего свойства или NULL, если у aclass нет дочернего свойства с таким именем.
[transfer none]
С: 3.0
gtk_cell_area_class_list_cell_properties ()
GParamSpec ** gtk_cell_area_class_list_cell_properties (GtkCellAreaClass *aclass,guint *n_properties);
Возвращает все свойства ячейки класса области ячеек.
Параметры
aclass | ||
n_properties | место для возврата количества найденных свойств ячейки. | [out] |
Возвращает
новый выделенный массив NULL-завершённый массив GParamSpec*. Массив необходимо освободить с помощью g_free().
[array length=n_properties][transfer container]
С: 3.0
gtk_cell_area_add_with_properties ()
void gtk_cell_area_add_with_properties (GtkCellArea *area,GtkCellRenderer *renderer,const gchar *first_prop_name,...);
Добавляет renderer в area, одновременно задавая свойства ячейки. Подробнее см. gtk_cell_area_add() и gtk_cell_area_cell_set().
Параметры
area | ||
renderer | a GtkCellRenderer для размещения внутри | |
first_prop_name | имя первого свойства ячейки для задания | |
... | список свойств и значений, завершаемый |
С: 3.0
gtk_cell_area_cell_set ()
void gtk_cell_area_cell_set (GtkCellArea *area,GtkCellRenderer *renderer,const gchar *first_prop_name,...);
Устанавливает одно или несколько свойств ячейки для cell в area.
Параметры
area | ||
renderer | a GtkCellRenderer, являющийся ячейкой внутри | |
first_prop_name | имя первого свойства ячейки для задания | |
... | список имен и значений свойств, завершаемый |
С: 3.0
gtk_cell_area_cell_get ()
void gtk_cell_area_cell_get (GtkCellArea *area,GtkCellRenderer *renderer,const gchar *first_prop_name,...);
Получает значения одного или нескольких свойств ячейки для renderer в area.
Параметры
area | ||
renderer | a GtkCellRenderer, находящийся внутри | |
first_prop_name | имя первого свойства ячейки для получения | |
... | место для возврата первого свойства, за которым могут следовать дополнительные пары имя/место возврата, завершаемые |
С: 3.0
gtk_cell_area_cell_set_valist ()
void gtk_cell_area_cell_set_valist (GtkCellArea *area,GtkCellRenderer *renderer,const gchar *first_property_name,va_list var_args);
Устанавливает одно или несколько свойств ячейки для renderer в area.
Параметры
area | ||
renderer | a GtkCellRenderer, находящийся внутри | |
first_property_name | имя первого свойства ячейки для задания | |
var_args | список имен и значений свойств, завершаемый |
С: 3.0
gtk_cell_area_cell_get_valist ()
void gtk_cell_area_cell_get_valist (GtkCellArea *area,GtkCellRenderer *renderer,const gchar *first_property_name,va_list var_args);
Получает значения одного или нескольких свойств ячейки для renderer в area.
Параметры
area | ||
renderer | a GtkCellRenderer внутри | |
first_property_name | имя первого свойства для получения | |
var_args | место для возврата первого свойства, за которым могут следовать дополнительные пары имя/место возврата, завершаемые |
С: 3.0
gtk_cell_area_cell_set_property ()
void gtk_cell_area_cell_set_property (GtkCellArea *area,GtkCellRenderer *renderer,const gchar *property_name,const GValue *value);
Устанавливает свойство ячейки для renderer в area .
Параметры
area | ||
renderer | a GtkCellRenderer внутри | |
property_name | имя свойства ячейки для установки | |
value | значение для установки свойства ячейки |
С момента: 3.0
gtk_cell_area_cell_get_property ()
void gtk_cell_area_cell_get_property (GtkCellArea *area,GtkCellRenderer *renderer,const gchar *property_name,GValue *value);
Получает значение свойства ячейки для renderer в area .
Параметры
area | ||
renderer | a GtkCellRenderer внутри | |
property_name | имя свойства для получения | |
value | место для возврата значения |
С момента: 3.0
gtk_cell_area_is_activatable ()
gboolean
gtk_cell_area_is_activatable (GtkCellArea *area); Возвращает, может ли область выполнить какие-либо действия при активации после применения новых атрибутов к area .
Параметры
area |
Возвращает
может ли area выполнить какие-либо действия при активации.
С момента: 3.0
gtk_cell_area_activate ()
gboolean gtk_cell_area_activate (GtkCellArea *area,GtkCellAreaContext *context,GtkWidget *widget,const GdkRectangle *cell_area,GtkCellRendererState flags,gboolean edit_only);
Активирует area, обычно активируя текущую ячейку с фокусом, однако некоторые подклассы, которые встраивают виджеты в область, также могут активировать виджет, если у него в данный момент фокус.
Параметры
area | ||
context | контекст GtkCellAreaContext в контексте текущих данных строки | |
widget | the GtkWidget, на котором | |
cell_area | размер и расположение | |
flags | флаги GtkCellRendererState для | |
edit_only | если |
Возвращает
Была ли успешно активирована area.
С момента: 3.0
gtk_cell_area_focus ()
gboolean gtk_cell_area_focus (GtkCellArea *area,GtkDirectionType direction);
Должно вызываться владельцем area виджета макета, когда фокус должен быть передан area, или перемещен внутри area для заданных direction и данных строки.
Реализации классов GtkCellArea должны реализовывать этот метод, чтобы получать и навигацию по фокусу своим способом, специфичным для того, как они размещают ячейки.
Параметры
area | ||
direction | тип GtkDirectionType |
Возвращает
TRUE, если фокус остается внутри area в результате этого вызова.
С момента: 3.0
gtk_cell_area_set_focus_cell ()
void gtk_cell_area_set_focus_cell (GtkCellArea *area,GtkCellRenderer *renderer);
Явно устанавливает текущую ячейку с фокусом на renderer .
Обычно вызывается реализациями GtkCellAreaClass.focus() или GtkCellAreaClass.event(), но также может использоваться для реализации функций, таких как gtk_tree_view_set_cursor_on_cell().
Параметры
area | ||
renderer | the GtkCellRenderer, которому нужно передать фокус |
С момента: 3.0
gtk_cell_area_get_focus_cell ()
GtkCellRenderer *
gtk_cell_area_get_focus_cell (GtkCellArea *area); Возвращает текущую ячейку с фокусом для area
Параметры
area |
Возвращает
текущую ячейку с фокусом в area .
[transfer none]
С момента: 3.0
gtk_cell_area_add_focus_sibling ()
void gtk_cell_area_add_focus_sibling (GtkCellArea *area,GtkCellRenderer *renderer,GtkCellRenderer *sibling);
Добавляет sibling в область фокусировки renderer. Фокус будет нарисован вокруг renderer и всех его соседей, если renderer может получить фокус для данного ряда.
События, обрабатываемые фокусными соседями, также могут активировать заданный фокусируемый renderer .
Параметры
area | ||
renderer | the GtkCellRenderer ожидающий фокуса | |
sibling | the GtkCellRenderer для добавления в область фокуса |
С: 3.0
gtk_cell_area_remove_focus_sibling ()
void gtk_cell_area_remove_focus_sibling (GtkCellArea *area,GtkCellRenderer *renderer,GtkCellRenderer *sibling);
Удаляет sibling из списка фокусных соседей renderer (см. gtk_cell_area_add_focus_sibling()).
Параметры
area | ||
renderer | the GtkCellRenderer ожидающий фокуса | |
sibling | the GtkCellRenderer для удаления из области фокуса |
С: 3.0
gtk_cell_area_is_focus_sibling ()
gboolean gtk_cell_area_is_focus_sibling (GtkCellArea *area,GtkCellRenderer *renderer,GtkCellRenderer *sibling);
Возвращает, является ли sibling одним из фокусных соседей renderer (см. gtk_cell_area_add_focus_sibling()).
Параметры
area | ||
renderer | the GtkCellRenderer ожидающий фокуса | |
sibling | the GtkCellRenderer для проверки против списка соседей |
Возвращает
TRUE, если sibling является фокусным соседом renderer
С: 3.0
gtk_cell_area_get_focus_siblings ()
const GList * gtk_cell_area_get_focus_siblings (GtkCellArea *area,GtkCellRenderer *renderer);
Получает фокусные соседние ячейки-рендеры для renderer .
Параметры
area | ||
renderer | the GtkCellRenderer ожидающий фокуса |
Возвращает
Список GList GtkCellRenderers. Возвращаемый список внутренний и не должен освобождаться.
[element-type GtkCellRenderer][transfer none]
С: 3.0
gtk_cell_area_get_focus_from_sibling ()
GtkCellRenderer * gtk_cell_area_get_focus_from_sibling (GtkCellArea *area,GtkCellRenderer *renderer);
Возвращает GtkCellRenderer, который ожидается быть фокусируемым, для которого renderer является, или может быть, соседом.
Это полезно для подклассов GtkCellArea при обработке событий. После определения рендера в месте события он может выбрать активировать ячейку фокуса, для которой ячейка события может быть соседом.
Параметры
area | ||
renderer | the GtkCellRenderer |
Возвращает
the GtkCellRenderer, для которого renderer является соседом, или NULL.
[nullable][transfer none]
С: 3.0
gtk_cell_area_get_edited_cell ()
GtkCellRenderer *
gtk_cell_area_get_edited_cell (GtkCellArea *area); Возвращает GtkCellRenderer в area, который в данный момент редактируется.
Параметры
area |
С: 3.0
gtk_cell_area_get_edit_widget ()
GtkCellEditable *
gtk_cell_area_get_edit_widget (GtkCellArea *area); Возвращает GtkCellEditable виджет, который в данный момент используется для редактирования текущей ячейки.
Параметры
area |
С: 3.0
gtk_cell_area_activate_cell ()
gboolean gtk_cell_area_activate_cell (GtkCellArea *area,GtkWidget *widget,GtkCellRenderer *renderer,GdkEvent *event,const GdkRectangle *cell_area,GtkCellRendererState flags);
Это используется подклассами GtkCellArea при обработке событий для активации ячеек; базовый класс GtkCellArea активирует ячейки для событий клавиатуры бесплатно в своей собственной реализации GtkCellArea->activate().
Параметры
area | ||
widget | the GtkWidget, на который | |
renderer | the GtkCellRenderer в | |
event | the GdkEvent for which cell activation should occur | |
cell_area | the GdkRectangle в | |
flags | the GtkCellRendererState for |
Возвращаемое значение
успешность активации ячейки
Since: 3.0
gtk_cell_area_stop_editing ()
void gtk_cell_area_stop_editing (GtkCellArea *area,gboolean canceled);
Явно останавливает редактирование текущей ячейки.
Если canceled имеет значение TRUE, текущий редактируемый элемент рендеринга сгенерирует сигнал ::editing-canceled, в противном случае будет сгенерирован сигнал ::editing-done на текущем элементе редактирования.
См. gtk_cell_area_get_edited_cell() и gtk_cell_area_get_edit_widget().
Параметры
area | ||
canceled | было ли редактирование отменено. |
Since: 3.0
gtk_cell_area_inner_cell_area ()
void gtk_cell_area_inner_cell_area (GtkCellArea *area,GtkWidget *widget,const GdkRectangle *cell_area,GdkRectangle *inner_area);
Это вспомогательная функция для реализации GtkCellArea для получения внутренней области, в которой будет отображен заданный GtkCellRenderer. Она удаляет любой отступ, добавленный ранее функцией gtk_cell_area_request_renderer().
Параметры
area | ||
widget | the GtkWidget, на который | |
cell_area | the | |
inner_area | место для возвращения внутренней области ячейки. | [out] |
Since: 3.0
gtk_cell_area_request_renderer ()
void gtk_cell_area_request_renderer (GtkCellArea *area,GtkCellRenderer *renderer,GtkOrientation orientation,GtkWidget *widget,gint for_size,gint *minimum_size,gint *natural_size);
Это вспомогательная функция для реализации GtkCellArea для запроса размера элементов рендеринга ячейки. Важно использовать эту функцию для запроса размера, а затем использовать gtk_cell_area_inner_cell_area() во время рендеринга и обработки событий, так как эта функция добавит отступ вокруг ячейки для отрисовки фокуса.
Параметры
area | ||
renderer | the GtkCellRenderer to request size for | |
orientation | the GtkOrientation in which to request size | |
widget | the GtkWidget, on which | |
for_size | the allocation contextual size to request for, or -1 if the base request for the orientation is to be returned. | |
minimum_size | location to store the minimum size, or | [out][allow-none] |
natural_size | location to store the natural size, or | [out][allow-none] |
Since: 3.0
Типы и значения
struct GtkCellArea
struct GtkCellArea;
struct GtkCellAreaClass
struct GtkCellAreaClass {
/* Basic methods */
void (* add) (GtkCellArea *area,
GtkCellRenderer *renderer);
void (* remove) (GtkCellArea *area,
GtkCellRenderer *renderer);
void (* foreach) (GtkCellArea *area,
GtkCellCallback callback,
gpointer callback_data);
void (* foreach_alloc) (GtkCellArea *area,
GtkCellAreaContext *context,
GtkWidget *widget,
const GdkRectangle *cell_area,
const GdkRectangle *background_area,
GtkCellAllocCallback callback,
gpointer callback_data);
gint (* event) (GtkCellArea *area,
GtkCellAreaContext *context,
GtkWidget *widget,
GdkEvent *event,
const GdkRectangle *cell_area,
GtkCellRendererState flags);
void (* render) (GtkCellArea *area,
GtkCellAreaContext *context,
GtkWidget *widget,
cairo_t *cr,
const GdkRectangle *background_area,
const GdkRectangle *cell_area,
GtkCellRendererState flags,
gboolean paint_focus);
void (* apply_attributes) (GtkCellArea *area,
GtkTreeModel *tree_model,
GtkTreeIter *iter,
gboolean is_expander,
gboolean is_expanded);
/* Geometry */
GtkCellAreaContext *(* create_context) (GtkCellArea *area);
GtkCellAreaContext *(* copy_context) (GtkCellArea *area,
GtkCellAreaContext *context);
GtkSizeRequestMode (* get_request_mode) (GtkCellArea *area);
void (* get_preferred_width) (GtkCellArea *area,
GtkCellAreaContext *context,
GtkWidget *widget,
gint *minimum_width,
gint *natural_width);
void (* get_preferred_height_for_width) (GtkCellArea *area,
GtkCellAreaContext *context,
GtkWidget *widget,
gint width,
gint *minimum_height,
gint *natural_height);
void (* get_preferred_height) (GtkCellArea *area,
GtkCellAreaContext *context,
GtkWidget *widget,
gint *minimum_height,
gint *natural_height);
void (* get_preferred_width_for_height) (GtkCellArea *area,
GtkCellAreaContext *context,
GtkWidget *widget,
gint height,
gint *minimum_width,
gint *natural_width);
/* Cell Properties */
void (* set_cell_property) (GtkCellArea *area,
GtkCellRenderer *renderer,
guint property_id,
const GValue *value,
GParamSpec *pspec);
void (* get_cell_property) (GtkCellArea *area,
GtkCellRenderer *renderer,
guint property_id,
GValue *value,
GParamSpec *pspec);
/* Focus */
gboolean (* focus) (GtkCellArea *area,
GtkDirectionType direction);
gboolean (* is_activatable) (GtkCellArea *area);
gboolean (* activate) (GtkCellArea *area,
GtkCellAreaContext *context,
GtkWidget *widget,
const GdkRectangle *cell_area,
GtkCellRendererState flags,
gboolean edit_only);
};
Члены
| добавляет GtkCellRenderer в область. | |
| удаляет GtkCellRenderer из области. | |
| вызывает функцию GtkCellCallback для каждого GtkCellRenderer в области с предоставленными пользовательскими данными до тех пор, пока обратный вызов не вернёт | |
| Вызывает функцию GtkCellAllocCallback для каждого GtkCellRenderer в области с выделенной областью для ячейки и предоставленными пользовательскими данными до тех пор, пока обратный вызов не вернёт | |
| Обрабатывает событие в области, обычно используется для активации ячейки в месте события для событий кнопок, но также может использоваться для общих событий GtkWidgets, нарисованных на области. | |
| Фактически отрисовывает ячейки области в указанный прямоугольник, | |
| Применяет атрибуты ячейки к ячейкам. Это реализуется как сигнал и, как правило, подклассы GtkCellArea не нуждаются в его реализации, так как он обрабатывается базовым классом. | |
| Создаёт и возвращает специфичный для класса GtkCellAreaContext для хранения данных о выравнивании и выделении ячеек для указанного класса GtkCellArea. | |
| Создаёт новый GtkCellAreaContext в том же состоянии, что и переданный | |
| Это позволяет области сообщить её расположительному виджету, предпочитает ли она быть выделенной в режиме | |
| Вычисляет минимальную и естественную ширину ячеек области с применёнными текущими атрибутами, учитывая особенности размещения указанного GtkCellArea. Хотя запросы выполняются по рядам, выравнивания и общие минимальные и естественные размеры должны храниться в соответствующем GtkCellAreaContext. | |
| Вычисляет минимальную и естественную высоту области, если переданной | |
| Вычисляет минимальную и естественную высоту ячеек области с применёнными текущими атрибутами. По сути, это то же самое, что и | |
| Вычисляет минимальную и естественную ширину области, если переданной | |
| Это должно быть реализовано для обработки изменений свойств ячеек-потомков для данного GtkCellRenderer, которые ранее были установлены на GtkCellAreaClass с помощью | |
| Это должно быть реализовано для отчёта о значениях свойств ячеек-потомков для заданного GtkCellRenderer-потомка. | |
| Этот виртуальный метод должен быть реализован для перемещения фокуса от ячейки к ячейке внутри GtkCellArea. GtkCellArea должен перемещать фокус от ячейки к ячейке внутри области и возвращать | |
| Возвращает, может ли GtkCellArea реагировать на |
| Этот метод вызывается, когда компонент размещения, отрисовывающий GtkCellArea, активирует ячейку с фокусом (см. |
Подробное описание свойств
Свойство “edit-widget”
“edit-widget” GtkCellEditable *
Компонент, в данный момент редактирующий ячейку
Это свойство является только для чтения и изменяется только в результате вызова gtk_cell_area_activate_cell().
Флаги: Чтение
С версии: 3.0
Свойство “edited-cell”
“edited-cell” GtkCellRenderer *
Ячейка в области, которая в данный момент редактируется
Это свойство является только для чтения и изменяется только в результате вызова gtk_cell_area_activate_cell().
Флаги: Чтение
С версии: 3.0
Свойство “focus-cell”
“focus-cell” GtkCellRenderer *
Ячейка в области, которая в данный момент имеет фокус
Флаги: Чтение / Запись
С версии: 3.0
Подробное описание сигналов
Сигнал “add-editable”
void user_function (GtkCellArea *area, GtkCellRenderer *renderer, GtkCellEditable *editable, GdkRectangle *cell_area, gchar *path, gpointer user_data)
Указывает на то, что началось редактирование renderer и что editable должно быть добавлено к собственному компоненту размещения ячеек в cell_area.
Параметры
area | the GtkCellArea, где началось редактирование | |
renderer | the GtkCellRenderer, который начал редактирование | |
editable | the GtkCellEditable компонент для добавления | |
cell_area | the GtkWidget относительные координаты GdkRectangle, куда | |
path | the GtkTreePath строка, для которой было инициировано это редактирование | |
user_data | данные пользователя, заданные при подключении обработчика сигнала. |
Флаги: Run First
С версии: 3.0
Сигнал “apply-attributes”
void user_function (GtkCellArea *area, GtkTreeModel *model, GtkTreeIter *iter, gboolean is_expander, gboolean is_expanded, gpointer user_data)
Этот сигнал генерируется всякий раз, когда применяются атрибуты к area из model
Параметры
area | the GtkCellArea к которому применяются атрибуты | |
model | the GtkTreeModel откуда берутся атрибуты | |
iter | the GtkTreeIter указывающий на строку, к которой применяются атрибуты | |
is_expander | отображает ли представление потомков для этой строки | |
is_expanded | отображает ли представление в данный момент потомков этой строки | |
user_data | данные пользователя, заданные при подключении обработчика сигнала. |
Флаги: Run First
С версии: 3.0
Сигнал “focus-changed”
void user_function (GtkCellArea *area, GtkCellRenderer *renderer, gchar *path, gpointer user_data)
Указывает на то, что фокус изменился на этом area. Этот сигнал генерируется либо в результате обработки фокуса, либо обработки событий.
Возможна ситуация, когда сигнал генерируется даже если компонент с фокусом не изменился, это происходит, потому что фокус может перейти на тот же компонент в той же области ячейки для другой строки данных.
Параметры
area | the GtkCellArea, где изменился фокус | |
renderer | the GtkCellRenderer у которого есть фокус | |
path | текущая GtkTreePath строка, установленная для | |
user_data | данные пользователя, заданные при подключении обработчика сигнала. |
Флаги: Run First
С версии: 3.0
Сигнал “remove-editable”
void user_function (GtkCellArea *area, GtkCellRenderer *renderer, GtkCellEditable *editable, gpointer user_data)
Указывает на то, что завершено редактирование renderer и что editable должно быть удалено из владеющего компонента размещения ячеек.
Параметры
area | the GtkCellArea, где закончилось редактирование | |
renderer | the GtkCellRenderer, который завершил редактирование | |
editable | the GtkCellEditable компонент для удаления | |
user_data | данные пользователя, заданные при подключении обработчика сигнала. |
Флаги: Run First
С версии: 3.0
© 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/GtkCellArea.html