public void AddCommand(string key, ICommand command) { if (command == null || string.IsNullOrEmpty(key)) { return; } UndoRedoData data; if (!mUndoRedoDataDic.TryGetValue(key, out data)) { data = new UndoRedoData(); data.mKey = key; mUndoRedoDataDic[key] = data; } //command.Redo(); data.mUndoStack.Push(command); if (data.mUndoStack.Count > UndoCount) { ICommand[] cmds = new ICommand[UndoCount]; data.mUndoStack.TryPopRange(cmds, 0, UndoCount); data.mUndoStack.PushRange(cmds); } data.mRedoStack.Clear(); EditorCommon.Command.CustomCommands.Undo.RaizeCanExecuteChanged(); }
public void UndoTransactionCompleted_EmptyRedo() { Create(); _operationsRaw._redoStack = (new[] { UndoRedoData.NewLinked(10) }).ToFSharpList(); _history.Raise(x => x.UndoTransactionCompleted += null, new TextUndoTransactionCompletedEventArgs(null, TextUndoTransactionCompletionResult.TransactionAdded)); Assert.AreEqual(0, _operationsRaw._redoStack.Length); }
public void Undo_StackWithLinked() { Create(); _operationsRaw._undoStack = (new[] { UndoRedoData.NewLinked(10) }).ToFSharpList(); _history.Setup(x => x.Undo(10)).Verifiable(); _operationsRaw.Undo(1); _factory.Verify(); Assert.AreEqual(0, _operationsRaw._undoStack.Length); }
public void Redo_StackWithNormal() { Create(); _operationsRaw._redoStack = (new[] { UndoRedoData.NewNormal(10) }).ToFSharpList(); _history.Setup(x => x.Redo(1)).Verifiable(); _operationsRaw.Redo(1); _factory.Verify(); Assert.AreEqual(1, _operationsRaw._redoStack.Length); Assert.AreEqual(9, _operationsRaw._redoStack.Head.AsNormal().Item); }
public void Undo_WithLinkedTransactionOpen() { Create(); _operations.CreateLinkedUndoTransaction(); _operationsRaw._undoStack = (new[] { UndoRedoData.NewLinked(10) }).ToFSharpList(); _textUndoHistory.Setup(x => x.Undo(1)).Verifiable(); _statusUtil.Setup(x => x.OnError(Resources.Common_UndoChainBroken)).Verifiable(); _operations.Undo(1); _factory.Verify(); Assert.AreEqual(0, _operationsRaw._undoStack.Length); Assert.IsFalse(_operations.InLinkedUndoTransaction); }
internal static UndoRedoData.Linked AsLinked(this UndoRedoData data) { return((UndoRedoData.Linked)data); }
internal static UndoRedoData.Normal AsNormal(this UndoRedoData data) { return((UndoRedoData.Normal)data); }
void InitCheckWithMember(string memberName, Type memberType, bool isReadOnly) { var param = CSParam as ExpandNodeConstructParam; var cb = new CheckBox(); cb.Content = memberName; cb.Foreground = TryFindResource("TextForeground") as Brush; if (param.ActiveMembers.Contains(memberName)) { cb.IsChecked = true; } else { cb.IsChecked = false; } cb.Checked += (object sender, System.Windows.RoutedEventArgs e) => { if (!mCheckDelegateOperationEnable) { return; } var redoAction = new Action <object>((obj) => { mCheckDelegateOperationEnable = false; param.ActiveMembers.Add(memberName); var childNodeParam = new ExpandNodeChild.ExpandNodeChildConstructionParams() { CSType = param.CSType, HostNodesContainer = param.HostNodesContainer, ParamName = memberName, ParamType = memberType, IsReadOnly = isReadOnly, }; var paramCtrl = new ExpandNodeChild(childNodeParam); AddChildNode(paramCtrl, mParamPanel); cb.Tag = paramCtrl; cb.IsChecked = true; CreateTemplateClass_Show(); mCheckDelegateOperationEnable = true; }); redoAction.Invoke(null); var undoAction = new Action <object>((obj) => { mCheckDelegateOperationEnable = false; param.ActiveMembers.Remove(memberName); var node = cb.Tag as ExpandNodeChild; RemoveChildNode(node); cb.Tag = null; cb.IsChecked = false; CreateTemplateClass_Show(); mCheckDelegateOperationEnable = true; }); EditorCommon.UndoRedo.UndoRedoManager.Instance.AddCommand(HostNodesContainer.HostControl.UndoRedoKey, null, redoAction, null, undoAction, "Add Member"); IsDirty = true; }; cb.Unchecked += (object sender, System.Windows.RoutedEventArgs e) => { if (!mCheckDelegateOperationEnable) { return; } var node = cb.Tag as ExpandNodeChild; if (node == null) { return; } var nodeIdx = mParamPanel.Children.IndexOf(node); var undoRedoDatas = new List <UndoRedoData>(); foreach (var lPin in node.GetLinkPinInfos()) { for (int i = 0; i < lPin.GetLinkInfosCount(); i++) { var lInfo = lPin.GetLinkInfo(i); var data = new UndoRedoData(); data.StartObj = lInfo.m_linkFromObjectInfo; data.EndObj = lInfo.m_linkToObjectInfo; undoRedoDatas.Add(data); } } var redoAction = new Action <object>((obj) => { mCheckDelegateOperationEnable = false; RemoveChildNode(node); cb.Tag = null; cb.IsChecked = false; param.ActiveMembers.Remove(memberName); CreateTemplateClass_Show(); mCheckDelegateOperationEnable = true; }); redoAction.Invoke(null); var undoAction = new Action <object>((obj) => { mCheckDelegateOperationEnable = false; param.ActiveMembers.Insert(nodeIdx, memberName); InsertChildNode(nodeIdx, node, mParamPanel); cb.Tag = node; cb.IsChecked = true; foreach (var data in undoRedoDatas) { var linkInfo = new CodeGenerateSystem.Base.LinkInfo(ParentDrawCanvas, data.StartObj, data.EndObj); } CreateTemplateClass_Show(); mCheckDelegateOperationEnable = true; }); EditorCommon.UndoRedo.UndoRedoManager.Instance.AddCommand(HostNodesContainer.HostControl.UndoRedoKey, null, redoAction, null, undoAction, "Remove Member"); IsDirty = true; }; StackPanel_Members.Children.Add(cb); }