Ejemplo n.º 1
0
        /// <summary>
        /// Create a new Linked Parameter with the given name
        /// </summary>
        /// <param name="name">The name of the linked parameter</param>
        /// <param name="error">If an error occurs this will contain a message to describe it.</param>
        /// <returns>True if it executed successfully</returns>
        public bool NewLinkedParameter(string name, ref string error)
        {
            var lp = new LinkedParameterChange();

            return(_Session.RunCommand(
                       XTMFCommand.CreateCommand("New Linked Parameter", (ref string e) =>
            {
                LinkedParameter linkedParameter = new LinkedParameter(name);
                LinkedParameterModel newModel = new LinkedParameterModel(linkedParameter, _Session, _ModelSystem);
                _RealLinkedParameters.Add(linkedParameter);
                LinkedParameters.Add(newModel);
                lp.Model = newModel;
                lp.Index = LinkedParameters.Count - 1;
                return true;
            },
                                                 (ref string e) =>
            {
                LinkedParameters.RemoveAt(lp.Index);
                _RealLinkedParameters.RemoveAt(lp.Index);
                InvokeRemoved(lp);
                return true;
            },
                                                 (ref string e) =>
            {
                LinkedParameters.Insert(lp.Index, lp.Model);
                _RealLinkedParameters.Insert(lp.Index, lp.Model.RealLinkedParameter);
                return true;
            }),
                       ref error
                       ));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Removes a parameter from this linked parameter
        /// </summary>
        /// <param name="toRemove">The parameter to remove</param>
        /// <param name="error">An error message if this is not possible</param>
        /// <returns>True if the parameter was removed, false if it was not.</returns>
        public bool RemoveParameter(ParameterModel toRemove, ref string error)
        {
            LinkedParameterChange change = new LinkedParameterChange();

            return(Session.RunCommand(XTMFCommand.CreateCommand(
                                          // do
                                          (ref string e) =>
            {
                // we need this outer lock to make sure that it doesn't change while we are checking to make sure that it is contained
                lock (ParameterModelsLock)
                {
                    if (!ParameterModels.Contains(toRemove))
                    {
                        e = "The parameter does not exist inside of the linked parameter!";
                        return false;
                    }
                    change.Index = NoCommandRemove(toRemove);
                }
                return true;
            },
                                          // undo
                                          (ref string e) =>
            {
                return NoCommandAdd(toRemove, change.Index, ref e);
            },
                                          // redo
                                          (ref string e) =>
            {
                NoCommandRemove(toRemove);
                return true;
            }
                                          ), ref error));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Remove a linked parameter from the linked parameters
        /// </summary>
        /// <param name="linkedParameter">The linked parameter to remove</param>
        /// <param name="error">If an error occurs this will contain a message to describe it.</param>
        /// <returns>If the command was successful or not.</returns>
        public bool RemoveLinkedParameter(LinkedParameterModel linkedParameter, ref string error)
        {
            var lp = new LinkedParameterChange();

            return(this.Session.RunCommand(
                       XTMFCommand.CreateCommand((ref string e) =>
            {
                if ((lp.Index = this.LinkedParameters.IndexOf(linkedParameter)) < 0)
                {
                    e = "The linked parameter was not found!";
                    return false;
                }
                lp.Model = this.LinkedParameters[lp.Index];
                LinkedParameters.RemoveAt(lp.Index);
                RealLinkedParameters.RemoveAt(lp.Index);
                return true;
            },
                                                 (ref string e) =>
            {
                LinkedParameters.Insert(lp.Index, lp.Model);
                RealLinkedParameters.Insert(lp.Index, lp.Model.RealLinkedParameter);
                return true;
            },
                                                 (ref string e) =>
            {
                LinkedParameters.RemoveAt(lp.Index);
                RealLinkedParameters.RemoveAt(lp.Index);
                return true;
            }),
                       ref error
                       ));
        }
Ejemplo n.º 4
0
        private void InvokeRemoved(LinkedParameterChange lp)
        {
            var ev = LinkedParameterRemoved;

            if (ev != null)
            {
                ev(this, new CollectionChangeEventArgs(CollectionChangeAction.Remove, lp.Model));
            }
        }
Ejemplo n.º 5
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));
        }
Ejemplo n.º 6
0
 private void InvokeRemoved(LinkedParameterChange lp)
 {
     LinkedParameterRemoved?.Invoke(this, new CollectionChangeEventArgs(CollectionChangeAction.Remove, lp.Model));
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Remove a linked parameter from the linked parameters
 /// </summary>
 /// <param name="linkedParameter">The linked parameter to remove</param>
 /// <param name="error">If an error occurs this will contain a message to describe it.</param>
 /// <returns>If the command was successful or not.</returns>
 public bool RemoveLinkedParameter(LinkedParameterModel linkedParameter, ref string error)
 {
     var lp = new LinkedParameterChange();
     return this.Session.RunCommand(
         XTMFCommand.CreateCommand((ref string e) =>
         {
             if((lp.Index = this.LinkedParameters.IndexOf(linkedParameter)) < 0)
             {
                 e = "The linked parameter was not found!";
                 return false;
             }
             lp.Model = this.LinkedParameters[lp.Index];
             LinkedParameters.RemoveAt(lp.Index);
             RealLinkedParameters.RemoveAt(lp.Index);
             return true;
         },
         (ref string e) =>
         {
             LinkedParameters.Insert(lp.Index, lp.Model);
             RealLinkedParameters.Insert(lp.Index, lp.Model.RealLinkedParameter);
             return true;
         },
         (ref string e) =>
         {
             LinkedParameters.RemoveAt(lp.Index);
             RealLinkedParameters.RemoveAt(lp.Index);
             return true;
         }),
         ref error
         );
 }
Ejemplo n.º 8
0
 /// <summary>
 /// Create a new Linked Parameter with the given name
 /// </summary>
 /// <param name="name">The name of the linked parameter</param>
 /// <param name="error">If an error occurs this will contain a message to describe it.</param>
 /// <returns>True if it executed successfully</returns>
 public bool NewLinkedParameter(string name, ref string error)
 {
     var lp = new LinkedParameterChange();
     return this.Session.RunCommand(
         XTMFCommand.CreateCommand((ref string e) =>
         {
             LinkedParameter linkedParameter = new LinkedParameter(name);
             LinkedParameterModel newModel = new LinkedParameterModel(linkedParameter, Session, ModelSystem);
             RealLinkedParameters.Add(linkedParameter);
             LinkedParameters.Add(newModel);
             lp.Model = newModel;
             lp.Index = this.LinkedParameters.Count - 1;
             return true;
         },
         (ref string e) =>
         {
             LinkedParameters.RemoveAt(lp.Index);
             RealLinkedParameters.RemoveAt(lp.Index);
             return true;
         },
         (ref string e) =>
         {
             LinkedParameters.Insert(lp.Index, lp.Model);
             RealLinkedParameters.Insert(lp.Index, lp.Model.RealLinkedParameter);
             return true;
         }),
         ref error
         );
 }
Ejemplo n.º 9
0
 /// <summary>
 /// Removes a parameter from this linked parameter
 /// </summary>
 /// <param name="toRemove">The parameter to remove</param>
 /// <param name="error">An error message if this is not possible</param>
 /// <returns>True if the parameter was removed, false if it was not.</returns>
 public bool RemoveParameter(ParameterModel toRemove, ref string error)
 {
     LinkedParameterChange change = new LinkedParameterChange();
     return Session.RunCommand(XTMFCommand.CreateCommand(
         // do
         (ref string e) =>
         {
             // we need this outer lock to make sure that it doesn't change while we are checking to make sure that it is contained
             lock (ParameterModelsLock)
             {
                 if(!ParameterModels.Contains(toRemove))
                 {
                     e = "The parameter does not exist inside of the linked parameter!";
                     return false;
                 }
                 change.Index = NoCommandRemove(toRemove);
             }
             return true;
         },
         // undo
         (ref string e) =>
         {
             NoCommandAdd(toRemove, change.Index);
             return true;
         },
         // redo
         (ref string e) =>
         {
             NoCommandRemove(toRemove);
             return true;
         }
         ), ref error);
 }
Ejemplo n.º 10
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);
 }