Better abstraction of the unsaved window status.
[pspp-builds.git] / src / ui / gui / psppire-window.h
index ab0efc3fcea95d8e0d5408f7314fe2afb771d3b0..c7025b355a3b2fe1f9e556f86fcf64e3071673c0 100644 (file)
 #include <gtk/gtkwindow.h>
 #include <gtk/gtkaction.h>
 #include <gtk/gtkmenushell.h>
+#include <gtk/gtkrecentmanager.h>
 
 G_BEGIN_DECLS
 
 
-#define PSPPIRE_WINDOW_TYPE            (psppire_window_get_type ())
-#define PSPPIRE_WINDOW(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), PSPPIRE_WINDOW_TYPE, PsppireWindow))
+#define PSPPIRE_TYPE_WINDOW            (psppire_window_get_type ())
+
+#define PSPPIRE_WINDOW(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+    PSPPIRE_TYPE_WINDOW, PsppireWindow))
+
 #define PSPPIRE_WINDOW_CLASS(class)    (G_TYPE_CHECK_CLASS_CAST ((class), \
-    PSPPIRE_WINDOW_TYPE, PsppireWindowClass))
+    PSPPIRE_TYPE_WINDOW, PsppireWindowClass))
+
 #define PSPPIRE_IS_WINDOW(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
-    PSPPIRE_WINDOW_TYPE))
+    PSPPIRE_TYPE_WINDOW))
+
 #define PSPPIRE_IS_WINDOW_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \
-    PSPPIRE_WINDOW_TYPE))
+    PSPPIRE_TYPE_WINDOW))
+
+
+
+#define PSPPIRE_TYPE_WINDOW_MODEL            (psppire_window_model_get_type ())
+
+#define PSPPIRE_IS_WINDOW_MODEL(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PSPPIRE_TYPE_WINDOW_MODEL))
+
+#define PSPPIRE_WINDOW_MODEL_GET_IFACE(obj) \
+   (G_TYPE_INSTANCE_GET_INTERFACE ((obj), PSPPIRE_TYPE_WINDOW_MODEL, PsppireWindowIface))
 
 
 typedef struct _PsppireWindow       PsppireWindow;
 typedef struct _PsppireWindowClass  PsppireWindowClass;
+typedef struct _PsppireWindowIface  PsppireWindowIface;
 
 
 struct _PsppireWindow
@@ -59,12 +75,24 @@ struct _PsppireWindow
   gboolean unsaved;
 };
 
+
 struct _PsppireWindowClass
 {
   GtkWindowClass parent_class;
 };
 
+
+struct _PsppireWindowIface
+{
+  GTypeInterface g_iface;
+
+  void (*save) (PsppireWindow *w);
+  gboolean (*load) (PsppireWindow *w, const gchar *);
+};
+
+
 GType      psppire_window_get_type        (void);
+GType      psppire_window_model_get_type        (void);
 
 const gchar * psppire_window_get_filename (PsppireWindow *);
 
@@ -72,12 +100,14 @@ void psppire_window_set_filename (PsppireWindow *w, const gchar *filename);
 
 void psppire_window_minimise_all (void);
 
-void psppire_window_set_unsaved (PsppireWindow *, gboolean );
+void psppire_window_set_unsaved (PsppireWindow *);
 
 gboolean psppire_window_get_unsaved (PsppireWindow *);
 
+gint psppire_window_query_save (PsppireWindow *);
 
-gboolean psppire_window_query_save (PsppireWindow *);
+void psppire_window_save (PsppireWindow *w);
+gboolean psppire_window_load (PsppireWindow *w, const gchar *file);
 
 
 G_END_DECLS