Refactor Data and Syntax Loading
authorJohn Darrington <john@darrington.wattle.id.au>
Thu, 5 Mar 2009 05:35:25 +0000 (14:35 +0900)
committerJohn Darrington <john@darrington.wattle.id.au>
Thu, 5 Mar 2009 05:35:25 +0000 (14:35 +0900)
src/ui/gui/psppire-data-window.c
src/ui/gui/psppire-data-window.h
src/ui/gui/psppire-syntax-window.c
src/ui/gui/psppire-syntax-window.h
src/ui/gui/psppire-window.c
src/ui/gui/psppire-window.h
src/ui/gui/psppire.c
src/ui/gui/psppire.h

index 5849df4af26db6112a6e09f56934d64d4b8c83d7..16db8131a16c4970efa7380cda16c1de2b557181 100644 (file)
@@ -161,6 +161,7 @@ extern PsppireVarStore *the_var_store;
 extern struct dataset *the_dataset;
 extern PsppireDataStore *the_data_store ;
 
+extern GtkRecentManager *the_recent_mgr;
 
 static void
 set_paste_menuitem_sensitivity (PsppireDataWindow *de, gboolean x)
@@ -343,9 +344,8 @@ dump_rm (GtkRecentManager *rm)
 #endif
 
 
-void
-psppire_data_window_load_file (PsppireDataWindow *de,
-                              const gchar *file_name)
+static gboolean
+load_file (PsppireWindow *de, const gchar *file_name)
 {
   struct getl_interface *sss;
   struct string filename;
@@ -355,26 +355,23 @@ psppire_data_window_load_file (PsppireDataWindow *de,
 
   sss = create_syntax_string_source ("GET FILE=%s.",
                                     ds_cstr (&filename));
+
   ds_destroy (&filename);
 
   if (execute_syntax (sss) )
     {
-      psppire_window_set_filename (PSPPIRE_WINDOW (de), file_name);
-      add_most_recent (file_name, the_recent_mgr);
-    }
-  else
-    {
-      delete_recent (file_name, the_recent_mgr);
+      psppire_window_set_filename (de, file_name);
+      return TRUE;
     }
 
-  psppire_window_set_unsaved (PSPPIRE_WINDOW (de), FALSE);
+  return FALSE;
 }
 
 
 /* Callback for the data_open action.
    Prompts for a filename and opens it */
 static void
-open_data_dialog (GtkAction *action, PsppireDataWindow *de)
+open_data_dialog (GtkAction *action, PsppireWindow *de)
 {
   GtkWidget *dialog =
     gtk_file_chooser_dialog_new (_("Open"),
@@ -420,7 +417,7 @@ open_data_dialog (GtkAction *action, PsppireDataWindow *de)
        gchar *name =
          gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
 
-       psppire_data_window_load_file (de, name);
+       psppire_window_load (de, name);
 
        g_free (name);
       }
@@ -898,10 +895,9 @@ create_var_sheet_variable_popup_menu (PsppireDataWindow *de)
 
 static void
 on_recent_data_select (GtkMenuShell *menushell,
-                      gpointer user_data)
+                      PsppireWindow *window)
 {
   gchar *file;
-  PsppireDataWindow  *de = PSPPIRE_DATA_WINDOW (user_data);
 
   gchar *uri =
     gtk_recent_chooser_get_current_uri (GTK_RECENT_CHOOSER (menushell));
@@ -910,7 +906,7 @@ on_recent_data_select (GtkMenuShell *menushell,
 
   g_free (uri);
 
-  psppire_data_window_load_file (de, file);
+  psppire_window_load (window, file);
 
   g_free (file);
 }
@@ -931,8 +927,10 @@ on_recent_files_select (GtkMenuShell *menushell,   gpointer user_data)
 
   se = psppire_syntax_window_new ();
 
-  psppire_syntax_window_load_from_file (PSPPIRE_SYNTAX_WINDOW (se), file, NULL);
-  gtk_widget_show (se);
+  if ( psppire_window_load (PSPPIRE_WINDOW (se), file) ) 
+    gtk_widget_show (se);
+  else
+    gtk_widget_destroy (se);
 
   g_free (file);
 }
@@ -1796,4 +1794,5 @@ static void
 psppire_data_window_iface_init (PsppireWindowIface *iface)
 {
   iface->save = data_save;
+  iface->load = load_file;
 }
index bd9f516ebe805485a13bba36765585d6a17c65c2..1b6deab12ab1f30c5ccada6a8e135d31ce349372 100644 (file)
@@ -74,8 +74,6 @@ struct _PsppireDataWindowClass
 
 GType      psppire_data_window_get_type        (void);
 GtkWidget* psppire_data_window_new             (void);
-void       psppire_data_window_load_file (PsppireDataWindow *, const gchar *);
-
 
 G_END_DECLS
 
index e5998cc6ad2b24e250304a9a7d384e36733e56c3..86d87bb92b22a4f7a5086215b8ba7e26eb8e4745 100644 (file)
@@ -395,16 +395,10 @@ open_syntax_window (GtkMenuItem *menuitem, gpointer parent)
 
       GtkWidget *se = psppire_syntax_window_new ();
 
-      if ( psppire_syntax_window_load_from_file (PSPPIRE_SYNTAX_WINDOW (se), file_name, NULL) )
-       {
-         add_most_recent (file_name, the_recent_mgr);
-       }
+      if ( psppire_window_load (PSPPIRE_WINDOW (se), file_name) ) 
+       gtk_widget_show (se);
       else
-       {
-         delete_recent (file_name, the_recent_mgr);
-       }
-
-      gtk_widget_show (se);
+       gtk_widget_destroy (se);
     }
 
   gtk_widget_destroy (dialog);
@@ -562,34 +556,34 @@ psppire_syntax_window_new (void)
 /*
   Loads the buffer from the file called FILENAME
 */
-gboolean
-psppire_syntax_window_load_from_file (PsppireSyntaxWindow *se,
-                                     const gchar *filename,
-                                     GError **err)
+static gboolean
+syntax_load (PsppireWindow *window, const gchar *filename)
 {
   gchar *text;
   GtkTextIter iter;
+  PsppireSyntaxWindow *sw = PSPPIRE_SYNTAX_WINDOW (window);
 
-  gchar *glibfilename = g_filename_from_utf8 (filename, -1, 0, 0, err);
+  gchar *glibfilename = g_filename_from_utf8 (filename, -1, 0, 0, NULL);
 
   if ( ! glibfilename )
     return FALSE;
 
   /* FIXME: What if it's a very big file ? */
-  if ( ! g_file_get_contents (glibfilename, &text, NULL, err) )
+  if ( ! g_file_get_contents (glibfilename, &text, NULL, NULL) )
     {
       g_free (glibfilename);
       return FALSE;
     }
+
   g_free (glibfilename);
 
-  gtk_text_buffer_get_iter_at_line (se->buffer, &iter, 0);
+  gtk_text_buffer_get_iter_at_line (sw->buffer, &iter, 0);
 
-  gtk_text_buffer_insert (se->buffer, &iter, text, -1);
+  gtk_text_buffer_insert (sw->buffer, &iter, text, -1);
 
-  psppire_window_set_filename (PSPPIRE_WINDOW (se), filename);
+  psppire_window_set_filename (window, filename);
 
-  gtk_text_buffer_set_modified (se->buffer, FALSE);
+  gtk_text_buffer_set_modified (sw->buffer, FALSE);
 
   return TRUE;
 }
@@ -600,4 +594,5 @@ static void
 psppire_syntax_window_iface_init (PsppireWindowIface *iface)
 {
   iface->save = syntax_save;
+  iface->load = syntax_load;
 }
index 2144b86fe6f44165575e93c8eb232e458471b19a..c863a92f1a24e335439c43721a2c0c11da215ace 100644 (file)
@@ -62,10 +62,6 @@ struct _PsppireSyntaxWindowClass
 GType      psppire_syntax_window_get_type        (void);
 GtkWidget* psppire_syntax_window_new             (void);
 
-gboolean   psppire_syntax_window_load_from_file (PsppireSyntaxWindow *se,
-                                                       const gchar *filename,
-                                                       GError **err);
-
 void open_syntax_window (GtkMenuItem *menuitem, gpointer parent);
 void create_syntax_window (void);
 
index 6bd6603b60cedf9df509c5cffb2f1368fb2f677d..f0d6d9162968f27c89576fc4d405b8d719898702 100644 (file)
@@ -16,6 +16,7 @@
 
 #include <config.h>
 
+
 #include <gtk/gtkstock.h>
 #include <gtk/gtkmessagedialog.h>
 #include <gtk/gtksignal.h>
@@ -577,11 +578,40 @@ psppire_window_save (PsppireWindow *w)
   i->save (w);
 }
 
+extern GtkRecentManager *the_recent_mgr;
+
+static void add_most_recent (const char *file_name, GtkRecentManager *rm);
+static void delete_recent (const char *file_name, GtkRecentManager *rm);
+
+gboolean
+psppire_window_load (PsppireWindow *w, const gchar *file)
+{
+  gboolean ok;
+  PsppireWindowIface *i = PSPPIRE_WINDOW_MODEL_GET_IFACE (w);
+
+  g_assert (PSPPIRE_IS_WINDOW_MODEL (w));
+
+  g_assert (i);
+
+  g_return_val_if_fail (i->load, FALSE);
+
+  ok =  i->load (w, file);
+
+  if ( ok )
+    add_most_recent (file, the_recent_mgr);
+  else
+    delete_recent (file, the_recent_mgr);
+
+  psppire_window_set_unsaved (w, FALSE);
+
+  return ok;
+}
+
 
 /* Puts FILE_NAME into the recent list.
    If it's already in the list, it moves it to the top
 */
-void
+static void
 add_most_recent (const char *file_name, GtkRecentManager *rm)
 {
   gchar *uri = g_filename_to_uri  (file_name, NULL, NULL);
@@ -597,7 +627,7 @@ add_most_recent (const char *file_name, GtkRecentManager *rm)
 /* 
    If FILE_NAME exists in the recent list, then  delete it.
  */
-void
+static void
 delete_recent (const char *file_name, GtkRecentManager *rm)
 {
   gchar *uri = g_filename_to_uri  (file_name, NULL, NULL);
index 67440ccd1232bcbd3e0ac9e4ad42b5e29a48e553..71c06538587f9099bb2c908414e6c394273bd66f 100644 (file)
@@ -87,6 +87,7 @@ struct _PsppireWindowIface
   GTypeInterface g_iface;
 
   void (*save) (PsppireWindow *w);
+  gboolean (*load) (PsppireWindow *w, const gchar *);
 };
 
 
@@ -106,9 +107,7 @@ gboolean psppire_window_get_unsaved (PsppireWindow *);
 gint psppire_window_query_save (PsppireWindow *);
 
 void psppire_window_save (PsppireWindow *w);
-
-void add_most_recent (const char *file_name, GtkRecentManager *rm);
-void delete_recent (const char *file_name, GtkRecentManager *rm);
+gboolean psppire_window_load (PsppireWindow *w, const gchar *file);
 
 
 G_END_DECLS
index dbba57b69d6d0063866ba3b295eceba1f0fb0a62..35dad91e5d49b50ba60d009e0d9d8745d4ea441d 100644 (file)
@@ -279,8 +279,7 @@ parse_non_options (int key, char *arg, struct argp_state *state)
     {
     case ARGP_KEY_ARG:
       {
-       psppire_data_window_load_file (PSPPIRE_DATA_WINDOW (the_data_window),
-                                      arg);
+       psppire_window_load (PSPPIRE_WINDOW (the_data_window), arg);
        break;
       }
     default:
index 0d990119469f8d89bb2f437ecb75196fb6cae5ff..408d858ba14b4e65ccfe11c36920a657b06d7c7d 100644 (file)
@@ -22,8 +22,6 @@
 struct command_line_processor ;
 extern const struct argp non_option_argp ;
 
-extern GtkRecentManager *the_recent_mgr;
-
 void initialize (struct command_line_processor *, int argc, char **argv);
 void de_initialize (void);
 void psppire_quit (void);