示例#1
0
        private void Settings_SwagItemChanged(object sender, SwagItemChangedEventArgs e)
        {
            if (!CommandManager.IsFrozen)
            {
                Boolean canUndo = true;

                switch (e.PropertyChangedArgs)
                {
                case PropertyChangedExtendedEventArgs exArgs:
                    #region SwagSettingBoolean
                    if (exArgs.Object is SwagSettingBoolean boolSetting)
                    {
                        switch (boolSetting.Path)
                        {
                        case "Window/Settings/IsOpen":
                        case "Window/CommandHistory/IsOpen":
                            canUndo = false;
                            break;
                        }
                    }
                    #endregion SwagSettingBoolean

                    #region General
                    if (canUndo)
                    {
                        switch (exArgs.Object)
                        {
                        case SwagSettingGroup swagSettingGroup:
                            switch (exArgs.PropertyName)
                            {
                            case "Parent":
                            case "ObjValue":
                            case "ValueTypeString":
                                canUndo = false;
                                break;

                            case "Sequence":
                                if ((Int32)exArgs.OldValue == -1)
                                {
                                    canUndo = false;
                                }
                                break;
                            }
                            break;

                        case SwagSetting swagSetting:
                            switch (exArgs.PropertyName)
                            {
                            case "Parent":
                            case "ObjValue":
                            case "ValueTypeString":
                                canUndo = false;
                                break;

                            case "Sequence":
                                if ((Int32)exArgs.OldValue == -1)
                                {
                                    canUndo = false;
                                }
                                break;
                            }
                            break;
                        }
                    }
                    #endregion General

                    #region SwagPropertyChangedCommand
                    if (canUndo)
                    {
                        SwagPropertyChangedCommand cmd = new SwagPropertyChangedCommand(
                            exArgs.PropertyName,
                            exArgs.Object,
                            exArgs.OldValue,
                            exArgs.NewValue);
                        cmd.Display = e.Message;

                        CommandManager.AddCommand(cmd);
                    }
                    #endregion SwagPropertyChangedCommand
                    break;
                }
            }
        }
        private void SwagDataSet_SwagItemChanged(object sender, SwagItemChangedEventArgs e)
        {
            if (!SwagWindow.CommandManager.IsFrozen)
            {
                Boolean canUndo = true;
                String  message = e.Message;

                switch (e.PropertyChangedArgs)
                {
                case PropertyChangedExtendedEventArgs exArgs:
                    switch (exArgs.Object)
                    {
                        #region SwagDataTable
                    case SwagDataTable swagDataTable:
                        switch (exArgs.PropertyName)
                        {
                        case "Parent":
                        case "ColumnsVisibilityView":
                        case "ColumnsFilterView":
                        case "FilterCommand":
                        case "ImportCommand":
                        case "ExportCommand":
                        case "ApplyColumnVisibilityFilterCommand":
                        case "ApplyColumnFiltersFilterCommand":
                        case "ResetColumnsCommand":
                        case "Tabs":
                        case "Settings":
                        case "IsInitialized":
                            canUndo = false;
                            break;

                        case "Sequence":
                            if ((Int32)exArgs.OldValue == -1)
                            {
                                canUndo = false;
                            }
                            break;
                        }
                        break;

                        #endregion SwagDataTable
                        #region SwagDataColumn
                    case SwagDataColumn swagDataColumn:
                        switch (exArgs.PropertyName)
                        {
                        case "Parent":
                        case "SwagDataTable":
                            canUndo = false;
                            break;

                        case "ColSeq":
                        case "Sequence":
                            if ((Int32)exArgs.OldValue == -1)
                            {
                                canUndo = false;
                            }
                            break;

                        case "IsColumnFilterOpen":                //Popup StaysOpen="False" leads to wierd interactions
                            canUndo = false;
                            break;
                        }
                        break;

                        #endregion SwagDataColumn
                        #region SwagDataRow
                    case SwagDataRow swagDataRow:
                        switch (e.PropertyChangedArgs.PropertyName)
                        {
                        case "Parent":
                            canUndo = false;
                            break;

                        case "ColSeq":
                        case "Sequence":
                            if ((Int32)exArgs.OldValue == -1)
                            {
                                canUndo = false;
                            }
                            break;

                        case "Value":
                            JObject dif = JsonHelper.FindDiff((JObject)exArgs.NewValue, (JObject)exArgs.OldValue);
                            if (dif.Count > 0)
                            {
                                message = swagDataRow.Path;
                                foreach (KeyValuePair <String, JToken> kvp in dif)
                                {
                                    JObject difLine = (JObject)kvp.Value;
                                    message += $"\n\t[{kvp.Key}] {difLine["-"].ToString()} => {difLine["+"].ToString()}";
                                }
                            }
                            else
                            {
                                canUndo = false;
                            }
                            break;

                        case "DataRow":
                            if (exArgs.OldValue == null)
                            {
                                canUndo = false;
                            }
                            break;
                        }
                        break;
                        #endregion SwagDataRow
                    }

                    #region SwagPropertyChangedCommand
                    if (canUndo)
                    {
                        SwagPropertyChangedCommand cmd = new SwagPropertyChangedCommand(
                            exArgs.PropertyName,
                            exArgs.Object,
                            exArgs.OldValue,
                            exArgs.NewValue);
                        cmd.Display = message;

                        SwagWindow.CommandManager.AddCommand(cmd);
                    }
                    #endregion SwagPropertyChangedCommand
                    break;

                case CollectionPropertyChangedEventArgs colArgs:
                    if (colArgs.NewItems != null)
                    {
                        foreach (SwagData swagData in colArgs.NewItems)
                        {
                            if (swagData is SwagDataSet subSet)
                            {
                                InitSwagDataSet(subSet);
                            }
                        }
                    }
                    break;
                }
            }
        }
        private static void OptionCollection_SwagItemChanged(object sender, SwagItemChangedEventArgs e)
        {
            if (!SwagWindow.CommandManager.IsFrozen)
            {
                Boolean canUndo = true;

                switch (e.PropertyChangedArgs)
                {
                case PropertyChangedExtendedEventArgs exArgs:
                    #region General
                    switch (exArgs.Object)
                    {
                    case SwagOption opt:
                        switch (exArgs.PropertyName)
                        {
                        case "Parent":
                        case "IsSelected":
                        case "IsExpanded":
                            canUndo = false;
                            break;

                        case "Sequence":
                            if ((Int32)exArgs.OldValue == -1)
                            {
                                canUndo = false;
                            }
                            break;
                        }
                        break;
                    }
                    #endregion General
                    #region SwagPropertyChangedCommand
                    if (canUndo)
                    {
                        SwagPropertyChangedCommand cmd = new SwagPropertyChangedCommand(
                            exArgs.PropertyName,
                            exArgs.Object,
                            exArgs.OldValue,
                            exArgs.NewValue);
                        cmd.Display = e.Message;

                        SwagWindow.CommandManager.AddCommand(cmd);
                    }
                    #endregion SwagPropertyChangedCommand
                    break;

                case CollectionPropertyChangedEventArgs colArgs:
                    #region SwagCollectionPropertyChangedCommand
                    if (canUndo)
                    {
                        SwagCollectionPropertyChangedCommand cmd = new SwagCollectionPropertyChangedCommand(
                            colArgs.PropertyName,
                            colArgs.Object,
                            colArgs.OldItems,
                            colArgs.NewItems);
                        cmd.Display = e.Message;

                        SwagWindow.CommandManager.AddCommand(cmd);
                    }
                    #endregion SwagCollectionPropertyChangedCommand
                    break;
                }
            }
        }