gnome-mud r834 - in trunk: . src
- From: lharris svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-mud r834 - in trunk: . src
- Date: Wed, 25 Mar 2009 22:24:19 +0000 (UTC)
Author: lharris
Date: Wed Mar 25 22:24:18 2009
New Revision: 834
URL: http://svn.gnome.org/viewvc/gnome-mud?rev=834&view=rev
Log:
Add mud-window-prefs.ch
Added:
trunk/src/mud-window-prefs.c
trunk/src/mud-window-prefs.h
Modified:
trunk/ChangeLog
trunk/src/mud-log.c
Modified: trunk/src/mud-log.c
==============================================================================
--- trunk/src/mud-log.c (original)
+++ trunk/src/mud-log.c Wed Mar 25 22:24:18 2009
@@ -1494,8 +1494,8 @@
/* Generate Color Cube */
for(red = 0, i = 16; red < 6; red++)
- for(green = 0; green < 6; green++)
- for(blue = 0; blue < 6; blue++, i++)
+ for(blue = 0; blue < 6; blue++)
+ for(green = 0; green < 6; green++, i++)
{
color_string = g_string_new(NULL);
g_string_printf(color_string,
Added: trunk/src/mud-window-prefs.c
==============================================================================
--- (empty file)
+++ trunk/src/mud-window-prefs.c Wed Mar 25 22:24:18 2009
@@ -0,0 +1,1043 @@
+/* GNOME-Mud - A simple Mud Client
+ * mud-window-prefs.c
+ * Copyright (C) 2005-2009 Les Harris <lharris gnome org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+#include <gconf/gconf.h>
+#include <gconf/gconf-client.h>
+#include <glade/glade-xml.h>
+#include <glib/gprintf.h>
+
+#include "gnome-mud.h"
+#include "mud-profile.h"
+#include "mud-profile-manager.h"
+#include "mud-window.h"
+#include "mud-window-prefs.h"
+
+struct _MudWindowPrefsPrivate
+{
+ MudWindow *parent;
+ MudProfile *profile;
+
+ gchar *name;
+ gchar *disp_name;
+
+ GtkWidget *window;
+ gulong signal;
+ gint notification_count;
+
+ /* Terminal Tab */
+ GtkWidget *echo_check;
+ GtkWidget *keep_check;
+ GtkWidget *div_entry;
+ GtkWidget *encoding_combo;
+ GtkWidget *scroll_check;
+ GtkWidget *lines_spin;
+ GtkWidget *font_button;
+ GtkWidget *fore_button;
+ GtkWidget *back_button;
+ GtkWidget *colors[C_MAX];
+
+ /* Network Tab */
+ GtkWidget *proxy_check;
+ GtkWidget *proxy_entry;
+ GtkWidget *proxy_combo;
+ GtkWidget *msp_check;
+ GtkWidget *charset_check;
+
+ /* Triggers Tab */
+
+ /* Aliases Tab */
+
+ /* Variables Tab */
+
+ /* Timers Tab */
+
+ /* Keybindings Tab */
+};
+
+/* Property Identifiers */
+enum
+{
+ PROP_MUD_WINDOW_PREFS_0,
+ PROP_PARENT,
+ PROP_NAME
+};
+
+/* Create the Type */
+G_DEFINE_TYPE(MudWindowPrefs, mud_window_prefs, G_TYPE_OBJECT);
+
+#define RETURN_IF_CHANGING_PROFILES(self) \
+ if (self->priv->notification_count) return
+
+/* Class Functions */
+static void mud_window_prefs_init (MudWindowPrefs *self);
+static void mud_window_prefs_class_init (MudWindowPrefsClass *klass);
+static void mud_window_prefs_finalize (GObject *object);
+static void mud_window_prefs_constructed(GObject *object);
+static GObject *mud_window_prefs_constructor (GType gtype,
+ guint n_properties,
+ GObjectConstructParam *properties);
+static void mud_window_prefs_set_property(GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void mud_window_prefs_get_property(GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+
+/************************ Window ************************/
+static void mud_window_prefs_construct_window(MudWindowPrefs *self);
+
+// Callbacks
+static gboolean mud_window_prefs_delete_event_cb(GtkWidget *widget,
+ GdkEvent *event,
+ MudWindowPrefs *self);
+static void mud_window_prefs_changed_cb(MudProfile *profile,
+ MudProfileMask *mask,
+ MudWindowPrefs *window);
+
+// Private Methods
+static void mud_window_prefs_set_preferences(MudWindowPrefs *self);
+
+
+/************************ Terminal Tab ************************/
+static void mud_window_prefs_construct_terminal_tab(MudWindowPrefs *self);
+
+// Update Functions
+static void mud_window_prefs_update_commdev(MudWindowPrefs *self,
+ MudPrefs *preferences);
+static void mud_window_prefs_update_scrolloutput(MudWindowPrefs *self,
+ MudPrefs *preferences);
+static void mud_window_prefs_update_encoding_combo(MudWindowPrefs *self,
+ MudPrefs *preferences);
+static void mud_window_prefs_update_keeptext(MudWindowPrefs *self,
+ MudPrefs *preferences);
+static void mud_window_prefs_update_echotext(MudWindowPrefs *self,
+ MudPrefs *preferences);
+static void mud_window_prefs_update_scrollback(MudWindowPrefs *self,
+ MudPrefs *preferences);
+static void mud_window_prefs_update_font(MudWindowPrefs *self,
+ MudPrefs *preferences);
+static void mud_window_prefs_update_foreground(MudWindowPrefs *self,
+ MudPrefs *preferences);
+static void mud_window_prefs_update_background(MudWindowPrefs *self,
+ MudPrefs *preferences);
+static void mud_window_prefs_update_colors(MudWindowPrefs *self,
+ MudPrefs *preferences);
+
+// Set Functions
+
+
+// Callbacks
+static void mud_window_prefs_echo_cb(GtkWidget *widget,
+ MudWindowPrefs *window);
+static void mud_window_prefs_keeptext_cb(GtkWidget *widget,
+ MudWindowPrefs *window);
+static void mud_window_prefs_scrolloutput_cb(GtkWidget *widget,
+ MudWindowPrefs *window);
+static void mud_window_prefs_commdev_cb(GtkWidget *widget,
+ MudWindowPrefs *window);
+static void mud_window_prefs_scrollback_cb(GtkWidget *widget,
+ MudWindowPrefs *window);
+static void mud_window_prefs_font_cb(GtkWidget *widget,
+ MudWindowPrefs *window);
+static void mud_window_prefs_foreground_cb(GtkWidget *widget,
+ MudWindowPrefs *window);
+static void mud_window_prefs_background_cb(GtkWidget *widget,
+ MudWindowPrefs *window);
+static void mud_window_prefs_colors_cb(GtkWidget *widget,
+ MudWindowPrefs *window);
+static void mud_window_prefs_encoding_combo_cb(GtkWidget *widget,
+ MudWindowPrefs *window);
+
+/************************ Network Tab ************************/
+static void mud_window_prefs_construct_network_tab(MudWindowPrefs *self);
+
+// Update Functions
+static void mud_window_prefs_update_proxy_check(MudWindowPrefs *self,
+ MudPrefs *preferences);
+static void mud_window_prefs_update_encoding_check(MudWindowPrefs *self,
+ MudPrefs *preferences);
+static void mud_window_prefs_update_msp_check(MudWindowPrefs *self,
+ MudPrefs *preferences);
+static void mud_window_prefs_update_proxy_combo(MudWindowPrefs *self,
+ MudPrefs *preferences);
+static void mud_window_prefs_update_proxy_entry(MudWindowPrefs *self,
+ MudPrefs *preferences);
+
+static void mud_window_prefs_encoding_check_cb(GtkWidget *widget,
+ MudWindowPrefs *window);
+static void mud_window_prefs_proxy_check_cb(GtkWidget *widget,
+ MudWindowPrefs *window);
+static void mud_window_prefs_proxy_combo_cb(GtkWidget *widget,
+ MudWindowPrefs *window);
+static void mud_window_prefs_proxy_entry_cb(GtkWidget *widget,
+ MudWindowPrefs *window);
+static void mud_window_prefs_msp_check_cb(GtkWidget *widget,
+ MudWindowPrefs *window);
+
+/************************ Triggers Tab ************************/
+static void mud_window_prefs_construct_triggers_tab(MudWindowPrefs *self);
+
+/************************ Aliases Tab ************************/
+static void mud_window_prefs_construct_aliases_tab(MudWindowPrefs *self);
+
+/************************ Variables Tab ************************/
+static void mud_window_prefs_construct_variables_tab(MudWindowPrefs *self);
+
+/************************ Timers Tab ************************/
+static void mud_window_prefs_construct_timers_tab(MudWindowPrefs *self);
+
+/************************ Keybindings Tab ************************/
+static void mud_window_prefs_construct_keybindings_tab(MudWindowPrefs *self);
+
+/* MudWindowPrefs class functions */
+static void
+mud_window_prefs_class_init (MudWindowPrefsClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS(klass);
+
+ /* Override base object constructor */
+ object_class->constructor = mud_window_prefs_constructor;
+ object_class->constructed = mud_window_prefs_constructed;
+
+ /* Override base object's finalize */
+ object_class->finalize = mud_window_prefs_finalize;
+
+ /* Override base object property methods */
+ object_class->set_property = mud_window_prefs_set_property;
+ object_class->get_property = mud_window_prefs_get_property;
+
+ /* Add private data to class */
+ g_type_class_add_private(klass, sizeof(MudWindowPrefsPrivate));
+
+ /* Install Properties */
+ g_object_class_install_property(object_class,
+ PROP_PARENT,
+ g_param_spec_object("parent-window",
+ "Parent MudWindow",
+ "The parent MudWindow object.",
+ MUD_TYPE_WINDOW,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property(object_class,
+ PROP_NAME,
+ g_param_spec_string("name",
+ "Name",
+ "The name of the Profile",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
+}
+
+static void
+mud_window_prefs_init (MudWindowPrefs *self)
+{
+ /* Get our private data */
+ self->priv = MUD_WINDOW_PREFS_GET_PRIVATE(self);
+
+ /* Set Defaults */
+ self->priv->parent = NULL;
+ self->priv->notification_count = 0;
+}
+
+static GObject *
+mud_window_prefs_constructor (GType gtype,
+ guint n_properties,
+ GObjectConstructParam *properties)
+{
+ MudWindowPrefs *self;
+ GObject *obj;
+ MudWindowPrefsClass *klass;
+ GObjectClass *parent_class;
+
+ /* Chain up to parent constructor */
+ klass = MUD_WINDOW_PREFS_CLASS( g_type_class_peek(MUD_TYPE_WINDOW_PREFS) );
+ parent_class = G_OBJECT_CLASS( g_type_class_peek_parent(klass) );
+ obj = parent_class->constructor(gtype, n_properties, properties);
+
+ self = MUD_WINDOW_PREFS(obj);
+
+ if(!self->priv->parent)
+ {
+ g_printf("ERROR: Tried to instantiate MudWindowPrefs without passing parent MudWindow\n");
+ g_error("Tried to instantiate MudWindowPrefs without passing parent MudWindow");
+ }
+
+ if(!self->priv->name)
+ {
+ g_printf("ERROR: Tried to instantiate MudWindowPrefs without passing profile name.\n");
+ g_error("Tried to instantiate MudWindowPrefs without passing parent profile name.");
+ }
+
+ mud_window_prefs_construct_window(self);
+ mud_window_prefs_construct_terminal_tab(self);
+ mud_window_prefs_construct_network_tab(self);
+ mud_window_prefs_construct_triggers_tab(self);
+ mud_window_prefs_construct_aliases_tab(self);
+ mud_window_prefs_construct_variables_tab(self);
+ mud_window_prefs_construct_timers_tab(self);
+ mud_window_prefs_construct_keybindings_tab(self);
+
+ self->priv->profile = mud_profile_manager_get_profile_by_name(self->priv->parent->profile_manager,
+ self->priv->name);
+ if(!self->priv->profile)
+ self->priv->profile = mud_profile_manager_get_profile_by_name(self->priv->parent->profile_manager,
+ "Default");
+
+ self->priv->signal = g_signal_connect(self->priv->profile,
+ "changed",
+ G_CALLBACK(mud_window_prefs_changed_cb),
+ self);
+
+ return obj;
+}
+
+static void
+mud_window_prefs_constructed(GObject *object)
+{
+ MudWindowPrefs *self = MUD_WINDOW_PREFS(object);
+
+ self->priv->notification_count++;
+ mud_window_prefs_set_preferences(self);
+ self->priv->notification_count--;
+
+ gtk_widget_show_all(self->priv->window);
+}
+
+static void
+mud_window_prefs_finalize (GObject *object)
+{
+ MudWindowPrefs *self;
+ GObjectClass *parent_class;
+
+ self = MUD_WINDOW_PREFS(object);
+
+ g_signal_handler_disconnect(self->priv->profile,
+ self->priv->signal);
+
+ g_free(self->priv->name);
+ g_free(self->priv->disp_name);
+
+ parent_class = g_type_class_peek_parent(G_OBJECT_GET_CLASS(object));
+ parent_class->finalize(object);
+}
+
+static void
+mud_window_prefs_set_property(GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ MudWindowPrefs *self;
+ gchar *new_string;
+
+ self = MUD_WINDOW_PREFS(object);
+
+ switch(prop_id)
+ {
+ /* Parent is Construct Only */
+ case PROP_PARENT:
+ self->priv->parent = MUD_WINDOW(g_value_get_object(value));
+ break;
+
+ case PROP_NAME:
+ new_string = g_value_dup_string(value);
+
+ if(!self->priv->name)
+ self->priv->name = g_strdup(new_string);
+ else if( !g_str_equal(self->priv->name, new_string) )
+ {
+ g_free(self->priv->name);
+ self->priv->name = g_strdup(new_string);
+ }
+
+ g_free(new_string);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+mud_window_prefs_get_property(GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ MudWindowPrefs *self;
+
+ self = MUD_WINDOW_PREFS(object);
+
+ switch(prop_id)
+ {
+ case PROP_PARENT:
+ g_value_take_object(value, self->priv->parent);
+ break;
+
+ case PROP_NAME:
+ g_value_set_string(value, self->priv->name);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+/************************ Window ************************/
+static void
+mud_window_prefs_construct_window(MudWindowPrefs *self)
+{
+ GladeXML *glade;
+ GtkWidget *main_window;
+ gint i;
+
+ glade = glade_xml_new(GLADEDIR "/prefs.glade", "preferences_window", NULL);
+
+ self->priv->window = glade_xml_get_widget(glade, "preferences_window");
+
+ self->priv->echo_check = glade_xml_get_widget(glade, "cb_echo");
+ self->priv->keep_check = glade_xml_get_widget(glade, "cb_keep");
+ self->priv->div_entry = glade_xml_get_widget(glade, "entry_commdev");
+ self->priv->encoding_combo = glade_xml_get_widget(glade, "encoding_combo");
+ self->priv->scroll_check = glade_xml_get_widget(glade, "cb_scrollback");
+ self->priv->lines_spin = glade_xml_get_widget(glade, "sb_lines");
+ self->priv->font_button = glade_xml_get_widget(glade, "fp_font");
+ self->priv->fore_button = glade_xml_get_widget(glade, "cb_foreground");
+ self->priv->back_button = glade_xml_get_widget(glade, "cb_background");
+ self->priv->proxy_check = glade_xml_get_widget(glade, "proxy_check");
+ self->priv->proxy_entry = glade_xml_get_widget(glade, "proxy_entry");
+ self->priv->proxy_combo = glade_xml_get_widget(glade, "proxy_combo");
+ self->priv->msp_check = glade_xml_get_widget(glade, "msp_check");
+ self->priv->charset_check = glade_xml_get_widget(glade, "charset_check");
+
+ for(i = 0; i < C_MAX; ++i)
+ {
+ gchar *cwidget = g_strdup_printf("cb%d", i);
+
+ self->priv->colors[i] = glade_xml_get_widget(glade, cwidget);
+
+ g_free(cwidget);
+ }
+
+ g_object_get(self->priv->parent, "window", &main_window, NULL);
+ gtk_window_set_transient_for(GTK_WINDOW(self->priv->window),
+ GTK_WINDOW(main_window));
+
+ self->priv->disp_name = gconf_unescape_key(self->priv->name, -1);
+
+ gtk_window_set_title(GTK_WINDOW(self->priv->window),
+ self->priv->disp_name);
+
+ g_signal_connect(self->priv->window,
+ "delete-event",
+ G_CALLBACK(mud_window_prefs_delete_event_cb),
+ self);
+
+ g_object_unref(glade);
+}
+
+// Callbacks
+static gboolean
+mud_window_prefs_delete_event_cb(GtkWidget *widget,
+ GdkEvent *event,
+ MudWindowPrefs *self)
+{
+ gtk_widget_destroy(self->priv->window);
+ g_object_unref(self);
+
+ return FALSE;
+}
+
+static void
+mud_window_prefs_changed_cb(MudProfile *profile,
+ MudProfileMask *mask,
+ MudWindowPrefs *window)
+{
+ if (mask->EchoText)
+ mud_window_prefs_update_echotext(window, profile->preferences);
+ if (mask->KeepText)
+ mud_window_prefs_update_keeptext(window, profile->preferences);
+ if (mask->ScrollOnOutput)
+ mud_window_prefs_update_scrolloutput(window, profile->preferences);
+ if (mask->CommDev)
+ mud_window_prefs_update_commdev(window, profile->preferences);
+ if (mask->Scrollback)
+ mud_window_prefs_update_scrollback(window, profile->preferences);
+ if (mask->FontName)
+ mud_window_prefs_update_font(window, profile->preferences);
+ if (mask->Foreground)
+ mud_window_prefs_update_foreground(window, profile->preferences);
+ if (mask->Background)
+ mud_window_prefs_update_background(window, profile->preferences);
+ if (mask->Colors)
+ mud_window_prefs_update_colors(window, profile->preferences);
+ if (mask->UseProxy)
+ mud_window_prefs_update_proxy_check(window, profile->preferences);
+ if (mask->UseRemoteEncoding)
+ mud_window_prefs_update_encoding_check(window, profile->preferences);
+ if (mask->ProxyHostname)
+ mud_window_prefs_update_proxy_entry(window, profile->preferences);
+ if (mask->ProxyVersion)
+ mud_window_prefs_update_proxy_combo(window, profile->preferences);
+ if (mask->Encoding)
+ mud_window_prefs_update_encoding_combo(window, profile->preferences);
+ if (mask->UseRemoteDownload)
+ mud_window_prefs_update_msp_check(window, profile->preferences);
+}
+
+// Private Methods
+static void
+mud_window_prefs_set_preferences(MudWindowPrefs *self)
+{
+ // Terminal
+ mud_window_prefs_update_echotext(self, self->priv->profile->preferences);
+ mud_window_prefs_update_keeptext(self, self->priv->profile->preferences);
+ mud_window_prefs_update_scrolloutput(self, self->priv->profile->preferences);
+ mud_window_prefs_update_commdev(self, self->priv->profile->preferences);
+ mud_window_prefs_update_scrollback(self, self->priv->profile->preferences);
+ mud_window_prefs_update_font(self, self->priv->profile->preferences);
+ mud_window_prefs_update_foreground(self, self->priv->profile->preferences);
+ mud_window_prefs_update_background(self, self->priv->profile->preferences);
+ mud_window_prefs_update_colors(self, self->priv->profile->preferences);
+ mud_window_prefs_update_encoding_combo(self, self->priv->profile->preferences);
+
+ // Network
+ mud_window_prefs_update_proxy_check(self, self->priv->profile->preferences);
+ mud_window_prefs_update_proxy_combo(self, self->priv->profile->preferences);
+ mud_window_prefs_update_proxy_entry(self, self->priv->profile->preferences);
+ mud_window_prefs_update_encoding_check(self, self->priv->profile->preferences);
+ mud_window_prefs_update_msp_check(self, self->priv->profile->preferences);
+}
+
+/************************ Terminal Tab ************************/
+static void
+mud_window_prefs_construct_terminal_tab(MudWindowPrefs *self)
+{
+ gint i;
+
+ g_signal_connect(self->priv->echo_check,
+ "toggled",
+ G_CALLBACK(mud_window_prefs_echo_cb),
+ self);
+
+ g_signal_connect(self->priv->keep_check,
+ "toggled",
+ G_CALLBACK(mud_window_prefs_keeptext_cb),
+ self);
+
+ g_signal_connect(self->priv->scroll_check,
+ "toggled",
+ G_CALLBACK(mud_window_prefs_scrolloutput_cb),
+ self);
+
+ g_signal_connect(self->priv->div_entry,
+ "changed",
+ G_CALLBACK(mud_window_prefs_commdev_cb),
+ self);
+
+ g_signal_connect(self->priv->encoding_combo,
+ "changed",
+ G_CALLBACK(mud_window_prefs_encoding_combo_cb),
+ self);
+
+ g_signal_connect(self->priv->lines_spin,
+ "changed",
+ G_CALLBACK(mud_window_prefs_scrollback_cb),
+ self);
+
+ g_signal_connect(self->priv->font_button,
+ "font_set",
+ G_CALLBACK(mud_window_prefs_font_cb),
+ self);
+
+ g_signal_connect(self->priv->fore_button,
+ "color_set",
+ G_CALLBACK(mud_window_prefs_foreground_cb),
+ self);
+
+ g_signal_connect(self->priv->back_button,
+ "color_set",
+ G_CALLBACK(mud_window_prefs_background_cb),
+ self);
+
+ for (i = 0; i < C_MAX; i++)
+ g_signal_connect(self->priv->colors[i],
+ "color_set",
+ G_CALLBACK(mud_window_prefs_colors_cb),
+ self);
+}
+
+// Update Functions
+static void
+mud_window_prefs_update_commdev(MudWindowPrefs *self,
+ MudPrefs *preferences)
+{
+ gtk_entry_set_text(GTK_ENTRY(self->priv->div_entry),
+ preferences->CommDev);
+}
+
+static void
+mud_window_prefs_update_scrolloutput(MudWindowPrefs *self,
+ MudPrefs *preferences)
+{
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(self->priv->scroll_check),
+ preferences->ScrollOnOutput);
+}
+
+static void
+mud_window_prefs_update_encoding_combo(MudWindowPrefs *self,
+ MudPrefs *preferences)
+{
+ GtkTreeModel *encodings =
+ gtk_combo_box_get_model(GTK_COMBO_BOX(self->priv->encoding_combo));
+ GtkTreeIter iter;
+ gboolean valid;
+ gint count = 0;
+
+ valid = gtk_tree_model_get_iter_first(encodings, &iter);
+
+ if(!preferences->Encoding)
+ return;
+
+ while(valid)
+ {
+ gchar *encoding;
+
+ gtk_tree_model_get(encodings, &iter, 0, &encoding, -1);
+
+ if(!encoding)
+ continue;
+
+ if(g_str_equal(encoding, preferences->Encoding))
+ break;
+
+ count++;
+
+ valid = gtk_tree_model_iter_next(encodings, &iter);
+ }
+
+ gtk_combo_box_set_active(GTK_COMBO_BOX(self->priv->encoding_combo),
+ count);
+}
+
+static void
+mud_window_prefs_update_keeptext(MudWindowPrefs *self,
+ MudPrefs *preferences)
+{
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(self->priv->keep_check),
+ preferences->KeepText);
+}
+
+static void
+mud_window_prefs_update_echotext(MudWindowPrefs *self,
+ MudPrefs *preferences)
+{
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(self->priv->echo_check),
+ preferences->EchoText);
+}
+
+static void
+mud_window_prefs_update_scrollback(MudWindowPrefs *self,
+ MudPrefs *preferences)
+{
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(self->priv->lines_spin),
+ preferences->Scrollback);
+}
+
+static void
+mud_window_prefs_update_font(MudWindowPrefs *self,
+ MudPrefs *preferences)
+{
+ gtk_font_button_set_font_name(GTK_FONT_BUTTON(self->priv->font_button),
+ preferences->FontName);
+}
+
+static void
+mud_window_prefs_update_foreground(MudWindowPrefs *self,
+ MudPrefs *preferences)
+{
+ GdkColor color;
+
+ color.red = preferences->Foreground.red;
+ color.green = preferences->Foreground.green;
+ color.blue = preferences->Foreground.blue;
+
+ gtk_color_button_set_color(GTK_COLOR_BUTTON(self->priv->fore_button),
+ &color);
+}
+
+static void
+mud_window_prefs_update_background(MudWindowPrefs *self,
+ MudPrefs *preferences)
+{
+ GdkColor color;
+
+ color.red = preferences->Background.red;
+ color.green = preferences->Background.green;
+ color.blue = preferences->Background.blue;
+
+ gtk_color_button_set_color(GTK_COLOR_BUTTON(self->priv->back_button),
+ &color);
+}
+
+static void
+mud_window_prefs_update_colors(MudWindowPrefs *self,
+ MudPrefs *preferences)
+{
+ gint i;
+ GdkColor color;
+
+ for (i = 0; i < C_MAX; i++)
+ {
+ color.red = preferences->Colors[i].red;
+ color.green = preferences->Colors[i].green;
+ color.blue = preferences->Colors[i].blue;
+
+ gtk_color_button_set_color(GTK_COLOR_BUTTON(self->priv->colors[i]),
+ &color);
+ }
+}
+
+// Callbacks
+static void
+mud_window_prefs_scrolloutput_cb(GtkWidget *widget,
+ MudWindowPrefs *self)
+{
+ gboolean value = GTK_TOGGLE_BUTTON(widget)->active ? TRUE : FALSE;
+ RETURN_IF_CHANGING_PROFILES(self);
+
+ mud_profile_set_scrolloutput(self->priv->profile, value);
+}
+
+static void
+mud_window_prefs_keeptext_cb(GtkWidget *widget,
+ MudWindowPrefs *self)
+{
+ gboolean value = GTK_TOGGLE_BUTTON(widget)->active ? TRUE : FALSE;
+ RETURN_IF_CHANGING_PROFILES(self);
+
+ mud_profile_set_keeptext(self->priv->profile, value);
+}
+
+static void
+mud_window_prefs_echo_cb(GtkWidget *widget,
+ MudWindowPrefs *self)
+{
+ gboolean value = GTK_TOGGLE_BUTTON(widget)->active ? TRUE : FALSE;
+ RETURN_IF_CHANGING_PROFILES(self);
+
+ mud_profile_set_echotext(self->priv->profile, value);
+}
+
+static void
+mud_window_prefs_commdev_cb(GtkWidget *widget,
+ MudWindowPrefs *self)
+{
+
+ const gchar *s = gtk_entry_get_text(GTK_ENTRY(widget));
+ RETURN_IF_CHANGING_PROFILES(self);
+
+ mud_profile_set_commdev(self->priv->profile, s);
+}
+
+static void
+mud_window_prefs_encoding_combo_cb(GtkWidget *widget,
+ MudWindowPrefs *self)
+{
+ const gchar *s = gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget));
+ RETURN_IF_CHANGING_PROFILES(self);
+
+ mud_profile_set_encoding_combo(self->priv->profile, s);
+}
+
+static void
+mud_window_prefs_scrollback_cb(GtkWidget *widget,
+ MudWindowPrefs *self)
+{
+ const gint value = (gint) gtk_spin_button_get_value(GTK_SPIN_BUTTON(widget));
+ RETURN_IF_CHANGING_PROFILES(self);
+
+ mud_profile_set_scrollback(self->priv->profile, value);
+}
+
+static void
+mud_window_prefs_font_cb(GtkWidget *widget,
+ MudWindowPrefs *self)
+{
+ const gchar *fontname = gtk_font_button_get_font_name(GTK_FONT_BUTTON(widget));
+
+ RETURN_IF_CHANGING_PROFILES(self);
+ mud_profile_set_font(self->priv->profile, fontname);
+}
+
+static void
+mud_window_prefs_foreground_cb(GtkWidget *widget,
+ MudWindowPrefs *self)
+{
+ GdkColor color;
+
+ RETURN_IF_CHANGING_PROFILES(self);
+
+ gtk_color_button_get_color(GTK_COLOR_BUTTON(widget), &color);
+ mud_profile_set_foreground(self->priv->profile, color.red, color.green, color.blue);
+}
+
+static void
+mud_window_prefs_background_cb(GtkWidget *widget,
+ MudWindowPrefs *self)
+{
+ GdkColor color;
+
+ RETURN_IF_CHANGING_PROFILES(self);
+
+ gtk_color_button_get_color(GTK_COLOR_BUTTON(widget), &color);
+ mud_profile_set_background(self->priv->profile, color.red, color.green, color.blue);
+}
+
+static void
+mud_window_prefs_colors_cb(GtkWidget *widget,
+ MudWindowPrefs *self)
+{
+ gint i;
+ GdkColor color;
+
+ RETURN_IF_CHANGING_PROFILES(self);
+
+ for (i = 0; i < C_MAX; i++)
+ {
+ if (widget == self->priv->colors[i])
+ {
+ gtk_color_button_get_color(GTK_COLOR_BUTTON(widget), &color);
+
+ mud_profile_set_colors(self->priv->profile, i,
+ color.red,
+ color.green,
+ color.blue);
+ }
+ }
+}
+
+/************************ Network Tab ************************/
+static void
+mud_window_prefs_construct_network_tab(MudWindowPrefs *self)
+{
+ g_signal_connect(self->priv->charset_check,
+ "toggled",
+ G_CALLBACK(mud_window_prefs_encoding_check_cb),
+ self);
+
+ g_signal_connect(self->priv->proxy_check,
+ "toggled",
+ G_CALLBACK(mud_window_prefs_proxy_check_cb),
+ self);
+
+ g_signal_connect(self->priv->proxy_combo,
+ "changed",
+ G_CALLBACK(mud_window_prefs_proxy_combo_cb),
+ self);
+
+ g_signal_connect(self->priv->proxy_entry,
+ "changed",
+ G_CALLBACK(mud_window_prefs_proxy_entry_cb),
+ self);
+
+ g_signal_connect(self->priv->msp_check,
+ "toggled",
+ G_CALLBACK(mud_window_prefs_msp_check_cb),
+ self);
+}
+
+// Update Functions
+static void
+mud_window_prefs_update_proxy_check(MudWindowPrefs *self,
+ MudPrefs *preferences)
+{
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(self->priv->proxy_check),
+ preferences->UseProxy);
+
+}
+
+static void
+mud_window_prefs_update_encoding_check(MudWindowPrefs *self,
+ MudPrefs *preferences)
+{
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(self->priv->charset_check),
+ preferences->UseRemoteEncoding);
+
+}
+
+static void
+mud_window_prefs_update_msp_check(MudWindowPrefs *self,
+ MudPrefs *preferences)
+{
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(self->priv->msp_check),
+ preferences->UseRemoteDownload);
+}
+
+static void
+mud_window_prefs_update_proxy_combo(MudWindowPrefs *self,
+ MudPrefs *preferences)
+{
+ gchar *profile_name;
+ GConfClient *client;
+
+ gchar buf[2048];
+ gchar extra_path[512] = "";
+ gchar *version;
+ gint active;
+ gint current;
+
+ g_object_get(self->priv->profile, "name", &profile_name, NULL);
+
+ if (!g_str_equal(profile_name, "Default"))
+ g_snprintf(extra_path, 512, "profiles/%s/", profile_name);
+ g_free(profile_name);
+
+ g_snprintf(buf, 2048, "/apps/gnome-mud/%s%s", extra_path, "functionality/proxy_version");
+ client = gconf_client_get_default();
+ version = gconf_client_get_string(client, buf, NULL);
+
+ if(version)
+ {
+ current = gtk_combo_box_get_active(GTK_COMBO_BOX(self->priv->proxy_combo));
+
+ if(strcmp(version,"4") == 0)
+ active = 0;
+ else
+ active = 1;
+
+
+ if(current != active)
+ gtk_combo_box_set_active(GTK_COMBO_BOX(self->priv->proxy_combo),
+ active);
+
+ current = gtk_combo_box_get_active(GTK_COMBO_BOX(self->priv->proxy_combo));
+ }
+
+ g_free(version);
+
+ g_object_unref(client);
+}
+
+static void
+mud_window_prefs_update_proxy_entry(MudWindowPrefs *self,
+ MudPrefs *preferences)
+{
+ if(preferences->ProxyHostname)
+ gtk_entry_set_text(GTK_ENTRY(self->priv->proxy_entry),
+ preferences->ProxyHostname);
+
+}
+
+// Callbacks
+static void
+mud_window_prefs_encoding_check_cb(GtkWidget *widget,
+ MudWindowPrefs *self)
+{
+ gboolean value = GTK_TOGGLE_BUTTON(widget)->active ? TRUE : FALSE;
+ RETURN_IF_CHANGING_PROFILES(self);
+
+ mud_profile_set_encoding_check(self->priv->profile, value);
+}
+
+static void
+mud_window_prefs_proxy_check_cb(GtkWidget *widget,
+ MudWindowPrefs *self)
+{
+ gboolean value = GTK_TOGGLE_BUTTON(widget)->active ? TRUE : FALSE;
+
+ gtk_widget_set_sensitive(self->priv->proxy_entry, value);
+ gtk_widget_set_sensitive(self->priv->proxy_combo, value);
+
+ RETURN_IF_CHANGING_PROFILES(self);
+
+ mud_profile_set_proxy_check(self->priv->profile, value);
+}
+
+static void
+mud_window_prefs_msp_check_cb(GtkWidget *widget,
+ MudWindowPrefs *self)
+{
+ gboolean value = GTK_TOGGLE_BUTTON(widget)->active ? TRUE : FALSE;
+ RETURN_IF_CHANGING_PROFILES(self);
+
+ mud_profile_set_msp_check(self->priv->profile, value);
+}
+
+static void
+mud_window_prefs_proxy_combo_cb(GtkWidget *widget,
+ MudWindowPrefs *self)
+{
+ RETURN_IF_CHANGING_PROFILES(self);
+
+ mud_profile_set_proxy_combo(self->priv->profile, GTK_COMBO_BOX(widget));
+}
+
+static void
+mud_window_prefs_proxy_entry_cb(GtkWidget *widget,
+ MudWindowPrefs *self)
+{
+ const gchar *s = gtk_entry_get_text(GTK_ENTRY(widget));
+ RETURN_IF_CHANGING_PROFILES(self);
+
+ if(s)
+ mud_profile_set_proxy_entry(self->priv->profile, s);
+}
+
+/************************ Triggers Tab ************************/
+static void
+mud_window_prefs_construct_triggers_tab(MudWindowPrefs *self)
+{
+}
+
+/************************ Aliases Tab ************************/
+static void
+mud_window_prefs_construct_aliases_tab(MudWindowPrefs *self)
+{
+}
+
+/************************ Variables Tab ************************/
+static void
+mud_window_prefs_construct_variables_tab(MudWindowPrefs *self)
+{
+}
+
+/************************ Timers Tab ************************/
+static void
+mud_window_prefs_construct_timers_tab(MudWindowPrefs *self)
+{
+}
+
+/************************ Keybindings Tab ************************/
+static void
+mud_window_prefs_construct_keybindings_tab(MudWindowPrefs *self)
+{
+
+}
+
Added: trunk/src/mud-window-prefs.h
==============================================================================
--- (empty file)
+++ trunk/src/mud-window-prefs.h Wed Mar 25 22:24:18 2009
@@ -0,0 +1,57 @@
+/* GNOME-Mud - A simple Mud Client
+ * mud-window-prefs.h
+ * Copyright (C) 2005-2009 Les Harris <lharris gnome org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef MUD_WINDOW_PREFS_H
+#define MUD_WINDOW_PREFS_H
+
+G_BEGIN_DECLS
+
+#include <glib.h>
+
+#define MUD_TYPE_WINDOW_PREFS (mud_window_prefs_get_type ())
+#define MUD_WINDOW_PREFS(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), MUD_TYPE_WINDOW_PREFS, MudWindowPrefs))
+#define MUD_WINDOW_PREFS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MUD_TYPE_WINDOW_PREFS, MudWindowPrefsClass))
+#define MUD_IS_WINDOW_PREFS(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), MUD_TYPE_WINDOW_PREFS))
+#define MUD_IS_WINDOW_PREFS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MUD_TYPE_WINDOW_PREFS))
+#define MUD_WINDOW_PREFS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MUD_TYPE_WINDOW_PREFS, MudWindowPrefsClass))
+#define MUD_WINDOW_PREFS_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), MUD_TYPE_WINDOW_PREFS, MudWindowPrefsPrivate))
+
+typedef struct _MudWindowPrefs MudWindowPrefs;
+typedef struct _MudWindowPrefsClass MudWindowPrefsClass;
+typedef struct _MudWindowPrefsPrivate MudWindowPrefsPrivate;
+
+struct _MudWindowPrefsClass
+{
+ GObjectClass parent_class;
+};
+
+struct _MudWindowPrefs
+{
+ GObject parent_instance;
+
+ /*< private >*/
+ MudWindowPrefsPrivate *priv;
+};
+
+GType mud_window_prefs_get_type (void);
+
+G_END_DECLS
+
+#endif // MUD_WINDOW_PREFS_H
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]