From 3fc5dff1de2389211bae97ba54db3c1370dbab0c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 11 Jun 2009 10:20:46 -0500 Subject: Adding in the basic (generated) framework for the status provider object --- src/status-provider.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/status-provider.c (limited to 'src/status-provider.c') diff --git a/src/status-provider.c b/src/status-provider.c new file mode 100644 index 0000000..c2f7de2 --- /dev/null +++ b/src/status-provider.c @@ -0,0 +1,55 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "status-provider.h" + +typedef struct _StatusProviderPrivate StatusProviderPrivate; +struct _StatusProviderPrivate { +}; + +#define STATUS_PROVIDER_GET_PRIVATE(o) \ +(G_TYPE_INSTANCE_GET_PRIVATE ((o), STATUS_PROVIDER_TYPE, StatusProviderPrivate)) + +static void status_provider_class_init (StatusProviderClass *klass); +static void status_provider_init (StatusProvider *self); +static void status_provider_dispose (GObject *object); +static void status_provider_finalize (GObject *object); + +G_DEFINE_TYPE (StatusProvider, status_provider, G_TYPE_OBJECT); + +static void +status_provider_class_init (StatusProviderClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (StatusProviderPrivate)); + + object_class->dispose = status_provider_dispose; + object_class->finalize = status_provider_finalize; + + return; +} + +static void +status_provider_init (StatusProvider *self) +{ + + return; +} + +static void +status_provider_dispose (GObject *object) +{ + + G_OBJECT_CLASS (status_provider_parent_class)->dispose (object); + return; +} + +static void +status_provider_finalize (GObject *object) +{ + + G_OBJECT_CLASS (status_provider_parent_class)->finalize (object); + return; +} -- cgit v1.2.3 From 01df160c30f98b6833f0e2341edf9ab94b95d801 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 11 Jun 2009 13:43:16 -0500 Subject: Don't need a private or dispose or finalize. This class is more of an interface. --- src/status-provider.c | 29 ----------------------------- 1 file changed, 29 deletions(-) (limited to 'src/status-provider.c') diff --git a/src/status-provider.c b/src/status-provider.c index c2f7de2..e18cc31 100644 --- a/src/status-provider.c +++ b/src/status-provider.c @@ -4,17 +4,8 @@ #include "status-provider.h" -typedef struct _StatusProviderPrivate StatusProviderPrivate; -struct _StatusProviderPrivate { -}; - -#define STATUS_PROVIDER_GET_PRIVATE(o) \ -(G_TYPE_INSTANCE_GET_PRIVATE ((o), STATUS_PROVIDER_TYPE, StatusProviderPrivate)) - static void status_provider_class_init (StatusProviderClass *klass); static void status_provider_init (StatusProvider *self); -static void status_provider_dispose (GObject *object); -static void status_provider_finalize (GObject *object); G_DEFINE_TYPE (StatusProvider, status_provider, G_TYPE_OBJECT); @@ -23,11 +14,6 @@ status_provider_class_init (StatusProviderClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - g_type_class_add_private (klass, sizeof (StatusProviderPrivate)); - - object_class->dispose = status_provider_dispose; - object_class->finalize = status_provider_finalize; - return; } @@ -38,18 +24,3 @@ status_provider_init (StatusProvider *self) return; } -static void -status_provider_dispose (GObject *object) -{ - - G_OBJECT_CLASS (status_provider_parent_class)->dispose (object); - return; -} - -static void -status_provider_finalize (GObject *object) -{ - - G_OBJECT_CLASS (status_provider_parent_class)->finalize (object); - return; -} -- cgit v1.2.3 From f9aa333e5737ae0fcab56d9f4c5c9ed463011e9f Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 11 Jun 2009 14:17:04 -0500 Subject: Some public funtions and now they can be subclassed --- src/status-provider.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src/status-provider.c') diff --git a/src/status-provider.c b/src/status-provider.c index e18cc31..613019b 100644 --- a/src/status-provider.c +++ b/src/status-provider.c @@ -14,6 +14,11 @@ status_provider_class_init (StatusProviderClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); + klass->status_changed = NULL; + + klass->set_status = NULL; + klass->get_status = NULL; + return; } @@ -24,3 +29,31 @@ status_provider_init (StatusProvider *self) return; } +void +status_provider_set_status (StatusProvider * sp, StatusProviderStatus status) +{ + g_return_if_fail(IS_STATUS_PROVIDER(sp)); + + StatusProviderClass * class = STATUS_PROVIDER_CLASS(sp); + g_return_if_fail(class->set_status != NULL); + + return class->set_status(sp, status); +} + +StatusProviderStatus +status_provider_get_status (StatusProvider * sp) +{ + g_return_val_if_fail(IS_STATUS_PROVIDER(sp), STATUS_PROVIDER_STATUS_OFFLINE); + + StatusProviderClass * class = STATUS_PROVIDER_CLASS(sp); + g_return_val_if_fail(class->get_status != NULL, STATUS_PROVIDER_STATUS_OFFLINE); + + return class->get_status(sp); +} + +void +status_provider_emit_status_changed (StatusProvider * sp, StatusProviderStatus newstatus) +{ + + return; +} -- cgit v1.2.3 From 3567cdb657ebf873fc36ab3449ff4cc3e98bd43d Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 11 Jun 2009 14:26:04 -0500 Subject: Adding in a good ol' signal handler and even emits this puppy. Whew. --- src/status-provider.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'src/status-provider.c') diff --git a/src/status-provider.c b/src/status-provider.c index 613019b..cc9eb32 100644 --- a/src/status-provider.c +++ b/src/status-provider.c @@ -4,6 +4,15 @@ #include "status-provider.h" +/* Signals */ +enum { + STATUS_CHANGED, + LAST_SIGNAL +}; + +static guint signals[LAST_SIGNAL] = { 0 }; + +/* GObject Boilerplate */ static void status_provider_class_init (StatusProviderClass *klass); static void status_provider_init (StatusProvider *self); @@ -19,6 +28,22 @@ status_provider_class_init (StatusProviderClass *klass) klass->set_status = NULL; klass->get_status = NULL; + /** + StatusProvider::status-changed: + @arg0: The #StatusProvider object. + @arg1: The new status #StatusProviderStatus + + Should be emitted by subclasses everytime that the status + changes externally to us. + */ + signals[STATUS_CHANGED] = g_signal_new(STATUS_PROVIDER_SIGNAL_STATUS_CHANGED, + G_TYPE_FROM_CLASS(klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET(StatusProviderClass, status_changed), + NULL, NULL, + g_cclosure_marshal_VOID__UINT, + G_TYPE_NONE, 1, G_TYPE_UINT); + return; } @@ -54,6 +79,7 @@ status_provider_get_status (StatusProvider * sp) void status_provider_emit_status_changed (StatusProvider * sp, StatusProviderStatus newstatus) { - + g_return_if_fail(IS_STATUS_PROVIDER(sp)); + g_signal_emit(sp, signals[STATUS_CHANGED], 0, newstatus, TRUE); return; } -- cgit v1.2.3