[Rawstudio-commit] r2215 - trunk/librawstudio
Anders Brander
anders at brander.dk
Sun Feb 22 20:10:45 CET 2009
Author: abrander
Date: 2009-02-22 20:10:44 +0100 (Sun, 22 Feb 2009)
New Revision: 2215
Modified:
trunk/librawstudio/rs-output.c
Log:
Added string support to RSOutput properties.
Modified: trunk/librawstudio/rs-output.c
===================================================================
--- trunk/librawstudio/rs-output.c 2009-02-22 18:45:37 UTC (rev 2214)
+++ trunk/librawstudio/rs-output.c 2009-02-22 19:10:44 UTC (rev 2215)
@@ -24,6 +24,7 @@
static void integer_changed(GtkAdjustment *adjustment, gpointer user_data);
static void boolean_changed(GtkToggleButton *togglebutton, gpointer user_data);
+static void string_changed(GtkEditable *editable, gpointer user_data);
static void
rs_output_class_init(RSOutputClass *klass)
@@ -115,7 +116,7 @@
boolean_changed(GtkToggleButton *togglebutton, gpointer user_data)
{
RSOutput *output = RS_OUTPUT(user_data);
- gboolean value = (gint) gtk_toggle_button_get_active(togglebutton);
+ gboolean value = gtk_toggle_button_get_active(togglebutton);
gchar *name = g_object_get_data(G_OBJECT(togglebutton), "spec-name");
gchar *confpath = g_object_get_data(G_OBJECT(togglebutton), "conf-path");
@@ -126,6 +127,26 @@
rs_conf_set_boolean(confpath, value);
}
+static void
+string_changed(GtkEditable *editable, gpointer user_data)
+{
+ RSOutput *output = RS_OUTPUT(user_data);
+
+ const gchar *value = gtk_entry_get_text(GTK_ENTRY(editable));
+ gchar *name = g_object_get_data(G_OBJECT(editable), "spec-name");
+ gchar *confpath = g_object_get_data(G_OBJECT(editable), "conf-path");
+
+ if (name)
+ g_object_set(output, name, value, NULL);
+
+ if (confpath)
+ rs_conf_set_string(confpath, value);
+}
+
+/* FIXME: This is a fucking stupid hack to get by until config is moved
+ * into librawstudio */
+gchar *rs_conf_get_string(const gchar *name);
+
/**
* Load parameters from config for a RSOutput
* @param output A RSOutput
@@ -165,6 +186,16 @@
g_object_set(output, specs[i]->name, integer, NULL);
break;
}
+ case G_TYPE_STRING:
+ {
+ gchar *str = rs_conf_get_string(confpath);
+ if (str)
+ {
+ g_object_set(output, specs[i]->name, str, NULL);
+ g_free(str);
+ }
+ break;
+ }
default:
g_assert_not_reached();
break;
@@ -255,6 +286,32 @@
gtk_box_pack_start(GTK_BOX(widget), spin, FALSE, TRUE, 0);
break;
}
+ case G_TYPE_STRING:
+ {
+ gchar *str;
+ GtkWidget *label = gtk_label_new(g_param_spec_get_blurb(specs[i]));
+ GtkWidget *entry = gtk_entry_new();
+
+ if (confpath && (str = rs_conf_get_string(confpath)))
+ {
+ g_object_set(output, specs[i]->name, str, NULL);
+ g_free(str);
+ }
+
+ g_object_get(output, specs[i]->name, &str, NULL);
+ if (str)
+ gtk_entry_set_text(GTK_ENTRY(entry), str);
+ /* Are we leaking? */
+
+ g_object_set_data(G_OBJECT(entry), "spec-name", specs[i]->name);
+ g_object_set_data_full(G_OBJECT(entry), "conf-path", confpath, g_free);
+ g_signal_connect(entry, "changed", G_CALLBACK(string_changed), output);
+
+ widget = gtk_hbox_new(FALSE, 2);
+ gtk_box_pack_start(GTK_BOX(widget), label, FALSE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(widget), entry, TRUE, TRUE, 0);
+ break;
+ }
default:
g_assert_not_reached();
break;
More information about the Rawstudio-commit
mailing list