/// <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));
        }
 /// <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);
 }
 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);
 }
Beispiel #5
0
 /// <summary>
 /// Set this form's parent.
 /// </summary>
 /// <param name="parent"></param>
 public void SetParent(Multiform parent)
 {
     if (this.Parent != null)
         throw new ArgumentException("This form has already been added to a multiform.");
     this.Parent = parent;
     PostConstruct();
 }