summaryrefslogtreecommitdiff
path: root/src/trg-json-widgets.c
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2011-09-06 22:28:09 +0000
committerGravatar Alan Fitton <ajf@eth0.org.uk>2011-09-06 22:28:09 +0000
commitc8a12c44dd8a44d3f44190fc18d7df5346ef9dbb (patch)
tree02561e43fd19b36053132258580c5e17da859b70 /src/trg-json-widgets.c
parentebeb4eb92a8334eb90f748c3c752c3e09a54a968 (diff)
big refactoring of the trg-remote-preferences and trg-torrent-props to reduce duplicated code. looks much nicer now.
Diffstat (limited to 'src/trg-json-widgets.c')
-rw-r--r--src/trg-json-widgets.c138
1 files changed, 114 insertions, 24 deletions
diff --git a/src/trg-json-widgets.c b/src/trg-json-widgets.c
index 5573602..d3030cb 100644
--- a/src/trg-json-widgets.c
+++ b/src/trg-json-widgets.c
@@ -22,50 +22,140 @@
#include "trg-json-widgets.h"
+void trg_json_widgets_save(GList *list, JsonObject *out)
+{
+ GList *li;
+ for (li = list; li; li = g_list_next(li))
+ {
+ trg_json_widget_desc *wd = (trg_json_widget_desc*)li->data;
+ wd->saveFunc(wd->widget, out, wd->key);
+ }
+}
+
+void trg_json_widget_desc_free(trg_json_widget_desc *wd)
+{
+ g_free(wd->key);
+ g_free(wd);
+}
+
+void trg_json_widget_desc_list_free(GList *list)
+{
+ GList *li;
+ for (li = list; li; li = g_list_next(li))
+ trg_json_widget_desc_free((trg_json_widget_desc*)li->data);
+
+ g_list_free(list);
+}
+
void toggle_active_arg_is_sensitive(GtkToggleButton * b, gpointer data)
{
gtk_widget_set_sensitive(GTK_WIDGET(data),
gtk_toggle_button_get_active(b));
}
-void gtk_spin_button_json_int_out(GtkSpinButton * spin, JsonObject * out)
+GtkWidget *trg_json_widget_check_new(GList **wl, JsonObject *obj, const gchar *key, const gchar *label, GtkWidget *toggleDep)
+{
+ GtkWidget *w = gtk_check_button_new_with_mnemonic(label);
+ trg_json_widget_desc *wd = g_new0(trg_json_widget_desc, 1);
+
+ wd->saveFunc = trg_json_widget_check_save;
+ wd->key = g_strdup(key);
+ wd->widget = w;
+
+ if (toggleDep) {
+ gtk_widget_set_sensitive(w, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggleDep)));
+ g_signal_connect(G_OBJECT(toggleDep), "toggled",
+ G_CALLBACK(toggle_active_arg_is_sensitive), w);
+ }
+
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), json_object_get_boolean_member(obj, key));
+
+ *wl = g_list_append(*wl, wd);
+
+ return w;
+}
+
+GtkWidget *trg_json_widget_entry_new(GList **wl, JsonObject *obj, const gchar *key, GtkWidget *toggleDep)
+{
+ GtkWidget *w = gtk_entry_new();
+ trg_json_widget_desc *wd = g_new0(trg_json_widget_desc, 1);
+
+ wd->saveFunc = trg_json_widget_entry_save;
+ wd->key = g_strdup(key);
+ wd->widget = w;
+
+ if (toggleDep) {
+ gtk_widget_set_sensitive(w, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggleDep)));
+ g_signal_connect(G_OBJECT(toggleDep), "toggled",
+ G_CALLBACK(toggle_active_arg_is_sensitive), w);
+ }
+
+ gtk_entry_set_text(GTK_ENTRY(w), json_object_get_string_member(obj, key));
+
+ *wl = g_list_append(*wl, wd);
+
+ return w;
+}
+
+static GtkWidget *trg_json_widget_spin_common_new(GList **wl, JsonObject *obj,
+ const gchar *key, GtkWidget *toggleDep, trg_json_widget_spin_type type, gint min,
+ gint max, gdouble step)
+{
+ GtkWidget *w = gtk_spin_button_new_with_range(min, max, step);
+ trg_json_widget_desc *wd = g_new0(trg_json_widget_desc, 1);
+
+ if (type == TRG_JSON_WIDGET_SPIN_DOUBLE)
+ wd->saveFunc = trg_json_widget_spin_save_double;
+ else
+ wd->saveFunc = trg_json_widget_spin_save_int;
+
+ wd->key = g_strdup(key);
+ wd->widget = w;
+
+ if (toggleDep) {
+ gtk_widget_set_sensitive(w, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggleDep)));
+ g_signal_connect(G_OBJECT(toggleDep), "toggled",
+ G_CALLBACK(toggle_active_arg_is_sensitive), w);
+ }
+
+ *wl = g_list_append(*wl, wd);
+
+ return w;
+}
+
+GtkWidget *trg_json_widget_spin_new_int(GList **wl, JsonObject *obj, const gchar *key, GtkWidget *toggleDep,
+ gint min, gint max, gint step)
{
- gchar *key = g_object_get_data(G_OBJECT(spin), JSON_OBJECT_KEY);
- json_object_set_int_member(out, key, gtk_spin_button_get_value(spin));
+ GtkWidget *w = trg_json_widget_spin_common_new(wl, obj, key, toggleDep, TRG_JSON_WIDGET_SPIN_INT, min, max, (gdouble)step);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), (gdouble)json_object_get_int_member(obj, key));
+ return w;
}
-void gtk_combo_box_json_string_output(GtkComboBox * c, JsonObject * out)
+GtkWidget *trg_json_widget_spin_new_double(GList **wl, JsonObject *obj, const gchar *key, GtkWidget *toggleDep,
+ gint min, gint max, gdouble step)
{
- gchar *key = g_object_get_data(G_OBJECT(c), JSON_OBJECT_KEY);
- gchar *value = g_object_get_data(G_OBJECT(c), JSON_OBJECT_VALUE);
- json_object_set_string_member(out, key, value);
+ GtkWidget *w = trg_json_widget_spin_common_new(wl, obj, key, toggleDep, TRG_JSON_WIDGET_SPIN_DOUBLE, min, max, step);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), json_object_get_double_member(obj, key));
+ return w;
}
-void gtk_spin_button_json_double_out(GtkSpinButton * spin,
- JsonObject * out)
+void trg_json_widget_check_save(GtkWidget *widget, JsonObject *obj, gchar *key)
{
- gchar *key = g_object_get_data(G_OBJECT(spin), JSON_OBJECT_KEY);
- json_object_set_double_member(out, key,
- gtk_spin_button_get_value(spin));
+ gboolean active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+ json_object_set_boolean_member(obj, key, active);
}
-void gtk_entry_json_output(GtkEntry * e, JsonObject * out)
+void trg_json_widget_entry_save(GtkWidget *widget, JsonObject *obj, gchar *key)
{
- gchar *key = g_object_get_data(G_OBJECT(e), JSON_OBJECT_KEY);
- json_object_set_string_member(out, key, gtk_entry_get_text(e));
+ json_object_set_string_member(obj, key, gtk_entry_get_text(GTK_ENTRY(widget)));
}
-void widget_set_json_key(GtkWidget * w, gchar * key)
+void trg_json_widget_spin_save_int(GtkWidget *widget, JsonObject *obj, gchar *key)
{
- g_object_set_data_full(G_OBJECT(w), JSON_OBJECT_KEY,
- g_strdup(key), g_free);
+ json_object_set_int_member(obj, key, (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(widget)));
}
-gboolean gtk_toggle_button_json_out(GtkToggleButton * button,
- JsonObject * out)
+void trg_json_widget_spin_save_double(GtkWidget *widget, JsonObject *obj, gchar *key)
{
- gboolean active = gtk_toggle_button_get_active(button);
- gchar *key = g_object_get_data(G_OBJECT(button), JSON_OBJECT_KEY);
- json_object_set_boolean_member(out, key, active);
- return active;
+ json_object_set_double_member(obj, key, gtk_spin_button_get_value(GTK_SPIN_BUTTON(widget)));
}