public void DoRedo() { if (queuePosition == queueHead) { return; } TransactionInProgress = true; transactionQueue[queuePosition].Apply(); if (undoEvent != null) { UndoEventArgs args = new UndoEventArgs(transactionQueue[queuePosition], true); undoEvent(this, args); } TransactionInProgress = false; queuePosition++; if (queuePosition >= NumTransactions) { queuePosition -= NumTransactions; } }
public void DoUndo() { if (queuePosition == queueTail) { return; } int undoPosition = queuePosition - 1; if (undoPosition < 0) { undoPosition += NumTransactions; } TransactionInProgress = true; transactionQueue[undoPosition].Revert(); if (undoEvent != null) { UndoEventArgs args = new UndoEventArgs(transactionQueue[undoPosition], false); undoEvent(this, args); } TransactionInProgress = false; queuePosition = undoPosition; }