Exemplo n.º 1
0
 public UndoObject(bool addInstance)
 {
     if (!addInstance)
     {
         return;
     }
     FieldObject = new UndoObject
     {
         FieldInteger    = 1,
         FieldFloat      = 1.1f,
         FieldObject     = new UndoObject(),
         PropertyFloat   = 1.1f,
         PropertyInteger = 1,
         PropertyObject  = null
     };
     PropertyObject = new UndoObject
     {
         FieldInteger    = -1,
         FieldFloat      = -1.1f,
         FieldObject     = null,
         PropertyFloat   = -1.1f,
         PropertyInteger = -1,
         PropertyObject  = new UndoObject()
     };
 }
Exemplo n.º 2
0
        /// <summary>
        /// Handles a change to the IsLayoutFrozen dependency property.
        /// </summary>
        /// <param name="dependencyObject">The object that owns the property.</param>
        /// <param name="dependencyPropertyChangedEventArgs">A description of the changed property.</param>
        private static void OnIsLayoutFrozenChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
        {
            // The layout controls the relative size of the row and column headers.
            UndoObject undoObject = new UndoObject(dependencyPropertyChangedEventArgs.OldValue, dependencyPropertyChangedEventArgs.NewValue, UndoAction.Create);

            DynamicReport.SetIsLayoutFrozen.Execute(undoObject, dependencyObject as DynamicReport);
        }
Exemplo n.º 3
0
 public UndoObject(UndoObject undoObject)
 {
     this.OperationType = undoObject.OperationType;
     this.Index         = undoObject.Index;
     this.Shift         = undoObject.Shift;
     this.Data          = undoObject.Data;
 }
Exemplo n.º 4
0
        public override void Load()
        {
            m_UndoManager = Session.GetManager <IUndoManager>();

            m_Undo            = ScriptableObject.CreateInstance <UndoObject>();
            m_Undo.hideFlags |= HideFlags.HideAndDontSave;
            m_Undo.Undo      += HandleUndo;
            m_Undo.Redo      += HandleRedo;

            m_UndoManager.ChangeRecorded += HandleChangeRecorded;
        }
Exemplo n.º 5
0
    public void UndoBtn()
    {
        if (!first_click)
        {
            first_click = true;
            GameObject toolTip = Resources.Load <GameObject>("Prefabs/ToolTipPref");
            //toolTip.GetComponent<ToolTipController>().setMessage("Undo position of object");
            //GameObject.Instantiate(toolTip);
        }
        if (com.cmd.Count > 0)
        {
            UndoObject tmp = com.cmd.Pop();
            if (tmp.Item.gameObject == null)
            {
                Debug.Log("ObjectNull");
                return;
            }
            if (tmp.Opt == Operation.Delete)
            {
                print(tmp.Item.name);

                Instantiate(tmp.Item);
            }
            if (tmp.Opt == Operation.Rotate)
            {
                print(tmp.Rot);
                tmp.Item.transform.rotation = Quaternion.Euler(0, 0, tmp.Rot);
            }
            if (tmp.Opt == Operation.Create)
            {
                Debug.Log("Object Created");
                Destroy(tmp.Item);
            }
            if (tmp.Opt == Operation.Resize)
            {
                print(tmp.Item.name);

                Debug.Log("Resize get?");
                tmp.Item.transform.GetComponent <RectTransform>().sizeDelta = tmp.Rect;
                Debug.Log(tmp.Rect.x);
            }
            if (tmp.Opt == Operation.Drag)
            {
                var tr = GameObject.Find(tmp.Item.name).transform;
                //print("Exist: "+tr.position);
                print("InList: " + tmp.Item.transform.position);
                tmp.Item.transform.SetAsLastSibling();
                tmp.Item.transform.position = tmp.Trans;
            }
        }
    }
Exemplo n.º 6
0
        public void UndoTestRecursive2()
        {
            var undo     = new Undo();
            var instance = new UndoObject(true)
            {
                FieldObject =
                {
                    FieldObject    = new UndoObject(false),
                    PropertyObject = new UndoObject(false)
                },
                PropertyObject =
                {
                    FieldObject    = new UndoObject(false),
                    PropertyObject = new UndoObject(false)
                }
            };

            using (new UndoBlock(undo, instance, "Edit"))
            {
                instance.FieldInteger                               = 1;
                instance.FieldObject.FieldInteger                   = 10;
                instance.PropertyObject.FieldInteger                = 11;
                instance.FieldObject.FieldObject.FieldInteger       = 22;
                instance.FieldObject.PropertyObject.FieldInteger    = 23;
                instance.PropertyObject.FieldObject.FieldInteger    = 24;
                instance.PropertyObject.PropertyObject.FieldInteger = 25;
            }
            undo.PerformUndo();
            Assert.AreEqual(10, instance.FieldInteger);
            Assert.AreEqual(1, instance.FieldObject.FieldInteger);
            Assert.AreEqual(-1, instance.PropertyObject.FieldInteger);
            Assert.AreEqual(10, instance.FieldObject.FieldObject.FieldInteger);
            Assert.AreEqual(10, instance.FieldObject.PropertyObject.FieldInteger);
            Assert.AreEqual(10, instance.PropertyObject.FieldObject.FieldInteger);
            Assert.AreEqual(10, instance.PropertyObject.PropertyObject.FieldInteger);
            undo.PerformRedo();
            Assert.AreEqual(1, instance.FieldInteger);
            Assert.AreEqual(10, instance.FieldObject.FieldInteger);
            Assert.AreEqual(11, instance.PropertyObject.FieldInteger);
            Assert.AreEqual(22, instance.FieldObject.FieldObject.FieldInteger);
            Assert.AreEqual(23, instance.FieldObject.PropertyObject.FieldInteger);
            Assert.AreEqual(24, instance.PropertyObject.FieldObject.FieldInteger);
            Assert.AreEqual(25, instance.PropertyObject.PropertyObject.FieldInteger);
        }
Exemplo n.º 7
0
 private static void BasicUndoRedo(Undo undo, UndoObject instance)
 {
     Assert.AreEqual("Basic", undo.FirstUndoName);
     undo.PerformUndo();
     Assert.AreEqual(10, instance.FieldInteger);
     Assert.AreEqual(0.1f, instance.FieldFloat);
     Assert.AreNotEqual(null, instance.FieldObject);
     Assert.AreEqual(-10, instance.PropertyInteger);
     Assert.AreEqual(-0.1f, instance.PropertyFloat);
     Assert.AreNotEqual(null, instance.PropertyObject);
     Assert.AreEqual("Basic", undo.FirstRedoName);
     undo.PerformRedo();
     Assert.AreEqual(0, instance.FieldInteger);
     Assert.AreEqual(0, instance.FieldFloat);
     Assert.AreEqual(null, instance.FieldObject);
     Assert.AreEqual(0, instance.PropertyInteger);
     Assert.AreEqual(0, instance.PropertyFloat);
     Assert.AreEqual(null, instance.PropertyObject);
 }
Exemplo n.º 8
0
        public void UndoTestRecursive()
        {
            var undo     = new Undo();
            var instance = new UndoObject(true);

            undo.RecordAction(instance, "Basic", (i) =>
            {
                i.FieldObject                            = new UndoObject();
                i.FieldObject.FieldObject                = new UndoObject();
                i.FieldObject.FieldObject.FieldObject    = new UndoObject();
                i.FieldObject.FieldObject.PropertyObject = new UndoObject();
                i.FieldObject.FieldObject.PropertyObject.FieldInteger = 99;
                i.PropertyObject = new UndoObject();
                i.PropertyObject.PropertyObject = new UndoObject();
                i.PropertyObject.PropertyObject.PropertyObject           = new UndoObject();
                i.PropertyObject.PropertyObject.FieldObject              = new UndoObject();
                i.PropertyObject.PropertyObject.FieldObject.FieldInteger = 99;
            });
            undo.PerformUndo();
            Assert.AreNotEqual(null, instance.FieldObject);
            Assert.AreNotEqual(null, instance.FieldObject.FieldObject);
            Assert.AreEqual(null, instance.FieldObject.FieldObject.FieldObject);
            Assert.AreEqual(null, instance.FieldObject.FieldObject.PropertyObject);
            Assert.AreNotEqual(null, instance.PropertyObject);
            Assert.AreNotEqual(null, instance.PropertyObject.PropertyObject);
            Assert.AreEqual(null, instance.PropertyObject.PropertyObject.PropertyObject);
            Assert.AreEqual(null, instance.PropertyObject.PropertyObject.FieldObject);
            undo.PerformRedo();
            Assert.AreNotEqual(null, instance.FieldObject);
            Assert.AreNotEqual(null, instance.FieldObject.FieldObject);
            Assert.AreNotEqual(null, instance.FieldObject.FieldObject.FieldObject);
            Assert.AreNotEqual(null, instance.FieldObject.FieldObject.PropertyObject);
            Assert.AreNotEqual(null, instance.PropertyObject);
            Assert.AreNotEqual(null, instance.PropertyObject.PropertyObject);
            Assert.AreNotEqual(null, instance.PropertyObject.PropertyObject.PropertyObject);
            Assert.AreNotEqual(null, instance.PropertyObject.PropertyObject.FieldObject);
            Assert.AreEqual(99, instance.FieldObject.FieldObject.PropertyObject.FieldInteger);
            Assert.AreEqual(99, instance.PropertyObject.PropertyObject.FieldObject.FieldInteger);
        }
Exemplo n.º 9
0
        /// <summary>
        /// Freezes or unfreezes the layout of the column and row header panels.
        /// </summary>
        /// <param name="sender">The object that originated the routed event.</param>
        /// <param name="routedEventArgs">The routed event arguments.</param>
        public void OnSetIsLayoutFrozen(Object sender, RoutedEventArgs routedEventArgs)
        {
            // The idea is to extract the parameters from the event data and set frozen state of the panel layout based on the
            // values provided.
            ExecutedRoutedEventArgs executedRoutedEventArgs = routedEventArgs as ExecutedRoutedEventArgs;

            // The simplest form for this command simply passes in a value.  The command parameter is burpped back up to the
            // property which then issues a command back here with the proper Undo information encoded in the command.  The idea is
            // to simplify the calling parameters for an externally invoked command while still maintaining a consistent format
            // internally for handling the undo/redo operations.
            if (executedRoutedEventArgs.Parameter is Boolean)
            {
                SetValue(DynamicReport.IsLayoutFrozenProperty, (Boolean)executedRoutedEventArgs.Parameter);
            }

            // This parameter format handles the undo/redo logic.
            if (this.reportGrid != null && executedRoutedEventArgs.Parameter is UndoObject)
            {
                // Extract the parameter and do the actual work involved with freezing the panes.
                UndoObject undoObject = executedRoutedEventArgs.Parameter as UndoObject;
                this.reportGrid.FreezePanes((Boolean)undoObject.NewValue, undoObject.UndoAction);

                // Once the command is finished, this will broadcast the event.  The primary consumer is the Undo logic which will
                // save the event data on the Undo or Redo stack and can replay it when needed.
                RaiseEvent(new UndoPropertyChangedEventArgs(DynamicReport.UndoPropertyChangedEvent, undoObject.UndoAction,
                                                            DynamicReport.IsLayoutFrozenProperty, undoObject.OldValue, undoObject.NewValue));

                // The property must be set when this operation is called from the Undo or Redo methods.  However, setting the
                // value will lead the logic right back here.  This will inhibit the command processing while the Undone or Redone
                // value is restored.
                if (undoObject.UndoAction == UndoAction.Undo || undoObject.UndoAction == UndoAction.Redo)
                {
                    this.CommandBindings.Remove(this.reportGrid.commandBingingMap[DynamicReport.SetIsLayoutFrozen]);
                    SetValue(DynamicReport.IsLayoutFrozenProperty, undoObject.NewValue);
                    this.CommandBindings.Add(this.reportGrid.commandBingingMap[DynamicReport.SetIsLayoutFrozen]);
                }
            }
        }
Exemplo n.º 10
0
        public void UndoTestBasic()
        {
            var undo = new Undo();

            var instance = new UndoObject(true);

            undo.RecordBegin(instance, "Basic");
            instance.FieldFloat      = 0;
            instance.FieldInteger    = 0;
            instance.FieldObject     = null;
            instance.PropertyFloat   = 0;
            instance.PropertyInteger = 0;
            instance.PropertyObject  = null;
            undo.RecordEnd();
            BasicUndoRedo(undo, instance);

            instance = new UndoObject(true);
            undo.RecordAction(instance, "Basic", () =>
            {
                instance.FieldFloat      = 0;
                instance.FieldInteger    = 0;
                instance.FieldObject     = null;
                instance.PropertyFloat   = 0;
                instance.PropertyInteger = 0;
                instance.PropertyObject  = null;
            });
            BasicUndoRedo(undo, instance);

            object generic = new UndoObject(true);

            undo.RecordAction(generic, "Basic", (i) =>
            {
                ((UndoObject)i).FieldFloat      = 0;
                ((UndoObject)i).FieldInteger    = 0;
                ((UndoObject)i).FieldObject     = null;
                ((UndoObject)i).PropertyFloat   = 0;
                ((UndoObject)i).PropertyInteger = 0;
                ((UndoObject)i).PropertyObject  = null;
            });
            BasicUndoRedo(undo, (UndoObject)generic);

            instance = new UndoObject(true);
            undo.RecordAction(instance, "Basic", (i) =>
            {
                i.FieldFloat      = 0;
                i.FieldInteger    = 0;
                i.FieldObject     = null;
                i.PropertyFloat   = 0;
                i.PropertyInteger = 0;
                i.PropertyObject  = null;
            });
            BasicUndoRedo(undo, instance);

            instance = new UndoObject(true);
            using (new UndoBlock(undo, instance, "Basic"))
            {
                instance.FieldFloat      = 0;
                instance.FieldInteger    = 0;
                instance.FieldObject     = null;
                instance.PropertyFloat   = 0;
                instance.PropertyInteger = 0;
                instance.PropertyObject  = null;
            }
            BasicUndoRedo(undo, instance);
        }
Exemplo n.º 11
0
 public void Push(UndoObject value)
 {
     if (_list.Count == _max)
         _list.RemoveLast();
     _list.AddFirst(value);
 }
Exemplo n.º 12
0
 public void SaveRedo(UndoObject redoObject)
 {
     this.RedoStack.Push(redoObject);
     this.IsRedoable = true;
 }
Exemplo n.º 13
0
 public void SaveUndo(UndoObject undoObject)
 {
     this.UndoStack.Push(undoObject);
     this.IsUndoable = true;
 }
Exemplo n.º 14
0
        private void RestoreState(UndoObject undoObject)
        {
            switch (undoObject.OperationType)
            {
            case UndoOperationType.WorkerEdit:
                Workers.WorkerListReplaceItem(undoObject.Index, ((Worker)undoObject.Data).Clone());
                break;

            case UndoOperationType.WorkersPowerCost:
                Workers.PowerCost = (double)undoObject.Data;
                break;

            case UndoOperationType.WorkersCoinType:
                Workers.CoinType = (string)undoObject.Data;
                break;

            case UndoOperationType.WorkersDisplayCoinAs:
                Workers.DisplayCoinAs = (string)undoObject.Data;
                break;

            case UndoOperationType.WorkerAdd:
                Workers.WorkerListRemoveAt(Workers.WorkerList.Count - 1);
                break;

            case UndoOperationType.WorkerAddRange:
                Workers.WorkerListRemoveRangeAt(undoObject.Index, (int)undoObject.Data);
                break;

            case UndoOperationType.WorkerInsert:
                Workers.WorkerListRemoveAt(undoObject.Index);
                break;

            case UndoOperationType.WorkerRemove:
                Workers.WorkerListInsert(undoObject.Index, ((Worker)undoObject.Data).Clone());
                break;

            case UndoOperationType.WorkerRemoveRange:
                Workers.WorkerListAddRangeAt((ObservableCollection <Worker>)undoObject.Data, undoObject.Index);
                break;

            case UndoOperationType.WorkerMove:
                Workers.WorkerListMove((int)undoObject.Data, undoObject.Index);
                break;

            case UndoOperationType.SettingsEdit:
                UnHookUpWmtSettingsPropertyChangeEvents();
                SaveUndoRedo("WtmSettings");
                var  wtms = ((WtmSettingsObject)undoObject.Data).Clone();
                bool switchTimeFromEqual    = WtmSwitchTimeFromStored.Equals(wtms.SwitchTimeFrom);
                bool switchTimeToEqual      = WtmSwitchTimeToStored.Equals(wtms.SwitchTimeTo);
                bool historicalAverageEqual = WtmHistoricalAveragePeriodStored == wtms.HistoricalAveragePeriod;
                bool historyTimeFromEqual   = WtmHistoryTimeFromStored.Equals(wtms.HistoryTimeFrom);
                bool historyTimeToEqual     = WtmHistoryTimeToStored.Equals(wtms.HistoryTimeTo);
                WtmSettings = wtms;
                HookUpWmtSettingsPropertyChangeEvents();
                if (WtmSettings.AutoSwitch)
                {
                    SwitchTimeIsUpdated = false;
                }
                if (WtmSettings.BackupHistoricalPrices)
                {
                    HistoryTimeIsUpdated = false;
                }
                WtmSettings.ServerSettingsAreUpdated = true;
                break;

            case UndoOperationType.WorkersAll:
                SaveUndoRedo("WorkersAll");
                var allWorkers = undoObject.Data as ObservableCollection <Worker>;
                Workers.WorkerList.Clear();
                foreach (var worker in allWorkers)
                {
                    Workers.WorkerList.Add(worker.Clone());
                }
                break;
            }
        }
Exemplo n.º 15
0
        private UndoObject SaveState(string propertyName)
        {
            UndoObject undoObject = null;
            var        index      = Workers.WorkerIndex;
            int        count      = Workers.WorkerCount;

            switch (propertyName)
            {
            case "WorkersPowerCost":
                undoObject = new UndoObject(UndoOperationType.WorkersPowerCost, -1, Workers.PowerCost);
                break;

            case "WorkersCoinType":
                undoObject = new UndoObject(UndoOperationType.WorkersCoinType, -1, Workers.CoinType);
                break;

            case "WorkersDisplayCoinAs":
                undoObject = new UndoObject(UndoOperationType.WorkersDisplayCoinAs, -1, Workers.DisplayCoinAs);
                break;

            case "WorkerList":
                undoObject = new UndoObject(UndoOperationType.WorkerEdit, index, Workers.WorkerList[index].CloneNoEvents());
                break;

            case "WorkerAdd":
                undoObject = new UndoObject(UndoOperationType.WorkerAdd, -1, null);
                break;

            case "WorkerAddRange":
                undoObject = new UndoObject(UndoOperationType.WorkerAddRange, index, count);
                break;

            case "WorkerInsert":
                undoObject = new UndoObject(UndoOperationType.WorkerInsert, index, Workers.WorkerList[index].CloneNoEvents());
                break;

            case "WorkerRemove":
                undoObject = new UndoObject(UndoOperationType.WorkerRemove, index, Workers.WorkerList[index].CloneNoEvents());
                break;

            case "WorkerRemoveRange":
                var newWorkerList = new ObservableCollection <Worker>();
                for (int i = 0; i < count; i++)
                {
                    newWorkerList.Add(Workers.WorkerList[index + i + 1].CloneNoEvents());
                }
                undoObject = new UndoObject(UndoOperationType.WorkerRemoveRange, index, newWorkerList);
                break;

            case "WorkerMove":
                undoObject = new UndoObject(UndoOperationType.WorkerMove, index, Workers.WorkerNewIndex);
                break;

            case "WtmSettings":
                undoObject = new UndoObject(UndoOperationType.SettingsEdit, -1, WtmSettings.Clone());
                break;

            case "WorkersAll":
                var newAllWorkers = new ObservableCollection <Worker>();
                foreach (var worker in Workers.WorkerList)
                {
                    newAllWorkers.Add(worker.CloneNoEvents());
                }
                undoObject = new UndoObject(UndoOperationType.WorkersAll, -1, newAllWorkers);
                break;
            }
            return(undoObject);
        }