#include <ui/gui/psppire-dialog.h>
#include <ui/gui/psppire-var-sheet.h>
#include <ui/gui/psppire-var-store.h>
-#include <ui/gui/helper.h>
+#include "executor.h"
#include "error.h"
#include "xalloc.h"
#define N_(msgid) msgid
-#if !GTK_CHECK_VERSION (2, 10, 0)
-
-void
-text_data_import_assistant (GObject *o, gpointer de_)
-{
- struct data_editor *de = de_;
-
- GtkWidget *dialog =
- gtk_message_dialog_new (GTK_WINDOW (de),
- GTK_DIALOG_MODAL,
- GTK_MESSAGE_WARNING,
- GTK_BUTTONS_CLOSE,
- _("The text import assistant has not been "
- "compiled into this build of PSPPIRE, because "
- "GTK+ version 2.10.0 or later was not available."));
-
- gtk_dialog_run (GTK_DIALOG (dialog));
-
- gtk_widget_destroy (dialog);
-}
-
-#else
-
/* TextImportModel, a GtkTreeModel used by the text data import
dialog. */
enum
/* Pops up the Text Data Import assistant. */
void
-text_data_import_assistant (GObject *o, gpointer de_)
+text_data_import_assistant (GObject *o, GtkWindow *parent_window)
{
- struct data_editor *de = de_;
- GtkWindow *parent_window = GTK_WINDOW (de);
struct import_assistant *ia;
ia = xzalloc (sizeof *ia);
syntax_gen_pspp (s, "MISSING VALUES %ss (", name);
for (j = 0; j < mv_n_values (mv); j++)
{
- union value value;
if (j)
ds_put_cstr (s, ", ");
- mv_get_value (mv, &value, j);
- syntax_gen_value (s, &value, width, format);
+ syntax_gen_value (s, mv_get_value (mv, j), width, format);
}
if (mv_has_range (mv))
if (var_has_value_labels (var))
{
const struct val_labs *vls = var_get_value_labels (var);
- struct val_labs_iterator *iter;
- struct val_lab *vl;
+ const struct val_lab **labels = val_labs_sorted (vls);
+ size_t n_labels = val_labs_count (vls);
+ size_t i;
syntax_gen_pspp (s, "VALUE LABELS %ss", name);
- for (vl = val_labs_first_sorted (vls, &iter); vl != NULL;
- vl = val_labs_next (vls, &iter))
+ for (i = 0; i < n_labels; i++)
{
+ const struct val_lab *vl = labels[i];
ds_put_cstr (s, "\n ");
syntax_gen_value (s, &vl->value, width, format);
ds_put_char (s, ' ');
- syntax_gen_string (s, ss_cstr (vl->label));
+ syntax_gen_string (s, ss_cstr (val_lab_get_label (vl)));
}
+ free (labels);
ds_put_cstr (s, ".\n");
}
if (var_has_label (var))
gtk_window_set_title (GTK_WINDOW (a->assistant),
_("Importing Delimited Text Data"));
gtk_window_set_transient_for (GTK_WINDOW (a->assistant), parent_window);
+ gtk_window_set_icon_name (GTK_WINDOW (a->assistant), "psppicon");
a->prop_renderer = gtk_cell_renderer_text_new ();
g_object_ref_sink (a->prop_renderer);
on_prepare (GtkAssistant *assistant, GtkWidget *page,
struct import_assistant *ia)
{
+
+ if (gtk_assistant_get_page_type (assistant, page)
+ == GTK_ASSISTANT_PAGE_CONFIRM)
+ gtk_widget_grab_focus (assistant->apply);
+ else
+ gtk_widget_grab_focus (assistant->forward);
+
if (page == ia->separators.page)
prepare_separators_page (ia);
else if (page == ia->formats.page)
set_separators (ia);
set_quote_list (GTK_COMBO_BOX_ENTRY (p->quote_combo));
p->fields_tree_view = GTK_TREE_VIEW (get_widget_assert (builder, "fields"));
- g_signal_connect (GTK_COMBO_BOX (p->quote_combo), "changed",
+ g_signal_connect (p->quote_combo, "changed",
G_CALLBACK (on_quote_combo_change), ia);
g_signal_connect (p->quote_cb, "toggled",
G_CALLBACK (on_quote_cb_toggle), ia);
- g_signal_connect (GTK_ENTRY (p->custom_entry), "notify::text",
+ g_signal_connect (p->custom_entry, "notify::text",
G_CALLBACK (on_separators_custom_entry_notify), ia);
g_signal_connect (p->custom_cb, "toggled",
G_CALLBACK (on_separators_custom_cb_toggle), ia);
p->data_tree_view = GTK_TREE_VIEW (get_widget_assert (builder, "data"));
p->modified_vars = NULL;
p->modified_var_cnt = 0;
+ p->dict = NULL;
}
/* Frees IA's formats substructure. */
char **outputp, char **tooltipp)
{
struct substring field;
- union value *val;
+ union value val;
struct variable *var;
const struct fmt_spec *in;
struct fmt_spec out;
field = ia->separators.columns[column].contents[row];
var = dict_get_var (ia->formats.dict, column);
- val = value_create (var_get_width (var));
+ value_init (&val, var_get_width (var));
in = var_get_print_format (var);
out = fmt_for_output_from_input (in);
tooltip = NULL;
if (field.string != NULL)
{
msg_disable ();
+
if (!data_in (field, LEGACY_NATIVE, in->type, 0, 0, 0,
- val, var_get_width (var)))
+ ia->formats.dict,
+ &val, var_get_width (var)))
{
char fmt_string[FMT_STRING_LEN_MAX + 1];
fmt_to_string (in, fmt_string);
{
tooltip = xstrdup (_("This input line has too few separators "
"to fill in this field."));
- value_set_missing (val, var_get_width (var));
+ value_set_missing (&val, var_get_width (var));
}
if (outputp != NULL)
{
- char *output = xmalloc (out.w + 1);
- data_out (val, &out, output);
- output[out.w] = '\0';
- *outputp = output;
+ *outputp = data_out (&val, dict_get_encoding (ia->formats.dict), &out);
}
- free (val);
+ value_destroy (&val, var_get_width (var));
ok = tooltip == NULL;
if (tooltipp != NULL)
gdk_window_set_cursor (widget->window, NULL);
}
}
-
-#endif