Example #1
0
        public void PerformCommand(IUndoCommand command)
        {
            if (performingCommandSequence)
            {
                commandSequence.PerformCommand(command);
            }
            else
            {
                try
                {
                    command.Perform();

                    index++;

                    commands.Insert(index, command);

                    if (index < capacity && commands.Count > index + 1)
                    {
                        commands.RemoveRange(index + 1, commands.Count - (index + 1));
                    }

                    if (commands.Count > capacity)
                    {
                        commands.RemoveRange(0, commands.Count - capacity);
                    }

                    CommandPerformed?.Invoke(this, new EventArgs());
                }
                catch (Exception ex)
                {
                    HandleError(command, ex);
                }
            }
        }
Example #2
0
        public void Redo()
        {
            if (index + 1 == commands.Count)
            {
                return;
            }

            IUndoCommand command = commands.ElementAt(index + 1);

            try
            {
                command.Perform();

                index++;

                CommandPerformed?.Invoke(this, new EventArgs());
            }
            catch (Exception ex)
            {
                HandleError(command, ex);
            }
        }