コード例 #1
0
        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();
        }
コード例 #2
0
 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);
 }
コード例 #3
0
 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);
 }
コード例 #4
0
 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);
 }
コード例 #5
0
 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);
 }
コード例 #6
0
 internal static UndoRedoData.Linked AsLinked(this UndoRedoData data)
 {
     return((UndoRedoData.Linked)data);
 }
コード例 #7
0
 internal static UndoRedoData.Normal AsNormal(this UndoRedoData data)
 {
     return((UndoRedoData.Normal)data);
 }
コード例 #8
0
        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);
        }