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(); ListStore ls; public static MainWindow Win { get { return win; } } public MainWindow (): base (Gtk.WindowType.Toplevel) { win=this; Build (); MajWidgets(); } protected void MajWidgets () { if (Conduite.Courante != null) { //Activation / Désactivation des boutons en fonction de l'état de la counduite courante 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; ConstruitMatrice(); } 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 ConstruitMatrice () { var idCol = new Gtk.TreeViewColumn(); var idCell = new Gtk.CellRendererText(); idCol.Title = "Num"; idCol.PackStart(idCell,true); idCol.SetCellDataFunc(idCell, new Gtk.TreeCellDataFunc( RenderMatriceNum) ); this.MatriceUI.AppendColumn(idCol); var nomCol = new Gtk.TreeViewColumn(); var nomCell = new Gtk.CellRendererText(); nomCol.Title = "Nom"; nomCol.PackStart(nomCell,true); nomCol.SetCellDataFunc(nomCell, new Gtk.TreeCellDataFunc( RenderMatriceNom) ); nomCell.Editable =true; nomCell.Edited += OnNomCellEdited; this.MatriceUI.AppendColumn(nomCol); var dureeCol = new Gtk.TreeViewColumn(); var dureeCell = new Gtk.CellRendererText(); dureeCol.Title = "Durée"; dureeCol.PackStart(dureeCell,true); dureeCol.SetCellDataFunc(dureeCell, new Gtk.TreeCellDataFunc( RenderMatriceDuree) ); dureeCell.Editable =true; dureeCell.Edited += OnDureeCellEdited; this.MatriceUI.AppendColumn(dureeCol); ls = new Gtk.ListStore(typeof (SequenceurMaitre.Ligne)); this.MatriceUI.Model = ls; } void RenderMatriceNum (TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter) { throw new NotImplementedException (); } void RenderMatriceNom (TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter) { throw new NotImplementedException (); } void RenderMatriceDuree (TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter) { throw new NotImplementedException (); } void OnNomCellEdited (object o, EditedArgs args) { throw new NotImplementedException (); } void OnDureeCellEdited (object o, EditedArgs args) { throw new NotImplementedException (); } 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(); } // bonton ajout de sequenceur linéraire protected void OnSeqLinActionActivated (object sender, EventArgs e) { Sequenceur s = new SequenceurLineaire(); Conduite.Courante.AjoutSequenceur(s); AddSeqUI(s); } void AddSeqUI (Sequenceur s) { VBox newvbox = new VBox(); newvbox.PackStart(s.GetUI(),false,false,0); onglets.Add (newvbox); onglets.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 notebookvbox in onglets.Children) { foreach (var sequi in (notebookvbox as VBox).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 (var notebookvbox in onglets.Children) notebookvbox.Destroy(); foreach (Sequenceur s in Conduite.Courante.Sequenceurs) { VBox newvbox = new VBox(); newvbox.Add(s.GetUI()); onglets.Add (newvbox); onglets.ShowAll(); } } protected void OnConnectActionActivated (object sender, EventArgs e) { Conduite.Courante.Drivers.Add( new DriverBoitierV1()); } } }