- fixed clean rule
[FaRetSys.git] / MainWindow.cs
blob02ede04c074a3fa7afbfbc5a6c88e93b76854642
1 using System;
2 using System.Collections;
3 using System.IO;
4 using Gtk;
5 using Glade;
6 using Mono.Unix;
8 namespace Eithne
10 public class MainWindow
12 [Widget] Window EithneWindow;
13 [Widget] Statusbar StatusBar;
14 [Widget] ImageMenuItem MenuFileNew;
15 [Widget] ImageMenuItem MenuFileOpen;
16 [Widget] ImageMenuItem MenuFileSave;
17 [Widget] ImageMenuItem MenuFileSaveAs;
18 [Widget] ImageMenuItem MenuFilePreferences;
19 [Widget] ImageMenuItem MenuFileQuit;
20 [Widget] ImageMenuItem MenuSystemRun;
21 [Widget] ImageMenuItem MenuSystemStop;
22 [Widget] ImageMenuItem MenuHelpPluginList;
23 [Widget] ImageMenuItem MenuHelpAbout;
24 [Widget] ScrolledWindow PluginToolboxSocket;
25 [Widget] ScrolledWindow SchematicSocket;
26 [Widget] ToolButton ToolbarNew;
27 [Widget] ToolButton ToolbarOpen;
28 [Widget] ToolButton ToolbarSave;
29 [Widget] ToolButton ToolbarRun;
31 private Schematic schematic;
32 private Engine2 engine;
33 private string filename = "";
35 private static MainWindow mw = null;
37 private static bool AlphaChannel = false;
39 private string Filename
41 get { return filename; }
42 set
44 filename = value;
46 if(filename == "")
47 EithneWindow.Title = About.Name;
48 else
49 EithneWindow.Title = About.Name + " (" + filename + ")";
53 public MainWindow(string[] args)
55 Glade.XML gxml = new Glade.XML("MainWindow.glade", "EithneWindow");
56 gxml.BindFields(this);
58 if(EithneWindow.Screen.RgbaColormap != null)
60 AlphaChannel = true;
61 EithneWindow.Colormap = EithneWindow.Screen.RgbaColormap;
64 EithneWindow.IconList = new Gdk.Pixbuf[2] {new Gdk.Pixbuf(null, "icon-48.png"), new Gdk.Pixbuf(null, "icon-16.png")};
66 EithneWindow.DeleteEvent += OnWindowDelete;
68 EithneWindow.Title = About.Name;
70 StatusBar.Push(1, String.Format(Catalog.GetString("Welcome to {0}!"), About.Name));
72 MenuFileNew.Image = new Image(null, "document-new.png");
73 MenuFileNew.Activated += OnNew;
74 MenuFileOpen.Image = new Image(null, "document-open.png");
75 MenuFileOpen.Activated += OnLoad;
76 MenuFileSave.Image = new Image(null, "document-save.png");
77 MenuFileSave.Activated += OnSave;
78 MenuFileSaveAs.Image = new Image(null, "document-save-as.png");
79 MenuFileSaveAs.Activated += OnSaveAs;
80 MenuFilePreferences.Image = new Image(null, "preferences-desktop.png");
81 MenuFilePreferences.Activated += delegate(object o, EventArgs eargs) { new Preferences(); };
82 MenuFileQuit.Image = new Image(null, "system-log-out.png");
83 MenuFileQuit.Activated += OnWindowDelete;
84 MenuSystemRun.Image = new Image(null, "media-playback-start.png");
85 MenuSystemRun.Activated += OnRun;
86 MenuSystemStop.Image = new Image(null, "media-playback-stop.png");
87 MenuSystemStop.Activated += OnRun;
88 MenuHelpPluginList.Image = new Image(null, "plugin-16.png");
89 MenuHelpPluginList.Activated += delegate(object o, EventArgs eargs) { new PluginList(); };
90 MenuHelpAbout.Image = new Image(null, "help-browser.png");
91 MenuHelpAbout.Activated += delegate(object o, EventArgs eargs) { new About(); };
93 ToolbarNew.IconWidget = new Image(null, "document-new-22.png");
94 ToolbarNew.Clicked += OnNew;
95 ToolbarOpen.IconWidget = new Image(null, "document-open-22.png");
96 ToolbarOpen.Clicked += OnLoad;
97 ToolbarSave.IconWidget = new Image(null, "document-save-22.png");
98 ToolbarSave.Clicked += OnSave;
99 ToolbarRun.IconWidget = new Image(null, "media-playback-start-22.png");
100 ToolbarRun.Clicked += OnRun;
102 schematic = new Schematic(StatusBar);
103 PluginToolboxSocket.AddWithViewport(new PluginToolbox(StatusBar, schematic));
104 SchematicSocket.AddWithViewport(schematic);
106 engine = new Engine2(schematic, SetRunToStart);
109 private void Run()
111 EithneWindow.ShowAll();
113 Application.Run();
116 private void OnWindowDelete(object o, EventArgs args)
118 if(engine.Running)
119 engine.Stop();
121 Application.Quit();
124 private void OnNew(object o, EventArgs args)
126 DialogQuestion q = new DialogQuestion(Catalog.GetString("Do you really want to discard old schematic?"));
128 if(q.Run())
130 schematic.Clear();
131 Filename = "";
133 StatusBar.Pop(1);
134 StatusBar.Push(1, Catalog.GetString("New system schematic ready"));
138 private void OnLoad(object o, EventArgs args)
140 FileChooserDialog fs = new FileChooserDialog(Catalog.GetString("Select file to load..."), EithneWindow,
141 FileChooserAction.Open, new object[] {Catalog.GetString("Cancel"), ResponseType.Cancel,
142 Catalog.GetString("Load"), ResponseType.Accept});
144 FileFilter filter = new FileFilter();
145 filter.Name = String.Format(Catalog.GetString("{0} system schematic"), About.Name);
146 filter.AddPattern("*.xml");
147 fs.AddFilter(filter);
148 filter = new FileFilter();
149 filter.Name = Catalog.GetString("All files");
150 filter.AddPattern("*");
151 fs.AddFilter(filter);
153 fs.Response += delegate(object obj, ResponseArgs eargs)
155 if(eargs.ResponseId == ResponseType.Accept)
157 ArrayList tmp = SaveLoad.Load(fs.Filename, schematic);
158 if(tmp != null)
160 schematic.Load(tmp);
161 Filename = fs.Filename;
163 StatusBar.Pop(1);
164 StatusBar.Push(1, String.Format(Catalog.GetString("{0} loaded"), Filename));
168 fs.Run();
169 fs.Destroy();
172 private void OnSaveAs(object o, EventArgs args)
174 FileChooserDialog fs = new FileChooserDialog(Catalog.GetString("Save as..."), EithneWindow, FileChooserAction.Save,
175 new object[] {Catalog.GetString("Cancel"), ResponseType.Cancel, Catalog.GetString("Save"),
176 ResponseType.Accept});
178 FileFilter filter = new FileFilter();
179 filter.Name = String.Format(Catalog.GetString("{0} system schematic"), About.Name);
180 filter.AddPattern("*.xml");
181 fs.AddFilter(filter);
182 filter = new FileFilter();
183 filter.Name = Catalog.GetString("All files");
184 filter.AddPattern("*");
185 fs.AddFilter(filter);
187 fs.Response += delegate(object obj, ResponseArgs eargs)
189 if(eargs.ResponseId == ResponseType.Accept)
191 Filename = fs.Filename;
193 if(!Path.HasExtension(Filename))
194 Filename = Path.ChangeExtension(Filename, ".xml");
196 SaveLoad.Save(Filename, schematic);
198 StatusBar.Pop(1);
199 StatusBar.Push(1, String.Format(Catalog.GetString("{0} saved"), Filename));
202 fs.Run();
203 fs.Destroy();
206 private void OnSave(object o, EventArgs args)
208 if(Filename == "")
209 OnSaveAs(o, args);
210 else
212 SaveLoad.Save(Filename, schematic);
214 StatusBar.Pop(1);
215 StatusBar.Push(1, String.Format(Catalog.GetString("{0} saved"), Filename));
219 private void OnRun(object o, EventArgs args)
221 if(engine.Running)
222 engine.Stop();
223 else
225 SetRunToStop();
226 engine.Start();
230 private void SetRunToStop()
232 ((Image)ToolbarRun.IconWidget).Pixbuf = new Gdk.Pixbuf(null, "media-playback-stop-22.png");
233 ToolbarRun.Label = Catalog.GetString("Stop");
235 MenuSystemRun.Sensitive = false;
236 MenuSystemStop.Sensitive = true;
239 private void SetRunToStart()
241 ((Image)ToolbarRun.IconWidget).Pixbuf = new Gdk.Pixbuf(null, "media-playback-start-22.png");
242 ToolbarRun.Label = Catalog.GetString("Run");
244 MenuSystemRun.Sensitive = true;
245 MenuSystemStop.Sensitive = false;
247 StatusBar.Pop(1);
248 StatusBar.Push(1, String.Format(Catalog.GetString("Elapsed time: {0}"), engine.ElapsedTime));
251 public void EmergencySave()
253 SaveLoad.Save("rescue.xml", schematic);
256 public static void RedrawSchematic()
258 mw.schematic.Redraw();
261 public static void Main(string[] args)
263 Catalog.Init("eithne", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "locale"));
265 Application.Init();
266 Splash s = new Splash();
268 Config.Init(UpdateHandler);
270 PluginDB.LoadPlugins(s);
272 s.Close();
276 mw = new MainWindow(args);
277 mw.Run();
279 catch(Exception e)
281 Console.WriteLine(e);
283 new FatalError(e, mw);
287 private static void UpdateHandler()
289 Block.CheckGConf();
290 Schematic.CheckGConf();
291 Engine2.CheckGConf();
294 public static bool HaveAlpha
296 get { return AlphaChannel; }