using System; using Gtk; namespace DMX2 { class MainClass { public static void Main (string[] args) { bool fullscreen = false, aguibtn = false; WebServer ws = null; bool webserv = true; // Traitement des options en ligne de commande : foreach (string arg in args) { switch (arg) { case "fullscreen": case "fs": fullscreen = true; break; case "aguibtn": aguibtn=true; break; case "nows": webserv = false; break; default: break; } } if(webserv) ws = new WebServer(); // Initialisation GTK# Application.Init (); // Repertoire courrant est celui de l'executable System.IO.Directory.SetCurrentDirectory ( (new System.IO.FileInfo ( System.Reflection.Assembly.GetExecutingAssembly ().Location )).DirectoryName ); // Chargement du style GTK if (System.IO.File.Exists ("style.gtkrc")) Gtk.Rc.Parse ("style.gtkrc"); else using (System.IO.Stream stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("style.gtkrc")) using (System.IO.TextReader reader = new System.IO.StreamReader(stream)) Gtk.Rc.ParseString (reader.ReadToEnd ()); // Force l'instanciation du handle midi. IntPtr ptr = MidiEventProvider.MidiSeqHandle.Handle; // Creation de la fenetre principale MainWindow win = new MainWindow (); // application des options if(fullscreen) win.ToggleFullscreen(); if(aguibtn) win.AfficheBoutonACGUI(); // Gestion des erreurs non traitées dans l'interface GLib.ExceptionManager.UnhandledException += HandleUnhandledException; // Lancement win.Show (); Application.Run (); // Nettoyage if (Conduite.Courante != null) { Conduite.Courante.Dispose (); } if(ws!=null) ws.Dispose(); } static void HandleUnhandledException (GLib.UnhandledExceptionArgs args) { // En cas d'erreur non traitée : on affiche et on demande ... var dlg = new Dialog ("Erreur !", null, DialogFlags.Modal); dlg.AddButton ("Continuer ..." , ResponseType.Cancel ).GrabDefault(); dlg.AddButton ("Fermer l'application" , ResponseType.Close ); dlg.VBox.Add (new Label (args.ExceptionObject.ToString())); dlg.VBox.ShowAll (); // Si l'utilisateur a clique sur le bon bouton, on continue comme si de rien n'etait... args.ExitApplication= (ResponseType)dlg.Run() == ResponseType.Close ; dlg.Destroy(); } } }