public static void OverrideValues(UndoRedoStack urs, SettingsPropertyGroupDefinition current, SettingsPropertyGroupDefinition @new) { var currentSubGroups = current.SubGroups.ToDictionary(x => x.GroupName, x => x); var currentSettingProperties = current.SettingProperties.ToDictionary(x => x.DisplayName, x => x); foreach (var nspg in @new.SubGroups) { if (currentSubGroups.TryGetValue(nspg.GroupName, out var spg)) { OverrideValues(urs, spg, nspg); } else { MCMUISubModule.Logger.LogWarning("{NewId}::{GroupName} was not found on, {CurrentId}", @new.DisplayGroupName, nspg.GroupName, current.DisplayGroupName); } } foreach (var nsp in @new.SettingProperties) { if (currentSettingProperties.TryGetValue(nsp.DisplayName, out var sp)) { OverrideValues(urs, sp, nsp); } else { MCMUISubModule.Logger.LogWarning("{NewId}::{GroupName} was not found on, {CurrentId}", @new.DisplayGroupName, nsp.DisplayName, current.DisplayGroupName); } } }
public TextBox(string name, string text = null, bool transparent = false) : base(name, Docking.Fill, transparent ? new TransparentTextBoxWidgetStyle() as IWidgetStyle : new TextBoxWidgetStyle() as IWidgetStyle) { if (transparent) { Styles.SetStyle(new TransparentTextBoxActiveWidgetStyle(), WidgetStates.Active); Styles.SetStyle(new TransparentTextBoxDisabledWidgetStyle(), WidgetStates.Disabled); } else { Styles.SetStyle(new TextBoxActiveWidgetStyle(), WidgetStates.Active); Styles.SetStyle(new TextBoxDisabledWidgetStyle(), WidgetStates.Disabled); } UndoRedoManager = new UndoRedoStack(this, 100); Font = SummerGUIWindow.CurrentContext.FontManager.DefaultFont; MaxSize = new SizeF(MaxSize.Width, Font.TextBoxHeight); Format = DefaultSingleLineFontFormat; TextMargin = new Size(6, 2); CursorLineWidth = 1f; HideSelection = true; Text = text; if (Text != null) { CursorPosition = Text.Length; } AllowTabKey = true; CanFocus = true; }
public MultiLineTextBox(string name, IWidgetStyle style) : base(name, Docking.Fill, style) { m_Font = SummerGUIWindow.CurrentContext.FontManager.MonoFont; RowManager = new MultiLineTextManager(this, SpecialCharacterFlags.All); UndoRedoManager = new UndoRedoStack(this, 100); CursorOptions = CursorFlags.Default; CanFocus = true; HideSelection = true; AutoScroll = true; ScrollBars = ScrollBars.Vertical; VScrollBar.SetColorScheme(ScrollBarColorSchemes.Dark); Padding = new Padding(Font.Height, Font.LineHeight / 2); CursorPen = new Pen(Theme.Colors.White, 1.5f); BreakWidthRulerVisible = true; RowManager.LoadingCompleted += delegate { RowManager.MoveHome(); ScrollOffsetX = 0; ScrollOffsetY = 0; IsLoading = false; OnEnabledChanged(); RowManager.Paragraphs.UpdateCompleted += delegate { try { EnsureCurrentRowVisible(); Invalidate(1); } catch (Exception ex) { ex.LogError(); } }; }; }
/// <summary> /// Сохранения в файл /// </summary> /// <param name="undoRedoStack">Стек команд</param> /// <param name="filename">Путь к файлу</param> public void SaveToFile(UndoRedoStack undoRedoStack, string filename) { var file = new StreamWriter(filename); var redo = undoRedoStack.RedoStack; var undoCount = undoRedoStack.UndoCount; var redoCount = undoRedoStack.RedoCount; file.WriteLine(redoCount); for (int i = 0; i < undoCount; i++) { undoRedoStack.Undo(); } var redoList = redo.ToList().AsReadOnly(); foreach (var command in redoList) { var jsonString = JsonConvert.SerializeObject(command, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }); file.WriteLine(jsonString); } for (int i = 0; i < undoCount; i++) { undoRedoStack.Redo(); } file.Close(); }
public void WhenDoThreeCommands() { var stack = new UndoRedoStack(); var command1 = MockRepository.GenerateMock<ICommand>(); var command2 = MockRepository.GenerateMock<ICommand>(); var command3 = MockRepository.GenerateMock<ICommand>(); stack.Do(command1); stack.Do(command2); stack.Do(command3); Assert.IsTrue(stack.CanUndo(command3)); Assert.IsFalse(stack.CanUndo(command2)); Assert.IsFalse(stack.CanUndo(command1)); stack.Undo(command3); Assert.IsTrue(stack.CanRedo(command3)); Assert.IsTrue(stack.CanUndo(command2)); Assert.IsFalse(stack.CanUndo(command1)); stack.Undo(command2); Assert.IsFalse(stack.CanRedo(command3)); Assert.IsFalse(stack.CanUndo(command2)); Assert.IsTrue(stack.CanRedo(command2)); Assert.IsTrue(stack.CanUndo(command1)); stack.Undo(command1); Assert.IsTrue(stack.CanRedo(command1)); Assert.IsFalse(stack.CanRedo(command2)); }
public static void OverrideValues(UndoRedoStack urs, ISettingsPropertyDefinition current, ISettingsPropertyDefinition @new) { if (SettingsUtils.Equals(current, @new)) { return; } switch (current.SettingType) { case SettingType.Bool when @new.PropertyReference.Value is bool val: urs.Do(new SetValueTypeAction <bool>(current.PropertyReference, val)); break; case SettingType.Int when @new.PropertyReference.Value is int val: urs.Do(new SetValueTypeAction <int>(current.PropertyReference, val)); break; case SettingType.Float when @new.PropertyReference.Value is float val: urs.Do(new SetValueTypeAction <float>(current.PropertyReference, val)); break; case SettingType.String when @new.PropertyReference.Value is string val: urs.Do(new SetStringAction(current.PropertyReference, val)); break; case SettingType.Dropdown when @new.PropertyReference.Value is { } val: urs.Do(new SetSelectedIndexAction(current.PropertyReference, new SelectedIndexWrapper(val))); break; } }
public static void OverrideValues(UndoRedoStack urs, SettingsPropertyGroupDefinition current, SettingsPropertyGroupDefinition @new) { foreach (var newSettingPropertyGroup in @new.SubGroups) { var settingPropertyGroup = current.SubGroups .FirstOrDefault(x => x.GroupName == newSettingPropertyGroup.GroupName); if (settingPropertyGroup is not null) { OverrideValues(urs, settingPropertyGroup, newSettingPropertyGroup); } else { MCMUISubModule.Logger.LogWarning("{NewId}::{GroupName} was not found on, {CurrentId}", @new.DisplayGroupName, newSettingPropertyGroup.GroupName, current.DisplayGroupName); } } foreach (var newSettingProperty in @new.SettingProperties) { var settingProperty = current.SettingProperties .FirstOrDefault(x => x.DisplayName == newSettingProperty.DisplayName); if (settingProperty is not null) { OverrideValues(urs, settingProperty, newSettingProperty); } else { MCMUISubModule.Logger.LogWarning("{NewId}::{GroupName} was not found on, {CurrentId}", @new.DisplayGroupName, newSettingProperty.DisplayName, current.DisplayGroupName); } } }
private void EditTextBlockAtBlank() { if (SelectedPageViewModel == null) { return; } if (SelectedTextBlock == null) { return; } var viewModel = new CreateEditNameForTextBlockDialogViewModel("Редактирование текста", SelectedTextBlock.Text); var newName = viewModel.Show(); if (string.IsNullOrEmpty(newName)) { return; } var textBlocks = new List <TextBlock>(); foreach (var textBlock in SelectedPageViewModel.TextBlocks) { var text = textBlock == SelectedTextBlock ? newName : textBlock.Text; textBlocks.Add(new TextBlock(text, textBlock.X, textBlock.Y)); } UndoRedoStack.ExecuteNewCommand(new ChangeTextBlockListCommand(SelectedPageViewModel, textBlocks)); }
private void ImportTextBlocks() { if (SelectedPageViewModel == null) { return; } var openFileDialog = new OpenFileDialog() { Filter = "JSON файлы (*.json) | *.json" }; var res = openFileDialog.ShowDialog(); if (res != true) { return; } List <TextBlock> textBlocks; try { var fileContent = File.ReadAllText(openFileDialog.FileName); textBlocks = JsonConvert.DeserializeObject <List <TextBlock> >(fileContent); } catch { MessageBox.Show("Ошибка чтения файла"); return; } UndoRedoStack.ExecuteNewCommand(new ChangeTextBlockListCommand(SelectedPageViewModel, textBlocks)); }
public static void OverrideValues(UndoRedoStack urs, ISettingsPropertyDefinition current, ISettingsPropertyDefinition @new) { if (SettingsUtils.Equals(current, @new)) { return; } switch (current.SettingType) { case SettingType.Bool: urs.Do(new SetValueTypeAction <bool>(current.PropertyReference, (bool)@new.PropertyReference.Value)); break; case SettingType.Int: urs.Do(new SetValueTypeAction <int>(current.PropertyReference, (int)@new.PropertyReference.Value)); break; case SettingType.Float: urs.Do(new SetValueTypeAction <float>(current.PropertyReference, (float)@new.PropertyReference.Value)); break; case SettingType.String: urs.Do(new SetStringAction(current.PropertyReference, (string)@new.PropertyReference.Value)); break; case SettingType.Dropdown: urs.Do(new SetDropdownIndexAction(current.PropertyReference, SettingsUtils.GetSelector(@new.PropertyReference.Value))); break; } }
public UndoManager(int undoDepth) { undoDepth = MathC.Clamp(undoDepth, 1, MaxUndoDepth); _undoStack = new UndoRedoStack(undoDepth); _redoStack = new UndoRedoStack(undoDepth); }
/// <summary> /// Конструктор представителя /// </summary> /// <param name="view">Представление</param> /// <param name="model">Модель</param> public Presenter(IView view, IModel model) { _currentHandler = null; _undoRedoStack = new UndoRedoStack(); _view = view; _model = model; _model.NewProject(); _saveState = SaveState.NewFile; _view.SaveType = _saveState; _view.ToolPicked += _view_ToolPicked; _view.ParametersChanged += _view_ParametersChanged; _view.CanvasCleared += _view_CanvasCleared; _view.FiguresDeleted += _view_FiguresDeleted; _view.FigureCopied += _view_FigureCopied; _view.UndoPressed += _view_UndoPressed; _view.RedoPressed += _view_RedoPressed; _view.CommandStack = _undoRedoStack; _view.FileLoaded += _view_FileLoaded; _view.NewProjectCreated += _view_NewProjectCreated; _model.RegisterObserver(this); }
public void GetNamespaceGuidFromFunctionAssemblyName_CheckIfGuidIsFoundInGivenAssemblyFilename_GuidIsFound() { var input = "CurveFunc_ID49163ffa-f4e9-406f-8b5c-602c6adc276f_Version757e70ab-555d-42f2-bb0d-1fdbdf77841b"; var guidGroup = UndoRedoStack.GetNamespaceGuidFromFunctionAssemblyName(input); Assert.AreEqual("49163ffa-f4e9-406f-8b5c-602c6adc276f", guidGroup); }
public void AssignUndoRedoStack(UndoRedoStack urs) { URS = urs; foreach (var settingProp in SettingProperties) { settingProp.AssignUndoRedoStack(urs); } }
/// <summary> /// C'tor /// </summary> /// <param name="parent">Parent container</param> /// <param name="id">Parameter identificator</param> /// <param name="designation">Parameter name</param> /// <param name="defaultValue">Generic typed parameter default value</param> protected DataParameter(DataContainer parent, string id, string designation, T defaultValue) : base(parent, id, designation) { _defaultValue = defaultValue; BufferedValue = _defaultValue; _value = _defaultValue; _undoRedo = Parent?.Root?.UndoRedo; }
/// <summary> /// Mimics the same method in SettingsUtils, but it registers every action in URS /// </summary> /// <param name="urs"></param> /// <param name="current"></param> /// <param name="new"></param> public static void OverrideValues(UndoRedoStack urs, BaseSettings current, BaseSettings @new) { foreach (var newSettingPropertyGroup in @new.GetSettingPropertyGroups()) { var settingPropertyGroup = current.GetSettingPropertyGroups() .FirstOrDefault(x => x.DisplayGroupName.ToString() == newSettingPropertyGroup.DisplayGroupName.ToString()); OverrideValues(urs, settingPropertyGroup, newSettingPropertyGroup); } }
/// <summary> /// C'tor /// </summary> /// <param name="parent">Parent container</param> /// <param name="id">Container identfication</param> /// <param name="designation">Container name</param> /// <param name="initDefaultContainers">Action that initializes the default configuration of this container's dynamic sub containers</param> protected DataDynParentContainer(DataContainer parent, string id, string designation, Action <DataDynParentContainer <T> > initDefaultContainers = null) : base(parent, id, designation) { _initDefaultContainers = initDefaultContainers; _initDefaultContainers?.Invoke(this); Items.ForEach(c => _bufferedContainers.Add(c)); _undoRedo = Root?.UndoRedo; }
public void TestMethod1() { UndoRedoStack s = new UndoRedoStack(); s.CellContentsChange("a1", "1"); string a, b; Assert.IsTrue(s.TryUndo(t => t, out a, out b)); }
public Commands(string initialRtf) { _undoStack = new UndoRedoStack(); _undoStack.Push(initialRtf, 0); _redoStack = new UndoRedoStack(); _lastUndoActionName = string.Empty; _lastSavedText = string.Empty; _lastRemovedRtf = string.Empty; _lastUndoActionWasBackspace = false; }
public void ShouldTrackUndoAndRedos() { var stack = new UndoRedoStack(); var command = MockRepository.GenerateMock<ICommand>(); stack.Do(command); Assert.IsTrue(stack.CanUndo(command)); stack.Undo(command); Assert.IsFalse(stack.CanUndo(command)); Assert.IsTrue(stack.CanRedo(command)); }
private void Clear(UndoRedoStack stack, bool silent = false) { if (!StackValid(stack)) { return; } stack.Clear(); if (!silent) { UndoStackChanged?.Invoke(this, new EventArgs()); } }
private void InitUndoRedoStack() { undoRedo = new UndoRedoStack(); undoRedo.OnUndoRedoAction.SubscribeForLifetime(Refresh, this); undoRedo.OnUndoRedoAction.SubscribeForLifetime(() => { if (undoRedo.UndoElements.FirstOrDefault() is ClearPendingChangesAction == false) { SetPendingChanges(true); } }, this); undoRedo.OnEmptyUndoStack.SubscribeForLifetime(() => SetPendingChanges(false), this); }
public static void OverrideValues(UndoRedoStack urs, SettingsPropertyGroupDefinition current, SettingsPropertyGroupDefinition @new) { foreach (var newSettingPropertyGroup in @new.SubGroups) { var settingPropertyGroup = current.SubGroups .FirstOrDefault(x => x.DisplayGroupName.ToString() == newSettingPropertyGroup.DisplayGroupName.ToString()); OverrideValues(urs, settingPropertyGroup, newSettingPropertyGroup); } foreach (var newSettingProperty in @new.SettingProperties) { var settingProperty = current.SettingProperties .FirstOrDefault(x => x.DisplayName == newSettingProperty.DisplayName); OverrideValues(urs, settingProperty, newSettingProperty); } }
/// <summary> /// Mimics the same method in SettingsUtils, but it registers every action in URS /// </summary> /// <param name="urs"></param> /// <param name="current"></param> /// <param name="new"></param> public static void OverrideValues(UndoRedoStack urs, BaseSettings current, BaseSettings @new) { var currentDict = current.GetUnsortedSettingPropertyGroups().ToDictionary(x => x.GroupName, x => x); foreach (var nspg in @new.GetAllSettingPropertyGroupDefinitions()) { if (currentDict.TryGetValue(nspg.GroupName, out var spg)) { OverrideValues(urs, spg, nspg); } else { MCMUISubModule.Logger.LogWarning("{NewId}::{GroupName} was not found on, {CurrentId}", @new.Id, nspg.GroupName, current.Id); } } }
/// <summary> /// Mimics the same method in SettingsUtils, but it registers every action in URS /// </summary> /// <param name="urs"></param> /// <param name="current"></param> /// <param name="new"></param> public static void OverrideValues(UndoRedoStack urs, BaseSettings current, BaseSettings @new) { foreach (var newSettingPropertyGroup in @new.GetAllSettingPropertyGroupDefinitions()) { var settingPropertyGroup = current.GetAllSettingPropertyGroupDefinitions() .FirstOrDefault(x => x.GroupName == newSettingPropertyGroup.GroupName); if (settingPropertyGroup is not null) { OverrideValues(urs, settingPropertyGroup, newSettingPropertyGroup); } else { MCMUISubModule.Logger.LogWarning("{NewId}::{GroupName} was not found on, {CurrentId}", @new.Id, newSettingPropertyGroup.GroupName, current.Id); } } }
private void DeleteTextBlockFromBlank() { if (SelectedPageViewModel == null) { return; } if (SelectedTextBlock == null) { return; } var textBlocks = SelectedPageViewModel.TextBlocks.ToList(); textBlocks.Remove(SelectedTextBlock); UndoRedoStack.ExecuteNewCommand(new ChangeTextBlockListCommand(SelectedPageViewModel, textBlocks)); }
/// <summary>Initializes a new instance of the <see cref="DockControl"/> class.</summary> public DockControl() { bool designMode = DesignerProperties.GetIsInDesignMode(this); VerifyLicense(designMode); _dockItems = new DockItemCollection(this); _floatingWindows = new FloatingWindowCollection(); LeftDockTree = new DockTree(this, DockTreePosition.Left); RightDockTree = new DockTree(this, DockTreePosition.Right); TopDockTree = new DockTree(this, DockTreePosition.Top); BottomDockTree = new DockTree(this, DockTreePosition.Bottom); DocumentDockTree = new DockTree(this, DockTreePosition.Document); _undoStack = new UndoRedoStack <ICommand>(MaxUndoLevel); _redoStack = new UndoRedoStack <ICommand>(MaxUndoLevel); PaneManager = new DockPaneManager(this); this.Loaded += new RoutedEventHandler(OnLoaded); }
private void UndoRedo(UndoRedoStack undoStack, UndoRedoStack redoStack) { if (undoStack.Stack.Count == 0) { return; } var record = undoStack.Stack.Pop(); try { _suppressRedoStackReset = true; switch (record.OperationType) { case OperationType.Insert: redoStack.MakeDelete(Text, record.Where, record.Length); DeleteChars(record.Where, record.Length); UserSetCursorPosition(record.Where); break; case OperationType.Delete: if (InsertChars(record.Where, record.Data)) { redoStack.MakeInsert(record.Where, record.Data.Length); UserSetCursorPosition(record.Where + record.Data.Length); } break; case OperationType.Replace: redoStack.MakeReplace(Text, record.Where, record.Length, record.Data.Length()); DeleteChars(record.Where, record.Length); InsertChars(record.Where, record.Data); break; } } finally { _suppressRedoStackReset = false; } ResetSelection(); }
private void Engage(UndoRedoStack stack) { if (!StackValid(stack)) { return; } var counterStack = stack == _undoStack ? _redoStack : _undoStack; var instance = stack.Pop(); if (instance == null) { return; } if (instance.All(item => item.Valid == null || item.Valid())) { // Generate and push redo instance, if exists. If not, reset redo stack, since action is irreversible. var redoList = instance.Where(item => item.RedoInstance != null).ToList().ConvertAll(item => item.RedoInstance()); if (redoList.Count > 0) { counterStack.Push(redoList); } else { counterStack.Clear(); } // Invoke original undo instance instance.ForEach(item => item.UndoAction?.Invoke()); } else { MessageSent?.Invoke(this, new UndoManagerMessageEventArgs() { Message = "Level state changed. " + (counterStack == _redoStack ? "Undo" : "Redo") + " action ignored." }); } UndoStackChanged?.Invoke(this, new EventArgs()); }
/** * Primary WPF-handler called before updateing the user interface */ void CompositionTarget_RenderingHandler(object sender, EventArgs e) { UpdateTimeSinceLastFrame(); if (CompositionTargertRenderingEvent != null) { CompositionTargertRenderingEvent(this, EventArgs.Empty); } #if USE_SOCKETS try { UpdateRequiredAfterUserInteraction |= UndoRedoStack.ProcessReceivedCommands(); } catch (Exception exception) { Logger.Warn("Error when excecuting a remote command:\n'{0}'", exception.Message); } #endif if (UpdateRequiredAfterUserInteraction || (MainWindow != null && Math.Abs(MainWindow.CompositionView.PlaySpeed) > 0.001)) { UpdateGlobalTime(); if (UpdateAfterUserInteractionEvent != null) { UpdateAfterUserInteractionEvent(this, new EventArgs()); } UpdateRequiredAfterUserInteraction = false; // Flush the dispatcher queue if too long (this is likely to result in frame drops but will ensure responsiveness of controls) if (_queueLength > 1) { DoEvents(); } } }
public void PointSelected(double x, double y) { SelectPointMode = false; if (SelectedPageViewModel == null) { return; } var viewModel = new CreateEditNameForTextBlockDialogViewModel("Добавление текста", ""); var name = viewModel.Show(); if (string.IsNullOrEmpty(name)) { return; } x -= 2; y -= 5; var textBlocks = SelectedPageViewModel.TextBlocks.Select(i => (TextBlock)i.Clone()).ToList(); textBlocks.Add(new TextBlock(name, (int)x, (int)y)); UndoRedoStack.ExecuteNewCommand(new ChangeTextBlockListCommand(SelectedPageViewModel, textBlocks)); }
private void CloseDocument() { UndoRedoStack.Clear(); Pages.Clear(); }
public void SetUp() { stack = new UndoRedoStack<ICommand>(); handler = new CommandHandler(stack); }
public void SetUp() { stack = new UndoRedoStack<TestObject>(); }
public void TearDown() { stack = null; }