#include <errno.h>
#include <fcntl.h>
-#include <gtk-contrib/psppire-sheet.h>
#include <gtk/gtk.h>
#include <limits.h>
#include <stdlib.h>
#include "ui/gui/psppire-encoding-selector.h"
#include "ui/gui/psppire-empty-list-store.h"
#include "ui/gui/psppire-var-sheet.h"
-#include "ui/gui/psppire-var-store.h"
#include "gl/error.h"
#include "gl/intprops.h"
static void on_close (GtkAssistant *assistant, struct import_assistant *);
static void on_paste (GtkButton *button, struct import_assistant *);
static void on_reset (GtkButton *button, struct import_assistant *);
-static void close_assistant (struct import_assistant *, int response);
/* Initializes IA's asst substructure. PARENT_WINDOW must be the
window to use as the assistant window's parent. */
-void
-init_assistant (struct import_assistant *ia, GtkWindow *parent_window)
+struct import_assistant *
+init_assistant (GtkWindow *parent_window)
{
+ struct import_assistant *ia = xzalloc (sizeof *ia);
struct assistant *a = &ia->asst;
a->builder = builder_new ("text-data-import.ui");
a->assistant = GTK_ASSISTANT (gtk_assistant_new ());
+
+ a->prop_renderer = gtk_cell_renderer_text_new ();
+ g_object_ref_sink (a->prop_renderer);
+ a->fixed_renderer = gtk_cell_renderer_text_new ();
+ g_object_ref_sink (a->fixed_renderer);
+ g_object_set (G_OBJECT (a->fixed_renderer),
+ "family", "Monospace",
+ (void *) NULL);
+
g_signal_connect (a->assistant, "prepare", G_CALLBACK (on_prepare), ia);
g_signal_connect (a->assistant, "cancel", G_CALLBACK (on_cancel), ia);
g_signal_connect (a->assistant, "close", G_CALLBACK (on_close), ia);
gtk_window_set_transient_for (GTK_WINDOW (a->assistant), parent_window);
gtk_window_set_icon_name (GTK_WINDOW (a->assistant), "pspp");
- a->prop_renderer = gtk_cell_renderer_text_new ();
- g_object_ref_sink (a->prop_renderer);
- a->fixed_renderer = gtk_cell_renderer_text_new ();
- g_object_ref_sink (a->fixed_renderer);
- g_object_set (G_OBJECT (a->fixed_renderer),
- "family", "Monospace",
- (void *) NULL);
+
+ return ia;
}
/* Frees IA's asst substructure. */
{
int pn = gtk_assistant_get_current_page (assistant);
- if (pn == 1 && ia->file.type != FTYPE_TEXT)
- post_sheet_spec_page (ia);
+ gtk_widget_show (ia->asst.reset_button);
+ gtk_widget_hide (ia->asst.paste_button);
+
+ if ( ia->spreadsheet)
+ {
+ if (pn == 0)
+ {
+ prepare_sheet_spec_page (ia);
+ }
+ else if (pn == 1)
+ {
+ post_sheet_spec_page (ia);
+ prepare_formats_page (ia);
+ }
+ }
+ else
+ {
+ if (pn == 0)
+ prepare_separators_page (ia);
+ else if (pn == 3)
+ prepare_formats_page (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);
-
-
- /* Prepare .... */
- if (page == ia->separators.page)
- prepare_separators_page (ia);
- else if (page == ia->formats.page)
- prepare_formats_page (ia);
- else if (page == ia->sheet_spec.page)
- prepare_sheet_spec_page (ia);
-
-
-
- gtk_widget_show (ia->asst.reset_button);
- if (page == ia->formats.page)
- gtk_widget_show (ia->asst.paste_button);
- else
- gtk_widget_hide (ia->asst.paste_button);
}
/* Called when the Cancel button in the assistant is clicked. */
close_assistant (ia, PSPPIRE_RESPONSE_PASTE);
}
+static GtkWidget *
+assist_get_page (struct assist_page *ap)
+{
+ if (ap == NULL)
+ return NULL;
+
+ return ap->page;
+}
+
/* Called when the Reset button is clicked. */
static void
on_reset (GtkButton *button, struct import_assistant *ia)
gint page_num = gtk_assistant_get_current_page (ia->asst.assistant);
GtkWidget *page = gtk_assistant_get_nth_page (ia->asst.assistant, page_num);
- if (page == ia->intro.page)
+ if (page == assist_get_page ((struct assist_page *) ia->intro))
reset_intro_page (ia);
- else if (page == ia->first_line.page)
+ else if (page == assist_get_page ((struct assist_page *) ia->first_line))
reset_first_line_page (ia);
- else if (page == ia->separators.page)
+ else if (page == assist_get_page ((struct assist_page *) ia->separators))
reset_separators_page (ia);
- else if (page == ia->formats.page)
+ else if (page == assist_get_page ((struct assist_page *) ia->formats))
reset_formats_page (ia);
- else if (page == ia->sheet_spec.page)
+ else if (page == assist_get_page ((struct assist_page *) ia->sheet_spec))
reset_sheet_spec_page (ia);
}
close_assistant (struct import_assistant *ia, int response)
{
ia->asst.response = response;
- g_main_loop_quit (ia->asst.main_loop);
+ /* Use our loop_done variable until we find out
+ why g_main_loop_quit (ia->asst.main_loop); doesn't work.
+ */
+ ia->asst.loop_done = true;
gtk_widget_hide (GTK_WIDGET (ia->asst.assistant));
}