[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