gnome-mud r787 - in trunk: . src



Author: lharris
Date: Mon Mar  9 23:35:33 2009
New Revision: 787
URL: http://svn.gnome.org/viewvc/gnome-mud?rev=787&view=rev

Log:
Updated MudLog and MudProfileWindow GObject code.

Modified:
   trunk/ChangeLog
   trunk/src/debug-logger.c
   trunk/src/mud-connection-view.c
   trunk/src/mud-connections.c
   trunk/src/mud-log.c
   trunk/src/mud-log.h
   trunk/src/mud-telnet.c
   trunk/src/mud-tray.c
   trunk/src/mud-window-profile.c
   trunk/src/mud-window-profile.h
   trunk/src/mud-window.c
   trunk/src/mud-window.h

Modified: trunk/src/debug-logger.c
==============================================================================
--- trunk/src/debug-logger.c	(original)
+++ trunk/src/debug-logger.c	Mon Mar  9 23:35:33 2009
@@ -822,6 +822,13 @@
 
         switch(log_level)
         {
+            case G_LOG_LEVEL_ERROR:
+                type = g_string_append(type, _("Error"));
+                color = g_string_append(color, logger->critical_color);
+
+                g_printf(_("ERROR: %s\n"), message);
+                break;
+
             case G_LOG_LEVEL_CRITICAL:
                 type = g_string_append(type, _("Critical"));
                 color = g_string_append(color, logger->critical_color);
@@ -901,6 +908,10 @@
     {
         switch(log_level)
         {
+            case G_LOG_LEVEL_ERROR:
+                g_printf(_("ERROR: %s\n"), message);
+                break;
+
             case G_LOG_LEVEL_CRITICAL:
                 g_printf(_("CRITICAL ERROR: %s\n"), message);
                 break;

Modified: trunk/src/mud-connection-view.c
==============================================================================
--- trunk/src/mud-connection-view.c	(original)
+++ trunk/src/mud-connection-view.c	Mon Mar  9 23:35:33 2009
@@ -38,12 +38,6 @@
 #include "mud-log.h"
 #include "mud-parse-base.h"
 #include "mud-telnet.h"
-#include "mud-telnet-zmp.h"
-#include "mud-telnet-msp.h"
-
-#ifdef ENABLE_MCCP
-#include "mud-telnet-mccp.h"
-#endif
 
 #ifdef ENABLE_GST
 #include "mud-telnet-msp.h"
@@ -1012,7 +1006,9 @@
 
     view->priv->tray = MUD_TRAY(tray);
 
-    view->priv->log = mud_log_new(name);
+    view->priv->log = g_object_new(MUD_TYPE_LOG,
+                                   "mud-name", name,
+                                   NULL);
 
     buf = g_strdup_printf(_("*** Making connection to %s, port %d.\n"),
             view->priv->hostname, view->priv->port);

Modified: trunk/src/mud-connections.c
==============================================================================
--- trunk/src/mud-connections.c	(original)
+++ trunk/src/mud-connections.c	Mon Mar  9 23:35:33 2009
@@ -560,7 +560,10 @@
         g_strfreev(mud_tuple);
         g_object_unref(client);
 
-	return;
+        g_list_foreach(selected, (GFunc)gtk_tree_path_free, NULL);
+        g_list_free(selected);
+
+        return;
     }
 
     g_strfreev(mud_tuple);

Modified: trunk/src/mud-log.c
==============================================================================
--- trunk/src/mud-log.c	(original)
+++ trunk/src/mud-log.c	Mon Mar  9 23:35:33 2009
@@ -37,67 +37,110 @@
 {
     gboolean active;
 
-    gchar *name;
     gchar *filename;
     gchar *dir;
 
     FILE *logfile;
 };
 
-GType mud_log_get_type (void);
+/* Property Identifiers */
+enum
+{
+    PROP_MUD_LOG_0,
+    PROP_MUD_NAME
+};
+
+/* Define the Type */
+G_DEFINE_TYPE(MudLog, mud_log, G_TYPE_OBJECT);
 
+/* Class Functions */
 static void mud_log_init (MudLog *log);
 static void mud_log_class_init (MudLogClass *klass);
 static void mud_log_finalize (GObject *object);
-
-void mud_log_write(MudLog *log, gchar *data, gsize size);
-void mud_log_remove(MudLog *log);
+static GObject *mud_log_constructor (GType gtype,
+                                     guint n_properties,
+                                     GObjectConstructParam *properties);
+static void mud_log_set_property(GObject *object,
+                                 guint prop_id,
+                                 const GValue *value,
+                                 GParamSpec *pspec);
+static void mud_log_get_property(GObject *object,
+                                 guint prop_id,
+                                 GValue *value,
+                                 GParamSpec *pspec);
+
+/* Private Methods */
+static void mud_log_write(MudLog *log, gchar *data, gsize size);
+static void mud_log_remove(MudLog *log);
 
 // MudLog class functions
-GType
-mud_log_get_type (void)
+static void
+mud_log_class_init (MudLogClass *klass)
 {
-    static GType object_type = 0;
-
-    g_type_init();
+    GObjectClass *object_class = G_OBJECT_CLASS(klass);
 
-    if (!object_type)
-    {
-        static const GTypeInfo object_info =
-        {
-            sizeof (MudLogClass),
-            NULL,
-            NULL,
-            (GClassInitFunc) mud_log_class_init,
-            NULL,
-            NULL,
-            sizeof (MudLog),
-            0,
-            (GInstanceInitFunc) mud_log_init,
-        };
+    /* Override base object constructor */
+    object_class->constructor = mud_log_constructor;
 
-        object_type = g_type_register_static(G_TYPE_OBJECT, "MudLog", &object_info, 0);
-    }
+    /* Override base object's finalize */
+    object_class->finalize = mud_log_finalize;
 
-    return object_type;
+    /* Override base object property methods */
+    object_class->set_property = mud_log_set_property;
+    object_class->get_property = mud_log_get_property;
+
+    /* Add private data to class */
+    g_type_class_add_private(klass, sizeof(MudLogPrivate));
+
+    /* Install Properties */
+    g_object_class_install_property(object_class,
+            PROP_MUD_NAME,
+            g_param_spec_string("mud-name",
+                "mud name",
+                "name of mud we are logging",
+                "Unnamed",
+                G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
 }
 
 static void
 mud_log_init (MudLog *log)
 {
-    log->priv = g_new0(MudLogPrivate, 1);
+    log->priv = MUD_LOG_GET_PRIVATE(log);
+
+    /* Set defaults for Public Members */
+    log->mud_name = NULL;
 
+    /* Set defaults for Private Members */
     log->priv->active = FALSE;
     log->priv->logfile = NULL;
-    log->priv->name = NULL;
 }
 
-static void
-mud_log_class_init (MudLogClass *klass)
-{
-    GObjectClass *object_class = G_OBJECT_CLASS(klass);
+static GObject *
+mud_log_constructor (GType gtype,
+                     guint n_properties,
+                     GObjectConstructParam *properties)
+{
+    guint i;
+    MudLog *self;
+    GObject *obj;
 
-    object_class->finalize = mud_log_finalize;
+    MudLogClass *klass;
+    GObjectClass *parent_class;
+
+    /* Chain up to parent constructor */
+    klass = MUD_LOG_CLASS( g_type_class_peek(MUD_TYPE_LOG) );
+    parent_class = G_OBJECT_CLASS( g_type_class_peek_parent(klass) );
+    obj = parent_class->constructor(gtype, n_properties, properties);
+
+    self = MUD_LOG(obj);
+
+    if(!self->mud_name)
+    {
+        g_printf("ERROR: Tried to instantiate MudLog without passing mud name.\n");
+        g_error("Tried to instantiate MudLog without passing mud name.\n");
+    }
+
+    return obj;
 }
 
 static void
@@ -111,17 +154,72 @@
     if(MLog->priv->active)
         mud_log_close(MLog);
 
-    if(MLog->priv->name)
-        g_free(MLog->priv->name);
-
-    g_free(MLog->priv);
+    if(MLog->mud_name)
+        g_free(MLog->mud_name);
 
     parent_class = g_type_class_peek_parent(G_OBJECT_GET_CLASS(object));
     parent_class->finalize(object);
 }
 
-// MudLog Methods
+static void
+mud_log_set_property(GObject *object,
+                     guint prop_id,
+                     const GValue *value,
+                     GParamSpec *pspec)
+{
+    MudLog *self;
+    
+    gchar *new_mud_name;
+
+    self = MUD_LOG(object);
+
+    switch(prop_id)
+    {
+        /* Parent is Construct Only */
+        case PROP_MUD_NAME:
+            new_mud_name = g_value_dup_string(value);
+
+            if(!self->mud_name)
+                self->mud_name = g_strdup(new_mud_name);
+            else if( strcmp(self->mud_name, new_mud_name) != 0)
+            {
+                g_free(self->mud_name);
+                self->mud_name = g_strdup(new_mud_name);
+            }
+
+            g_free(new_mud_name);
+
+            break;
+
+        default:
+            G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+            break;
+    }
+}
+
+static void
+mud_log_get_property(GObject *object,
+                     guint prop_id,
+                     GValue *value,
+                     GParamSpec *pspec)
+{
+    MudLog *self;
+
+    self = MUD_LOG(object);
+
+    switch(prop_id)
+    {
+        case PROP_MUD_NAME:
+            g_value_set_string(value, self->mud_name);
+            break;
+
+        default:
+            G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+            break;
+    }
+}
 
+/* Public Methods */
 void
 mud_log_open(MudLog *log)
 {
@@ -129,7 +227,9 @@
     gchar nameBuf[1024];
     time_t t;
 
-    g_snprintf(buf, 1024, "%s/.gnome-mud/logs/%s", g_get_home_dir(), log->priv->name);
+    g_return_if_fail(MUD_IS_LOG(log));
+
+    g_snprintf(buf, 1024, "%s/.gnome-mud/logs/%s", g_get_home_dir(), log->mud_name);
 
     log->priv->dir = g_strdup(buf);
 
@@ -137,7 +237,7 @@
         if(mkdir(buf, 0777 ) == -1)
             return;
 
-    g_snprintf(nameBuf, 1024, "%s.log", log->priv->name);
+    g_snprintf(nameBuf, 1024, "%s.log", log->mud_name);
 
     log->priv->filename = g_build_path( G_DIR_SEPARATOR_S, log->priv->dir, nameBuf, NULL);
     log->priv->logfile = fopen(log->priv->filename, "a");
@@ -155,34 +255,13 @@
 }
 
 void
-mud_log_write(MudLog *log, gchar *data, gsize size)
-{
-    gchar *stripData;
-    gint stripSize = 0;
-    gsize write_size;
-
-    if(log->priv->logfile == NULL || data == NULL)
-        return;
-
-    stripData = utils_strip_ansi((const gchar *)data);
-    stripSize = strlen(stripData);
-
-    write_size = fwrite(stripData, 1, stripSize, log->priv->logfile);
-
-    if(write_size != stripSize)
-        g_critical(_("Could not write data to log file!"));
-
-    g_free(stripData);
-}
-
-void
 mud_log_close(MudLog *log)
 {
     gchar buf[255];
     time_t t;
 
-    if(log->priv->logfile == NULL)
-        return;
+    g_return_if_fail(MUD_IS_LOG(log));
+    g_return_if_fail(log->priv->logfile != NULL);
 
     time(&t);
     strftime(buf, 255,
@@ -195,42 +274,55 @@
     log->priv->active = FALSE;
 }
 
-void
-mud_log_remove(MudLog *log)
-{
-    if(log->priv->active)
-        mud_log_close(log);
-
-    unlink(log->priv->filename);
-}
-
 gboolean
 mud_log_islogging(MudLog *log)
 {
+    if(!log)
+        return FALSE;
+
     return log->priv->active;
 }
 
-// MudLog Utility Functions
-
 void
 mud_log_write_hook(MudLog *log, gchar *data, gint length)
 {
+    g_return_if_fail(MUD_IS_LOG(log));
+
     if(log->priv->active)
         mud_log_write(log, data, length);
 }
 
-// Instantiate MudLog
-MudLog*
-mud_log_new(gchar *mudName)
+/* Private Methods */
+static void
+mud_log_remove(MudLog *log)
 {
-    MudLog *MLog;
+    g_return_if_fail(MUD_IS_LOG(log));
 
-    if( mudName == NULL)
-        return NULL;
+    if(log->priv->active)
+        mud_log_close(log);
 
-    MLog = g_object_new(MUD_TYPE_LOG, NULL);
+    unlink(log->priv->filename);
+}
 
-    MLog->priv->name = g_strdup(mudName);
+static void
+mud_log_write(MudLog *log, gchar *data, gsize size)
+{
+    gchar *stripData;
+    gint stripSize = 0;
+    gsize write_size;
 
-    return MLog;
+    g_return_if_fail(MUD_IS_LOG(log));
+    g_return_if_fail(log->priv->logfile != NULL);
+    g_return_if_fail(data != NULL);
+
+    stripData = utils_strip_ansi((const gchar *)data);
+    stripSize = strlen(stripData);
+
+    write_size = fwrite(stripData, 1, stripSize, log->priv->logfile);
+
+    if(write_size != stripSize)
+        g_critical(_("Could not write data to log file!"));
+
+    g_free(stripData);
 }
+

Modified: trunk/src/mud-log.h
==============================================================================
--- trunk/src/mud-log.h	(original)
+++ trunk/src/mud-log.h	Mon Mar  9 23:35:33 2009
@@ -30,29 +30,32 @@
 #define MUD_IS_LOG(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), MUD_TYPE_LOG))
 #define MUD_IS_LOG_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), MUD_TYPE_LOG))
 #define MUD_LOG_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), MUD_TYPE_LOG, MudLogClass))
+#define MUD_LOG_GET_PRIVATE(obj)  (G_TYPE_INSTANCE_GET_PRIVATE ((obj), MUD_TYPE_LOG, MudLogPrivate))
 
 typedef struct _MudLog            MudLog;
 typedef struct _MudLogClass       MudLogClass;
 typedef struct _MudLogPrivate     MudLogPrivate;
 
-struct _MudLog
+struct _MudLogClass
 {
-	GObject parent_instance;
-
-	MudLogPrivate *priv;
+    GObjectClass parent_class;
 };
 
-struct _MudLogClass
+struct _MudLog
 {
-	GObjectClass parent_class;
-};
+    GObject parent_instance;
+
+    /*< Private >*/
+    MudLogPrivate *priv;
 
-GType mud_log_get_type (void) G_GNUC_CONST;
+    /*< Public >*/
+    gchar *mud_name;
+};
 
-MudLog *mud_log_new(gchar *mudName);
+GType mud_log_get_type (void);
 
+/*< Public Methods >*/
 void mud_log_write_hook(MudLog *log, gchar *data, gint length);
-
 void mud_log_open(MudLog *log);
 void mud_log_close(MudLog *log);
 gboolean mud_log_islogging(MudLog *log);

Modified: trunk/src/mud-telnet.c
==============================================================================
--- trunk/src/mud-telnet.c	(original)
+++ trunk/src/mud-telnet.c	Mon Mar  9 23:35:33 2009
@@ -581,6 +581,7 @@
                 opt = mud_telnet_get_telopt_string((guchar)telnet->buffer->str[i]);
                 g_log("Telnet", G_LOG_LEVEL_MESSAGE, "Recieved: WONT %s", opt);
                 g_free(opt);
+
                 mud_telnet_handle_negative_nego(
                         telnet,
                         (guchar)telnet->buffer->str[i],
@@ -677,24 +678,24 @@
 
     switch (ch)
     {
-    case TEL_WILL:
-	string = g_string_append(string, "WILL");
-	break;
-    case TEL_WONT:
-	string = g_string_append(string, "WONT");
-	break;
-    case TEL_DO:
-	string = g_string_append(string, "DO");
-	break;
-    case TEL_DONT:
-	string = g_string_append(string, "DONT");
-	break;
-    case TEL_IAC:
-	string = g_string_append(string, "IAC");
-	break;
-    default:
-	string = g_string_append_c(string,ch);
-	break;
+        case TEL_WILL:
+            string = g_string_append(string, "WILL");
+            break;
+        case TEL_WONT:
+            string = g_string_append(string, "WONT");
+            break;
+        case TEL_DO:
+            string = g_string_append(string, "DO");
+            break;
+        case TEL_DONT:
+            string = g_string_append(string, "DONT");
+            break;
+        case TEL_IAC:
+            string = g_string_append(string, "IAC");
+            break;
+        default:
+            string = g_string_append_c(string,ch);
+            break;
     }
 
     ret = g_strdup(string->str);
@@ -710,56 +711,57 @@
 
     switch (ch)
     {
-    case TELOPT_ECHO:
-	string = g_string_append(string, "ECHO");
-	break;
-
-    case TELOPT_TTYPE:
-	string = g_string_append(string, "TTYPE");
-	break;
-
-    case TELOPT_EOR:
-	string = g_string_append(string, "END-OF-RECORD");
-	break;
-
-    case TELOPT_NAWS:
-	string = g_string_append(string, "NAWS");
-	break;
-
-    case TELOPT_CHARSET:
-	string = g_string_append(string, "CHARSET");
-	break;
-
-    case TELOPT_MCCP:
-	string = g_string_append(string, "COMPRESS");
-	break;
-
-    case TELOPT_MCCP2:
-	string = g_string_append(string, "COMPRESS2");
-	break;
-
-    case TELOPT_CLIENT:
-	string = g_string_append(string, "CLIENT");
-	break;
-
-    case TELOPT_CLIENTVER:
-	string = g_string_append(string, "CLIENTVER");
-	break;
-
-    case TELOPT_MSP:
-	string = g_string_append(string, "MSP");
-	break;
-
-    case TELOPT_MXP:
-	string = g_string_append(string, "MXP");
-	break;
-
-    case TELOPT_ZMP:
-	string = g_string_append(string, "ZMP");
-	break;
-
-    default:
-        g_string_printf(string, "Dec: %d Hex: %x Ascii: %c", ch, ch, ch);
+        case TELOPT_ECHO:
+            string = g_string_append(string, "ECHO");
+            break;
+
+        case TELOPT_TTYPE:
+            string = g_string_append(string, "TTYPE");
+            break;
+
+        case TELOPT_EOR:
+            string = g_string_append(string, "END-OF-RECORD");
+            break;
+
+        case TELOPT_NAWS:
+            string = g_string_append(string, "NAWS");
+            break;
+
+        case TELOPT_CHARSET:
+            string = g_string_append(string, "CHARSET");
+            break;
+
+        case TELOPT_MCCP:
+            string = g_string_append(string, "COMPRESS");
+            break;
+
+        case TELOPT_MCCP2:
+            string = g_string_append(string, "COMPRESS2");
+            break;
+
+        case TELOPT_CLIENT:
+            string = g_string_append(string, "CLIENT");
+            break;
+
+        case TELOPT_CLIENTVER:
+            string = g_string_append(string, "CLIENTVER");
+            break;
+
+        case TELOPT_MSP:
+            string = g_string_append(string, "MSP");
+            break;
+
+        case TELOPT_MXP:
+            string = g_string_append(string, "MXP");
+            break;
+
+        case TELOPT_ZMP:
+            string = g_string_append(string, "ZMP");
+            break;
+
+        default:
+            g_string_printf(string, "Dec: %d Hex: %x Ascii: %c", ch, ch, ch);
+            break;
     }
 
     return g_string_free(string, FALSE);
@@ -1114,3 +1116,4 @@
 
     return -1;
 }
+

Modified: trunk/src/mud-tray.c
==============================================================================
--- trunk/src/mud-tray.c	(original)
+++ trunk/src/mud-tray.c	Mon Mar  9 23:35:33 2009
@@ -135,7 +135,10 @@
     self = MUD_TRAY(obj);
 
     if(!self->parent_window)
+    {
+        g_printf("ERROR: Tried to instantiate MudTray without passing parent GtkWindow\n");
         g_error("Tried to instantiate MudTray without passing parent GtkWindow\n");
+    }
 
     mud_tray_create(self);
 

Modified: trunk/src/mud-window-profile.c
==============================================================================
--- trunk/src/mud-window-profile.c	(original)
+++ trunk/src/mud-window-profile.c	Mon Mar  9 23:35:33 2009
@@ -34,198 +34,308 @@
 
 struct _MudProfileWindowPrivate
 {
-	MudWindow *parent;
+    GtkWidget *window;
+    GtkWidget *treeview;
 
-	GtkWidget *window;
-	GtkWidget *treeview;
+    GtkWidget *btnAdd;
+    GtkWidget *btnDelete;
 
-	GtkWidget *btnAdd;
-	GtkWidget *btnDelete;
+    gint CurrSelRow;
+    gchar *CurrSelRowText;
 
-	gint CurrSelRow;
-	gchar *CurrSelRowText;
+    GtkTreeStore *treestore;
+    GtkTreeViewColumn *col;
+    GtkCellRenderer *renderer;
+};
 
-	GtkTreeStore *treestore;
-	GtkTreeViewColumn *col;
-	GtkCellRenderer *renderer;
+/* Model Columns */
+enum
+{
+    NAME_COLUMN,
+    N_COLUMNS
 };
 
+/* Property Identifiers */
 enum
 {
-	NAME_COLUMN,
-	N_COLUMNS
+    PROP_MUD_PROFILE_WINDOW_0,
+    PROP_PARENT_WINDOW
 };
 
-GType mud_profile_window_get_type (void);
+/* Create the Type */
+G_DEFINE_TYPE(MudProfileWindow, mud_profile_window, G_TYPE_OBJECT);
+
+/* Class Functions */
 static void mud_profile_window_init (MudProfileWindow *preferences);
 static void mud_profile_window_class_init (MudProfileWindowClass *klass);
 static void mud_profile_window_finalize (GObject *object);
+static GObject *mud_profile_window_constructor (GType gtype,
+                                                guint n_properties,
+                                                GObjectConstructParam *properties);
+static void mud_profile_window_set_property(GObject *object,
+                                            guint prop_id,
+                                            const GValue *value,
+                                            GParamSpec *pspec);
+static void mud_profile_window_get_property(GObject *object,
+                                            guint prop_id,
+                                            GValue *value,
+                                            GParamSpec *pspec);
 
+/* Callbacks */
 static gint mud_profile_window_close_cb(GtkWidget *widget, MudProfileWindow *profwin);
 static void mud_profile_window_add_cb(GtkWidget *widget, MudProfileWindow *profwin);
 static void mud_profile_window_del_cb(GtkWidget *widget, MudProfileWindow *profwin);
-
-static void mud_profile_window_populate_treeview(MudProfileWindow *profwin);
-
 static gboolean mud_profile_window_tree_select_cb(GtkTreeSelection *selection,
                      			   GtkTreeModel     *model,
                      			   GtkTreePath      *path,
                    			   gboolean        path_currently_selected,
                      			   gpointer          userdata);
+/* Private Methods */
+static void mud_profile_window_populate_treeview(MudProfileWindow *profwin);
 
-// MudProfile class functions
-GType
-mud_profile_window_get_type (void)
-{
-	static GType object_type = 0;
-
-	g_type_init();
-
-	if (!object_type)
-	{
-		static const GTypeInfo object_info =
-		{
-			sizeof (MudProfileWindowClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) mud_profile_window_class_init,
-			NULL,
-			NULL,
-			sizeof (MudProfileWindow),
-			0,
-			(GInstanceInitFunc) mud_profile_window_init,
-		};
-
-		object_type = g_type_register_static(G_TYPE_OBJECT, "MudProfileWindow", &object_info, 0);
-	}
-
-	return object_type;
-}
-
+/* Class Functions */
 static void
-mud_profile_window_init (MudProfileWindow *profwin)
+mud_profile_window_class_init (MudProfileWindowClass *klass)
 {
-	GladeXML *glade;
-
-	profwin->priv = g_new0(MudProfileWindowPrivate, 1);
-
-	glade = glade_xml_new(GLADEDIR "/prefs.glade", "profiles_window", NULL);
-
-	profwin->priv->window = glade_xml_get_widget(glade, "profiles_window");
+    GObjectClass *object_class = G_OBJECT_CLASS(klass);
 
-	profwin->priv->btnAdd = glade_xml_get_widget(glade, "btnAdd");
-	profwin->priv->btnDelete = glade_xml_get_widget(glade, "btnDelete");
+    /* Override base object constructor */
+    object_class->constructor = mud_profile_window_constructor;
 
-	profwin->priv->treeview = glade_xml_get_widget(glade, "profilesView");
-  	profwin->priv->treestore = gtk_tree_store_new(N_COLUMNS, G_TYPE_STRING);
+    /* Override base object's finalize */
+    object_class->finalize = mud_profile_window_finalize;
 
-  	gtk_tree_view_set_model(GTK_TREE_VIEW(profwin->priv->treeview), GTK_TREE_MODEL(profwin->priv->treestore));
+    /* Override base object property methods */
+    object_class->set_property = mud_profile_window_set_property;
+    object_class->get_property = mud_profile_window_get_property;
+
+    /* Add private data to class */
+    g_type_class_add_private(klass, sizeof(MudProfileWindowPrivate));
+
+    /* Install Properties */
+    g_object_class_install_property(object_class,
+            PROP_PARENT_WINDOW,
+            g_param_spec_object("parent-window",
+                "parent gtk window",
+                "the gtk window parent of this window",
+                TYPE_MUD_WINDOW,
+                G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
+}
 
-  	gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(profwin->priv->treeview), TRUE);
-  	gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(profwin->priv->treeview), FALSE);
-  	profwin->priv->col = gtk_tree_view_column_new();
+static void
+mud_profile_window_init (MudProfileWindow *self)
+{
+    /* Get our private data */
+    self->priv = MUD_PROFILE_WINDOW_GET_PRIVATE(self);
 
-  	gtk_tree_view_append_column(GTK_TREE_VIEW(profwin->priv->treeview), profwin->priv->col);
-  	profwin->priv->renderer = gtk_cell_renderer_text_new();
-  	gtk_tree_view_column_pack_start(profwin->priv->col, profwin->priv->renderer, TRUE);
-  	gtk_tree_view_column_add_attribute(profwin->priv->col, profwin->priv->renderer, "text", NAME_COLUMN);
+    /* set public members to defaults */
+    self->parent_window = NULL;
+}
 
-  	gtk_tree_selection_set_select_function(gtk_tree_view_get_selection(GTK_TREE_VIEW(profwin->priv->treeview)), mud_profile_window_tree_select_cb, profwin, NULL);
+static GObject *
+mud_profile_window_constructor (GType gtype,
+                                guint n_properties,
+                                GObjectConstructParam *properties)
+{
+    guint i;
+    MudProfileWindow *profwin;
+    GObject *obj;
+
+    MudProfileWindowClass *klass;
+    GObjectClass *parent_class;
+
+    GladeXML *glade;
+    GtkWindow *main_window;
+
+    /* Chain up to parent constructor */
+    klass = MUD_PROFILE_WINDOW_CLASS( g_type_class_peek(MUD_TYPE_PROFILE_WINDOW) );
+    parent_class = G_OBJECT_CLASS( g_type_class_peek_parent(klass) );
+    obj = parent_class->constructor(gtype, n_properties, properties);
+
+    profwin = MUD_PROFILE_WINDOW(obj);
+
+    if(!profwin->parent_window)
+    {
+        g_printf("ERROR: Tried to instantiate MudProfileWindow without passing parent GtkWindow\n");
+        g_error("Tried to instantiate MudProfileWindow without passing parent GtkWindow\n");
+    }
+
+    glade = glade_xml_new(GLADEDIR "/prefs.glade", "profiles_window", NULL);
+
+    profwin->priv->window = glade_xml_get_widget(glade, "profiles_window");
+
+    profwin->priv->btnAdd = glade_xml_get_widget(glade, "btnAdd");
+    profwin->priv->btnDelete = glade_xml_get_widget(glade, "btnDelete");
+
+    profwin->priv->treeview = glade_xml_get_widget(glade, "profilesView");
+    profwin->priv->treestore = gtk_tree_store_new(N_COLUMNS, G_TYPE_STRING);
+
+    g_object_set(profwin->priv->treeview,
+                 "model", GTK_TREE_MODEL(profwin->priv->treestore),
+                 "rules-hint", TRUE,
+                 "headers-visible", FALSE,
+                 NULL);
+    
+    profwin->priv->col = gtk_tree_view_column_new();
+
+    gtk_tree_view_append_column(GTK_TREE_VIEW(profwin->priv->treeview),
+                                profwin->priv->col);
+    
+    profwin->priv->renderer = gtk_cell_renderer_text_new();
+    
+    gtk_tree_view_column_pack_start(profwin->priv->col,
+                                   profwin->priv->renderer,
+                                   TRUE);
+
+    gtk_tree_view_column_add_attribute(profwin->priv->col,
+                                       profwin->priv->renderer,
+                                       "text",
+                                       NAME_COLUMN);
+
+    gtk_tree_selection_set_select_function(
+            gtk_tree_view_get_selection(GTK_TREE_VIEW(profwin->priv->treeview)),
+            mud_profile_window_tree_select_cb,
+            profwin, NULL);
+
+    mud_profile_window_populate_treeview(profwin);
+
+    g_signal_connect(profwin->priv->window, "destroy",
+            G_CALLBACK(mud_profile_window_close_cb),
+            profwin);
+    g_signal_connect(profwin->priv->btnAdd, "clicked",
+            G_CALLBACK(mud_profile_window_add_cb),
+            profwin);
+    g_signal_connect(profwin->priv->btnDelete, "clicked",
+            G_CALLBACK(mud_profile_window_del_cb),
+            profwin);
+
+    g_object_get(profwin->parent_window, "window", &main_window, NULL);
+
+    gtk_window_set_transient_for(
+            GTK_WINDOW(profwin->priv->window),
+            main_window);
 
-	mud_profile_window_populate_treeview(profwin);
+    gtk_widget_show_all(profwin->priv->window);
 
-	g_signal_connect(profwin->priv->window, "destroy",
-			G_CALLBACK(mud_profile_window_close_cb),
-			profwin);
-	g_signal_connect(profwin->priv->btnAdd, "clicked",
-			G_CALLBACK(mud_profile_window_add_cb),
-			profwin);
-	g_signal_connect(profwin->priv->btnDelete, "clicked",
-			G_CALLBACK(mud_profile_window_del_cb),
-		       	profwin);
+    g_object_unref(glade);
 
-	g_object_unref(glade);
+    return obj;
 }
 
 static void
-mud_profile_window_class_init (MudProfileWindowClass *klass)
+mud_profile_window_finalize (GObject *object)
 {
-	GObjectClass *object_class = G_OBJECT_CLASS(klass);
+    MudProfileWindow *profwin;
+    GObjectClass *parent_class;
 
-	object_class->finalize = mud_profile_window_finalize;
+    profwin = MUD_PROFILE_WINDOW(object);
+
+    parent_class = g_type_class_peek_parent(G_OBJECT_GET_CLASS(object));
+    parent_class->finalize(object);
 }
 
 static void
-mud_profile_window_finalize (GObject *object)
-{
-	MudProfileWindow *profwin;
-	GObjectClass *parent_class;
-
-	profwin = MUD_PROFILE_WINDOW(object);
-
-	g_free(profwin->priv);
+mud_profile_window_set_property(GObject *object,
+                                guint prop_id,
+                                const GValue *value,
+                                GParamSpec *pspec)
+{
+    MudProfileWindow *self;
+
+    self = MUD_PROFILE_WINDOW(object);
+
+    switch(prop_id)
+    {
+        /* Parent is Construct Only */
+        case PROP_PARENT_WINDOW:
+            self->parent_window = MUD_WINDOW(g_value_get_object(value));
+            break;
+
+        default:
+            G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+            break;
+    }
+}
 
-	parent_class = g_type_class_peek_parent(G_OBJECT_GET_CLASS(object));
-	parent_class->finalize(object);
+static void
+mud_profile_window_get_property(GObject *object,
+                                guint prop_id,
+                                GValue *value,
+                                GParamSpec *pspec)
+{
+    MudProfileWindow *self;
+
+    self = MUD_PROFILE_WINDOW(object);
+
+    switch(prop_id)
+    {
+        case PROP_PARENT_WINDOW:
+            g_value_take_object(value, self->parent_window);
+            break;
+
+        default:
+            G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+            break;
+    }
 }
 
-// MudProfileWindow Callbacks
+/* Callbacks */
 static void
 mud_profile_window_add_cb(GtkWidget *widget, MudProfileWindow *profwin)
 {
-	GladeXML *glade;
-	GtkWidget *window;
-	GtkWidget *entry_profile;
-	gchar *profile;
-	gint result;
-	MudProfile *def, *prof;
-
-	glade = glade_xml_new(GLADEDIR "/prefs.glade", "newprofile_dialog", NULL);
-	window = glade_xml_get_widget(glade, "newprofile_dialog");
-
-	gtk_window_set_transient_for(
-			GTK_WINDOW(window),
-			GTK_WINDOW(profwin->priv->window));
-
-	entry_profile = glade_xml_get_widget(glade, "entry_profile");
-
-	result = gtk_dialog_run(GTK_DIALOG(window));
-	if (result == GTK_RESPONSE_OK)
-	{
-		profile = utils_remove_whitespace((gchar *)gtk_entry_get_text(GTK_ENTRY(entry_profile)));
-
-		def = get_profile("Default");
-		prof = mud_profile_new((const gchar *)profile);
-
-		mud_profile_copy_preferences(def, prof);
-
-		mud_profile_window_populate_treeview(profwin);
-		mud_window_populate_profiles_menu(profwin->priv->parent);
-	}
+    GladeXML *glade;
+    GtkWidget *window;
+    GtkWidget *entry_profile;
+    gchar *profile;
+    gint result;
+    MudProfile *def, *prof;
+
+    glade = glade_xml_new(GLADEDIR "/prefs.glade", "newprofile_dialog", NULL);
+    window = glade_xml_get_widget(glade, "newprofile_dialog");
+
+    gtk_window_set_transient_for(
+            GTK_WINDOW(window),
+            GTK_WINDOW(profwin->priv->window));
+
+    entry_profile = glade_xml_get_widget(glade, "entry_profile");
+
+    result = gtk_dialog_run(GTK_DIALOG(window));
+    if (result == GTK_RESPONSE_OK)
+    {
+        profile = utils_remove_whitespace((gchar *)gtk_entry_get_text(GTK_ENTRY(entry_profile)));
+
+        def = get_profile("Default");
+        prof = mud_profile_new((const gchar *)profile);
+
+        mud_profile_copy_preferences(def, prof);
+
+        mud_profile_window_populate_treeview(profwin);
+        mud_window_populate_profiles_menu(profwin->parent_window);
+    }
 
-	gtk_widget_destroy(window);
-	g_object_unref(glade);
+    gtk_widget_destroy(window);
+    g_object_unref(glade);
 }
 
 static void
 mud_profile_window_del_cb(GtkWidget *widget, MudProfileWindow *profwin)
 {
 
-	if(strcmp("Default", profwin->priv->CurrSelRowText) != 0)
-	{
-		mud_profile_delete(profwin->priv->CurrSelRowText);
-
-		mud_profile_window_populate_treeview(profwin);
-		mud_window_populate_profiles_menu(profwin->priv->parent);
-	}
+    if(strcmp("Default", profwin->priv->CurrSelRowText) != 0)
+    {
+        mud_profile_delete(profwin->priv->CurrSelRowText);
+
+        mud_profile_window_populate_treeview(profwin);
+        mud_window_populate_profiles_menu(profwin->parent_window);
+    }
 }
 
 static gint
 mud_profile_window_close_cb(GtkWidget *widget, MudProfileWindow *profwin)
 {
-	g_object_unref(profwin);
+    g_object_unref(profwin);
 
-	return TRUE;
+    return TRUE;
 }
 
 static gboolean
@@ -235,57 +345,51 @@
                    	          gboolean        path_currently_selected,
                      		  gpointer          userdata)
 {
-	GtkTreeIter iter;
-	MudProfileWindow *profwin = (MudProfileWindow *)userdata;
+    GtkTreeIter iter;
+    MudProfileWindow *profwin = (MudProfileWindow *)userdata;
 
-	if (gtk_tree_model_get_iter(model, &iter, path))
-	{
-		gtk_tree_model_get(model, &iter, 0, &profwin->priv->CurrSelRowText, -1);
+    if (gtk_tree_model_get_iter(model, &iter, path))
+    {
+        gtk_tree_model_get(model, &iter, 0, &profwin->priv->CurrSelRowText, -1);
 
-		profwin->priv->CurrSelRow = (gtk_tree_path_get_indices(path))[0];
+        profwin->priv->CurrSelRow = (gtk_tree_path_get_indices(path))[0];
 
-		gtk_widget_set_sensitive(profwin->priv->btnDelete, TRUE);
+        gtk_widget_set_sensitive(profwin->priv->btnDelete, TRUE);
 
-	}
+    }
 
-	return TRUE;
+    return TRUE;
 }
 
-// MudProfileWindow Util Functions
+/* Private Methods */
 static void
 mud_profile_window_populate_treeview(MudProfileWindow *profwin)
 {
-	const GList *profiles;
-	GList *entry;
-	GtkTreeStore* store = GTK_TREE_STORE(profwin->priv->treestore);
-	GtkTreeIter iter;
+    const GList *profiles, *entry;
+    GtkTreeStore* store;
+    GtkTreeIter iter;
 
-	gtk_tree_store_clear(store);
+    g_return_if_fail(MUD_IS_PROFILE_WINDOW(profwin));
 
-	gtk_widget_set_sensitive(profwin->priv->btnDelete, FALSE);
+    store = GTK_TREE_STORE(profwin->priv->treestore);
 
-	profiles = mud_profile_get_profiles();
+    gtk_tree_store_clear(store);
 
-	for (entry = (GList *)profiles; entry != NULL; entry = g_list_next(entry))
-	{
-		gtk_tree_store_append(store, &iter, NULL);
-		gtk_tree_store_set(store, &iter, NAME_COLUMN,(gchar *)MUD_PROFILE(entry->data)->name, -1);
-	}
-}
+    gtk_widget_set_sensitive(profwin->priv->btnDelete, FALSE);
 
-// Instantiate MudProfileWindow
-MudProfileWindow*
-mud_window_profile_new(MudWindow *window)
-{
-	MudProfileWindow *profwin;
+    profiles = mud_profile_get_profiles();
 
-	profwin = g_object_new(MUD_TYPE_PROFILE_WINDOW, NULL);
-	profwin->priv->parent = window;
+    entry = profiles;
+    while(entry)
+    {
+        MudProfile *profile = MUD_PROFILE(entry->data);
 
-	gtk_window_set_transient_for(
-			GTK_WINDOW(profwin->priv->window),
-			GTK_WINDOW(mud_window_get_window(profwin->priv->parent)));
-	gtk_widget_show_all(profwin->priv->window);
+        gtk_tree_store_append(store, &iter, NULL);
+        gtk_tree_store_set(store, &iter,
+                           NAME_COLUMN, profile->name,
+                           -1);
 
-	return profwin;
+        entry = g_list_next(entry);
+    }
 }
+

Modified: trunk/src/mud-window-profile.h
==============================================================================
--- trunk/src/mud-window-profile.h	(original)
+++ trunk/src/mud-window-profile.h	Mon Mar  9 23:35:33 2009
@@ -23,6 +23,7 @@
 G_BEGIN_DECLS
 
 #include <gconf/gconf-client.h>
+#include "mud-window.h"
 
 #define MUD_TYPE_PROFILE_WINDOW              (mud_profile_window_get_type ())
 #define MUD_PROFILE_WINDOW(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), MUD_TYPE_PROFILE_WINDOW, MudProfileWindow))
@@ -30,24 +31,29 @@
 #define MUD_IS_PROFILE_WINDOW(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), MUD_TYPE_PROFILE_WINDOW))
 #define MUD_IS_PROFILE_WINDOW_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), MUD_TYPE_PROFILE_WINDOW))
 #define MUD_PROFILE_WINDOW_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), MUD_TYPE_PROFILE_WINDOW, MudProfileWindowClass))
+#define MUD_PROFILE_WINDOW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), MUD_TYPE_PROFILE_WINDOW, MudProfileWindowPrivate))
 
 typedef struct _MudProfileWindow            MudProfileWindow;
 typedef struct _MudProfileWindowClass       MudProfileWindowClass;
 typedef struct _MudProfileWindowPrivate     MudProfileWindowPrivate;
 
+struct _MudProfileWindowClass
+{
+	GObjectClass parent_class;
+};
+
 struct _MudProfileWindow
 {
 	GObject parent_instance;
 
+        /*< Private >*/
 	MudProfileWindowPrivate *priv;
-};
 
-struct _MudProfileWindowClass
-{
-	GObjectClass parent_class;
+        /*< Public >*/
+        MudWindow *parent_window;
 };
 
-GType mud_profile_window_get_type (void) G_GNUC_CONST;
+GType mud_profile_window_get_type (void);
 
 MudProfileWindow *mud_window_profile_new(MudWindow *window);
 

Modified: trunk/src/mud-window.c
==============================================================================
--- trunk/src/mud-window.c	(original)
+++ trunk/src/mud-window.c	Mon Mar  9 23:35:33 2009
@@ -626,7 +626,10 @@
 static void
 mud_window_profiles_cb(GtkWidget *widget, MudWindow *self)
 {
-    mud_window_profile_new(self);
+    MudProfileWindow *profile_window =
+        g_object_new(MUD_TYPE_PROFILE_WINDOW,
+                     "parent-window", self,
+                     NULL);
 }
 
 static void
@@ -752,14 +755,8 @@
         file = fopen(filename, "w");
 
         if(!file)
-        {
-            GtkWidget *errDialog;
-
-            errDialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Could not save the file in specified location!"));
-
-            gtk_dialog_run(GTK_DIALOG(errDialog));
-            gtk_widget_destroy(errDialog);
-        }
+            utils_error_message(self->window, _("Error Saving Buffer"),
+                    "%s", _("Could not save the file in specified location!"));
         else
         {
             gchar *bufferText;
@@ -1005,15 +1002,6 @@
                      self);
 }
     
-GtkWidget*
-mud_window_get_window(MudWindow *self)
-{
-    if(!IS_MUD_WINDOW(self))
-        return NULL;
-
-    return GTK_WIDGET(self->window);
-}
-
 void
 mud_window_add_connection_view(MudWindow *self, GObject *cview, gchar *tabLbl)
 {

Modified: trunk/src/mud-window.h
==============================================================================
--- trunk/src/mud-window.h	(original)
+++ trunk/src/mud-window.h	Mon Mar  9 23:35:33 2009
@@ -62,7 +62,6 @@
 void mud_window_profile_menu_set_active(MudWindow *window, gchar *name);
 void mud_window_close_current_window(MudWindow *window);
 void mud_window_disconnected(MudWindow *window);
-GtkWidget* mud_window_get_window(MudWindow *window);
 
 G_END_DECLS
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]