From 174001bf984c3529b5c87294a08e4392a59b2c94 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Tue, 15 Nov 2005 11:45:31 +0000 Subject: [PATCH] Added view --- gnoemoe/mcp/gm-mcp-awns-status.c | 68 ++++++++++++++++++++++++++------ 1 file changed, 55 insertions(+), 13 deletions(-) diff --git a/gnoemoe/mcp/gm-mcp-awns-status.c b/gnoemoe/mcp/gm-mcp-awns-status.c index f3bc312..9e3c995 100644 --- a/gnoemoe/mcp/gm-mcp-awns-status.c +++ b/gnoemoe/mcp/gm-mcp-awns-status.c @@ -4,25 +4,32 @@ #include "gm-mcp.h" #include "../gm-world.h" #include "../gm-debug.h" +#include "../widgets/gm-world-view.h" #define GM_MCP_AWNS_STATUS_GET_PRIVATE(object)( \ G_TYPE_INSTANCE_GET_PRIVATE((object), \ GM_TYPE_MCP_AWNS_STATUS, GmMcpAwnsStatusPrivate)) struct _GmMcpAwnsStatusPrivate { - + gchar *status; }; -/* Signals +typedef struct _GmMcpAwnsStatusView { + GmMcpAwnsStatus *package; + GmWorldView *view; +} GmMcpAwnsStatusView; + +/* Signals */ enum { - PROTO + STATUS_CHANGED, NUM_SIGNALS }; -static guint gm_mcp_awns_status_signals[NUM_SIGNALS] = {0};*/ +static guint gm_mcp_awns_status_signals[NUM_SIGNALS] = {0}; void gm_mcp_awns_status_handle_simple(GmMcpPackage *package, gchar *suffix, GList *fields); +void gm_mcp_awns_status_create_view(GmMcpPackage *package, GObject *parent); G_DEFINE_TYPE(GmMcpAwnsStatus, gm_mcp_awns_status, GM_TYPE_MCP_PACKAGE) @@ -40,19 +47,21 @@ gm_mcp_awns_status_class_init(GmMcpAwnsStatusClass *klass) { object_class->finalize = gm_mcp_awns_status_finalize; - /*gm_mcp_awns_status_signals[PROTO] = - g_signal_new("proto", + gm_mcp_awns_status_signals[STATUS_CHANGED] = + g_signal_new("status_changed", G_OBJECT_CLASS_TYPE(object_class), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET(GmMcpAwnsStatusClass, proto), + G_STRUCT_OFFSET(GmMcpAwnsStatusClass, status_changed), NULL, NULL, - g_cclosure_marshal_VOID__VOID, + g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, - 0);*/ + 1, + G_TYPE_STRING); pklass->name = "dns-com-awns-status"; pklass->handle_simple = &gm_mcp_awns_status_handle_simple; - + pklass->create_view = &gm_mcp_awns_status_create_view; + g_type_class_add_private(object_class, sizeof(GmMcpAwnsStatusPrivate)); } @@ -75,8 +84,41 @@ void gm_mcp_awns_status_handle_simple(GmMcpPackage *package, gchar *suffix, GList *fields) { gchar const *text = gm_mcp_find_value(fields, "text"); - GmMcpSession *session = GM_MCP_PACKAGE_SESSION(package); - gm_debug_msg(DEBUG_MCP, "GmMcpAwnsStatus.HandleSimple: set status %s", text); - gm_world_set_status(GM_MCP_SESSION_WORLD(session), text); + gm_debug_msg(DEBUG_MCP, "GmMcpAwnsStatus.HandleSimple: set status %s", + text); + g_signal_emit(package, gm_mcp_awns_status_signals[STATUS_CHANGED], 0, text); } + +/* GmMcpAwnsStatusView */ + +void +on_gm_mcp_awns_status_view_status_changed(GmMcpAwnsStatus *package, + gchar const *status, GmMcpAwnsStatusView *view) { + gm_world_view_update_status(view->view, status); +} + +void +on_gm_mcp_awns_status_view_weak_notify(gpointer data, GObject *obj) { + g_free(data); +} + +void +gm_mcp_awns_status_create_view(GmMcpPackage *package, GObject *parent) { + GmMcpAwnsStatusView *status_view; + + if (GM_IS_WORLD_VIEW(parent)) { + status_view = g_new0(GmMcpAwnsStatusView, 1); + status_view->package = GM_MCP_AWNS_STATUS(package); + status_view->view = GM_WORLD_VIEW(parent); + + g_signal_connect(package, "status_changed", + G_CALLBACK(on_gm_mcp_awns_status_view_status_changed), + status_view); + g_object_weak_ref(G_OBJECT(package), + on_gm_mcp_awns_status_view_weak_notify, status_view); + + } +} + +