Beispiel #1
0
 /// <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);
 }
Beispiel #2
0
        /// <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));
        }
Beispiel #3
0
 public MultiformConstructionArgs(Multiform sender)
 {
     Sender = sender;
 }
Beispiel #4
0
 /// <summary>
 /// Deactivate the given multiform instance.
 /// </summary>
 /// <param name="multiform"></param>
 public void Deactivate(Multiform multiform)
 {
     Deactivate(multiform.Name);
 }