[Galago-commits] r2615 - in trunk/libgalago: . libgalago
galago-commits at freedesktop.org
galago-commits at freedesktop.org
Sun Mar 19 15:41:46 PST 2006
Author: chipx86
Date: 2006-03-19 15:41:41 -0800 (Sun, 19 Mar 2006)
New Revision: 2615
Modified:
trunk/libgalago/ChangeLog
trunk/libgalago/libgalago/galago-object.c
trunk/libgalago/libgalago/galago-object.h
Log:
- Fixed several bugs in remote object attributes. Namely, they now work for objects other than GalagoPerson.
- Added support for attributes of type double.
- Added galago_object_get_attributes().
- Made the attribute functions into virtual functions, so that other classes can do with them as they see fit.
Modified: trunk/libgalago/ChangeLog
===================================================================
--- trunk/libgalago/ChangeLog 2006-03-19 21:36:05 UTC (rev 2614)
+++ trunk/libgalago/ChangeLog 2006-03-19 23:41:41 UTC (rev 2615)
@@ -1,3 +1,14 @@
+Sun Mar 19 15:40:36 PST 2006 Christian Hammond <chipx86 at chipx86.com>
+
+ * libgalago/galago-object.c:
+ * libgalago/galago-object.h:
+ - Fixed several bugs in remote object attributes. Namely, they now
+ work for objects other than GalagoPerson.
+ - Added support for attributes of type double.
+ - Added galago_object_get_attributes().
+ - Made the attribute functions into virtual functions, so that other
+ classes can do with them as they see fit.
+
Tue Mar 14 21:23:26 PST 2006 Christian Hammond <chipx86 at chipx86.com>
* libgalago/galago-core.c:
Modified: trunk/libgalago/libgalago/galago-object.c
===================================================================
--- trunk/libgalago/libgalago/galago-object.c 2006-03-19 21:36:05 UTC (rev 2614)
+++ trunk/libgalago/libgalago/galago-object.c 2006-03-19 23:41:41 UTC (rev 2615)
@@ -60,6 +60,13 @@
const GValue *value, GParamSpec *pspec);
static void galago_object_get_property(GObject *gobject, guint prop_id,
GValue *value, GParamSpec *pspec);
+static void galago_object_real_set_attribute(GalagoObject *object,
+ const char *name, GValue *value);
+static gboolean galago_object_real_remove_attribute(GalagoObject *object,
+ const char *name);
+static const GValue *galago_object_real_get_attribute(
+ const GalagoObject *object, const char *name);
+static GList *galago_object_real_get_attributes(const GalagoObject *object);
static void _galago_dbus_object_set_attribute(GalagoObject *object,
const char *name,
GValue *value);
@@ -85,6 +92,10 @@
klass->dbus_push_full = galago_object_real_dbus_push_full;
klass->dbus_get_signature = NULL;
klass->destroy = galago_object_real_destroy;
+ klass->set_attribute = galago_object_real_set_attribute;
+ klass->remove_attribute = galago_object_real_remove_attribute;
+ klass->get_attribute = galago_object_real_get_attribute;
+ klass->get_attributes = galago_object_real_get_attributes;
gobject_class->dispose = galago_object_dispose;
gobject_class->finalize = galago_object_finalize;
@@ -337,7 +348,7 @@
g_return_if_fail(object != NULL);
g_return_if_fail(name != NULL && *name != '\0');
g_return_if_fail(str_value != NULL && *str_value != '\0');
- g_return_if_fail(GALAGO_IS_PERSON(object));
+ g_return_if_fail(GALAGO_IS_OBJECT(object));
value = g_new0(GValue, 1);
g_value_init(value, G_TYPE_STRING);
@@ -353,7 +364,7 @@
g_return_if_fail(object != NULL);
g_return_if_fail(name != NULL && *name != '\0');
- g_return_if_fail(GALAGO_IS_PERSON(object));
+ g_return_if_fail(GALAGO_IS_OBJECT(object));
value = g_new0(GValue, 1);
g_value_init(value, G_TYPE_BOOLEAN);
@@ -369,7 +380,7 @@
g_return_if_fail(object != NULL);
g_return_if_fail(name != NULL && *name != '\0');
- g_return_if_fail(GALAGO_IS_PERSON(object));
+ g_return_if_fail(GALAGO_IS_OBJECT(object));
value = g_new0(GValue, 1);
g_value_init(value, G_TYPE_INT);
@@ -377,6 +388,22 @@
galago_object_set_attribute(object, name, value);
}
+void
+galago_object_set_attr_double(GalagoObject *object, const char *name,
+ gdouble double_value)
+{
+ GValue *value;
+
+ g_return_if_fail(object != NULL);
+ g_return_if_fail(name != NULL && *name != '\0');
+ g_return_if_fail(GALAGO_IS_OBJECT(object));
+
+ value = g_new0(GValue, 1);
+ g_value_init(value, G_TYPE_DOUBLE);
+ g_value_set_int(value, double_value);
+ galago_object_set_attribute(object, name, value);
+}
+
static void
destroy_value(GValue *value)
{
@@ -384,19 +411,10 @@
g_free(value);
}
-void
-galago_object_set_attribute(GalagoObject *object, const char *name,
- GValue *value)
+static void
+galago_object_real_set_attribute(GalagoObject *object, const char *name,
+ GValue *value)
{
- g_return_if_fail(object != NULL);
- g_return_if_fail(GALAGO_IS_PERSON(object));
- g_return_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object));
- g_return_if_fail(name != NULL && *name != '\0');
- g_return_if_fail(value != NULL);
- g_return_if_fail(G_VALUE_HOLDS(value, G_TYPE_STRING) ||
- G_VALUE_HOLDS(value, G_TYPE_BOOLEAN) ||
- G_VALUE_HOLDS(value, G_TYPE_INT));
-
if (object->priv->attrs_table == NULL)
{
object->priv->attrs_table =
@@ -411,16 +429,30 @@
_galago_dbus_object_set_attribute(object, name, value);
}
-gboolean
-galago_object_remove_attribute(GalagoObject *object, const char *name)
+void
+galago_object_set_attribute(GalagoObject *object, const char *name,
+ GValue *value)
{
+ g_return_if_fail(object != NULL);
+ g_return_if_fail(GALAGO_IS_OBJECT(object));
+ g_return_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object));
+ g_return_if_fail(name != NULL && *name != '\0');
+ g_return_if_fail(value != NULL);
+ g_return_if_fail(G_VALUE_HOLDS(value, G_TYPE_STRING) ||
+ G_VALUE_HOLDS(value, G_TYPE_BOOLEAN) ||
+ G_VALUE_HOLDS(value, G_TYPE_INT) ||
+ G_VALUE_HOLDS(value, G_TYPE_DOUBLE));
+
+ g_return_if_fail(GALAGO_OBJECT_GET_CLASS(object)->get_attribute != NULL);
+
+ GALAGO_OBJECT_GET_CLASS(object)->set_attribute(object, name, value);
+}
+
+static gboolean
+galago_object_real_remove_attribute(GalagoObject *object, const char *name)
+{
char *temp;
- g_return_val_if_fail(object != NULL, FALSE);
- g_return_val_if_fail(GALAGO_IS_PERSON(object), FALSE);
- g_return_val_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object), FALSE);
- g_return_val_if_fail(name != NULL && *name != '\0', FALSE);
-
if (object->priv->attrs_table == NULL)
return TRUE;
@@ -439,13 +471,27 @@
return TRUE;
}
+gboolean
+galago_object_remove_attribute(GalagoObject *object, const char *name)
+{
+ g_return_val_if_fail(object != NULL, FALSE);
+ g_return_val_if_fail(GALAGO_IS_OBJECT(object), FALSE);
+ g_return_val_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object), FALSE);
+ g_return_val_if_fail(name != NULL && *name != '\0', FALSE);
+
+ g_return_val_if_fail(
+ GALAGO_OBJECT_GET_CLASS(object)->remove_attribute != NULL, FALSE);
+
+ return GALAGO_OBJECT_GET_CLASS(object)->remove_attribute(object, name);
+}
+
const char *
galago_object_get_attr_string(const GalagoObject *object, const char *name)
{
const GValue *value;
g_return_val_if_fail(object != NULL, NULL);
- g_return_val_if_fail(GALAGO_IS_PERSON(object), NULL);
+ g_return_val_if_fail(GALAGO_IS_OBJECT(object), NULL);
g_return_val_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object), NULL);
g_return_val_if_fail(name != NULL && *name != '\0', NULL);
@@ -465,7 +511,7 @@
const GValue *value;
g_return_val_if_fail(object != NULL, FALSE);
- g_return_val_if_fail(GALAGO_IS_PERSON(object), FALSE);
+ g_return_val_if_fail(GALAGO_IS_OBJECT(object), FALSE);
g_return_val_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object), FALSE);
g_return_val_if_fail(name != NULL && *name != '\0', FALSE);
@@ -485,7 +531,7 @@
const GValue *value;
g_return_val_if_fail(object != NULL, 0);
- g_return_val_if_fail(GALAGO_IS_PERSON(object), 0);
+ g_return_val_if_fail(GALAGO_IS_OBJECT(object), 0);
g_return_val_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object), 0);
g_return_val_if_fail(name != NULL && *name != '\0', 0);
@@ -494,22 +540,37 @@
if (value == NULL)
return 0;
- g_return_val_if_fail(G_VALUE_HOLDS(value, G_TYPE_STRING), 0);
+ g_return_val_if_fail(G_VALUE_HOLDS(value, G_TYPE_INT), 0);
return g_value_get_int(value);
}
-const GValue *
-galago_object_get_attribute(const GalagoObject *object, const char *name)
+gdouble
+galago_object_get_attr_double(const GalagoObject *object, const char *name)
{
+ const GValue *value;
+
+ g_return_val_if_fail(object != NULL, 0);
+ g_return_val_if_fail(GALAGO_IS_OBJECT(object), 0);
+ g_return_val_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object), 0);
+ g_return_val_if_fail(name != NULL && *name != '\0', 0);
+
+ value = galago_object_get_attribute(object, name);
+
+ if (value == NULL)
+ return 0.0;
+
+ g_return_val_if_fail(G_VALUE_HOLDS(value, G_TYPE_DOUBLE), 0);
+
+ return g_value_get_double(value);
+}
+
+static const GValue *
+galago_object_real_get_attribute(const GalagoObject *object, const char *name)
+{
GValue *value = NULL;
char *temp;
- g_return_val_if_fail(object != NULL, NULL);
- g_return_val_if_fail(GALAGO_IS_PERSON(object), NULL);
- g_return_val_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object), NULL);
- g_return_val_if_fail(name != NULL && *name != '\0', NULL);
-
temp = g_ascii_strdown(name, -1);
if (object->priv->attrs_table != NULL)
@@ -523,7 +584,43 @@
return value;
}
+const GValue *
+galago_object_get_attribute(const GalagoObject *object, const char *name)
+{
+ g_return_val_if_fail(object != NULL, NULL);
+ g_return_val_if_fail(GALAGO_IS_OBJECT(object), NULL);
+ g_return_val_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object), NULL);
+ g_return_val_if_fail(name != NULL && *name != '\0', NULL);
+ g_return_val_if_fail(GALAGO_OBJECT_GET_CLASS(object)->get_attribute != NULL,
+ NULL);
+
+ return GALAGO_OBJECT_GET_CLASS(object)->get_attribute(object, name);
+}
+
+static GList *
+galago_object_real_get_attributes(const GalagoObject *object)
+{
+ /* TODO */
+ g_warning("galago_object_real_get_attributes has not been "
+ "implemented yet.");
+ return NULL;
+}
+
+GList *
+galago_object_get_attributes(const GalagoObject *object)
+{
+ g_return_val_if_fail(object != NULL, NULL);
+ g_return_val_if_fail(GALAGO_IS_OBJECT(object), NULL);
+ g_return_val_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object), NULL);
+
+ g_return_val_if_fail(
+ GALAGO_OBJECT_GET_CLASS(object)->get_attributes != NULL, NULL);
+
+ return GALAGO_OBJECT_GET_CLASS(object)->get_attributes(object);
+}
+
+
/**************************************************************************
* D-BUS Functions
**************************************************************************/
@@ -570,6 +667,15 @@
dbus_message_iter_append_basic(&value_iter, DBUS_TYPE_INT32, &i);
dbus_message_iter_close_container(&iter, &value_iter);
}
+ else if (G_VALUE_HOLDS(value, G_TYPE_DOUBLE))
+ {
+ gdouble i = g_value_get_double(value);
+ dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
+ DBUS_TYPE_DOUBLE_AS_STRING,
+ &value_iter);
+ dbus_message_iter_append_basic(&value_iter, DBUS_TYPE_DOUBLE, &i);
+ dbus_message_iter_close_container(&iter, &value_iter);
+ }
else
g_assert_not_reached();
@@ -651,6 +757,15 @@
break;
}
+ case DBUS_TYPE_DOUBLE:
+ {
+ int data;
+ dbus_message_iter_get_basic(&value_iter, &data);
+ g_value_init(value, G_TYPE_DOUBLE);
+ g_value_set_int(value, data);
+ break;
+ }
+
default:
g_warning("Unknown attribute type %d for attribute %s",
type, name);
Modified: trunk/libgalago/libgalago/galago-object.h
===================================================================
--- trunk/libgalago/libgalago/galago-object.h 2006-03-19 21:36:05 UTC (rev 2614)
+++ trunk/libgalago/libgalago/galago-object.h 2006-03-19 23:41:41 UTC (rev 2615)
@@ -69,6 +69,12 @@
void *(*dbus_message_get)(DBusMessageIter *iter);
void (*dbus_push_full)(GalagoObject *object);
gchar *(*dbus_get_signature)(void);
+ void (*set_attribute)(GalagoObject *object, const char *name,
+ GValue *value);
+ gboolean (*remove_attribute)(GalagoObject *object, const char *name);
+ const GValue *(*get_attribute)(const GalagoObject *object,
+ const char *name);
+ GList *(*get_attributes)(const GalagoObject *object);
/* Signals */
void (*destroy)(GalagoObject *object);
@@ -262,6 +268,16 @@
gint32 value);
/**
+ * Sets a double attribute on an object.
+ *
+ * @param object The object.
+ * @param name The name of the attribute to set.
+ * @param value The value of the attribute.
+ */
+void galago_object_set_attr_double(GalagoObject *object, const char *name,
+ gdouble value);
+
+/**
* Sets an attribute on an object.
*
* This is limited to string, boolean, and integer value types.
@@ -301,7 +317,7 @@
* @param object The object.
* @param name The name of the attribute.
*
- * @return The attribute value, or NULL.
+ * @return The attribute value.
*/
gboolean galago_object_get_attr_bool(const GalagoObject *object,
const char *name);
@@ -312,12 +328,23 @@
* @param object The object.
* @param name The name of the attribute.
*
- * @return The attribute value, or NULL.
+ * @return The attribute value.
*/
gint32 galago_object_get_attr_int(const GalagoObject *object,
const char *name);
/**
+ * Returns the value of a double attribute on an object.
+ *
+ * @param object The object.
+ * @param name The name of the attribute.
+ *
+ * @return The attribute value.
+ */
+gdouble galago_object_get_attr_double(const GalagoObject *object,
+ const char *name);
+
+/**
* Returns the value of an attribute on an object.
*
* @param object The object.
@@ -328,6 +355,14 @@
const GValue *galago_object_get_attribute(const GalagoObject *object,
const char *name);
+/**
+ * Returns the list of attributes in an object.
+ *
+ * @param object The object.
+ *
+ * @return The attributes in the object.
+ */
+GList *galago_object_get_attributes(const GalagoObject *object);
/*@}*/
More information about the galago-commits
mailing list