Author: post
Date: 2010-12-19 20:34:41 +0100 (Sun, 19 Dec 2010)
New Revision: 3685
Modified:
trunk/src/gtk-helper.c
trunk/src/rs-toolbox.c
Log:
Add possibility to edit the value of an adjustment by clicking the number.
Modified: trunk/src/gtk-helper.c
===================================================================
--- trunk/src/gtk-helper.c 2010-12-19 17:20:44 UTC (rev 3684)
+++ trunk/src/gtk-helper.c 2010-12-19 19:34:41 UTC (rev 3685)
@@ -648,8 +648,8 @@
if (key)
gtk_label_set_text(label, g_object_get_data(G_OBJECT(label),
key));
- /* No need to propagate this event */
- return TRUE;
+ /* Propagate this event, otherwise tooltip may not be shown */
+ return FALSE;
}
/**
Modified: trunk/src/rs-toolbox.c
===================================================================
--- trunk/src/rs-toolbox.c 2010-12-19 17:20:44 UTC (rev 3684)
+++ trunk/src/rs-toolbox.c 2010-12-19 19:34:41 UTC (rev 3685)
@@ -351,6 +351,59 @@
return TRUE;
}
+static void
+value_transfer_value(GtkSpinButton *spinbutton, gpointer user_data)
+{
+ GtkRange *range = GTK_RANGE(user_data);
+ gdouble value = gtk_spin_button_get_value(spinbutton);
+ gtk_range_set_value(range, value);
+}
+
+static gboolean
+value_enterleaveclick(GtkWidget *widget, GdkEventCrossing *event, gpointer
user_data)
+{
+
+ switch (event->type)
+ {
+ case GDK_ENTER_NOTIFY:
+
gtk_widget_set_state(gtk_bin_get_child(GTK_BIN(widget)), GTK_STATE_PRELIGHT);
+ break;
+ case GDK_LEAVE_NOTIFY:
+
gtk_widget_set_state(gtk_bin_get_child(GTK_BIN(widget)), GTK_STATE_NORMAL);
+ break;
+ case GDK_BUTTON_PRESS:
+ {
+ GtkRange *range = GTK_RANGE(user_data);
+ GtkAdjustment* adjustment =
gtk_range_get_adjustment(range);
+ gdouble value = gtk_range_get_value(range);
+ GtkSpinButton *spinner =
gtk_spin_button_new_with_range(gtk_adjustment_get_lower(adjustment),
+ gtk_adjustment_get_upper(adjustment),
+
gtk_adjustment_get_step_increment(adjustment)/10.0);
+ gtk_spin_button_set_digits(spinner, 3);
+ gtk_spin_button_set_value(spinner, value);
+ GtkWidget *popup = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ GtkWidget *label = gtk_label_new(_("Enter new value:"));
+ GtkWidget *box = gtk_hbox_new(FALSE, 10);
+ gtk_window_set_title(GTK_WINDOW(popup), _("Edit
Value"));
+ gtk_window_set_position(GTK_WINDOW(popup),
GTK_WIN_POS_MOUSE);
+ gtk_box_pack_start(GTK_BOX(box), label, FALSE, TRUE, 5);
+ gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(spinner),
FALSE, TRUE, 0);
+
+ gtk_container_set_border_width(GTK_CONTAINER(box), 10);
+ gtk_container_add(GTK_CONTAINER(popup), box);
+ gtk_widget_show_all(popup);
+
+ g_signal_connect(spinner, "value-changed",
G_CALLBACK(value_transfer_value), range);
+ }
+ default:
+ break;
+ }
+
+ /* Propagate - might result in a hover */
+ return FALSE;
+}
+
+
static GtkRange *
basic_slider(RSToolbox *toolbox, const gint snapshot, GtkTable *table, const
gint row, const BasicSettings *basic)
{
@@ -371,7 +424,7 @@
GtkWidget *scale = gtk_hscale_new_with_range(fspec->minimum,
fspec->maximum, basic->step);
GtkWidget *event = gtk_event_box_new();
GtkWidget *value_label = gtk_label_new(NULL);
- gtk_widget_set_tooltip_text(value_label, g_param_spec_get_blurb(spec));
+ gtk_widget_set_tooltip_text(value_label,
g_strconcat(g_param_spec_get_blurb(spec),_(". Click to edit value"), NULL));
gtk_scale_set_draw_value(GTK_SCALE(scale), FALSE);
/* Set default value */
@@ -396,9 +449,12 @@
gui_label_set_text_printf(GTK_LABEL(value_label), "%.2f",
fspec->default_value);
gtk_label_set_width_chars(GTK_LABEL(value_label), 5);
- gtk_widget_set_events(event, GDK_SCROLL_MASK);
+ gtk_widget_set_events(event,
GDK_SCROLL_MASK|GDK_ENTER_NOTIFY_MASK|GDK_LEAVE_NOTIFY_MASK|GDK_BUTTON_PRESS_MASK);
gtk_container_add(GTK_CONTAINER(event), value_label);
g_signal_connect(event, "scroll-event", G_CALLBACK
(value_label_scroll), GTK_RANGE(scale));
+ g_signal_connect(event, "button-press-event", G_CALLBACK
(value_enterleaveclick), GTK_RANGE(scale));
+ g_signal_connect(event, "enter-notify-event",
G_CALLBACK(value_enterleaveclick), NULL);
+ g_signal_connect(event, "leave-notify-event",
G_CALLBACK(value_enterleaveclick), NULL);
gtk_table_attach(table, label, 0, 1, row, row+1,
GTK_SHRINK|GTK_FILL, GTK_SHRINK, 0, 0);
gtk_table_attach(table, seperator1, 1, 2, row, row+1, GTK_SHRINK,
GTK_FILL, 0, 0);
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit