GtkExpression
GtkExpression — Выражения для значений
Функции
Типы и значения
Иерархия объектов
GtkExpression
Файлы заголовков
#include <gtk/gtk.h>
Описание
GtkExpression предоставляет способ описания ссылок на значения.
Важным аспектом выражений является то, что значение может быть получено из источника, находящегося на несколько шагов дальше. Например, выражение может описывать «значение свойства A объекта object1, которое само по себе является значением свойства объекта object2». И object1 может даже ещё не существовать на момент создания выражения. Это контрастирует с привязками свойств GObject, которые могут создавать только прямые связи между свойствами двух объектов, которые должны оба существовать в течение всего срока действия привязки.
Для получения значения, на которое в данный момент ссылается выражение, необходимо его «оценить». Оценка всегда происходит в контексте текущего объекта, называемого this (это отражает поведение объектно-ориентированных языков), который может или не может повлиять на результат оценки. Для оценки выражения используйте gtk_expression_evaluate().
Существуют различные методы определения выражений, начиная от простых констант с помощью gtk_constant_expression_new(), до поиска свойств в GObject (даже рекурсивно) с помощью gtk_property_expression_new() или предоставления пользовательских функций для преобразования и комбинирования выражений с помощью gtk_closure_expression_new().
Вот пример сложного выражения:
при оценке, где this является GtkListItem, оно получит свойство «item» от GtkListItem, а затем получит свойство «name» от получившегося объекта (который предполагается типа GTK_TYPE_COLOR).
Более краткое описание этого:
Вероятнее всего, вы столкнетесь с выражениями в контексте моделей списков и виджетов списков, использующих их. Например, GtkDropDown оценивает GtkExpression для получения строк из элементов в своей модели, которые затем могут быть использованы для сопоставления с содержимым поля поиска. GtkStringFilter использует GtkExpression по аналогичным причинам.
По умолчанию выражения не отслеживают изменения, и оценка представляет собой лишь моментальное состояние в данный момент времени. Для получения информации о изменениях, выражение необходимо «наблюдать» с помощью GtkExpressionWatch, что вызовет обратный вызов всякий раз, когда значение выражения может измениться. gtk_expression_watch() начинает наблюдать за выражением, а gtk_expression_watch_unwatch() останавливает.
Наблюдения могут быть созданы для автоматического обновления свойства объекта, аналогично механизму GBinding GObject, с помощью gtk_expression_bind().
GtkExpression в свойствах GObject
Для использования GtkExpression как свойства GObject, необходимо использовать gtk_param_spec_expression() при создании GParamSpec для установки в класс GObject, который определяется; например:
При реализации виртуальных функций GObjectClass.set_property() и GObjectClass.get_property() необходимо использовать gtk_value_get_expression() для извлечения сохранённого GtkExpression из контейнера GValue и gtk_value_set_expression() для сохранения GtkExpression в GValue; например:
GtkExpression в файлах .ui
GtkBuilder поддерживает создание выражений. Этот синтаксис может быть использован там, где нужен объект GtkExpression, как в тэге <property> для свойства выражения или в тэге <binding> для привязки свойства к выражению.
Для создания выражения свойства используйте элемент <lookup>. Он может иметь атрибут type для указания типа объекта и атрибут name для указания свойства для поиска. Содержимое <lookup> может быть элементом, определяющим выражение для использования объекта, или строкой, определяющей имя используемого объекта.
Пример:
Для создания константного выражения используйте элемент <constant>. Если указан атрибут type, содержимое элемента интерпретируется как значение данного типа. В противном случае предполагается, что это объект.
Пример:
Для создания выражения замыкания используйте элемент <closure>. Атрибуты type и function указывают функцию для использования в замыкании, содержимое элемента содержит выражения для параметров.
Пример:
color_expr = gtk_property_expression_new (GTK_TYPE_LIST_ITEM,
NULL, "item");
expression = gtk_property_expression_new (GTK_TYPE_COLOR,
color_expr, "name");Функции
GtkExpressionNotify ()
void (*GtkExpressionNotify) (gpointer user_data);
Обратный вызов, вызываемый gtk_expression_watch(), когда значение выражения изменяется.
Параметры
user_data | данные, переданные в |
gtk_expression_ref ()
GtkExpression *
gtk_expression_ref (GtkExpression *self); Получает ссылку на заданный GtkExpression.
Параметры
self | [allow-none] |
gtk_expression_unref ()
void
gtk_expression_unref (GtkExpression *self); Освобождает ссылку на заданный GtkExpression.
Если ссылка была последней, ресурсы, связанные с self, освобождаются.
Параметры
self | [allow-none] |
gtk_expression_get_value_type ()
GType
gtk_expression_get_value_type (GtkExpression *self); Получает GType, к которому вычисляется это выражение. Этот тип является постоянным и не изменится на протяжении всего жизненного цикла этого выражения.
Параметры
self |
Возвращает
Тип, возвращаемый gtk_expression_evaluate()
gtk_expression_is_static ()
gboolean
gtk_expression_is_static (GtkExpression *self); Проверяет, является ли выражение статическим.
Статическое выражение никогда не изменит свой результат при вызове gtk_expression_evaluate() с теми же аргументами.
Это означает, что вызов gtk_expression_watch() не нужен, так как он никогда не вызовет уведомление.
Параметры
self |
Возвращает
TRUE , если выражение статическое
gtk_expression_evaluate ()
gboolean gtk_expression_evaluate (GtkExpression *self,gpointer this_,GValue *value);
Вычисляет заданное выражение и при успехе сохраняет результат в value . Тип GType value будет типом, указанным в gtk_expression_get_value_type().
Возможны ситуации, когда выражение не может быть вычислено — например, когда выражение ссылается на объекты, которые были уничтожены или установлены в состояние NULL. В этом случае value останется пустым, и будет возвращено FALSE.
Параметры
self | ||
this_ | аргумент this для вычисления. | [transfer none][type GObject][nullable] |
value | пустой GValue |
Возвращает
TRUE , если выражение можно вычислить
gtk_expression_watch ()
GtkExpressionWatch * gtk_expression_watch (GtkExpression *self,gpointer this_,GtkExpressionNotify notify,gpointer user_data,GDestroyNotify user_destroy);
Устанавливает наблюдение за заданным expression, которое вызывает функцию notify всякий раз, когда вычисление self может измениться.
GTK не гарантирует, что вычисление действительно изменилось, когда вызывается notify, но гарантирует обратное: когда оно действительно изменилось, вызов notify будет произведен.
Параметры
self | ||
this_ | аргумент | [transfer none][type GObject][nullable] |
notify | обратный вызов для вызова, когда выражение изменяется. | [closure user_data] |
user_data | данные пользователя для передачи в обратный вызов | |
user_destroy | разрушение для обратного вызова |
Возвращает
Новое установленное наблюдение. Обратите внимание, что единственная ссылка, удерживаемая за наблюдение, будет освобождена при снятии наблюдения, что может произойти автоматически, а не только через gtk_expression_watch_unwatch(). Вы должны вызвать gtk_expression_watch_ref(), если хотите сохранить наблюдение.
[transfer none]
gtk_expression_bind ()
GtkExpressionWatch * gtk_expression_bind (GtkExpression *self,gpointer target,const char *property,gpointer this_);
Связывает свойство target с именем property объекта self.
Значение, вычисляемое выражением self, устанавливается с помощью g_object_set() объекта target. Эта операция повторяется всякий раз, когда изменяется self, для обеспечения синхронизации свойства объекта с self.
Если вычисление self завершится неудачно, свойство target, property, не будет обновлено. Для предотвращения этого можно использовать резервное выражение.
Обратите внимание, что эта функция принимает во владение self. Если вам нужно сохранить его, необходимо gtk_expression_ref() его заранее.
Параметры
self | объект GtkExpression. | [transfer full] |
target | целевой объект для привязки. | [transfer none][type GObject] |
property | имя свойства объекта | |
this_ | аргумент this для вычисления | [transfer none][type GObject][nullable] |
gtk_expression_watch_ref ()
GtkExpressionWatch *
gtk_expression_watch_ref (GtkExpressionWatch *watch); Получает ссылку на заданный GtkExpressionWatch.
Параметры
watch | объект GtkExpressionWatch. | [allow-none] |
gtk_expression_watch_unref ()
void
gtk_expression_watch_unref (GtkExpressionWatch *watch); Освобождает ссылку на заданный GtkExpressionWatch.
Если эта ссылка была последней, ресурсы, связанные с self, освобождаются.
Параметры
watch | объект GtkExpressionWatch. | [allow-none] |
gtk_expression_watch_evaluate ()
gboolean gtk_expression_watch_evaluate (GtkExpressionWatch *watch,GValue *value);
Вычисляет наблюдаемое выражение и в случае успеха сохраняет результат в value.
Это эквивалентно вызову gtk_expression_evaluate() с выражением и указателем this, первоначально используемыми для создания watch.
Параметры
watch | объект GtkExpressionWatch | |
value | пустой GValue для установки |
Возвращаемое значение
TRUE в случае успешного вычисления и установки value
gtk_expression_watch_unwatch ()
void
gtk_expression_watch_unwatch (GtkExpressionWatch *watch); Прекращает наблюдение за выражением, установленным с помощью gtk_expression_watch().
Параметры
watch | наблюдаемое выражение для освобождения. | [transfer none] |
gtk_property_expression_new ()
GtkExpression * gtk_property_expression_new (GType this_type,GtkExpression *expression,const char *property_name);
Создаёт выражение, которое ищет свойство через заданный expression или аргумент this, когда expression равно NULL.
Если полученный объект соответствует this_type, будет запрошено свойство с именем property_name. В противном случае вычисление выражения завершится неудачей.
Указанный this_type должен иметь свойство с типом property_name.
Параметры
this_type | Ожидаемый тип. | |
expression | Выражение для получения объекта для запроса или | [nullable][transfer full] |
property_name | имя свойства. |
Возвращаемое значение
новый объект GtkExpression
gtk_property_expression_new_for_pspec ()
GtkExpression * gtk_property_expression_new_for_pspec (GtkExpression *expression,GParamSpec *pspec);
Создаёт выражение, которое ищет свойство через заданный expression или аргумент this, когда expression равно NULL.
Если полученный объект соответствует this_type, будет запрошено свойство, указанное с помощью pspec. В противном случае вычисление выражения завершится неудачей.
Параметры
expression | Выражение для получения объекта для запроса или | [nullable][transfer full] |
pspec | объект GParamSpec для запроса свойства. |
Возвращаемое значение
новый объект GtkExpression
gtk_property_expression_get_expression ()
GtkExpression *
gtk_property_expression_get_expression
(GtkExpression *expression); Получает выражение, определяющее объект выражения свойства.
Параметры
expression | свойство GtkExpression. | [type GtkPropertyExpression] |
Возвращает
выражение объекта.
[transfer none]
gtk_property_expression_get_pspec ()
GParamSpec *
gtk_property_expression_get_pspec (GtkExpression *expression); Получает GParamSpec, определяющий свойство выражения свойства.
Параметры
expression | свойство GtkExpression. | [type GtkPropertyExpression] |
Возвращает
значение GParamSpec.
[transfer none]
gtk_constant_expression_new ()
GtkExpression * gtk_constant_expression_new (GType value_type,...);
Создаёт GtkExpression, который вычисляет объект, заданный аргументами.
Параметры
value_type | Тип объекта | |
... | аргументы для создания объекта |
Возвращает
новый GtkExpression
gtk_constant_expression_new_for_value ()
GtkExpression *
gtk_constant_expression_new_for_value (const GValue *value); Создаёт выражение, которое всегда вычисляет заданный value .
Параметры
value | значение GValue |
Возвращает
новый GtkExpression
gtk_constant_expression_get_value ()
const GValue *
gtk_constant_expression_get_value (GtkExpression *expression); Получает значение, к которому вычисляется константное выражение.
Параметры
expression | постоянное GtkExpression. | [type GtkConstantExpression] |
Возвращает
значение.
[transfer none]
gtk_object_expression_new ()
GtkExpression *
gtk_object_expression_new (GObject *object); Создаёт выражение, вычисляющее заданный object со слабой ссылкой. После удаления object вычисление завершится ошибкой. Это выражение предназначено для разрыва циклов ссылок.
Если вы хотите сохранить ссылку на object , используйте gtk_constant_expression_new().
Параметры
object | объект для отслеживания. | [transfer none] |
Возвращает
новый GtkExpression
gtk_object_expression_get_object ()
GObject *
gtk_object_expression_get_object (GtkExpression *expression); Получает объект, к которому вычисляется выражение.
Параметры
expression | объектное GtkExpression. | [type GtkObjectExpression] |
Возвращает
объект или NULL.
[transfer none][nullable]
gtk_closure-expression-new ()
GtkExpression * gtk_closure_expression_new (GType value_type,GClosure *closure,guint n_params,GtkExpression **params);
Создаёт GtkExpression, который вызывает closure при вычислении. closure вызывается с объектом this и результатами вычисления params выражений.
Параметры
value_type | тип значения, вычисляемого этим выражением | |
closure | замыкание для вызова при вычислении этого выражения. Если замыкание плавающее, оно принимается | |
n_params | количество параметров, необходимых для вычисления | |
params | выражения для каждого параметра. | [nullable][array length=n_params][transfer full] |
Возвращает
новый GtkExpression
gtk_cclosure_expression_new ()
GtkExpression * gtk_cclosure_expression_new (GType value_type,GClosureMarshal marshal,guint n_params,GtkExpression **params,GCallback callback_func,gpointer user_data,GClosureNotify user_destroy);
Эта функция является вариантом gtk_closure_expression_new(), которая создаёт GClosure вызвав g_cclosure_new() с заданными callback_func, user_data и user_destroy.
Параметры
value_type | тип значения, к которому относится это выражение | |
marshal | маршаллинг, используемый для создания замыкания. | [scope call][nullable] |
n_params | количество параметров, необходимых для оценки | |
params | выражения для каждого параметра. | [array length=n_params][transfer full] |
callback_func | обратный вызов, используемый для создания замыкания. | [scope notified][closure user_data][destroy user_destroy] |
user_data | пользовательские данные, используемые для создания замыкания. | [nullable] |
user_destroy | уведомление об уничтожении для | [nullable] |
Возвращаемое значение
новый GtkExpression
GTK_VALUE_HOLDS_EXPRESSION()
#define GTK_VALUE_HOLDS_EXPRESSION(value) (G_VALUE_HOLDS ((value), GTK_TYPE_EXPRESSION))
Возвращает TRUE если value была инициализирована с помощью GTK_TYPE_EXPRESSION.
Параметры
value | a GValue |
gtk_value_set_expression ()
void gtk_value_set_expression (GValue *value,GtkExpression *expression);
Сохраняет заданный GtkExpression в value.
Значение GValue получит ссылку на expression.
Параметры
value | a GValue инициализированный типом | |
expression |
gtk_value_take_expression ()
void gtk_value_take_expression (GValue *value,GtkExpression *expression);
Сохраняет заданный GtkExpression в value.
Эта функция передает владение expression в GValue.
Параметры
value | a GValue инициализированный типом | |
expression | [transfer full][nullable] |
gtk_value_get_expression ()
GtkExpression *
gtk_value_get_expression (const GValue *value); Возвращает GtkExpression, хранящийся в заданном value.
Параметры
value | a GValue инициализированный типом |
gtk_value_dup_expression ()
GtkExpression *
gtk_value_dup_expression (const GValue *value); Возвращает GtkExpression, хранящийся в заданном value, и получает на него ссылку.
Параметры
value | a GValue инициализированный типом |
gtk_param_spec_expression ()
GParamSpec *
gtk_param_spec_expression (const char *name,
const char *nick,
const char *blurb,
GParamFlags flags); Создаёт новый экземпляр GParamSpec для свойства, содержащего GtkExpression.
См. g_param_spec_internal() для получения подробной информации о строках свойства.
Параметры
name | каноническое имя свойства | |
nick | читаемое пользователем имя свойства | |
blurb | читаемое пользователем описание свойства | |
flags | флаги свойства |
Возвращаемое значение
новый созданный объект спецификации свойства.
[transfer full]
Типы и Значения
GtkExpression
typedef struct _GtkExpression GtkExpression;
Структура GtkExpression содержит только приватные данные.
GtkExpressionWatch
typedef struct _GtkExpressionWatch GtkExpressionWatch;
GtkParamSpecExpression
typedef struct {
} GtkParamSpecExpression;
A GParamSpec для свойств, содержащих GtkExpression.
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer-old.gnome.org/gtk4/4.0/GtkExpression.html