From 21023ce2fa6ad72d905fd266bd38202b6c69bf61 Mon Sep 17 00:00:00 2001 From: tzim Date: Thu, 15 May 2014 11:58:00 +0000 Subject: [PATCH] --- DMX-2.0/DriverBoitierV1.cs | 8 +++++- DMX-2.0/DriverBoitierV2.cs | 6 +++++ DMX-2.0/DriverBoitierV3.cs | 6 +++++ DMX-2.0/EventManager.cs | 30 +++++++++++++++++------ DMX-2.0/MidiEventProvider.cs | 17 ++++++++++++- DMX-2.0/SequenceurLineaire.cs | 24 +++++++++++++++++- DMX-2.0/gtk-gui/DMX2.DriverBoitierV1UI.cs | 1 + DMX-2.0/gtk-gui/DMX2.DriverBoitierV2UI.cs | 1 + DMX-2.0/gtk-gui/DMX2.DriverBoitierV3UI.cs | 1 + 9 files changed, 83 insertions(+), 11 deletions(-) diff --git a/DMX-2.0/DriverBoitierV1.cs b/DMX-2.0/DriverBoitierV1.cs index be64a37..d9ca806 100644 --- a/DMX-2.0/DriverBoitierV1.cs +++ b/DMX-2.0/DriverBoitierV1.cs @@ -298,7 +298,13 @@ namespace DMX2 return "Boitier V1"; } } - #endregion + + IFeedbackInfo IEventProvider.GetFeedbackInfo (string eventId) + { + return null; + } + + #endregion #region implemented abstract members of DMX2.DriverDMX public override void Save (System.Xml.XmlElement parent) diff --git a/DMX-2.0/DriverBoitierV2.cs b/DMX-2.0/DriverBoitierV2.cs index 67ad31c..ca47018 100644 --- a/DMX-2.0/DriverBoitierV2.cs +++ b/DMX-2.0/DriverBoitierV2.cs @@ -533,6 +533,12 @@ namespace DMX2 return "Boitier V2"; } } + + IFeedbackInfo IEventProvider.GetFeedbackInfo (string eventId) + { + return null; + } + #endregion #region implemented abstract members of DMX2.DriverDMX diff --git a/DMX-2.0/DriverBoitierV3.cs b/DMX-2.0/DriverBoitierV3.cs index 8e7df94..999ff8b 100644 --- a/DMX-2.0/DriverBoitierV3.cs +++ b/DMX-2.0/DriverBoitierV3.cs @@ -590,6 +590,12 @@ namespace DMX2 return "Boitier V3"; } } + + IFeedbackInfo IEventProvider.GetFeedbackInfo (string eventId) + { + return null; + } + #endregion #region implemented abstract members of DMX2.DriverDMX diff --git a/DMX-2.0/EventManager.cs b/DMX-2.0/EventManager.cs index 407455e..8ee6cfb 100644 --- a/DMX-2.0/EventManager.cs +++ b/DMX-2.0/EventManager.cs @@ -63,7 +63,7 @@ namespace DMX2 /// Fonction a appeler pour chaque evenement. void ProcessEvents(EventManagerCallback callback); - + IFeedbackInfo GetFeedbackInfo(string eventId); } /// @@ -84,6 +84,13 @@ namespace DMX2 /// l'id de l'evenement void Unbind(string id); + bool CanFeedback{ get; } + void AddFeedback(IFeedbackInfo info); + + } + + public interface IFeedbackInfo { + bool FeedBack(byte data); } /// @@ -115,16 +122,19 @@ namespace DMX2 void IEventTarget.Bind (string id){} // Rien a faire ici void IEventTarget.Unbind (string id){} + bool IEventTarget.CanFeedback { get { return false; } } + void IEventTarget.AddFeedback (IFeedbackInfo info) + { + throw new System.NotImplementedException (); + } #endregion } - public class EventManager { Dictionary bindings = new Dictionary(); List providers = new List(); - Dictionary feedbackLookup = new Dictionary(); class eventBinding { @@ -155,7 +165,11 @@ namespace DMX2 providers.Add (prov); foreach (var bind in bindings) { if (prov.Bind (bind.Key)) { - feedbackLookup[bind.Key] = prov; + IFeedbackInfo info = prov.GetFeedbackInfo(bind.Key); + if(info!=null) + foreach(IEventTarget target in bind.Value.Targets) + if(target.CanFeedback) + target.AddFeedback(info); } } } @@ -219,9 +233,6 @@ namespace DMX2 public void UnregisterProvider (IEventProvider prov) { providers.Remove(prov); - var q = from feedback in feedbackLookup where feedback.Value == prov select feedback.Key; - foreach(string id in q.ToArray()) - feedbackLookup.Remove(id); } /// Enregistrement d'une association id => cible @@ -233,7 +244,10 @@ namespace DMX2 target.Bind(eventId); foreach (IEventProvider prov in providers) { if(prov.Bind(eventId)) { - feedbackLookup[eventId] = prov; + if(target.CanFeedback){ + IFeedbackInfo info = prov.GetFeedbackInfo(eventId); + if(info!=null) target.AddFeedback(info); + } return true; } } diff --git a/DMX-2.0/MidiEventProvider.cs b/DMX-2.0/MidiEventProvider.cs index 5fa8396..ef5a3bc 100644 --- a/DMX-2.0/MidiEventProvider.cs +++ b/DMX-2.0/MidiEventProvider.cs @@ -72,7 +72,17 @@ namespace DMX2 } } + class midiFeedbackInfo : IFeedbackInfo { + #region IFeedbackInfo implementation + bool IFeedbackInfo.FeedBack (byte data) + { + throw new System.NotImplementedException (); + } + #endregion + } + Dictionary eventlist = new Dictionary(); + EventData last; internalEvent levent=null; bool connected=false; @@ -201,8 +211,13 @@ namespace DMX2 return "Midi"; } } + + IFeedbackInfo IEventProvider.GetFeedbackInfo (string eventId) + { + return null; + } + #endregion } } - diff --git a/DMX-2.0/SequenceurLineaire.cs b/DMX-2.0/SequenceurLineaire.cs index 661d121..47fdb54 100644 --- a/DMX-2.0/SequenceurLineaire.cs +++ b/DMX-2.0/SequenceurLineaire.cs @@ -171,6 +171,20 @@ namespace DMX2 valeursrecues.Remove(id); } + List feedbacks = new List(); + + bool IEventTarget.CanFeedback { get { return false; } } + + void IEventTarget.AddFeedback (IFeedbackInfo info) + { + feedbacks.Add(info); + } + + public void FeedBack(byte data){ + foreach (var fb in feedbacks) + fb.FeedBack(data); + } + /*IEnumerable IEventTarget.IDs { get { return valeursrecues.Keys; @@ -316,6 +330,9 @@ namespace DMX2 { valeurschangees [c] = true; valeurscourantes [c] = value; + lock(this) + if(targets.ContainsKey(c)) + targets[c].FeedBack((byte)value); } public bool EstChange (Circuit c) @@ -357,6 +374,8 @@ namespace DMX2 foreach (Circuit c in circuitsSeq) { if (valeurscourantes [c] != effetcourrant [c] && !valeurschangees.ContainsKey (c)) { valeurscourantes [c] = (int)(progression * (effetcourrant [c] - valeursinitiales [c]) + valeursinitiales [c]); + if(targets.ContainsKey(c)) + targets[c].FeedBack((byte)valeurscourantes [c]); } } } else { @@ -380,8 +399,11 @@ namespace DMX2 lock(this) { enTransition = false; foreach (Circuit c in circuitsSeq) - if (!valeurschangees.ContainsKey (c)) + if (!valeurschangees.ContainsKey (c)){ valeurscourantes [c] = effetcourrant [c]; + if(targets.ContainsKey(c)) + targets[c].FeedBack((byte)valeurscourantes [c]); + } } } diff --git a/DMX-2.0/gtk-gui/DMX2.DriverBoitierV1UI.cs b/DMX-2.0/gtk-gui/DMX2.DriverBoitierV1UI.cs index 6d3dac6..758efa1 100644 --- a/DMX-2.0/gtk-gui/DMX2.DriverBoitierV1UI.cs +++ b/DMX-2.0/gtk-gui/DMX2.DriverBoitierV1UI.cs @@ -35,6 +35,7 @@ namespace DMX2 w1.Fill = false; // Container child vbox2.Gtk.Box+BoxChild this.table1 = new global::Gtk.Table (((uint)(3)), ((uint)(2)), false); + this.table1.Name = "table1"; this.table1.RowSpacing = ((uint)(6)); this.table1.ColumnSpacing = ((uint)(6)); // Container child table1.Gtk.Table+TableChild diff --git a/DMX-2.0/gtk-gui/DMX2.DriverBoitierV2UI.cs b/DMX-2.0/gtk-gui/DMX2.DriverBoitierV2UI.cs index c089e20..119dee8 100644 --- a/DMX-2.0/gtk-gui/DMX2.DriverBoitierV2UI.cs +++ b/DMX-2.0/gtk-gui/DMX2.DriverBoitierV2UI.cs @@ -45,6 +45,7 @@ namespace DMX2 w1.Fill = false; // Container child vbox2.Gtk.Box+BoxChild this.table1 = new global::Gtk.Table (((uint)(4)), ((uint)(5)), false); + this.table1.Name = "table1"; this.table1.RowSpacing = ((uint)(6)); this.table1.ColumnSpacing = ((uint)(6)); // Container child table1.Gtk.Table+TableChild diff --git a/DMX-2.0/gtk-gui/DMX2.DriverBoitierV3UI.cs b/DMX-2.0/gtk-gui/DMX2.DriverBoitierV3UI.cs index bfb8537..6d48500 100644 --- a/DMX-2.0/gtk-gui/DMX2.DriverBoitierV3UI.cs +++ b/DMX-2.0/gtk-gui/DMX2.DriverBoitierV3UI.cs @@ -48,6 +48,7 @@ namespace DMX2 w1.Fill = false; // Container child vbox2.Gtk.Box+BoxChild this.table1 = new global::Gtk.Table (((uint)(5)), ((uint)(4)), false); + this.table1.Name = "table1"; this.table1.RowSpacing = ((uint)(6)); this.table1.ColumnSpacing = ((uint)(6)); // Container child table1.Gtk.Table+TableChild