Пример #1
0
        /// <summary>
        /// Juggles stacks to "Redo the latest recorded undone action"
        /// </summary>
        public void Redo()
        {
            var redoAct = RedoStack.Pop();

            redoAct();
            DoStack.Push(redoAct);
            UndoStack.Push(BackupStack.Pop());
        }
Пример #2
0
        /// <summary>
        /// Juggles stacks to "Undo" the latest recorded action
        /// </summary>
        public void Undo()
        {
            var undoAct = UndoStack.Pop();

            undoAct();
            BackupStack.Push(undoAct);
            RedoStack.Push(DoStack.Pop());
        }
Пример #3
0
        /// <summary>
        /// 작업을 추가합니다.
        /// </summary>
        /// <param name="task"></param>
        public virtual void Push(TaskData task)
        {
            ClearUndoStack();

            DoStack.Push(task);
            task.Do();

            Update();
        }
Пример #4
0
 /// <summary>
 /// Juggles stacks to "Do" something
 /// </summary>
 /// <param name="DoAct">Do Action</param>
 /// <param name="UndoAct">Undo Action</param>
 /// <param name="Entry">Weather there should be a new entry for this action in the stacks</param>
 public void Do(Action DoAct, Action UndoAct, bool Entry)
 {
     if (Entry)
     {
         DoStack.Push(DoAct);
         UndoStack.Push(UndoAct);
         RedoStack.Clear();
         BackupStack.Clear();
     }
     DoAct();
 }
Пример #5
0
        protected virtual void ClearUndoStack()
        {
            foreach (TaskData task in UndoStack.ToArray().Reverse())
            {
                // 삭제될 Task의 Source를 참조하고 있는지 확인함
                if (!task.IsStable && DoStack.Count(t => t.Source.Equals(task.Source)) == 0)
                {
                    task.Dispose();
                }
            }

            UndoStack.Clear();
        }
Пример #6
0
        /// <summary>
        /// 이전 상태로 되돌아갑니다.
        /// </summary>
        /// <returns></returns>
        public bool Undo()
        {
            if (DoStack.Count > 0)
            {
                TaskData task = DoStack.Pop();

                UndoStack.Push(task);
                task.Undo();

                Update();

                return(true);
            }

            return(false);
        }
Пример #7
0
        /// <summary>
        /// 이전 상태로 되돌린 작업을 취소합니다.
        /// </summary>
        /// <returns></returns>
        public bool Redo()
        {
            if (CanRedo)
            {
                TaskData task = UndoStack.Pop();

                DoStack.Push(task);
                task.Do();

                Update();

                return(true);
            }

            return(false);
        }