X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fmenu-actions.c;h=c23beb49a872c5d02c55ec007384a4fd038045ed;hb=b64685d06f8db1aff292ec409abe25f8a483d775;hp=38f73ebe55839804f89e4281d29dbd045355a2dc;hpb=9d888a2e774f76e66e31b2ab60a1d4b2d451e635;p=pspp-builds.git diff --git a/src/ui/gui/menu-actions.c b/src/ui/gui/menu-actions.c index 38f73ebe..c23beb49 100644 --- a/src/ui/gui/menu-actions.c +++ b/src/ui/gui/menu-actions.c @@ -20,6 +20,10 @@ #include #include +#include +#define _(msgid) gettext (msgid) +#define N_(msgid) msgid + #include #include @@ -40,8 +44,6 @@ #include "psppire-var-store.h" #include "psppire-data-store.h" -#define _(A) A -#define N_(A) A extern GladeXML *xml; @@ -55,37 +57,56 @@ static struct file_handle *psppire_handle = 0; static const gchar handle_name[] = "psppire_handle"; -static const gchar untitled[] = _("Untitled"); +static const gchar untitled[] = N_("Untitled"); -static const gchar window_title[]=_("PSPP Data Editor"); +static const gchar window_title[] = N_("PSPP Data Editor"); +/* Sets the title bar to TEXT */ static void psppire_set_window_title(const gchar *text) { GtkWidget *data_editor = get_widget_assert(xml, "data_editor"); - gchar *title = g_strdup_printf("%s --- %s", text, window_title); + gchar *title = g_strdup_printf("%s --- %s", text, gettext(window_title)); gtk_window_set_title(GTK_WINDOW(data_editor), title); g_free(title); } -void -on_new1_activate (GtkMenuItem *menuitem, - gpointer user_data) + +gboolean +clear_file(void) { + GtkWidget *data_sheet = get_widget_assert(xml, "data_sheet"); + GtkWidget *var_sheet = get_widget_assert(xml, "variable_sheet"); + + gtk_sheet_set_active_cell(GTK_SHEET(data_sheet), -1, -1); + + gtk_sheet_set_active_cell(GTK_SHEET(var_sheet), 0, 0); + psppire_dict_clear(the_dictionary); psppire_case_array_clear(the_cases); - - psppire_set_window_title(untitled); + + psppire_set_window_title(gettext(untitled)); if (psppire_handle) fh_free(psppire_handle); psppire_handle = 0 ; + + return TRUE; } +void +on_new1_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + clear_file(); +} + + + static gboolean populate_case_from_reader(struct ccase *c, gpointer aux) { @@ -95,6 +116,86 @@ populate_case_from_reader(struct ccase *c, gpointer aux) } +/* Load a system file. + Return TRUE if successfull +*/ +gboolean +load_system_file(const gchar *file_name) +{ + int ni ; + gint case_num; + + PsppireVarStore *var_store ; + PsppireDataStore *data_store ; + struct dictionary *new_dict; + struct sfm_read_info ri; + struct sfm_reader *reader ; + + GtkWidget *data_sheet = get_widget_assert(xml, "data_sheet"); + GtkWidget *var_sheet = get_widget_assert(xml, "variable_sheet"); + + + g_assert(data_sheet); + g_assert(var_sheet); + + if ( psppire_handle ) + fh_free(psppire_handle); + + psppire_handle = + fh_create_file (handle_name, file_name, fh_default_properties()); + + if ( !psppire_handle ) + { + g_warning("Cannot read handle for reading system file \"%s\"\n", + file_name); + return FALSE; + } + + + reader = sfm_open_reader (psppire_handle, &new_dict, &ri); + + if ( ! reader ) + return FALSE; + + /* FIXME: We need a better way of updating a dictionary than this */ + the_dictionary = psppire_dict_new_from_dict(new_dict); + + var_store = + PSPPIRE_VAR_STORE(gtk_sheet_get_model(GTK_SHEET(var_sheet))); + + psppire_var_store_set_dictionary(var_store, the_dictionary); + + + data_store = + PSPPIRE_DATA_STORE(gtk_sheet_get_model(GTK_SHEET(data_sheet))); + + psppire_data_store_set_dictionary(data_store, + the_dictionary); + + psppire_case_array_clear(data_store->cases); + + + psppire_set_window_title(basename(file_name)); + + ni = dict_get_next_value_idx(the_dictionary->dict); + if ( ni == 0 ) + return FALSE; + + for(case_num=0;;case_num++) + { + if (!psppire_case_array_append_case(the_cases, + populate_case_from_reader, + reader)) + break; + } + + + sfm_close_reader(reader); + + return TRUE; +} + + void on_open1_activate (GtkMenuItem *menuitem, gpointer user_data) @@ -129,94 +230,22 @@ on_open1_activate (GtkMenuItem *menuitem, gtk_file_filter_add_pattern(filter, "*"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter); - do { if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) { - PsppireVarStore *var_store ; - PsppireDataStore *data_store ; - struct dictionary *new_dict; - struct sfm_read_info ri; - struct sfm_reader *reader ; - - GtkWidget *data_sheet = get_widget_assert(xml, "data_sheet"); - GtkWidget *var_sheet = get_widget_assert(xml, "variable_sheet"); - gchar *file_name; - - g_assert(data_sheet); - g_assert(var_sheet); - - file_name = gtk_file_chooser_get_filename - (GTK_FILE_CHOOSER (dialog)); - - if ( psppire_handle ) - fh_free(psppire_handle); - - psppire_handle = - fh_create_file (handle_name, file_name, fh_default_properties()); - - if ( !psppire_handle ) - { - g_warning("Cannot read handle for reading system file \"%s\"\n", - file_name); - continue; - } - - - reader = sfm_open_reader (psppire_handle, &new_dict, &ri); - - if ( ! reader ) - continue; - - the_dictionary = psppire_dict_new_from_dict(new_dict); - - var_store = - PSPPIRE_VAR_STORE(gtk_sheet_get_model(GTK_SHEET(var_sheet))); - - psppire_var_store_set_dictionary(var_store, the_dictionary); - - - data_store = - PSPPIRE_DATA_STORE(gtk_sheet_get_model(GTK_SHEET(data_sheet))); + gchar *file_name = + gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (dialog)); + finished = load_system_file(file_name) ; - psppire_data_store_set_dictionary(data_store, - the_dictionary); - - psppire_case_array_clear(data_store->cases); - - - psppire_set_window_title(basename(file_name)); - - g_free (file_name); - - { - const int ni = dict_get_next_value_idx(the_dictionary->dict); - gint case_num; - if ( ni == 0 ) - goto done; - - - for(case_num=0;;case_num++) - { - if (!psppire_case_array_append_case(the_cases, - populate_case_from_reader, - reader)) - break; - } - } - - sfm_close_reader(reader); - finished = TRUE; + g_free(file_name); } else - { - finished = TRUE; - } + finished = TRUE; + } while ( ! finished ) ; - done: gtk_widget_destroy (dialog); } @@ -575,8 +604,10 @@ data_var_select(GtkNotebook *notebook, switch_menus(page_num); } -static void -var_data_selection_init() + +/* Initialised things on the variable sheet */ +void +var_data_selection_init(void) { notebook = GTK_NOTEBOOK(get_widget_assert(xml, "notebook1")); menuitems[PAGE_DATA_SHEET] = get_widget_assert(xml, "data1"); @@ -608,14 +639,3 @@ on_variables1_activate(GtkMenuItem *menuitem, select_sheet(PAGE_VAR_SHEET); } - -/* Callback which occurs when gtk_main is entered */ -gboolean -callbacks_on_init(gpointer data) -{ - psppire_set_window_title(untitled); - - var_data_selection_init(); - - return FALSE; -}