[gtk/matthiasc/for-master] expression: Add to the docs
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/matthiasc/for-master] expression: Add to the docs
- Date: Mon, 29 Jun 2020 22:18:14 +0000 (UTC)
commit 4393afd593e69e365a3748b06e6c95d696d9ff3c
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Jun 29 18:17:00 2020 -0400
expression: Add to the docs
Add some more long-form explanation of what expressions
are about and where they are used.
gtk/gtkexpression.c | 49 +++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 41 insertions(+), 8 deletions(-)
---
diff --git a/gtk/gtkexpression.c b/gtk/gtkexpression.c
index a3ba536afa..75557bbffe 100644
--- a/gtk/gtkexpression.c
+++ b/gtk/gtkexpression.c
@@ -1,3 +1,4 @@
+
/*
* Copyright © 2019 Benjamin Otte
*
@@ -28,18 +29,50 @@
* @Short_description: Expressions to values
* @Title: GtkExpression
*
- * GtkExpression provides a way to describe references to #GValues.
+ * GtkExpression provides a way to describe references to values.
+ *
+ * An important aspect of expressions is that the value can be obtained
+ * from a source that is several steps away. For example, an expression
+ * may describe ‘the value of property A of @object1, which is itself the
+ * value of a property of @object2’. And @object1 may not even exist yet
+ * at the time that the expression is created. This is contrast to GObject
+ * property bindings, which can only create direct connections between
+ * the properties of two objects that must both exist for the duration
+ * of the binding.
*
- * An expression needs to be "evaluated" to obtain the value that it currently refers
- * to. An evaluation always happens in the context of a current object called `this`
- * (it mirrors the behavior of object-oriented languages), which may or may not
- * influence the result of the evaluation. Use gtk_expression_evaluate() for
- * evaluating an expression.
+ * An expression needs to be "evaluated" to obtain the value that it currently
+ * refers to. An evaluation always happens in the context of a current object
+ * called `this` (it mirrors the behavior of object-oriented languages),
+ * which may or may not influence the result of the evaluation. Use
+ * gtk_expression_evaluate() for evaluating an expression.
*
* Various methods for defining expressions exist, from simple constants via
* gtk_constant_expression_new() to looking up properties in a #GObject (even
- * recursively) via gtk_property_expression_new() or providing custom functions to
- * transform and combine expressions via gtk_closure_expression_new().
+ * recursively) via gtk_property_expression_new() or providing custom functions
+ * to transform and combine expressions via gtk_closure_expression_new().
+ *
+ * Here is an example of a complex expression:
+ * |[
+ * color_expr = gtk_property_expression_new (GTK_TYPE_LIST_ITEM,
+ * NULL, "item");
+ * expression = gtk_property_expression_new (GTK_TYPE_COLOR,
+ * color_expr,
+ * "name");
+ * ]|
+ * when evaluated with `this` being a GtkListItem, it will obtain the
+ * "item" property from the GtkListItem, and then obtain the "name" property
+ * from the resulting object (which is assumed to be of type GTK_TYPE_COLOR).
+ *
+ * A more concise way to describe this would be
+ * |[
+ * this->item->name
+ * ]|
+ *
+ * The most likely place where you will encounter expressions is in the context
+ * of list models and list widgets using them. For example, #GtkDropDown is
+ * evaluating a GtkExpression to obtain strings from the items in its model
+ * that it can then use to match against the contents of its search entry.
+ * #GtkStringFilter is using a GtkExpression for a similar reason.
*
* By default, expressions are not paying attention to changes and evaluation is
* just a snapshot of the current state at a given time. To get informed about
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]