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