diff --git a/DMX-2.0/Conduite.cs b/DMX-2.0/Conduite.cs
index 3f7d51d..88b4fb2 100644
--- a/DMX-2.0/Conduite.cs
+++ b/DMX-2.0/Conduite.cs
@@ -48,7 +48,7 @@ namespace DMX2
readonly SequenceurMaitre seqmaitre = new SequenceurMaitre();
readonly EventManager eventManager = new EventManager(); // Gestion des fournisseurs d'evenements
- actionEventTarget masterEventTarget; // Recepteur d'evenements pour le master
+ actionEventTargetEx masterEventTarget; // Recepteur d'evenements pour le master
readonly MidiEventProvider midip=null;
@@ -79,11 +79,15 @@ namespace DMX2
// La conduite peux recevoir des evenements midi
midip = new MidiEventProvider (eventManager);
- masterEventTarget = new actionEventTarget (
+ masterEventTarget = new actionEventTargetEx (
delegate(EventData data) {
Master = 100 * data.value / 255;
return true;
- }
+ },
+ delegate{
+ return master * 255 /100;
+ },
+ false
);
if (startthread) StartThread();
diff --git a/DMX-2.0/EventManager.cs b/DMX-2.0/EventManager.cs
index c90dbcf..db36745 100644
--- a/DMX-2.0/EventManager.cs
+++ b/DMX-2.0/EventManager.cs
@@ -132,6 +132,59 @@ namespace DMX2
#endregion
}
+ ///
+ /// Cible generique d'evenement.
+ ///
+ public class actionEventTargetEx : IEventTarget {
+ public delegate bool EventAction (EventData data);
+ public delegate int GetData();
+ EventAction action;
+ GetData getdata;
+ bool canfeedback=false , nofeedback=false;
+ readonly List fbInfos = new List();
+
+ public actionEventTargetEx(EventAction _action, GetData _getdata,bool feedback)
+ {
+ action=_action;
+ getdata = _getdata;
+ canfeedback = feedback;
+ }
+ #region IEventTarget implementation
+ bool IEventTarget.FireEvent (EventData data)
+ {
+ int val = getdata();
+
+ if (
+ (data.prev_value < val-5 && data.value < val-5) ||
+ (data.prev_value > val+5 && data.value > val+5)
+ ) {
+ return true;
+ }
+
+ nofeedback=true;
+ bool res =action(data);
+ nofeedback=false;
+ return res;
+ }
+
+ public void FeedBack (byte data)
+ {
+ if (nofeedback)
+ return;
+ foreach (var info in fbInfos) {
+ info.FeedBack(data);
+ }
+ }
+
+ void IEventTarget.Bind (string id){} // Rien a faire ici
+ void IEventTarget.Unbind (string id){}
+ bool IEventTarget.CanFeedback { get { return canfeedback; } }
+ void IEventTarget.AddFeedback (IFeedbackInfo info)
+ {
+ fbInfos.Add(info);
+ }
+ #endregion
+ }
public class EventManager
{
Dictionary bindings = new Dictionary();
diff --git a/DMX-2.0/SequenceurLineaire.cs b/DMX-2.0/SequenceurLineaire.cs
index bb025e7..277adae 100644
--- a/DMX-2.0/SequenceurLineaire.cs
+++ b/DMX-2.0/SequenceurLineaire.cs
@@ -220,7 +220,7 @@ namespace DMX2
Dictionary valeurschangees = new Dictionary ();
Dictionary targets = new Dictionary();
- actionEventTarget masterEventTarget=null;
+ actionEventTargetEx masterEventTarget=null;
actionEventTarget goNextEventTarget=null;
actionEventTarget goBackEventTarget=null;
@@ -241,11 +241,15 @@ namespace DMX2
{
effetcourrant = new Effet ("",valeurscourantes , TimeSpan.Zero, TimeSpan.Zero);
- masterEventTarget = new actionEventTarget (
+ masterEventTarget = new actionEventTargetEx (
delegate(EventData data) {
Master = 100 * data.value / 255;
return true;
- }
+ },
+ delegate{
+ return Master * 255 /100;
+ },
+ false
);
goNextEventTarget = new actionEventTarget (