public void RaiseProgramError(PainState currentState) { if (this.OnProgramError != null) { PainProgramErrorEventArgs args = new PainProgramErrorEventArgs() { Context = this, Program = currentState.Program, State = currentState }; this.OnProgramError(this, args); args.Clean(); } }
////////////////////////////////////////////// public void RaiseProgramStart(PainState state, IList <PainMethodParam> finalParameters) { PainState currentState = this.Stack.Peek(); if (this.OnProgramStart != null) { PainProgramChangedEventArgs args = new PainProgramChangedEventArgs() { Context = this, Program = state.Program, State = state, Parameters = finalParameters }; this.OnProgramStart(this, args); args.Clean(); } }
public Boolean RaiseError(PainState currentState, Exception Error) { if (this.OnError != null) { PainErrorEventArgs args = new PainErrorEventArgs() { Context = this, Program = currentState.Program, State = currentState, Error = Error, Handled = false }; this.OnError(this, args); args.Clean(); return(args.Handled); } return(false); }
public PainState PopContext() { PainState currentState = this.Stack.Peek(); if (currentState != null && currentState.ContextType != PainContextType.GLOBAL) { RaiseProgramEnd(currentState); currentState.Clean(); PainState popedState = this.Stack.Pop(); this.CurrentState = this.Stack.Peek(); return(currentState); } return(null); }
////////////////////////////////////////////// //public PainState PushContext(String DisplayName, Guid ObjectID, PainContextType ContextType) public PainState PushContext( PainProgram Program, PainContextType ContextType, IList <Object> Parameters) { PainState state = new PainState(Program, ContextType); // DisplayName, ObjectID, ContextType); PainObject obj = state.Object; this.Stack.Push(state); this.CurrentState = state; List <PainMethodParam> finalParameters = new List <PainMethodParam>(); Int32 index = -1; if (Program is PainMethod) { PainMethod method = (PainMethod)Program; foreach (String parameter in method.Parameters) { index++; Object parameterValue = Parameters == null ? null : index < Parameters.Count ? Parameters[index] : new Undefined(); if (obj != null) { obj[parameter] = parameterValue; finalParameters.Add(new PainMethodParam() { Name = parameter, Value = parameterValue }); } } } if (obj != null) { foreach (PainMethod painMethod in Program.Methods) { if (state.Program is PainClass) { PainMethod newMethod = (PainMethod)painMethod.Clone(); newMethod.ParentObject = obj; obj[newMethod.Name] = newMethod; } else { obj[painMethod.Name] = painMethod; } } foreach (PainClass painClass in Program.Classes) { obj[painClass.Name] = painClass; } } RaiseProgramStart( state, finalParameters); return(state); }