Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
 public void RegisterEvent(StaticString key, TransitionEventDelegate d)
 {
     try
     {
         m_DelegateMap[key.ToString()] += d.Invoke;
     }
     catch (KeyNotFoundException)
     {
         m_DelegateMap.Add(key.ToString(), d.Invoke);
     }
 }
Beispiel #3
0
 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));
     }
 }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
 }