summaryrefslogtreecommitdiff
path: root/src/scale.c
diff options
context:
space:
mode:
authorLucas Rocha <lucasr@gnome.org>2005-12-13 04:18:58 +0000
committerLucas Almeida Rocha <lucasr@src.gnome.org>2005-12-13 04:18:58 +0000
commit285cb79bafd2616f2d2dd7eb2ae82527942ef4cc (patch)
tree3707186b904f1a6af837d740e2ebf22a3bb2ec10 /src/scale.c
parent994d2414ccfeedfbfc62b6c60b0393db21244f98 (diff)
new scale dialog for selecting a value from a range (Fixes #322399).
2005-12-13 Lucas Rocha <lucasr@gnome.org> * data/Makefile.am, data/zenity-scale.png, src/Makefile.am, src/main.c, src/option.c, src/option.h, src/scale.c, src/zenity.glade, src/zenity.h: new scale dialog for selecting a value from a range (Fixes #322399).
Diffstat (limited to 'src/scale.c')
-rw-r--r--src/scale.c122
1 files changed, 122 insertions, 0 deletions
diff --git a/src/scale.c b/src/scale.c
new file mode 100644
index 0000000..228995e
--- /dev/null
+++ b/src/scale.c
@@ -0,0 +1,122 @@
+/*
+ * scale.c
+ *
+ * Copyright (C) 2002 Sun Microsystems, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ * Authors: Lucas Rocha <lucasr@gnome.org>
+ */
+
+#include "config.h"
+
+#include <glade/glade.h>
+#include "zenity.h"
+#include "util.h"
+
+static GtkWidget *scale;
+
+static void zenity_scale_value_changed (GtkWidget *widget, gpointer data);
+static void zenity_scale_dialog_response (GtkWidget *widget, int response, gpointer data);
+
+void
+zenity_scale (ZenityData *data, ZenityScaleData *scale_data)
+{
+ GladeXML *glade_dialog;
+ GtkWidget *dialog;
+ GtkWidget *text;
+
+ glade_dialog = zenity_util_load_glade_file ("zenity_scale_dialog");
+ dialog = glade_xml_get_widget (glade_dialog, "zenity_scale_dialog");
+ scale = glade_xml_get_widget (glade_dialog, "zenity_scale_hscale");
+ text = glade_xml_get_widget (glade_dialog, "zenity_scale_text");
+
+ g_signal_connect (G_OBJECT (dialog), "response",
+ G_CALLBACK (zenity_scale_dialog_response), data);
+
+ if (glade_dialog == NULL) {
+ data->exit_code = zenity_util_return_exit_code (ZENITY_ERROR);
+ return;
+ }
+
+ if (scale_data->min_value >= scale_data->max_value) {
+ g_printerr (_("Maximum value must be greater than minimum value.\n"));
+ data->exit_code = zenity_util_return_exit_code (ZENITY_ERROR);
+ return;
+ }
+
+ if (scale_data->value < scale_data->min_value ||
+ scale_data->value > scale_data->max_value) {
+ g_printerr (_("Value out of range.\n"));
+ data->exit_code = zenity_util_return_exit_code (ZENITY_ERROR);
+ return;
+ }
+
+ glade_xml_signal_autoconnect (glade_dialog);
+
+ if (glade_dialog)
+ g_object_unref (glade_dialog);
+
+ if (data->dialog_title)
+ gtk_window_set_title (GTK_WINDOW (dialog), data->dialog_title);
+
+ zenity_util_set_window_icon (dialog, data->window_icon, ZENITY_IMAGE_FULLPATH ("zenity-scale.png"));
+
+ if (data->width > -1 || data->height > -1)
+ gtk_window_set_default_size (GTK_WINDOW (dialog), data->width, data->height);
+
+ if (scale_data->dialog_text)
+ gtk_label_set_markup (GTK_LABEL (text), g_strcompress (scale_data->dialog_text));
+
+ gtk_range_set_value (GTK_RANGE (scale), scale_data->value);
+ gtk_range_set_range (GTK_RANGE (scale), scale_data->min_value, scale_data->max_value);
+ gtk_range_set_increments (GTK_RANGE (scale), scale_data->step, 0);
+
+ if (scale_data->print_partial)
+ g_signal_connect (G_OBJECT (scale), "value-changed",
+ G_CALLBACK (zenity_scale_value_changed), data);
+
+ zenity_util_show_dialog (dialog);
+ gtk_main ();
+}
+
+static void
+zenity_scale_value_changed (GtkWidget *widget, gpointer data)
+{
+ g_print ("%.0f\n", gtk_range_get_value (GTK_RANGE (widget)));
+}
+
+static void
+zenity_scale_dialog_response (GtkWidget *widget, int response, gpointer data)
+{
+ ZenityData *zen_data = data;
+
+ switch (response) {
+ case GTK_RESPONSE_OK:
+ zen_data->exit_code = zenity_util_return_exit_code (ZENITY_OK);
+ g_print ("%.0f\n", gtk_range_get_value (GTK_RANGE (scale)));
+ break;
+
+ case GTK_RESPONSE_CANCEL:
+ zen_data->exit_code = zenity_util_return_exit_code (ZENITY_CANCEL);
+ break;
+
+ default:
+ zen_data->exit_code = zenity_util_return_exit_code (ZENITY_ESC);
+ break;
+ }
+ gtk_main_quit ();
+}