/// <summary>
 /// Registers the specified operation and performs it right after
 /// </summary>
 public void RegisterThenPerform(IUndoOp op)
 {
     Register(op);
     op.Perform();
 }
 /// <summary>
 /// Registers the specified operation (pushes it to the undo stack, and clears the redo stack)
 /// </summary>
 public void Register(IUndoOp op)
 {
     undoStack.Push(op);
     redoStack.Clear();
 }