public void CreateModel(XmlElement modelData) { DummyModel model = DummyModel.CreateBlankInstance(); model.Deserialize(modelData, SaveContext.Undo); models.Add(model); }
internal void AddModel(DummyModel model) { models.Add(model); undoRecorder.BeginActionGroup(); undoRecorder.RecordCreationForUndo(model); undoRecorder.EndActionGroup(); }
public void ReloadModel(XmlElement modelData) { XmlElementHelper helper = new XmlElementHelper(modelData); int identifier = helper.ReadInteger(DummyModel.IdName); DummyModel model = models.First((x) => (x.Identifier == identifier)); model.Deserialize(modelData, SaveContext.Undo); }
internal void ModifyModel(int identifier) { DummyModel model = GetModel(identifier); undoRecorder.BeginActionGroup(); undoRecorder.RecordModificationForUndo(model); undoRecorder.EndActionGroup(); model.DoubleRadius(); }
internal void RemoveModel(int identifier) { DummyModel model = GetModel(identifier); undoRecorder.BeginActionGroup(); undoRecorder.RecordDeletionForUndo(model); undoRecorder.EndActionGroup(); models.Remove(model); }
public void TestNodeToCodeUndoRecorder() { NodeToCodeUndoHelper recorder = new NodeToCodeUndoHelper(); var dummyModel = new DummyModel(1, 10); recorder.RecordCreation(dummyModel); recorder.RecordDeletion(dummyModel); Assert.AreEqual(0, recorder.ActionCount()); }
internal void RemoveModels(int [] identifiers) { using (undoRecorder.BeginActionGroup()) { foreach (int identifier in identifiers) { DummyModel model = GetModel(identifier); undoRecorder.RecordDeletionForUndo(model); models.Remove(model); } } }
public void TestModificationUndoRedo00() { // Ensure the recorder is in its default states. Assert.AreEqual(false, recorder.CanUndo); Assert.AreEqual(false, recorder.CanRedo); // Add a model into workspace, make sure it exists. workspace.AddModel(new DummyModel(1, 10)); DummyModel inserted = workspace.GetModel(1); Assert.AreNotEqual(null, inserted); Assert.AreEqual(10, inserted.Radius); // Make sure we can now undo. Assert.AreEqual(true, recorder.CanUndo); Assert.AreEqual(false, recorder.CanRedo); // Double the radius property... workspace.ModifyModel(1); DummyModel modified = workspace.GetModel(1); Assert.AreNotEqual(null, modified); Assert.AreEqual(20, modified.Radius); // Make sure we can still undo. Assert.AreEqual(true, recorder.CanUndo); Assert.AreEqual(false, recorder.CanRedo); recorder.Undo(); // Undo the modification (undo's still possible). Assert.AreEqual(true, recorder.CanUndo); Assert.AreEqual(true, recorder.CanRedo); // Make sure the modification has been undone DummyModel undone = workspace.GetModel(1); Assert.AreNotEqual(null, undone); Assert.AreEqual(10, undone.Radius); recorder.Redo(); // Redo the modification. Assert.AreEqual(true, recorder.CanUndo); Assert.AreEqual(false, recorder.CanRedo); // Make sure the modification has been undone DummyModel redone = workspace.GetModel(1); Assert.AreNotEqual(null, redone); Assert.AreEqual(20, redone.Radius); }
public void TestModificationUndoRedo01() { // Add a model into workspace, make sure it exists. workspace.AddModel(new DummyModel(1, 10)); DummyModel model = workspace.GetModel(1); Assert.AreEqual(10, model.Radius); workspace.ModifyModel(1); // Double radius to 20. Assert.AreEqual(20, workspace.GetModel(1).Radius); workspace.ModifyModel(1); // Double radius to 40. Assert.AreEqual(40, workspace.GetModel(1).Radius); recorder.Undo(); // Should go back to 20. Assert.AreEqual(20, workspace.GetModel(1).Radius); recorder.Redo(); // Should go back to 40. Assert.AreEqual(40, workspace.GetModel(1).Radius); recorder.Undo(); // Should go back to 20. Assert.AreEqual(20, workspace.GetModel(1).Radius); recorder.Undo(); // Should go back to 10. Assert.AreEqual(10, workspace.GetModel(1).Radius); recorder.Redo(); // Should go back to 20. Assert.AreEqual(20, workspace.GetModel(1).Radius); recorder.Undo(); // Should go back to 10. Assert.AreEqual(10, workspace.GetModel(1).Radius); recorder.Undo(); // Should undo creation. Assert.AreEqual(null, workspace.GetModel(1)); recorder.Redo(); // Should redo creation. Assert.AreEqual(10, workspace.GetModel(1).Radius); }
public void TestRedoStackWipeOut() { // Add a model into workspace, make sure it exists. workspace.AddModel(new DummyModel(1, 10)); DummyModel model = workspace.GetModel(1); Assert.AreEqual(10, model.Radius); // Only undo should be enabled. Assert.AreEqual(true, recorder.CanUndo); Assert.AreEqual(false, recorder.CanRedo); recorder.Undo(); // Undo creation. Assert.AreEqual(false, recorder.CanUndo); Assert.AreEqual(true, recorder.CanRedo); // Scenario 1: Creating a new model while // redo-stack is non-empty wipes the redo stack out. workspace.AddModel(new DummyModel(2, 10)); Assert.AreEqual(true, recorder.CanUndo); Assert.AreEqual(false, recorder.CanRedo); // Redo stack wiped out. workspace.ModifyModel(2); // Modify the model once. Assert.AreEqual(20, workspace.GetModel(2).Radius); Assert.AreEqual(true, recorder.CanUndo); Assert.AreEqual(false, recorder.CanRedo); workspace.ModifyModel(2); // Modify the model once more. Assert.AreEqual(40, workspace.GetModel(2).Radius); Assert.AreEqual(true, recorder.CanUndo); Assert.AreEqual(false, recorder.CanRedo); recorder.Undo(); // Undo the second modification. Assert.AreEqual(20, workspace.GetModel(2).Radius); Assert.AreEqual(true, recorder.CanUndo); Assert.AreEqual(true, recorder.CanRedo); // We can now redo. // Scenario 2: Modifying an existing model while // redo-stack is non-empty wipes the redo stack out. workspace.ModifyModel(2); // Push another modification. Assert.AreEqual(40, workspace.GetModel(2).Radius); Assert.AreEqual(true, recorder.CanUndo); Assert.AreEqual(false, recorder.CanRedo); // Redo stack wiped out. workspace.RemoveModel(2); // Delete the model. Assert.AreEqual(null, workspace.GetModel(2)); Assert.AreEqual(true, recorder.CanUndo); Assert.AreEqual(false, recorder.CanRedo); recorder.Undo(); // Undo deletion. Assert.AreEqual(40, workspace.GetModel(2).Radius); Assert.AreEqual(true, recorder.CanUndo); Assert.AreEqual(true, recorder.CanRedo); // Redo stack is back. // Scenario 3: Deleting an existing model while // redo-stack is non-empty wipes the redo stack out. workspace.RemoveModel(2); // Delete the model again. Assert.AreEqual(null, workspace.GetModel(2)); Assert.AreEqual(true, recorder.CanUndo); Assert.AreEqual(false, recorder.CanRedo); // Redo stack wiped out. }