// so.c // gcc -Wall `pkg-config --libs --cflags glib-2.0 gobject-2.0` -o so so.c #include /* *****************SHOULD BE HEADER FILE???************************* */ /* prototypes */ #define SIMPLE_OBJECT_TYPE (simple_object_get_type ()) #define SIMPLE_OBJECT (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SIMPLE_OBJECT_TYPE, SimpleObject)) GType simple_object_get_type (); typedef struct _SimpleObjectPrivate SimpleObjectPrivate; typedef struct _SimpleObject SimpleObject; struct _SimpleObject { GObject parent; SimpleObjectPrivate *priv; /* Properties */ gint first; gint second; //Unique Datafields and Methods Here! }; typedef struct _SimpleObjectClass SimpleObjectClass; struct _SimpleObjectClass { GObjectClass parent_class; //Class-wide Datafields and Methods Here! }; /* ************* normally in a c file ************************ **/ G_DEFINE_TYPE (SimpleObject, simple_object, G_TYPE_OBJECT); //Track properties? enum { PROP_FIRST, PROP_SECOND }; //TODO: set/get are same function!!! use a pointer? ASK //is static needed here??? Not in tutorial for this or class_init... static void simple_object_set_property( GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { SimpleObject *self = SIMPLE_OBJECT(object); switch(prop_id){ case PROP_FIRST: g_value_set_int(value, self-> first); break; case PROP_SECOND: g_value_set_int(value, self-> second); break; // default; /* No Property Found */ } } //is static needed here??? Not in tutorial for this or class_init... static void simple_object_get_property( GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { SimpleObject *self = SIMPLE_OBJECT(object); switch(prop_id){ case PROP_FIRST: g_value_set_int(value, self-> first); break; case PROP_SECOND: g_value_set_int(value, self-> second); break; // default; /* No Property Found */ } } static void simple_object_class_init (SimpleObjectClass *klass) { GObjectClass *this_class = G_OBJECT_CLASS (klass); SimpleObjectClass *so_class; GParamSpec *spec; this_class->set_property = simple_object_set_property; this_class->get_property = simple_object_get_property; //Define property: first spec = g_param_spec_int ( "prop-first", /* property name */ "first", /* nickname */ "The First Property", /* description */ 5, /* minimum */ 10, /* maximum */ 5, /* default */ G_PARAM_READABLE |G_PARAM_WRITABLE /* GParamSpecFlags */ ); g_object_class_install_property(this_class, PROP_FIRST, spec); //Define property: Second spec = g_param_spec_int ( "prop-second", /* property name */ "second", /* nickname */ "The Second Property", /* description */ 1, /* minimum */ 3, /* maximum */ 2, /* default */ G_PARAM_READABLE |G_PARAM_WRITABLE /* GParamSpecFlags */ ); g_object_class_install_property(this_class, PROP_SECOND, spec); } static void simple_object_init (SimpleObject *so) { //no init stuff here... } /* **********************NEW FILE************************************* */ int main (int argc, char **argv) { g_type_init (); SimpleObject *obj = g_object_new (SIMPLE_OBJECT_TYPE, NULL); int tmp; //do something with it gprint ("Property: first \n"); simple_object_get_property(G_OBJECT(obj), "prop-first", &tmp, NULL); gprint ("Default: %d\n", tmp); gprint ("Property: second \n"); simple_object_get_property(G_OBJECT(obj), "prop-second", &tmp, NULL); gprint ("Default: %d\n", tmp); g_object_unref (obj); return 0; }