X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fmissing-val-dialog.c;h=3e42036cb17260bf3c38c2c04d4ffa9cbd382c17;hb=698f289d1ecf1620aa5429599f2e76db23cff452;hp=3a350735b99f17bf207bc0b5c7221f107a1c57af;hpb=43b1296aafe7582e7dbe6c2b6a8b478d7d9b0fcf;p=pspp diff --git a/src/ui/gui/missing-val-dialog.c b/src/ui/gui/missing-val-dialog.c index 3a350735b9..3e42036cb1 100644 --- a/src/ui/gui/missing-val-dialog.c +++ b/src/ui/gui/missing-val-dialog.c @@ -1,5 +1,5 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2005, 2006 Free Software Foundation + Copyright (C) 2005, 2006, 2009, 2011, 2012 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 @@ -23,7 +23,9 @@ #define N_(msgid) msgid +#include "builder-wrapper.h" #include "helper.h" +#include #include "missing-val-dialog.h" #include #include @@ -31,7 +33,6 @@ #include -#include #include @@ -80,8 +81,6 @@ 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)) { gint nvals = 0; @@ -100,7 +99,7 @@ missing_val_dialog_accept (GtkWidget *w, gpointer data) continue; } - if ( text_to_value (text, &v, *write_spec)) + if ( text_to_value (text, dialog->pv, &v)) { nvals++; mv_add_value (&dialog->mvl, &v); @@ -108,6 +107,7 @@ missing_val_dialog_accept (GtkWidget *w, gpointer data) else badvals++; g_free (text); + value_destroy (&v, var_get_width (dialog->pv)); } if ( nvals == 0 || badvals > 0 ) { @@ -126,14 +126,16 @@ missing_val_dialog_accept (GtkWidget *w, gpointer data) 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->pv, &low_val) && - text_to_value (high_text, &high_val, *write_spec) ) + text_to_value (high_text, dialog->pv, &high_val)) { if ( low_val.f > high_val.f ) { 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 ; } } @@ -141,6 +143,8 @@ missing_val_dialog_accept (GtkWidget *w, gpointer data) { 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; } @@ -148,20 +152,26 @@ missing_val_dialog_accept (GtkWidget *w, gpointer data) 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_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 ) { union value discrete_val; - if ( !text_to_value (discrete_text, &discrete_val, - *write_spec)) + if ( !text_to_value (discrete_text, + dialog->pv, + &discrete_val)) { 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); + value_destroy (&discrete_val, var_get_width (dialog->pv)); } g_free (discrete_text); } @@ -218,20 +228,18 @@ on_delete (GtkWidget *w, GdkEvent *e, gpointer data) } -/* Creates the dialog structure from the xml */ +/* 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"); - connect_help (xml); + struct missing_val_dialog *dialog = g_malloc (sizeof (*dialog)); dialog->window = get_widget_assert (xml, "missing_values_dialog"); gtk_window_set_transient_for - (GTK_WINDOW (dialog->window), - GTK_WINDOW (get_widget_assert (xml, "data_editor"))); - + (GTK_WINDOW (dialog->window), toplevel); g_signal_connect_swapped (get_widget_assert (xml, "missing_val_cancel"), "clicked", G_CALLBACK (gtk_widget_hide), dialog->window); @@ -239,7 +247,7 @@ missing_val_dialog_create (GladeXML *xml) g_signal_connect (get_widget_assert (xml, "missing_val_ok"), "clicked", G_CALLBACK (missing_val_dialog_accept), dialog); - g_signal_connect (GTK_OBJECT (dialog->window), "delete-event", + g_signal_connect (dialog->window, "delete-event", G_CALLBACK (on_delete), dialog); dialog->mv[0] = get_widget_assert (xml, "mv0"); @@ -261,12 +269,14 @@ missing_val_dialog_create (GladeXML *xml) GTK_TOGGLE_BUTTON (get_widget_assert (xml, "range_missing")); - g_signal_connect (G_OBJECT (dialog->button_discrete), "toggled", + g_signal_connect (dialog->button_discrete, "toggled", G_CALLBACK (discrete), dialog); - g_signal_connect (G_OBJECT (dialog->button_range), "toggled", + g_signal_connect (dialog->button_range, "toggled", G_CALLBACK (range), dialog); + g_object_unref (xml); + return dialog; } @@ -274,16 +284,12 @@ missing_val_dialog_create (GladeXML *xml) void 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); 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), ""); @@ -307,10 +313,11 @@ 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); + low_text = value_to_text (low, dialog->pv); + high_text = value_to_text (high, dialog->pv); gtk_entry_set_text (GTK_ENTRY (dialog->low), low_text); gtk_entry_set_text (GTK_ENTRY (dialog->high), high_text); @@ -320,9 +327,7 @@ missing_val_dialog_show (struct missing_val_dialog *dialog) 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); + text = value_to_text (*mv_get_value (&dialog->mvl, 0), dialog->pv); gtk_entry_set_text (GTK_ENTRY (dialog->discrete), text); g_free (text); } @@ -342,10 +347,8 @@ missing_val_dialog_show (struct missing_val_dialog *dialog) if ( i < n) { gchar *text ; - union value value; - mv_peek_value (&dialog->mvl, &value, i); - text = value_to_text (value, *write_spec); + text = value_to_text (*mv_get_value (&dialog->mvl, i), dialog->pv); gtk_entry_set_text (GTK_ENTRY (dialog->mv[i]), text); g_free (text); }