using System; using Gtk; using System.Collections.Generic; using System.Diagnostics; namespace DMX2 { public partial class MainWindow: Gtk.Window { static MainWindow win; static object circuitKey = new object(); public static MainWindow Win { get { return win; } } public MainWindow (): base (Gtk.WindowType.Toplevel) { win=this; Build (); MajWidgets(); } protected void MajWidgets () { if (Conduite.Courante != null) { showAllAction.Sensitive = universAction.Sensitive = masterScale.Sensitive = seqLinAction.Sensitive = circAction.Sensitive = saveAction.Sensitive = saveAsAction.Sensitive = closeAction.Sensitive = true; openAction.Sensitive = newAction.Sensitive = false; this.Title = "DMX 2.0 - " + Conduite.Courante.Name; } else { showAllAction.Sensitive = universAction.Sensitive = masterScale.Sensitive = seqLinAction.Sensitive = circAction.Sensitive = saveAction.Sensitive = saveAsAction.Sensitive = closeAction.Sensitive = false; openAction.Sensitive = newAction.Sensitive = true; this.Title = "DMX 2.0"; } } protected void MajCircuits (bool full) { // Ajoute une ProgressBar par circuit, met a jour le texte si necessaire ProgressBar pb;int i = 0; if (full) { foreach (var widget in vboxCircuits.Children) vboxCircuits.Remove (widget); foreach (var circuit in Conduite.Courante.Circuits) { vboxCircuits.PackStart (pb=new ProgressBar (),false,false,0); pb.Text = (++i).ToString() + " - " + circuit.Name; pb.HeightRequest = 22; pb.Data[circuitKey] = circuit; } vboxCircuits.ShowAll (); } foreach (var widget in vboxCircuits.Children) { pb = (ProgressBar)widget; pb.Fraction = (double) (pb.Data[circuitKey] as Circuit).ValeurCourante / 255; } } protected void OnDeleteEvent (object sender, DeleteEventArgs a) { Application.Quit (); a.RetVal = true; } protected void OnQuitActionActivated (object sender, EventArgs e) { Application.Quit (); } protected void OnCircuitsActionActivated (object sender, EventArgs e) { GestionCircuits gc= new GestionCircuits(this); gc.Run(); gc.Destroy(); NextUpdateFull(); } protected void OnNewActionActivated (object sender, EventArgs e) { var dlg = new Dialog ("Nom ?", this, DialogFlags.Modal); var entry = new Entry ("Conduite sans Nom"); dlg.AddButton (Stock.Ok, ResponseType.Ok).GrabDefault(); dlg.AddButton (Stock.Cancel, ResponseType.Cancel); dlg.VBox.Add (new Label("Nom de la nouvelle Conduite :")); dlg.VBox.Add (entry); dlg.VBox.ShowAll (); entry.ActivatesDefault=true; if ((ResponseType)dlg.Run () == ResponseType.Ok) { Conduite.Courante = new Conduite (); Conduite.Courante.Name = entry.Text; } MajWidgets(); dlg.Destroy(); } protected void OnCloseActionActivated (object sender, EventArgs e) { Conduite.Courante.Dispose(); Conduite.Courante= null; MajWidgets(); } protected void OnSeqLinActionActivated (object sender, EventArgs e) { Sequenceur s = new SequenceurLineaire(); Conduite.Courante.AjoutSequenceur(s); AddSeqUI(s); } void AddSeqUI (Sequenceur s) { seqUiVbox.PackStart(s.GetUI(),false,false,0); seqUiVbox.ShowAll(); } bool updScheduled=false; bool fullUpdateFlag=false; public void NextUpdateFull () { fullUpdateFlag=true; } public void ScheduleUpdate () { if (updScheduled) { //Console.WriteLine("{0} Skip !",DateTime.Now); return; } updScheduled=true; Gtk.Application.Invoke(new EventHandler(Update)); } void Update (object sender, EventArgs e) { foreach (var sequi in seqUiVbox.Children) { (sequi as SequenceurUI).Update(fullUpdateFlag); } MajCircuits(fullUpdateFlag); fullUpdateFlag=false; updScheduled=false; } protected void OnMasterScaleValueChanged (object sender, EventArgs e) { Conduite.Courante.Master = (int)(masterScale.Value); } bool isfullscreen=false; protected void OnFullscreenAction1Activated (object sender, EventArgs e) { if (!isfullscreen) { Fullscreen (); isfullscreen = true; } else { Unfullscreen(); isfullscreen = false; } } EditionUnivers uDlg = null; protected void OnUniversActionActivated (object sender, EventArgs e) { if (uDlg != null) { uDlg.Show(); return; } uDlg = new EditionUnivers(this); uDlg.ShowAll(); uDlg.Destroyed += udlgDestroyed; } void udlgDestroyed (object sender, EventArgs e) { uDlg=null; } protected void OnShowAllActionActivated (object sender, EventArgs e) { foreach (Widget wid in new List(seqUiVbox.Children)) seqUiVbox.Remove(wid); foreach (Sequenceur s in Conduite.Courante.Sequenceurs) seqUiVbox.Add(s.GetUI()); } } }