Cleaned up GUI, by objectifying the data editor. Removed a number of global variables.
[pspp-builds.git] / src / ui / gui / window-manager.c
1 #include "syntax-editor.h"
2 #include "data-editor.h"
3
4 #include <gettext.h>
5 #define _(msgid) gettext (msgid)
6 #define N_(msgid) msgid
7
8
9 #include "window-manager.h"
10
11
12 static int window_count = 0;
13
14 static void
15 deregister (GtkObject *o, gpointer data)
16 {
17   window_count --;
18
19   if ( 0 == window_count )
20     gtk_main_quit ();
21 };
22
23 static void set_window_name (struct editor_window *e, const gchar *name );
24
25
26 struct editor_window *
27 window_create (enum window_type type, const gchar *name)
28 {
29   struct editor_window *e;
30   switch (type)
31     {
32     case WINDOW_SYNTAX:
33       e = (struct editor_window *) new_syntax_editor ();
34       break;
35     case WINDOW_DATA:
36       e = (struct editor_window *) new_data_editor ();
37       break;
38     default:
39       g_assert_not_reached ();
40     };
41
42   e->type = type;
43   e->name = NULL;
44
45   set_window_name (e, name);
46
47
48   gtk_window_set_icon_from_file (GTK_WINDOW(e->window),
49                                  PKGDATADIR "/psppicon.png", 0);
50
51   g_signal_connect (e->window, "destroy", G_CALLBACK (deregister), NULL);
52
53   gtk_widget_show (e->window);
54
55   window_count ++;
56
57   return e;
58 }
59
60
61 static void
62 set_window_name (struct editor_window *e,
63                  const gchar *name )
64 {
65   gchar *title ;
66   g_free (e->name);
67
68
69   if ( name )
70     {
71       e->name = g_strdup (name);
72       return ;
73     }
74
75   switch (e->type )
76     {
77     case WINDOW_SYNTAX:
78       e->name = g_strdup_printf (_("Syntax%d"), window_count);
79       title = g_strdup_printf (_("%s --- PSPP Syntax Editor"), e->name);
80       break;
81     case WINDOW_DATA:
82       e->name = g_strdup_printf (_("Untitled%d"), window_count);
83       title = g_strdup_printf (_("%s --- PSPP Data Editor"), e->name);
84       break;
85     default:
86       g_assert_not_reached ();
87     }
88
89   gtk_window_set_title (GTK_WINDOW(e->window), title);
90
91   g_free (title);
92 }
93
94
95 void
96 window_set_name_from_filename (struct editor_window *e,
97                                const gchar *filename)
98 {
99   gchar *title;
100   gchar *basename = g_path_get_basename (filename);
101
102   set_window_name (e, filename);
103
104   switch (e->type )
105     {
106     case WINDOW_SYNTAX:
107       title = g_strdup_printf (_("%s --- PSPP Syntax Editor"), basename);
108       break;
109     case WINDOW_DATA:
110       title = g_strdup_printf (_("%s --- PSPP Data Editor"), basename);
111       break;
112     default:
113       g_assert_not_reached ();
114     }
115   g_free (basename);
116
117   gtk_window_set_title (GTK_WINDOW(e->window), title);
118
119   g_free (title);
120 }
121
122
123 GtkWindow *
124 window_toplevel (const struct editor_window *e)
125 {
126   return GTK_WINDOW(e->window);
127 }
128
129 const gchar *
130 window_name (const struct editor_window *e)
131 {
132   return e->name;
133 }