2 using System
.Collections
;
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; }
47 EithneWindow
.Title
= About
.Name
;
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)
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
);
111 EithneWindow
.ShowAll();
116 private void OnWindowDelete(object o
, EventArgs args
)
124 private void OnNew(object o
, EventArgs args
)
126 DialogQuestion q
= new DialogQuestion(Catalog
.GetString("Do you really want to discard old schematic?"));
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
);
161 Filename
= fs
.Filename
;
164 StatusBar
.Push(1, String
.Format(Catalog
.GetString("{0} loaded"), Filename
));
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
);
199 StatusBar
.Push(1, String
.Format(Catalog
.GetString("{0} saved"), Filename
));
206 private void OnSave(object o
, EventArgs args
)
212 SaveLoad
.Save(Filename
, schematic
);
215 StatusBar
.Push(1, String
.Format(Catalog
.GetString("{0} saved"), Filename
));
219 private void OnRun(object o
, EventArgs args
)
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;
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"));
266 Splash s
= new Splash();
268 Config
.Init(UpdateHandler
);
270 PluginDB
.LoadPlugins(s
);
276 mw
= new MainWindow(args
);
281 Console
.WriteLine(e
);
283 new FatalError(e
, mw
);
287 private static void UpdateHandler()
290 Schematic
.CheckGConf();
291 Engine2
.CheckGConf();
294 public static bool HaveAlpha
296 get { return AlphaChannel; }