diff --git a/DMX-2.0/EventManager.cs b/DMX-2.0/EventManager.cs index 4ebb355..407455e 100644 --- a/DMX-2.0/EventManager.cs +++ b/DMX-2.0/EventManager.cs @@ -62,6 +62,8 @@ namespace DMX2 /// Appelé par le Timer de la conduite /// Fonction a appeler pour chaque evenement. void ProcessEvents(EventManagerCallback callback); + + } /// @@ -122,6 +124,7 @@ namespace DMX2 { Dictionary bindings = new Dictionary(); List providers = new List(); + Dictionary feedbackLookup = new Dictionary(); class eventBinding { @@ -150,8 +153,11 @@ namespace DMX2 public void RegisterProvider (IEventProvider prov) { providers.Add (prov); - foreach( var bind in bindings) - prov.Bind(bind.Key); + foreach (var bind in bindings) { + if (prov.Bind (bind.Key)) { + feedbackLookup[bind.Key] = prov; + } + } } #region Menus @@ -213,6 +219,9 @@ 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 @@ -223,7 +232,10 @@ namespace DMX2 bindings[eventId].AddTarget(target); target.Bind(eventId); foreach (IEventProvider prov in providers) { - if(prov.Bind(eventId)) return true; + if(prov.Bind(eventId)) { + feedbackLookup[eventId] = prov; + return true; + } } return false; }