[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