1 /* gbinding.h: Binding for object properties 2 * 3 * Copyright (C) 2010 Intel Corp. 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General 16 * Public License along with this library; if not, see <http://www.gnu.org/licenses/>. 17 * 18 * Author: Emmanuele Bassi <ebassi@linux.intel.com> 19 */ 20 21 #ifndef __G_BINDING_H__ 22 #define __G_BINDING_H__ 23 24 #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) 25 #error "Only <glib-object.h> can be included directly." 26 #endif 27 28 #include <glib.h> 29 #include <gobject/gobject.h> 30 31 G_BEGIN_DECLS 32 33 #define G_TYPE_BINDING_FLAGS (g_binding_flags_get_type ()) 34 35 #define G_TYPE_BINDING (g_binding_get_type ()) 36 #define G_BINDING(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_BINDING, GBinding)) 37 #define G_IS_BINDING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_BINDING)) 38 39 /** 40 * GBinding: 41 * 42 * GBinding is an opaque structure whose members 43 * cannot be accessed directly. 44 * 45 * Since: 2.26 46 */ 47 typedef struct _GBinding GBinding; 48 49 /** 50 * GBindingTransformFunc: 51 * @binding: a #GBinding 52 * @from_value: the #GValue containing the value to transform 53 * @to_value: the #GValue in which to store the transformed value 54 * @user_data: data passed to the transform function 55 * 56 * A function to be called to transform @from_value to @to_value. If 57 * this is the @transform_to function of a binding, then @from_value 58 * is the @source_property on the @source object, and @to_value is the 59 * @target_property on the @target object. If this is the 60 * @transform_from function of a %G_BINDING_BIDIRECTIONAL binding, 61 * then those roles are reversed. 62 * 63 * Returns: %TRUE if the transformation was successful, and %FALSE 64 * otherwise 65 * 66 * Since: 2.26 67 */ 68 typedef gboolean (* GBindingTransformFunc) (GBinding *binding, 69 const GValue *from_value, 70 GValue *to_value, 71 gpointer user_data); 72 73 /** 74 * GBindingFlags: 75 * @G_BINDING_DEFAULT: The default binding; if the source property 76 * changes, the target property is updated with its value. 77 * @G_BINDING_BIDIRECTIONAL: Bidirectional binding; if either the 78 * property of the source or the property of the target changes, 79 * the other is updated. 80 * @G_BINDING_SYNC_CREATE: Synchronize the values of the source and 81 * target properties when creating the binding; the direction of 82 * the synchronization is always from the source to the target. 83 * @G_BINDING_INVERT_BOOLEAN: If the two properties being bound are 84 * booleans, setting one to %TRUE will result in the other being 85 * set to %FALSE and vice versa. This flag will only work for 86 * boolean properties, and cannot be used when passing custom 87 * transformation functions to g_object_bind_property_full(). 88 * 89 * Flags to be passed to g_object_bind_property() or 90 * g_object_bind_property_full(). 91 * 92 * This enumeration can be extended at later date. 93 * 94 * Since: 2.26 95 */ 96 typedef enum { /*< prefix=G_BINDING >*/ 97 G_BINDING_DEFAULT = 0, 98 99 G_BINDING_BIDIRECTIONAL = 1 << 0, 100 G_BINDING_SYNC_CREATE = 1 << 1, 101 G_BINDING_INVERT_BOOLEAN = 1 << 2 102 } GBindingFlags; 103 104 GLIB_AVAILABLE_IN_ALL 105 GType g_binding_flags_get_type (void) G_GNUC_CONST; 106 GLIB_AVAILABLE_IN_ALL 107 GType g_binding_get_type (void) G_GNUC_CONST; 108 109 GLIB_AVAILABLE_IN_ALL 110 GBindingFlags g_binding_get_flags (GBinding *binding); 111 GLIB_DEPRECATED_IN_2_68_FOR(g_binding_dup_source) 112 GObject * g_binding_get_source (GBinding *binding); 113 GLIB_AVAILABLE_IN_2_68 114 GObject * g_binding_dup_source (GBinding *binding); 115 GLIB_DEPRECATED_IN_2_68_FOR(g_binding_dup_target) 116 GObject * g_binding_get_target (GBinding *binding); 117 GLIB_AVAILABLE_IN_2_68 118 GObject * g_binding_dup_target (GBinding *binding); 119 GLIB_AVAILABLE_IN_ALL 120 const gchar * g_binding_get_source_property (GBinding *binding); 121 GLIB_AVAILABLE_IN_ALL 122 const gchar * g_binding_get_target_property (GBinding *binding); 123 GLIB_AVAILABLE_IN_2_38 124 void g_binding_unbind (GBinding *binding); 125 126 GLIB_AVAILABLE_IN_ALL 127 GBinding *g_object_bind_property (gpointer source, 128 const gchar *source_property, 129 gpointer target, 130 const gchar *target_property, 131 GBindingFlags flags); 132 GLIB_AVAILABLE_IN_ALL 133 GBinding *g_object_bind_property_full (gpointer source, 134 const gchar *source_property, 135 gpointer target, 136 const gchar *target_property, 137 GBindingFlags flags, 138 GBindingTransformFunc transform_to, 139 GBindingTransformFunc transform_from, 140 gpointer user_data, 141 GDestroyNotify notify); 142 GLIB_AVAILABLE_IN_ALL 143 GBinding *g_object_bind_property_with_closures (gpointer source, 144 const gchar *source_property, 145 gpointer target, 146 const gchar *target_property, 147 GBindingFlags flags, 148 GClosure *transform_to, 149 GClosure *transform_from); 150 151 G_END_DECLS 152 153 #endif /* __G_BINDING_H__ */ 154