Internationalisation.
[pspp-builds.git] / src / ui / gui / menu-actions.c
index 38f73ebe55839804f89e4281d29dbd045355a2dc..f031ea7030e5a1b75f2898c752a9db36678c1a14 100644 (file)
 
 #include <config.h>
 #include <stdlib.h>
+#include <gettext.h>
+#define _(msgid) gettext (msgid)
+#define N_(msgid) msgid
+
 
 #include <data/file-handle-def.h>
 #include <data/sys-file-reader.h>
@@ -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,54 @@ 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 +114,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 +228,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 +602,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 +637,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;
-}