#include #include #include "sync_item.h" #include "sync_group.h" G_DEFINE_TYPE (SyncItem, sync_item, G_TYPE_OBJECT); #define ITEM_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), SYNC_TYPE_ITEM, SyncItemPrivate)) typedef struct _SyncItemPrivate SyncItemPrivate; enum { PROP_NAME = 1, PROP_ADR, PROP_DATA, PROP_DATA_FREE_FUNC, PROP_MEMBER_FUNC, }; struct _SyncItemPrivate { gchar *name; gchar *adr; gpointer data; SyncItemMemberFunc get_member; SyncItemDataFreeFunc free_data; }; static void sync_item_finalize (GObject *object) { SyncItemPrivate *priv = ITEM_PRIVATE (object); g_free (priv->name); g_free (priv->adr); if (priv->free_data && priv->data) priv->free_data (priv->data); G_OBJECT_CLASS (sync_item_parent_class)->finalize (object); } static void sync_item_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { SyncItem *item = SYNC_ITEM (object); switch (prop_id) { case PROP_NAME : sync_item_set_name (item, g_value_get_string (value)); break; case PROP_ADR : sync_item_set_adr (item, g_value_get_string (value)); break; case PROP_DATA : sync_item_set_data (item, g_value_get_pointer (value)); break; case PROP_DATA_FREE_FUNC : sync_item_set_data_free_func ( item, g_value_get_pointer (value)); break; case PROP_MEMBER_FUNC : sync_item_set_member_func ( item, g_value_get_pointer (value)); break; default : G_OBJECT_WARN_INVALID_PROPERTY_ID ( object, prop_id, pspec); break; } } static void sync_item_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { SyncItem *item = SYNC_ITEM (object); switch (prop_id) { case PROP_NAME : g_value_set_string (value, sync_item_get_name (item)); break; case PROP_ADR : g_value_set_string (value, sync_item_get_adr (item)); break; case PROP_DATA : g_value_set_pointer (value, sync_item_get_data (item)); break; case PROP_DATA_FREE_FUNC : g_value_set_pointer ( value, sync_item_get_data_free_func (item)); break; case PROP_MEMBER_FUNC : g_value_set_pointer ( value, sync_item_get_member_func (item)); break; default : G_OBJECT_WARN_INVALID_PROPERTY_ID ( object, prop_id, pspec); break; } } static void sync_item_class_init (SyncItemClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = sync_item_set_property; object_class->get_property = sync_item_get_property; g_object_class_install_property ( object_class, PROP_NAME, g_param_spec_string ( "name", ("Name"), ("Name of the synchronisation item."), ("Name"), G_PARAM_READWRITE)); g_object_class_install_property ( object_class, PROP_ADR, g_param_spec_string ( "adr", ("Address"), ("Location of the synchronisation item."), NULL, G_PARAM_READWRITE)); g_object_class_install_property ( object_class, PROP_DATA, g_param_spec_pointer ( "data", ("Data"), ("Custom data"), G_PARAM_READWRITE)); g_object_class_install_property ( object_class, PROP_DATA_FREE_FUNC, g_param_spec_pointer ( "data_free_func", ("Data Freeing Function"), ("Function pointer to free set custom data."), G_PARAM_READWRITE)); g_object_class_install_property ( object_class, PROP_MEMBER_FUNC, g_param_spec_pointer ( "member_func", ("Member Function"), ("Function pointer to retrieve OSyncMember."), G_PARAM_READWRITE)); g_type_class_add_private (klass, sizeof (SyncItemPrivate)); object_class->finalize = sync_item_finalize; } static void sync_item_init (SyncItem *self) { /* Make sure this object is floating? */ if (g_object_is_floating (G_OBJECT (self))) g_object_force_floating (G_OBJECT (self)); } SyncItem* sync_item_new (const gchar *name, const gchar *adr, SyncItemMemberFunc member_func) { return g_object_new (SYNC_TYPE_ITEM, "name", name, "adr", adr, "member_func", member_func, NULL); } const gchar * sync_item_get_name (SyncItem *item) { SyncItemPrivate *priv = ITEM_PRIVATE (item); return priv->name; } const gchar * sync_item_get_adr (SyncItem *item) { SyncItemPrivate *priv = ITEM_PRIVATE (item); return priv->adr; } gpointer sync_item_get_data (SyncItem *item) { SyncItemPrivate *priv = ITEM_PRIVATE (item); return priv->data; } SyncItemDataFreeFunc sync_item_get_data_free_func (SyncItem *item) { SyncItemPrivate *priv = ITEM_PRIVATE (item); return priv->free_data; } SyncItemMemberFunc sync_item_get_member_func (SyncItem *item) { SyncItemPrivate *priv = ITEM_PRIVATE (item); return priv->get_member; } OSyncMember * sync_item_create_member (SyncItem *item, SyncGroup *group) { SyncItemPrivate *priv = ITEM_PRIVATE (item); return priv->get_member (item, group); } void sync_item_set_name (SyncItem *item, const gchar *name) { SyncItemPrivate *priv = ITEM_PRIVATE (item); priv->name = g_strdup (name); } void sync_item_set_adr (SyncItem *item, const gchar *adr) { SyncItemPrivate *priv = ITEM_PRIVATE (item); priv->adr = g_strdup (adr); } void sync_item_set_data (SyncItem *item, gpointer data) { SyncItemPrivate *priv = ITEM_PRIVATE (item); if (priv->free_data && priv->data) priv->free_data (priv->data); priv->data = data; } void sync_item_set_data_free_func (SyncItem *item, SyncItemDataFreeFunc data_free_func) { SyncItemPrivate *priv = ITEM_PRIVATE (item); priv->free_data = data_free_func; } void sync_item_set_member_func (SyncItem *item, SyncItemMemberFunc member_func) { SyncItemPrivate *priv = ITEM_PRIVATE (item); priv->get_member = member_func; }