private void FireTransitionEvent <T>(BehaviorEvent <T> args, TransitionEventDelegate <T> transitionEventDelegate, string viewName) where T : IViewModel, new() { var transitionEvent = new TransitionEvent <T>(args) { ViewModel = args.ViewModel, ViewReference = viewName, PreviousViewReference = this.CurrentViewReference }; transitionEventDelegate(transitionEvent); if (viewName != null) { this.CurrentViewReference = viewName; } this.ScriptManager = ScriptManager.GetCurrent(this.Page); if (this.ScriptManager != null && this.ScriptManager.IsInAsyncPostBack && this.ScriptManager.EnableHistory && string.IsNullOrEmpty(viewName) == false) { this.ScriptManager.AddHistoryPoint(new NameValueCollection { { "pv", transitionEvent.PreviousViewReference } }, transitionEvent.PreviousViewReference); } }
public void RegisterEvent(StaticString key, TransitionEventDelegate d) { try { m_DelegateMap[key.ToString()] += d.Invoke; } catch (KeyNotFoundException) { m_DelegateMap.Add(key.ToString(), d.Invoke); } }
public void TriggerEvent(string name) { try { TransitionEventDelegate del = m_DelegateMap[name]; del.Invoke(); Evaluate(); } catch (KeyNotFoundException) { Log.Error(string.Format("Unable to find delegate event '{0}'", name)); } }
public TransitionConditionalFactory() { StaticString declType_OnDelay = new StaticString("TransitionConditional_OnDelay"); StaticString declType_OnEvent = new StaticString("TransitionConditional_OnEvent"); StaticString declType_OnState = new StaticString("TransitionConditional_OnState"); m_Type2DeclTypeMap.Add(declType_OnDelay, declType_OnDelay); m_Type2DeclTypeMap.Add(declType_OnEvent, declType_OnEvent); m_Type2DeclTypeMap.Add(declType_OnState, declType_OnState); m_Type2DeclTypeMap.Add(new StaticString("OnDelay"), declType_OnDelay); m_Type2DeclTypeMap.Add(new StaticString("OnEvent"), declType_OnEvent); m_Type2DeclTypeMap.Add(new StaticString("OnState"), declType_OnState); Action <Transition <TOwner>, StaticString, StaticString, List <StaticString> > handler = delegate(Transition <TOwner> transition, StaticString behaviorDeclType, StaticString name, List <StaticString> args) { try { Type eventType = typeof(TransitionEventDelegate); TransitionEventDelegate del = null; // If we want to only have one behavior per delegate we should create and cache it here // And then only register it once transition.AddConditional(AllocateAndAttachEventConditional(behaviorDeclType, name, ref del, eventType)); //Type TOwner = transition.Owner.GetType(); //MethodInfo methodInfo = typeof(TOwner).GetMethod( "RegisterDelegate", BindingFlags.Instance|BindingFlags.NonPublic|BindingFlags.Public ); //methodInfo.Invoke( transition.Owner, new object[] { args[0], del } ); transition.Owner.RegisterEvent(args[0], del); } catch (Exception ex) { Log.Exception(ex); } }; m_ConditionalAllocators.Add(declType_OnEvent, handler); handler = delegate(Transition <TOwner> transition, StaticString behaviorDeclType, StaticString name, List <StaticString> args) { var argInstsSlip = DataStructureLibrary <List <System.Object> > .Instance.CheckOut(); argInstsSlip.Value.Clear(); argInstsSlip.Value.Add(name); try { string behaviorQualifiedName = TransitionConditionalLibrary.Instance.FindAssemblyQualifiedName(behaviorDeclType.ToString(), 1); string argName = args[0].ToString(); object arg = transition.Owner.FindAssociatedOnDelayMethod(argName); if (arg == null) { arg = GetValue(transition.Owner, argName); } argInstsSlip.Value.Add(arg); //if (args.Count == 2) //{ // TransitionPlug<float> plug = new TransitionPlug<float>(); // transition.Owner.RegisterPlug(args[1], plug); // argInstsSlip.Value.Add(plug); //} transition.AddConditional(AllocateNonGenericConditional(behaviorQualifiedName, argInstsSlip.Value)); } catch (Exception ex) { Log.Exception(ex); } finally { argInstsSlip.Dispose(); } }; m_ConditionalAllocators.Add(declType_OnDelay, handler); handler = delegate(Transition <TOwner> transition, StaticString behaviorDeclType, StaticString name, List <StaticString> args) { var argInstsSlip = DataStructureLibrary <List <System.Object> > .Instance.CheckOut(); argInstsSlip.Value.Clear(); argInstsSlip.Value.Add(name); TransitionOnStateDelegate del = transition.Owner.FindAssociatedOnStateMethod(args[0].ToString()); ExceptionUtility.Verify <ArgumentException>(del != null, string.Format("Unable to find method {0} for OnState {1}( {0} );", args[0].ToString(), name.ToString())); argInstsSlip.Value.Add(del); try { string behaviorQualifiedName = TransitionConditionalLibrary.Instance.FindAssemblyQualifiedName(behaviorDeclType.ToString(), 1); transition.AddConditional(AllocateNonGenericConditional(behaviorQualifiedName, argInstsSlip.Value)); } catch (Exception ex) { Log.Exception(ex); } finally { argInstsSlip.Dispose(); } }; m_ConditionalAllocators.Add(declType_OnState, handler); }
public static ATransitionConditional <TOwner> AllocateAndAttachEventConditional(StaticString behaviorName, StaticString name, ref TransitionEventDelegate delegateInst, Type delegateType) { string behaviorQualifiedName = TransitionConditionalLibrary.Instance.FindAssemblyQualifiedName(behaviorName.ToString(), delegateType.GetGenericArguments().Length + 1); ATransitionConditional <TOwner> behavior = AllocateEventConditional(behaviorQualifiedName, name, delegateType); object[] argArray = new object[] { delegateInst }; try { Type t = behavior.GetType(); t.InvokeMember("AttachHandler", BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, null, behavior, argArray); } catch (Exception e) { Log.Error("User Caught Exception(t.InvokeMember): " + e.Message); } delegateInst = argArray[0] as TransitionEventDelegate; return(behavior); }
public void AddConditional(StaticString behaviorName, StaticString name, ref TransitionEventDelegate del) { ATransitionConditional <TOwner> behavior = TransitionConditionalFactory <TOwner> .AllocateAndAttachEventConditional(behaviorName, name, ref del, TypeExtensions.TypeOf(del)); AddConditional(behavior); }
public void RegisterEvent(StaticString key, TransitionEventDelegate d) { m_Controller.RegisterEvent(key, d); }
public void AttachHandler(ref TransitionEventDelegate d) { d += OnEvent; }
public TransitionConditional_OnEvent(StaticString name, ref TransitionEventDelegate d) : base(name) { AttachHandler(ref d); }