/* PSPPIRE - a graphical user interface for PSPP.
- Copyright (C) 2007 Free Software Foundation
+ Copyright (C) 2007, 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
#include "recode-dialog.h"
+#include "executor.h"
+
#include <gtk/gtk.h>
-#include <gtksheet/gtksheet.h>
+#include <xalloc.h>
#include <language/syntax-string-source.h>
-#include <ui/gui/data-editor.h>
+#include <ui/gui/psppire-data-window.h>
#include <ui/gui/dialog-common.h>
#include <ui/gui/dict-display.h>
#include <ui/gui/helper.h>
#include <ui/gui/psppire-dialog.h>
#include <ui/gui/psppire-var-store.h>
-#include <ui/gui/syntax-editor.h>
-#include <libpspp/syntax-gen.h>
+
+#include <ui/syntax-gen.h>
#include "psppire-acr.h"
struct new_value *copy = g_memdup (nv, sizeof (*copy));
if ( nv->type == NV_STRING )
- copy->v.s = strdup (nv->v.s);
+ copy->v.s = xstrdup (nv->v.s);
return copy;
}
GtkWidget *ov_high_down_entry;
GtkListStore *value_map;
- GtkListStore *local_store;
/* Indicates that the INTO {new variables} form of the dialog
is being used */
COL_OLD,
COL_NEW_NAME,
COL_NEW_LABEL,
- n_COLS
+ n_COL_VARS
};
enum {
gtk_widget_set_sensitive (target, state);
}
-static void recode_dialog (struct data_editor *de, gboolean diff);
+static void recode_dialog (PsppireDataWindow *de, gboolean diff);
/* Pops up the Recode Same version of the dialog box */
void
recode_same_dialog (GObject *o, gpointer data)
{
- struct data_editor *de = data;
+ PsppireDataWindow *de = PSPPIRE_DATA_WINDOW (data);
recode_dialog (de, FALSE);
}
void
recode_different_dialog (GObject *o, gpointer data)
{
- struct data_editor *de = data;
+ PsppireDataWindow *de = PSPPIRE_DATA_WINDOW (data);
recode_dialog (de, TRUE);
}
}
static void
-recode_dialog (struct data_editor *de, gboolean diff)
+recode_dialog (PsppireDataWindow *de, gboolean diff)
{
gint response;
struct recode_dialog rd;
- GladeXML *xml = XML_NEW ("recode.glade");
+ GtkBuilder *builder = builder_new ("recode.ui");
+ GtkWidget *selector = get_widget_assert (builder, "psppire-selector1");
- GtkWidget *selector = get_widget_assert (xml, "psppire-selector1");
+ GtkWidget *oldandnew = get_widget_assert (builder, "button1");
- GtkWidget *oldandnew = get_widget_assert (xml, "button1");
+ GtkWidget *output_variable_box = get_widget_assert (builder,"frame4");
- GtkWidget *output_variable_box = get_widget_assert (xml,"frame4");
- GtkSheet *var_sheet =
- GTK_SHEET (get_widget_assert (de->xml, "variable_sheet"));
+ PsppireVarStore *vs = NULL;
+ g_object_get (de->data_editor, "var-store", &vs, NULL);
- PsppireVarStore *vs = PSPPIRE_VAR_STORE (gtk_sheet_get_model (var_sheet));
+ rd.change_button = get_widget_assert (builder, "change-button");
- rd.change_button = get_widget_assert (xml, "change-button");
-
- rd.dialog = get_widget_assert (xml, "recode-dialog");
- rd.dict_treeview = get_widget_assert (xml, "treeview1");
- rd.variable_treeview = get_widget_assert (xml, "treeview2");
- rd.new_name_entry = get_widget_assert (xml, "dest-name-entry");
- rd.new_label_entry = get_widget_assert (xml, "dest-label-entry");
+ rd.dialog = get_widget_assert (builder, "recode-dialog");
+ rd.dict_treeview = get_widget_assert (builder, "treeview1");
+ rd.variable_treeview = get_widget_assert (builder, "treeview2");
+ rd.new_name_entry = get_widget_assert (builder, "dest-name-entry");
+ rd.new_label_entry = get_widget_assert (builder, "dest-label-entry");
rd.dict = vs->dict;
rd.different = diff;
- gtk_window_set_transient_for (GTK_WINDOW (rd.dialog), de->parent.window);
-
+ gtk_window_set_transient_for (GTK_WINDOW (rd.dialog), GTK_WINDOW (de));
- attach_dictionary_to_treeview (GTK_TREE_VIEW (rd.dict_treeview),
- vs->dict,
- GTK_SELECTION_MULTIPLE, NULL);
+ g_object_set (rd.dict_treeview, "dictionary", vs->dict, NULL);
if ( ! rd.different )
{
GtkTreeViewColumn *col;
GtkCellRenderer *renderer = gtk_cell_renderer_text_new ();
- rd.var_map = gtk_list_store_new (n_COLS, G_TYPE_INT,
+ rd.var_map = gtk_list_store_new (n_COL_VARS, G_TYPE_INT,
G_TYPE_STRING,
G_TYPE_STRING);
rd.dict_treeview,
rd.variable_treeview,
insert_source_row_into_tree_view,
+ NULL,
NULL);
psppire_selector_set_allow (PSPPIRE_SELECTOR (selector), homogeneous_types);
/* Set up the Old & New Values subdialog */
{
- rd.string_button = get_widget_assert (xml, "checkbutton1");
- rd.width_entry = get_widget_assert (xml, "spinbutton1");
+ rd.string_button = get_widget_assert (builder, "checkbutton1");
+ rd.width_entry = get_widget_assert (builder, "spinbutton1");
- rd.convert_button = get_widget_assert (xml, "checkbutton2");
+ rd.convert_button = get_widget_assert (builder, "checkbutton2");
- rd.ov_range_lower_entry = get_widget_assert (xml, "entry5");
- rd.ov_range_upper_entry = get_widget_assert (xml, "entry3");
- rd.ov_low_up_entry = get_widget_assert (xml, "entry6");
- rd.ov_high_down_entry = get_widget_assert (xml, "entry7");
+ rd.ov_range_lower_entry = get_widget_assert (builder, "entry5");
+ rd.ov_range_upper_entry = get_widget_assert (builder, "entry3");
+ rd.ov_low_up_entry = get_widget_assert (builder, "entry6");
+ rd.ov_high_down_entry = get_widget_assert (builder, "entry7");
- rd.new_value_entry = get_widget_assert (xml, "entry1");
- rd.ov_value_entry = get_widget_assert (xml, "entry2");
+ rd.new_value_entry = get_widget_assert (builder, "entry1");
+ rd.ov_value_entry = get_widget_assert (builder, "entry2");
- rd.toggle[BUTTON_NEW_VALUE] = get_widget_assert (xml, "radiobutton1");
- rd.toggle[BUTTON_NEW_SYSMIS] = get_widget_assert (xml, "radiobutton2");
- rd.toggle[BUTTON_NEW_COPY] = get_widget_assert (xml, "radiobutton3");
- rd.toggle[BUTTON_OLD_VALUE] = get_widget_assert (xml, "radiobutton4");
- rd.toggle[BUTTON_OLD_SYSMIS] = get_widget_assert (xml, "radiobutton6");
- rd.toggle[BUTTON_OLD_MISSING]= get_widget_assert (xml, "radiobutton7");
- rd.toggle[BUTTON_OLD_RANGE] = get_widget_assert (xml, "radiobutton8");
- rd.toggle[BUTTON_OLD_LOW_UP] = get_widget_assert (xml, "radiobutton10");
- rd.toggle[BUTTON_OLD_HIGH_DOWN] = get_widget_assert (xml, "radiobutton5");
- rd.toggle[BUTTON_OLD_ELSE] = get_widget_assert (xml, "radiobutton11");
+ rd.toggle[BUTTON_NEW_VALUE] = get_widget_assert (builder, "radiobutton1");
+ rd.toggle[BUTTON_NEW_SYSMIS] = get_widget_assert (builder, "radiobutton2");
+ rd.toggle[BUTTON_NEW_COPY] = get_widget_assert (builder, "radiobutton3");
+ rd.toggle[BUTTON_OLD_VALUE] = get_widget_assert (builder, "radiobutton4");
+ rd.toggle[BUTTON_OLD_SYSMIS] = get_widget_assert (builder, "radiobutton6");
+ rd.toggle[BUTTON_OLD_MISSING]= get_widget_assert (builder, "radiobutton7");
+ rd.toggle[BUTTON_OLD_RANGE] = get_widget_assert (builder, "radiobutton8");
+ rd.toggle[BUTTON_OLD_LOW_UP] = get_widget_assert (builder, "radiobutton10");
+ rd.toggle[BUTTON_OLD_HIGH_DOWN] = get_widget_assert (builder, "radiobutton5");
+ rd.toggle[BUTTON_OLD_ELSE] = get_widget_assert (builder, "radiobutton11");
- rd.new_copy_label = get_widget_assert (xml, "label3");
- rd.strings_box = get_widget_assert (xml, "table3");
+ rd.new_copy_label = get_widget_assert (builder, "label3");
+ rd.strings_box = get_widget_assert (builder, "table3");
rd.old_and_new_dialog =
- PSPPIRE_DIALOG (get_widget_assert (xml, "old-new-values-dialog"));
+ PSPPIRE_DIALOG (get_widget_assert (builder, "old-new-values-dialog"));
gtk_window_set_transient_for (GTK_WINDOW (rd.old_and_new_dialog),
- de->parent.window);
+ GTK_WINDOW (de));
- rd.acr = PSPPIRE_ACR (get_widget_assert (xml, "psppire-acr1"));
+ rd.acr = PSPPIRE_ACR (get_widget_assert (builder, "psppire-acr1"));
g_signal_connect_swapped (rd.toggle[BUTTON_NEW_VALUE], "toggled",
G_CALLBACK (set_acr), &rd);
g_signal_connect (rd.toggle[BUTTON_OLD_RANGE], "toggled",
G_CALLBACK (toggle_sensitivity),
- get_widget_assert (xml, "entry3"));
+ get_widget_assert (builder, "entry3"));
g_signal_connect (rd.toggle[BUTTON_OLD_RANGE], "toggled",
G_CALLBACK (toggle_sensitivity),
- get_widget_assert (xml, "entry5"));
+ get_widget_assert (builder, "entry5"));
g_signal_connect (rd.toggle[BUTTON_OLD_LOW_UP], "toggled",
G_CALLBACK (toggle_sensitivity), rd.ov_low_up_entry);
case GTK_RESPONSE_OK:
{
gchar *syntax = generate_syntax (&rd);
+
struct getl_interface *sss = create_syntax_string_source (syntax);
execute_syntax (sss);
case PSPPIRE_RESPONSE_PASTE:
{
gchar *syntax = generate_syntax (&rd);
-
- struct syntax_editor *se =
- (struct syntax_editor *) window_create (WINDOW_SYNTAX, NULL);
-
- gtk_text_buffer_insert_at_cursor (se->buffer, syntax, -1);
+ paste_syntax_in_new_window (syntax);
g_free (syntax);
}
break;
}
- g_object_unref (xml);
+
+ gtk_list_store_clear (GTK_LIST_STORE (rd.value_map));
+ g_object_unref (rd.value_map);
+
+ g_object_unref (builder);
}
/* Initialise VAL to reflect the current status of RD */
run_old_and_new_dialog (struct recode_dialog *rd)
{
gint response;
- rd->local_store = clone_list_store (rd->value_map);
-
- g_object_ref (rd->local_store);
+ GtkListStore *local_store = clone_list_store (rd->value_map);
- psppire_acr_set_model (rd->acr, rd->local_store);
+ psppire_acr_set_model (rd->acr, local_store);
psppire_acr_set_get_value_func (rd->acr, set_value, rd);
gtk_window_set_title (GTK_WINDOW (rd->old_and_new_dialog),
if ( response == PSPPIRE_RESPONSE_CONTINUE )
- rd->value_map = clone_list_store (rd->local_store);
+ {
+ g_object_unref (rd->value_map);
+ rd->value_map = clone_list_store (local_store);
+ }
+ else
+ g_object_unref (local_store);
psppire_dialog_notify_change (PSPPIRE_DIALOG (rd->dialog));
break;
case NV_STRING:
{
- struct string ds;
- ds_init_cstr (&ds, nv->v.s);
- gen_quoted_string (&ds);
+ struct string ds = DS_EMPTY_INITIALIZER;
+ syntax_gen_string (&ds, ss_cstr (nv->v.s));
g_string_append (str, ds_cstr (&ds));
ds_destroy (&ds);
}
break;
case OV_STRING:
{
- struct string ds;
- ds_init_cstr (&ds, ov->v.s);
- gen_quoted_string (&ds);
+ struct string ds = DS_EMPTY_INITIALIZER;
+ syntax_gen_string (&ds, ss_cstr (ov->v.s));
g_string_append (str, ds_cstr (&ds));
ds_destroy (&ds);
}
g_string_append (str, "\nRECODE ");
- append_variable_names (str, rd->dict, GTK_TREE_VIEW (rd->variable_treeview));
+ append_variable_names (str, rd->dict, GTK_TREE_VIEW (rd->variable_treeview), 0);
g_string_append (str, "\n\t");
continue;
}
- ds_init_cstr (&ls, label);
+ ds_init_empty (&ls);
+ syntax_gen_string (&ls, ss_cstr (label));
g_free (label);
- gen_quoted_string (&ls);
g_string_append_printf (str, "\nVARIABLE LABELS %s %s.",
name, ds_cstr (&ls));