From 53515afef8553e2003bea8aa10711b2de3b9e1d4 Mon Sep 17 00:00:00 2001 From: tzim Date: Fri, 15 Nov 2013 10:57:19 +0000 Subject: [PATCH] --- DMX-2.0/SeqMacroUI.cs | 58 +++++++++++++++++---- DMX-2.0/SequenceurLineaire.cs | 2 +- DMX-2.0/SequenceurMacro.cs | 94 +++++++++++++++++++++++++++++++++-- 3 files changed, 139 insertions(+), 15 deletions(-) diff --git a/DMX-2.0/SeqMacroUI.cs b/DMX-2.0/SeqMacroUI.cs index d3f90e3..f9c7697 100644 --- a/DMX-2.0/SeqMacroUI.cs +++ b/DMX-2.0/SeqMacroUI.cs @@ -8,6 +8,7 @@ namespace DMX2 public partial class SeqMacroUI : SequenceurUI { bool fullUpdFlag = true; + bool updating; SequenceurMacro sequenceur; /* pointe sur les données */ ListStore lsEffets=null; /* liste des effets */ //TreeViewColumn nomCol; /* inutile dans le contexte macro */ @@ -18,20 +19,17 @@ namespace DMX2 effetChange = true; } - - void OnButtonPressedEvent (object o, ButtonPressEventArgs e) + void RenamePopup (object sender, ContextMenuEventArgs e) { - if (e.Event.Button == 3) /* right click */ - { Menu m = new Menu(); MenuItem renameItem = new MenuItem("Renommer le Sequenceur"); renameItem.ButtonPressEvent += new ButtonPressEventHandler(OnRenameItemButtonPressed); m.Add(renameItem); m.ShowAll(); m.Popup(); - } } + void OnRenameItemButtonPressed (object o, ButtonPressEventArgs args) { var dlg = new Dialog ("Nouveau Nom ?", GetAncestor(Gtk.Window.GType) as Gtk.Window , DialogFlags.Modal); var entry = new Entry (sequenceur.Name); @@ -233,11 +231,51 @@ namespace DMX2 sequenceur = s; ConstruitMatrice (); - frame1.ButtonPressEvent += OnButtonPressedEvent; + + new ContextMenuHelper(seqMasterScale,MasterPopup); + new ContextMenuHelper(frame1,RenamePopup); + new ContextMenuHelper(evBBox,CompteurPopup); } + void MasterPopup (object sender, ContextMenuEventArgs e) + { + Menu m = Conduite.Courante.EventManager.GetMenu(null, + delegate(object o,string eventId){ + sequenceur.BindMasterEvent(eventId); + } + ); + m.ShowAll(); + m.Popup(); + } + + void CompteurPopup (object sender, ContextMenuEventArgs e) + { + Menu m = new Menu(); + + MenuItem item = new MenuItem("Effet Suivant"); + m.Add(item); + item.Submenu = Conduite.Courante.EventManager.GetMenu(null, + delegate(object o,string eventId){ + sequenceur.BindEffetSuivantEvent(eventId); + } + ); + + item = new MenuItem("Effet Precedent"); + m.Add(item); + item.Submenu = Conduite.Courante.EventManager.GetMenu(null, + delegate(object o,string eventId){ + sequenceur.BindEffetPrecedentEvent(eventId); + } + ); + + m.ShowAll(); + m.Popup(); + + } + + public override void Update (bool full) { if (fullUpdFlag || full) @@ -260,6 +298,10 @@ namespace DMX2 SelectionneEffet (sequenceur.IndexLigneEnCours); posLabel.Text = string.Format("n°{0}",sequenceur.IndexLigneEnCours +1 ); } + updating = true; + seqMasterScale.Value = sequenceur.Master; + updating = false; + } @@ -297,8 +339,6 @@ namespace DMX2 }*/ - seqMasterScale.Value = sequenceur.Master; - posLabel.Text = string.Format("n°{0}",sequenceur.IndexLigneEnCours +1); fullUpdFlag=false; @@ -338,7 +378,7 @@ namespace DMX2 protected void OnSeqMasterScaleValueChanged (object sender, EventArgs e) { - if (fullUpdFlag)return; + if (updating)return; sequenceur.Master = (int)(seqMasterScale.Value); } diff --git a/DMX-2.0/SequenceurLineaire.cs b/DMX-2.0/SequenceurLineaire.cs index 9444855..7db7daf 100644 --- a/DMX-2.0/SequenceurLineaire.cs +++ b/DMX-2.0/SequenceurLineaire.cs @@ -599,7 +599,7 @@ namespace DMX2 if ((xmlE = el["EffetPrecedent"])!= null) foreach(string id in EventManager.LoadBindings(xmlE)) - BindEffetSuivantEvent(id); + BindEffetPrecedentEvent(id); foreach (var xc in el.GetElementsByTagName("CircuitSeq")) { diff --git a/DMX-2.0/SequenceurMacro.cs b/DMX-2.0/SequenceurMacro.cs index 5044feb..bb4ac4d 100644 --- a/DMX-2.0/SequenceurMacro.cs +++ b/DMX-2.0/SequenceurMacro.cs @@ -132,6 +132,11 @@ namespace DMX2 Dictionary valeurscourantes = new Dictionary (); Dictionary effetsEnCours = new Dictionary(); + actionEventTarget masterEventTarget=null; + actionEventTarget goNextEventTarget=null; + actionEventTarget goBackEventTarget=null; + + SeqMacroUI ui = null; bool change = false; int master = 100; @@ -158,7 +163,31 @@ namespace DMX2 public SequenceurMacro () { + masterEventTarget = new actionEventTarget ( + delegate(EventData data) { + Master = 100 * data.value / 255; + return true; + } + ); + goNextEventTarget = new actionEventTarget ( + delegate(EventData data) { + if(data.value>0) LigneSuivante(); + return true; + } + ); + + goBackEventTarget = new actionEventTarget ( + delegate(EventData data) { + if(data.value>0){ + if (IndexLigneEnCours > 0) { + IndexLigneaSuivre = IndexLigneEnCours - 1; + LigneSuivante (); + } + } + return true; + } + ); } @@ -401,16 +430,26 @@ namespace DMX2 public override void Save (System.Xml.XmlElement parent) { System.Xml.XmlElement el = parent.OwnerDocument.CreateElement ("SequenceurMacro"); - System.Xml.XmlElement xmlC; + System.Xml.XmlElement xmlEl; parent.AppendChild (el); el.SetAttribute ("id", ID.ToString ()); el.SetAttribute ("name", Name); - el.SetAttribute ("master", master.ToString ()); + //el.SetAttribute ("master", master.ToString ()); + + el.AppendChild(xmlEl = parent.OwnerDocument.CreateElement ("Master")); + xmlEl.SetAttribute("value",master.ToString()); + EventManager.SaveBindings(xmlEl,masterEventTarget); + + xmlEl = parent.OwnerDocument.CreateElement ("EffetSuivant"); + if(EventManager.SaveBindings(xmlEl,goNextEventTarget )) el.AppendChild(xmlEl); + + xmlEl = parent.OwnerDocument.CreateElement ("EffetPrecedent"); + if(EventManager.SaveBindings(xmlEl,goBackEventTarget )) el.AppendChild(xmlEl); foreach (Circuit c in circuitsSeq) { - el.AppendChild(xmlC = parent.OwnerDocument.CreateElement ("CircuitSeq")); - xmlC.SetAttribute("id",c.ID.ToString()); + el.AppendChild(xmlEl = parent.OwnerDocument.CreateElement ("CircuitSeq")); + xmlEl.SetAttribute("id",c.ID.ToString()); } foreach (Ligne li in lignes) { @@ -436,6 +475,35 @@ namespace DMX2 ui = null; } + public void BindMasterEvent (string eventId) + { + if(eventId.Length==0) + { + Conduite.Courante.EventManager.Unbind(masterEventTarget); + return; + } + Conduite.Courante.EventManager.Bind(eventId,masterEventTarget); + } + + public void BindEffetSuivantEvent (string eventId) + { + if (eventId.Length == 0) { + Conduite.Courante.EventManager.Unbind (goNextEventTarget); + return; + } + Conduite.Courante.EventManager.Bind(eventId,goNextEventTarget); + } + + public void BindEffetPrecedentEvent (string eventId) + { + if (eventId.Length == 0) { + Conduite.Courante.EventManager.Unbind (goBackEventTarget); + return; + } + Conduite.Courante.EventManager.Bind(eventId,goBackEventTarget); + } + + public static new SequenceurMacro Load (Conduite conduite, System.Xml.XmlElement el) { SequenceurMacro seq = new SequenceurMacro(); @@ -447,7 +515,23 @@ namespace DMX2 { ID = int.Parse (el.GetAttribute ("id")); Name = el.GetAttribute ("name"); - master = int.Parse (el.GetAttribute ("master")); + + XmlElement xmlE; + + if ((xmlE = el["Master"]) != null) { + master = int.Parse (xmlE.TryGetAttribute("value","100")); + foreach(string id in EventManager.LoadBindings(xmlE)) + BindMasterEvent(id); + } + else master = int.Parse (el.TryGetAttribute("master","100")); + + if ((xmlE = el["EffetSuivant"])!= null) + foreach(string id in EventManager.LoadBindings(xmlE)) + BindEffetSuivantEvent(id); + + if ((xmlE = el["EffetPrecedent"])!= null) + foreach(string id in EventManager.LoadBindings(xmlE)) + BindEffetPrecedentEvent(id); foreach (var xc in el.GetElementsByTagName("CircuitSeq")) { System.Xml.XmlElement xcir = xc as System.Xml.XmlElement;