/// <summary>
        /// Redo the last action.
        /// </summary>
        public void Redo()
        {
            if (_redoList.Count == 0)
            {
                return;
            }

            // Get the latest action to redo
            UndoableAction action = _redoList[_redoList.Count - 1];

            // Redo that action
            action.Do(true);

            // Remove the action from the redo list and add it to the undo list
            _redoList.Remove(action);
            _undoList.Add(action);

            // Add action record to the history log
            ActionRecord ar = new ActionRecord(DateTime.Now, action.Name,
                                               action.Description, ActionType.Redo);

            _actionsHistory.Add(ar);

            // Notify that the state of the undo manager has changed
            if (UndoStateChanged != null)
            {
                UndoStateChanged(this, EventArgs.Empty);
            }
        }
        /// <summary>
        /// Do the specified action while updating the internal undo/redo lists.
        /// </summary>
        /// <param name="action">The action to perform</param>
        public void Do(UndoableAction action)
        {
            // Do the action
            action.Do(false);

            // Clear the redo list
            _redoList.Clear();

            // Add the action to the undo list.
            _undoList.Add(action);

            // Add action record to the history log
            ActionRecord ar = new ActionRecord(DateTime.Now, action.Name,
                                               action.Description, ActionType.Do);

            _actionsHistory.Add(ar);

            // Notify that the state of the undo manager has changed
            if (UndoStateChanged != null)
            {
                UndoStateChanged(this, EventArgs.Empty);
            }
        }