X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fmissing-val-dialog.c;h=7e04b8548e02fb6cd02602645e2b8fbd99287b59;hb=ac5fc2c85d86f1a14cdea0a215666ab39b44a1dc;hp=3ffcda07855fe4283a8ce7dc80503c80b9c01139;hpb=cf63d499efd5e6ca3a7dcc6386b3b87bd31bfda9;p=pspp
diff --git a/src/ui/gui/missing-val-dialog.c b/src/ui/gui/missing-val-dialog.c
index 3ffcda0785..7e04b8548e 100644
--- a/src/ui/gui/missing-val-dialog.c
+++ b/src/ui/gui/missing-val-dialog.c
@@ -1,21 +1,18 @@
-/*
- PSPPIRE --- A Graphical User Interface for PSPP
- Copyright (C) 2005, 2006 Free Software Foundation
+/* PSPPIRE - a graphical user interface for PSPP.
+ Copyright (C) 2005, 2006, 2009 Free Software Foundation
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
- This program 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 General Public License for more details.
+ This program 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 General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- 02110-1301, USA. */
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see . */
/* This module describes the behaviour of the Missing Values dialog box,
used for input of the missing values in the variable sheet */
@@ -27,6 +24,7 @@
#include "helper.h"
+#include
#include "missing-val-dialog.h"
#include
#include
@@ -34,14 +32,13 @@
#include
-#include
#include
/* A simple (sub) dialog box for displaying user input errors */
static void
-err_dialog(const gchar *msg, GtkWindow *window)
+err_dialog (const gchar *msg, GtkWindow *window)
{
GtkWidget *hbox ;
GtkWidget *label = gtk_label_new (msg);
@@ -57,7 +54,7 @@ err_dialog(const gchar *msg, GtkWindow *window)
NULL);
- GtkWidget *icon = gtk_image_new_from_stock(GTK_STOCK_DIALOG_ERROR,
+ GtkWidget *icon = gtk_image_new_from_stock (GTK_STOCK_DIALOG_ERROR,
GTK_ICON_SIZE_DIALOG);
g_signal_connect_swapped (dialog,
@@ -65,13 +62,13 @@ err_dialog(const gchar *msg, GtkWindow *window)
G_CALLBACK (gtk_widget_destroy),
dialog);
- hbox = gtk_hbox_new(FALSE, 10);
+ hbox = gtk_hbox_new (FALSE, 10);
- gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox),
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox),
hbox);
- gtk_box_pack_start(GTK_BOX(hbox), icon, TRUE, FALSE, 10);
- gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 10);
+ gtk_box_pack_start (GTK_BOX (hbox), icon, TRUE, FALSE, 10);
+ gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 10);
gtk_widget_show_all (dialog);
}
@@ -79,13 +76,11 @@ err_dialog(const gchar *msg, GtkWindow *window)
/* Callback which occurs when the OK button is clicked */
static void
-missing_val_dialog_accept(GtkWidget *w, gpointer data)
+missing_val_dialog_accept (GtkWidget *w, gpointer data)
{
struct missing_val_dialog *dialog = data;
- const struct fmt_spec *write_spec = var_get_write_format (dialog->pv);
-
- if ( gtk_toggle_button_get_active(dialog->button_discrete))
+ if ( gtk_toggle_button_get_active (dialog->button_discrete))
{
gint nvals = 0;
gint badvals = 0;
@@ -94,84 +89,96 @@ missing_val_dialog_accept(GtkWidget *w, gpointer data)
for(i = 0 ; i < 3 ; ++i )
{
gchar *text =
- g_strdup(gtk_entry_get_text(GTK_ENTRY(dialog->mv[i])));
+ g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->mv[i])));
union value v;
- if ( !text || strlen(g_strstrip(text)) == 0 )
+ if ( !text || strlen (g_strstrip (text)) == 0 )
{
- g_free(text);
+ g_free (text);
continue;
}
- if ( text_to_value(text, &v, *write_spec))
+ if ( text_to_value (text, dialog->dict, dialog->pv, &v))
{
nvals++;
mv_add_value (&dialog->mvl, &v);
}
else
badvals++;
- g_free(text);
+ g_free (text);
+ value_destroy (&v, var_get_width (dialog->pv));
}
if ( nvals == 0 || badvals > 0 )
{
- err_dialog(_("Incorrect value for variable type"),
- GTK_WINDOW(dialog->window));
+ err_dialog (_("Incorrect value for variable type"),
+ GTK_WINDOW (dialog->window));
return ;
}
}
- if (gtk_toggle_button_get_active(dialog->button_range))
+ if (gtk_toggle_button_get_active (dialog->button_range))
{
gchar *discrete_text ;
union value low_val ;
union value high_val;
- const gchar *low_text = gtk_entry_get_text(GTK_ENTRY(dialog->low));
- const gchar *high_text = gtk_entry_get_text(GTK_ENTRY(dialog->high));
+ const gchar *low_text = gtk_entry_get_text (GTK_ENTRY (dialog->low));
+ const gchar *high_text = gtk_entry_get_text (GTK_ENTRY (dialog->high));
- if ( text_to_value(low_text, &low_val, *write_spec)
+ if ( text_to_value (low_text, dialog->dict, dialog->pv, &low_val)
&&
- text_to_value(high_text, &high_val, *write_spec) )
+ text_to_value (high_text, dialog->dict, dialog->pv, &high_val))
{
if ( low_val.f > high_val.f )
{
- err_dialog(_("Incorrect range specification"),
- GTK_WINDOW(dialog->window));
+ err_dialog (_("Incorrect range specification"),
+ GTK_WINDOW (dialog->window));
+ value_destroy (&low_val, var_get_width (dialog->pv));
+ value_destroy (&high_val, var_get_width (dialog->pv));
return ;
}
}
else
{
- err_dialog(_("Incorrect range specification"),
- GTK_WINDOW(dialog->window));
+ err_dialog (_("Incorrect range specification"),
+ GTK_WINDOW (dialog->window));
+ value_destroy (&low_val, var_get_width (dialog->pv));
+ value_destroy (&high_val, var_get_width (dialog->pv));
return;
}
discrete_text =
- g_strdup(gtk_entry_get_text(GTK_ENTRY(dialog->discrete)));
+ g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->discrete)));
- mv_clear(&dialog->mvl);
- mv_add_num_range(&dialog->mvl, low_val.f, high_val.f);
+ mv_clear (&dialog->mvl);
+ mv_add_range (&dialog->mvl, low_val.f, high_val.f);
+
+ value_destroy (&low_val, var_get_width (dialog->pv));
+ value_destroy (&high_val, var_get_width (dialog->pv));
- if ( discrete_text && strlen(g_strstrip(discrete_text)) > 0 )
+ if ( discrete_text && strlen (g_strstrip (discrete_text)) > 0 )
{
union value discrete_val;
- if ( !text_to_value(discrete_text, &discrete_val,
- *write_spec))
+ if ( !text_to_value (discrete_text,
+ dialog->dict,
+ dialog->pv,
+ &discrete_val))
{
- err_dialog(_("Incorrect value for variable type"),
- GTK_WINDOW(dialog->window) );
- g_free(discrete_text);
+ err_dialog (_("Incorrect value for variable type"),
+ GTK_WINDOW (dialog->window) );
+ g_free (discrete_text);
+ value_destroy (&discrete_val, var_get_width (dialog->pv));
return;
}
- mv_add_value(&dialog->mvl, &discrete_val);
+ mv_add_value (&dialog->mvl, &discrete_val);
+ value_destroy (&discrete_val, var_get_width (dialog->pv));
}
- g_free(discrete_text);
+ g_free (discrete_text);
}
- if (gtk_toggle_button_get_active(dialog->button_none))
- mv_clear(&dialog->mvl);
+ if (gtk_toggle_button_get_active (dialog->button_none))
+ mv_clear (&dialog->mvl);
var_set_missing_values (dialog->pv, &dialog->mvl);
@@ -181,110 +188,128 @@ missing_val_dialog_accept(GtkWidget *w, gpointer data)
/* Callback which occurs when the 'discrete' radiobutton is toggled */
static void
-discrete(GtkToggleButton *button, gpointer data)
+discrete (GtkToggleButton *button, gpointer data)
{
gint i;
struct missing_val_dialog *dialog = data;
- for(i = 0 ; i < 3 ; ++i )
+ for (i = 0 ; i < 3 ; ++i )
{
- gtk_widget_set_sensitive(dialog->mv[i],
- gtk_toggle_button_get_active(button));
+ gtk_widget_set_sensitive (dialog->mv[i],
+ gtk_toggle_button_get_active (button));
}
}
/* Callback which occurs when the 'range' radiobutton is toggled */
static void
-range(GtkToggleButton *button, gpointer data)
+range (GtkToggleButton *button, gpointer data)
{
struct missing_val_dialog *dialog = data;
const gboolean active = gtk_toggle_button_get_active (button);
- gtk_widget_set_sensitive(dialog->low, active);
- gtk_widget_set_sensitive(dialog->high, active);
- gtk_widget_set_sensitive(dialog->discrete, active);
+ gtk_widget_set_sensitive (dialog->low, active);
+ gtk_widget_set_sensitive (dialog->high, active);
+ gtk_widget_set_sensitive (dialog->discrete, active);
}
-/* Creates the dialog structure from the xml */
+
+/* Callback for when the Missing Value dialog is closed using
+ the window delete button.*/
+static gint
+on_delete (GtkWidget *w, GdkEvent *e, gpointer data)
+{
+ struct missing_val_dialog *dialog = data;
+
+ gtk_widget_hide (dialog->window);
+
+ return TRUE;
+}
+
+
+/* Creates the dialog structure */
struct missing_val_dialog *
-missing_val_dialog_create(GladeXML *xml)
+missing_val_dialog_create (GtkWindow *toplevel)
{
- struct missing_val_dialog *dialog = g_malloc(sizeof(*dialog));
+ GtkBuilder *xml = builder_new ("var-sheet-dialogs.ui");
- dialog->window = get_widget_assert(xml, "missing_values_dialog");
+ struct missing_val_dialog *dialog = g_malloc (sizeof (*dialog));
- gtk_window_set_transient_for
- (GTK_WINDOW(dialog->window),
- GTK_WINDOW(get_widget_assert(xml, "data_editor")));
+ dialog->window = get_widget_assert (xml, "missing_values_dialog");
+ gtk_window_set_transient_for
+ (GTK_WINDOW (dialog->window), toplevel);
- g_signal_connect_swapped(get_widget_assert(xml, "missing_val_cancel"),
- "clicked", G_CALLBACK(gtk_widget_hide), dialog->window);
+ g_signal_connect_swapped (get_widget_assert (xml, "missing_val_cancel"),
+ "clicked", G_CALLBACK (gtk_widget_hide), dialog->window);
- g_signal_connect(get_widget_assert(xml, "missing_val_ok"),
- "clicked", G_CALLBACK(missing_val_dialog_accept), dialog);
+ g_signal_connect (get_widget_assert (xml, "missing_val_ok"),
+ "clicked", G_CALLBACK (missing_val_dialog_accept), dialog);
+ g_signal_connect (dialog->window, "delete-event",
+ G_CALLBACK (on_delete), dialog);
- dialog->mv[0] = get_widget_assert(xml, "mv0");
- dialog->mv[1] = get_widget_assert(xml, "mv1");
- dialog->mv[2] = get_widget_assert(xml, "mv2");
+ dialog->mv[0] = get_widget_assert (xml, "mv0");
+ dialog->mv[1] = get_widget_assert (xml, "mv1");
+ dialog->mv[2] = get_widget_assert (xml, "mv2");
- dialog->low = get_widget_assert(xml, "mv-low");
- dialog->high = get_widget_assert(xml, "mv-high");
- dialog->discrete = get_widget_assert(xml, "mv-discrete");
+ dialog->low = get_widget_assert (xml, "mv-low");
+ dialog->high = get_widget_assert (xml, "mv-high");
+ dialog->discrete = get_widget_assert (xml, "mv-discrete");
dialog->button_none =
- GTK_TOGGLE_BUTTON(get_widget_assert(xml, "no_missing"));
+ GTK_TOGGLE_BUTTON (get_widget_assert (xml, "no_missing"));
dialog->button_discrete =
- GTK_TOGGLE_BUTTON(get_widget_assert(xml, "discrete_missing"));
+ GTK_TOGGLE_BUTTON (get_widget_assert (xml, "discrete_missing"));
dialog->button_range =
- GTK_TOGGLE_BUTTON(get_widget_assert(xml, "range_missing"));
+ GTK_TOGGLE_BUTTON (get_widget_assert (xml, "range_missing"));
+
+ g_signal_connect (dialog->button_discrete, "toggled",
+ G_CALLBACK (discrete), dialog);
- g_signal_connect(G_OBJECT(dialog->button_discrete), "toggled",
- G_CALLBACK(discrete), dialog);
+ g_signal_connect (dialog->button_range, "toggled",
+ G_CALLBACK (range), dialog);
- g_signal_connect(G_OBJECT(dialog->button_range), "toggled",
- G_CALLBACK(range), dialog);
+ g_object_unref (xml);
return dialog;
}
/* Shows the dialog box and sets default values */
void
-missing_val_dialog_show(struct missing_val_dialog *dialog)
+missing_val_dialog_show (struct missing_val_dialog *dialog)
{
const struct fmt_spec *write_spec ;
gint i;
- g_return_if_fail(dialog);
- g_return_if_fail(dialog->pv);
+ g_return_if_fail (dialog);
+ g_return_if_fail (dialog->pv);
mv_copy (&dialog->mvl, var_get_missing_values (dialog->pv));
write_spec = var_get_write_format (dialog->pv);
/* Blank all entry boxes and make them insensitive */
- gtk_entry_set_text(GTK_ENTRY(dialog->low), "");
- gtk_entry_set_text(GTK_ENTRY(dialog->high), "");
- gtk_entry_set_text(GTK_ENTRY(dialog->discrete), "");
- gtk_widget_set_sensitive(dialog->low, FALSE);
- gtk_widget_set_sensitive(dialog->high, FALSE);
- gtk_widget_set_sensitive(dialog->discrete, FALSE);
-
- gtk_widget_set_sensitive(GTK_WIDGET(dialog->button_range),
+ gtk_entry_set_text (GTK_ENTRY (dialog->low), "");
+ gtk_entry_set_text (GTK_ENTRY (dialog->high), "");
+ gtk_entry_set_text (GTK_ENTRY (dialog->discrete), "");
+ gtk_widget_set_sensitive (dialog->low, FALSE);
+ gtk_widget_set_sensitive (dialog->high, FALSE);
+ gtk_widget_set_sensitive (dialog->discrete, FALSE);
+
+ gtk_widget_set_sensitive (GTK_WIDGET (dialog->button_range),
var_is_numeric (dialog->pv));
- for(i = 0 ; i < 3 ; ++i )
+ for (i = 0 ; i < 3 ; ++i )
{
- gtk_entry_set_text(GTK_ENTRY(dialog->mv[i]), "");
- gtk_widget_set_sensitive(dialog->mv[i], FALSE);
+ gtk_entry_set_text (GTK_ENTRY (dialog->mv[i]), "");
+ gtk_widget_set_sensitive (dialog->mv[i], FALSE);
}
if ( mv_has_range (&dialog->mvl))
@@ -292,56 +317,54 @@ missing_val_dialog_show(struct missing_val_dialog *dialog)
union value low, high;
gchar *low_text;
gchar *high_text;
- mv_peek_range(&dialog->mvl, &low.f, &high.f);
+ mv_get_range (&dialog->mvl, &low.f, &high.f);
- low_text = value_to_text(low, *write_spec);
- high_text = value_to_text(high, *write_spec);
- gtk_entry_set_text(GTK_ENTRY(dialog->low), low_text);
- gtk_entry_set_text(GTK_ENTRY(dialog->high), high_text);
- g_free(low_text);
- g_free(high_text);
+ low_text = value_to_text (low, dialog->dict, *write_spec);
+ high_text = value_to_text (high, dialog->dict, *write_spec);
- if ( mv_has_value(&dialog->mvl))
+ gtk_entry_set_text (GTK_ENTRY (dialog->low), low_text);
+ gtk_entry_set_text (GTK_ENTRY (dialog->high), high_text);
+ g_free (low_text);
+ g_free (high_text);
+
+ if ( mv_has_value (&dialog->mvl))
{
gchar *text;
- union value value;
- mv_peek_value(&dialog->mvl, &value, 0);
- text = value_to_text(value, *write_spec);
- gtk_entry_set_text(GTK_ENTRY(dialog->discrete), text);
- g_free(text);
+ text = value_to_text (*mv_get_value (&dialog->mvl, 0), dialog->dict, *write_spec);
+ gtk_entry_set_text (GTK_ENTRY (dialog->discrete), text);
+ g_free (text);
}
- gtk_toggle_button_set_active(dialog->button_range, TRUE);
- gtk_widget_set_sensitive(dialog->low, TRUE);
- gtk_widget_set_sensitive(dialog->high, TRUE);
- gtk_widget_set_sensitive(dialog->discrete, TRUE);
+ gtk_toggle_button_set_active (dialog->button_range, TRUE);
+ gtk_widget_set_sensitive (dialog->low, TRUE);
+ gtk_widget_set_sensitive (dialog->high, TRUE);
+ gtk_widget_set_sensitive (dialog->discrete, TRUE);
}
else if ( mv_has_value (&dialog->mvl))
{
const int n = mv_n_values (&dialog->mvl);
- for(i = 0 ; i < 3 ; ++i )
+ for (i = 0 ; i < 3 ; ++i )
{
if ( i < n)
{
gchar *text ;
- union value value;
- mv_peek_value(&dialog->mvl, &value, i);
- text = value_to_text(value, *write_spec);
- gtk_entry_set_text(GTK_ENTRY(dialog->mv[i]), text);
- g_free(text);
+ text = value_to_text (*mv_get_value (&dialog->mvl, i), dialog->dict,
+ *write_spec);
+ gtk_entry_set_text (GTK_ENTRY (dialog->mv[i]), text);
+ g_free (text);
}
- gtk_widget_set_sensitive(dialog->mv[i], TRUE);
+ gtk_widget_set_sensitive (dialog->mv[i], TRUE);
}
- gtk_toggle_button_set_active(dialog->button_discrete, TRUE);
+ gtk_toggle_button_set_active (dialog->button_discrete, TRUE);
}
else if ( mv_is_empty (&dialog->mvl))
{
- gtk_toggle_button_set_active(dialog->button_none, TRUE);
+ gtk_toggle_button_set_active (dialog->button_none, TRUE);
}
- gtk_widget_show(dialog->window);
+ gtk_widget_show (dialog->window);
}