loupiottes/DMX-2.0/Main.cs
tzim afc21dccf0 * Conduite.cs: Amelioration de la boucle (precision du timing)
Gestion simple des erreurs dans la boucle

* Main.cs: Gestion des erreurs de l'interface

* Info.cs: les infos persistent 5s au lieu de 3
2013-11-21 10:59:26 +00:00

86 lines
No EOL
2.2 KiB
C#

using System;
using Gtk;
namespace DMX2
{
class MainClass
{
public static void Main (string[] args)
{
bool fullscreen = false, aguibtn = false;
// 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;
default:
break;
}
}
// 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 ();
}
}
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();
}
}
}