Пример #1
0
        /// <summary>
        /// Add a new parameter to this linked parameter
        /// </summary>
        /// <param name="toAdd">The parameter to add</param>
        /// <param name="error">This contains an error message if this returns false</param>
        /// <returns>True if we added the parameter to the linked parameter, false if it failed.</returns>
        public bool AddParameter(ParameterModel toAdd, ref string error)
        {
            LinkedParameterChange change = new LinkedParameterChange();
            var originalValue            = toAdd.Value;

            return(Session.RunCommand(XTMFCommand.CreateCommand(
                                          // do
                                          (ref string e) =>
            {
                if (ParameterModels.Contains(toAdd))
                {
                    e = "The parameter was already contained in the linked parameter!";
                    return false;
                }
                // remove from the linked parameter it was already in
                if ((change.OriginalContainedIn = ModelSystem.LinkedParameters.LinkedParameters.FirstOrDefault((lp) => lp.Contains(toAdd))) != null)
                {
                    change.OriginalIndex = change.OriginalContainedIn.NoCommandRemove(toAdd);
                }
                NoCommandAdd(toAdd, (change.Index = ParameterModels.Count));
                return true;
            },
                                          // undo
                                          (ref string e) =>
            {
                NoCommandRemove(toAdd);
                if (change.OriginalContainedIn != null)
                {
                    change.OriginalContainedIn.NoCommandAdd(toAdd, change.OriginalIndex);
                }
                else
                {
                    // if it isn't part of another linked parameter just add the value back
                    toAdd.SetValue(originalValue, ref e);
                }
                return true;
            },
                                          // redo
                                          (ref string e) =>
            {
                if (change.OriginalContainedIn != null)
                {
                    change.OriginalContainedIn.NoCommandRemove(toAdd);
                }
                NoCommandAdd(toAdd, change.Index);
                return true;
            }
                                          ), ref error));
        }
Пример #2
0
 /// <summary>
 /// Add a new parameter to this linked parameter
 /// </summary>
 /// <param name="toAdd">The parameter to add</param>
 /// <param name="error">This contains an error message if this returns false</param>
 /// <returns>True if we added the parameter to the linked parameter, false if it failed.</returns>
 public bool AddParameter(ParameterModel toAdd, ref string error)
 {
     LinkedParameterChange change = new LinkedParameterChange();
     var originalValue = toAdd.Value;
     return Session.RunCommand(XTMFCommand.CreateCommand(
         // do
         (ref string e) =>
         {
             if(ParameterModels.Contains(toAdd))
             {
                 e = "The parameter was already contained in the linked parameter!";
                 return false;
             }
             // remove from the linked parameter it was already in
             if((change.OriginalContainedIn = ModelSystem.LinkedParameters.LinkedParameters.FirstOrDefault((lp) => lp.Contains(toAdd))) != null)
             {
                 change.OriginalIndex = change.OriginalContainedIn.NoCommandRemove(toAdd);
             }
             NoCommandAdd(toAdd, (change.Index = ParameterModels.Count));
             return true;
         },
         // undo
         (ref string e) =>
         {
             NoCommandRemove(toAdd);
             if(change.OriginalContainedIn != null)
             {
                 change.OriginalContainedIn.NoCommandAdd(toAdd, change.OriginalIndex);
             }
             else
             {
                 // if it isn't part of another linked parameter just add the value back
                 toAdd.SetValue(originalValue, ref e);
             }
             return true;
         },
         // redo
         (ref string e) =>
         {
             if(change.OriginalContainedIn != null)
             {
                 change.OriginalContainedIn.NoCommandRemove(toAdd);
             }
             NoCommandAdd(toAdd, change.Index);
             return true;
         }
         ), ref error);
 }