/// <summary> /// Register a multiform instance with the given name. /// </summary> /// <param name="name"></param> /// <param name="instance"></param> internal void RegisterMultiform(Multiform instance) { if (RegisteredMultiforms.ContainsKey(instance.Name) || instance.Registered) { throw new MultiformManagerException( String.Format( "The multiform with name '{0}' has already been registered.", instance.Name ) ); } RegisteredMultiforms.Add(instance.Name, instance); instance.PostRegister(this); }
/// <summary> /// Activate the multiform with the given name. /// </summary> /// <param name="name"></param> public void Activate(Multiform sender, string name, MultiformConstructionArgs args = null) { if (ActiveMultiforms.ContainsKey(name)) { throw new MultiformManagerException( String.Format("Multiform with name '{0}' has already been constructed.", name)); } if (!RegisteredMultiforms.ContainsKey(name)) { throw new MultiformManagerException( String.Format("No multiform with name '{0}' exists.", name)); } var multiform = RegisteredMultiforms[name]; if (multiform.TransitionConstraints != null) { var constraints = multiform.TransitionConstraints; var senderName = sender == null ? null : sender.Name; if ((constraints.AllowedFrom != null && !constraints.AllowedFrom.Contains(senderName)) || (constraints.NotAllowedFrom != null && constraints.NotAllowedFrom.Contains(senderName))) { if (senderName == null) { throw new MultiformManagerException( String.Format( "The transition constraints on multiform '{0}' prevent it from " + "being used as the initial multiform in the engine.", name ) ); } throw new MultiformManagerException( String.Format( "The transition constraints on multiform '{0}' prevent the multiform '{1}' from " + "being able to transition to it.", name, senderName ) ); } } args = args == null ? new MultiformConstructionArgs(sender) : args; ApplyOrQueueEvent(new ActivateEvent(name, args)); }
public MultiformConstructionArgs(Multiform sender) { Sender = sender; }
/// <summary> /// Deactivate the given multiform instance. /// </summary> /// <param name="multiform"></param> public void Deactivate(Multiform multiform) { Deactivate(multiform.Name); }