This commit is contained in:
tzim 2014-05-13 15:36:21 +00:00
parent e20ca3ba27
commit 313b1df8fa

View file

@ -62,6 +62,8 @@ namespace DMX2
/// <summary>Appelé par le Timer de la conduite</summary> /// <summary>Appelé par le Timer de la conduite</summary>
/// <param name='callback'>Fonction a appeler pour chaque evenement.</param> /// <param name='callback'>Fonction a appeler pour chaque evenement.</param>
void ProcessEvents(EventManagerCallback callback); void ProcessEvents(EventManagerCallback callback);
} }
/// <summary> /// <summary>
@ -122,6 +124,7 @@ namespace DMX2
{ {
Dictionary<string,eventBinding> bindings = new Dictionary<string,eventBinding>(); Dictionary<string,eventBinding> bindings = new Dictionary<string,eventBinding>();
List<IEventProvider> providers = new List<IEventProvider>(); List<IEventProvider> providers = new List<IEventProvider>();
Dictionary<string,IEventProvider> feedbackLookup = new Dictionary<string, IEventProvider>();
class eventBinding class eventBinding
{ {
@ -150,8 +153,11 @@ namespace DMX2
public void RegisterProvider (IEventProvider prov) public void RegisterProvider (IEventProvider prov)
{ {
providers.Add (prov); providers.Add (prov);
foreach( var bind in bindings) foreach (var bind in bindings) {
prov.Bind(bind.Key); if (prov.Bind (bind.Key)) {
feedbackLookup[bind.Key] = prov;
}
}
} }
#region Menus #region Menus
@ -213,6 +219,9 @@ namespace DMX2
public void UnregisterProvider (IEventProvider prov) public void UnregisterProvider (IEventProvider prov)
{ {
providers.Remove(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);
} }
///<summary> Enregistrement d'une association id => cible ///<summary> Enregistrement d'une association id => cible
@ -223,7 +232,10 @@ namespace DMX2
bindings[eventId].AddTarget(target); bindings[eventId].AddTarget(target);
target.Bind(eventId); target.Bind(eventId);
foreach (IEventProvider prov in providers) { foreach (IEventProvider prov in providers) {
if(prov.Bind(eventId)) return true; if(prov.Bind(eventId)) {
feedbackLookup[eventId] = prov;
return true;
}
} }
return false; return false;
} }