diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/CanvasEditor.xaml.cs b/src/modules/fancyzones/editor/FancyZonesEditor/CanvasEditor.xaml.cs index 6dc0f7e0ac7..c97d4d1173d 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/CanvasEditor.xaml.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/CanvasEditor.xaml.cs @@ -19,12 +19,13 @@ public partial class CanvasEditor : UserControl private CanvasLayoutModel _model; - public CanvasEditor() + public CanvasEditor(CanvasLayoutModel layout) { InitializeComponent(); Loaded += OnLoaded; Unloaded += OnUnloaded; KeyDown += CanvasEditor_KeyDown; + _model = layout; } private void CanvasEditor_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) @@ -47,17 +48,8 @@ public void FocusZone() private void OnLoaded(object sender, RoutedEventArgs e) { - CanvasLayoutModel model = (CanvasLayoutModel)DataContext; - if (model != null) - { - _model = model; - - var workArea = App.Overlay.WorkArea; - - UpdateZoneRects(); - - _model.PropertyChanged += OnModelChanged; - } + UpdateZoneRects(); + _model.PropertyChanged += OnModelChanged; } private void OnUnloaded(object sender, RoutedEventArgs e) diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/CanvasEditorWindow.xaml.cs b/src/modules/fancyzones/editor/FancyZonesEditor/CanvasEditorWindow.xaml.cs index 2bbaa067fed..029c413a6d8 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/CanvasEditorWindow.xaml.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/CanvasEditorWindow.xaml.cs @@ -11,39 +11,28 @@ namespace FancyZonesEditor { public partial class CanvasEditorWindow : EditorWindow { - private CanvasLayoutModel _model; - private CanvasLayoutModel _stashedModel; - - public CanvasEditorWindow() + public CanvasEditorWindow(CanvasLayoutModel layout) + : base(layout) { InitializeComponent(); KeyUp += CanvasEditorWindow_KeyUp; KeyDown += CanvasEditorWindow_KeyDown; - - _model = App.Overlay.CurrentDataContext as CanvasLayoutModel; - _stashedModel = (CanvasLayoutModel)_model.Clone(); - } - - public LayoutModel Model - { - get - { - return _model; - } } private void OnAddZone(object sender, RoutedEventArgs e) { Logger.LogInfo("Add zone"); - _model.AddZone(); + if (EditingLayout is CanvasLayoutModel canvas) + { + canvas.AddZone(); + } } protected new void OnCancel(object sender, RoutedEventArgs e) { Logger.LogInfo("Cancel changes"); base.OnCancel(sender, e); - _stashedModel.RestoreTo(_model); } private void CanvasEditorWindow_KeyUp(object sender, KeyEventArgs e) diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/EditorWindow.cs b/src/modules/fancyzones/editor/FancyZonesEditor/EditorWindow.cs index 2f9cd05372e..b79e66c07fd 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/EditorWindow.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/EditorWindow.cs @@ -11,29 +11,35 @@ namespace FancyZonesEditor { public class EditorWindow : Window { + public LayoutModel EditingLayout { get; set; } + + public EditorWindow(LayoutModel editingLayout) + { + EditingLayout = editingLayout; + } + protected void OnSaveApplyTemplate(object sender, RoutedEventArgs e) { Logger.LogTrace(); - var mainEditor = App.Overlay; - if (mainEditor.CurrentDataContext is LayoutModel model) + + // If new custom Canvas layout is created (i.e. edited Blank layout), + // it's type needs to be updated + if (EditingLayout.Type == LayoutType.Blank) { - // If new custom Canvas layout is created (i.e. edited Blank layout), - // it's type needs to be updated - if (model.Type == LayoutType.Blank) - { - model.Type = LayoutType.Custom; - } - - model.Persist(); - - MainWindowSettingsModel settings = ((App)Application.Current).MainWindowSettings; - settings.SetAppliedModel(model); - App.Overlay.Monitors[App.Overlay.CurrentDesktop].SetLayoutSettings(model); + EditingLayout.Type = LayoutType.Custom; } + EditingLayout.Persist(); + + MainWindowSettingsModel settings = ((App)Application.Current).MainWindowSettings; + settings.SetAppliedModel(EditingLayout); + App.Overlay.Monitors[App.Overlay.CurrentDesktop].SetLayoutSettings(EditingLayout); + App.FancyZonesEditorIO.SerializeLayoutTemplates(); App.FancyZonesEditorIO.SerializeCustomLayouts(); App.FancyZonesEditorIO.SerializeAppliedLayouts(); + App.FancyZonesEditorIO.SerializeDefaultLayouts(); + App.FancyZonesEditorIO.SerializeLayoutHotkeys(); Close(); } @@ -46,7 +52,7 @@ protected void OnClosed(object sender, EventArgs e) protected void OnCancel(object sender, RoutedEventArgs e) { // restore backup, clean up - App.Overlay.EndEditing(true); + App.Overlay.EndEditing(EditingLayout); // select and draw applied layout var settings = ((App)Application.Current).MainWindowSettings; diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/GridEditor.xaml.cs b/src/modules/fancyzones/editor/FancyZonesEditor/GridEditor.xaml.cs index d49ad9232e1..8af4114eec0 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/GridEditor.xaml.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/GridEditor.xaml.cs @@ -36,7 +36,7 @@ public partial class GridEditor : UserControl private GridData _data; - public GridEditor() + public GridEditor(GridLayoutModel layoutModel) { InitializeComponent(); Loaded += GridEditor_Loaded; @@ -44,6 +44,9 @@ public GridEditor() KeyDown += GridEditor_KeyDown; KeyUp += GridEditor_KeyUp; gridEditorUniqueId = ++gridEditorUniqueIdCounter; + + _data = new GridData(layoutModel); + Model = layoutModel; } public void FocusZone() @@ -58,16 +61,6 @@ public void FocusZone() private void GridEditor_Loaded(object sender, RoutedEventArgs e) { ((App)Application.Current).MainWindowSettings.PropertyChanged += ZoneSettings_PropertyChanged; - - GridLayoutModel model = (GridLayoutModel)DataContext; - if (model == null) - { - return; - } - - _data = new GridData(model); - - Model = model; Model.PropertyChanged += OnGridDimensionsChanged; SetupUI(); } diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/GridEditorWindow.xaml.cs b/src/modules/fancyzones/editor/FancyZonesEditor/GridEditorWindow.xaml.cs index 1aea412c66d..eb0e03d5ac8 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/GridEditorWindow.xaml.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/GridEditorWindow.xaml.cs @@ -10,7 +10,8 @@ namespace FancyZonesEditor { public partial class GridEditorWindow : EditorWindow { - public GridEditorWindow() + public GridEditorWindow(GridLayoutModel model) + : base(model) { InitializeComponent(); diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/LayoutBackup.cs b/src/modules/fancyzones/editor/FancyZonesEditor/LayoutBackup.cs index 36dd6711078..feeb49724dd 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/LayoutBackup.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/LayoutBackup.cs @@ -3,14 +3,15 @@ // See the LICENSE file in the project root for more information. using System.Collections.Generic; -using System.Windows; using FancyZonesEditor.Models; +using FancyZonesEditor.Utils; namespace FancyZonesEditor { public class LayoutBackup { private LayoutModel _backup; + private string _hotkeyBackup; private List _defaultLayoutsBackup; public LayoutBackup() @@ -28,32 +29,31 @@ public void Backup(LayoutModel model) _backup = new CanvasLayoutModel(canvas); } + _hotkeyBackup = MainWindowSettingsModel.LayoutHotkeys.Key(model.Uuid); _defaultLayoutsBackup = new List(MainWindowSettingsModel.DefaultLayouts.Layouts); } - public void Restore() + public void Restore(LayoutModel layoutToRestore) { - if (_backup != null) + if (_backup != null && layoutToRestore != null) { - var settings = ((App)Application.Current).MainWindowSettings; - var selectedModel = settings.SelectedModel; - - if (selectedModel == null) - { - return; - } - if (_backup is GridLayoutModel grid) { - grid.RestoreTo((GridLayoutModel)selectedModel); + grid.RestoreTo((GridLayoutModel)layoutToRestore); grid.InitTemplateZones(); } else if (_backup is CanvasLayoutModel canvas) { - canvas.RestoreTo((CanvasLayoutModel)selectedModel); + canvas.RestoreTo((CanvasLayoutModel)layoutToRestore); + canvas.InitTemplateZones(); } } + if (_hotkeyBackup != null) + { + MainWindowSettingsModel.LayoutHotkeys.SelectKey(_hotkeyBackup, layoutToRestore.Uuid); + } + if (_defaultLayoutsBackup != null) { MainWindowSettingsModel.DefaultLayouts.Restore(_defaultLayoutsBackup); @@ -63,6 +63,7 @@ public void Restore() public void Clear() { _backup = null; + _hotkeyBackup = null; _defaultLayoutsBackup = null; } } diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/MainWindow.xaml.cs b/src/modules/fancyzones/editor/FancyZonesEditor/MainWindow.xaml.cs index b5dd83edb62..944222b73da 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/MainWindow.xaml.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/MainWindow.xaml.cs @@ -146,29 +146,17 @@ private void CloseDialog(object sender) private void DecrementZones_Click(object sender, RoutedEventArgs e) { - var mainEditor = App.Overlay; - if (mainEditor.CurrentDataContext is not LayoutModel model) + if (_settings.SelectedModel.TemplateZoneCount > 1) { - return; - } - - if (model.TemplateZoneCount > 1) - { - model.TemplateZoneCount--; + _settings.SelectedModel.TemplateZoneCount--; } } private void IncrementZones_Click(object sender, RoutedEventArgs e) { - var mainEditor = App.Overlay; - if (mainEditor.CurrentDataContext is not LayoutModel model) - { - return; - } - - if (model.IsZoneAddingAllowed) + if (_settings.SelectedModel.IsZoneAddingAllowed) { - model.TemplateZoneCount++; + _settings.SelectedModel.TemplateZoneCount++; } } @@ -303,25 +291,23 @@ private void Announce(string name, string message) private void Apply() { Logger.LogTrace(); - var mainEditor = App.Overlay; - if (mainEditor.CurrentDataContext is LayoutModel model) - { - _settings.SetAppliedModel(model); - App.Overlay.Monitors[App.Overlay.CurrentDesktop].SetLayoutSettings(model); - App.FancyZonesEditorIO.SerializeAppliedLayouts(); - App.FancyZonesEditorIO.SerializeCustomLayouts(); - } + + LayoutModel model = _settings.SelectedModel; + _settings.SetAppliedModel(model); + App.Overlay.Monitors[App.Overlay.CurrentDesktop].SetLayoutSettings(model); + App.FancyZonesEditorIO.SerializeAppliedLayouts(); + App.FancyZonesEditorIO.SerializeCustomLayouts(); } private void OnClosing(object sender, EventArgs e) { Logger.LogTrace(); - App.Overlay.EndEditing(true); App.FancyZonesEditorIO.SerializeAppliedLayouts(); App.FancyZonesEditorIO.SerializeCustomLayouts(); App.FancyZonesEditorIO.SerializeLayoutHotkeys(); App.FancyZonesEditorIO.SerializeLayoutTemplates(); + App.FancyZonesEditorIO.SerializeDefaultLayouts(); App.Overlay.CloseLayoutWindow(); App.Current.Shutdown(); } @@ -345,7 +331,8 @@ private async void EditLayout_Click(object sender, RoutedEventArgs e) var dataContext = ((FrameworkElement)sender).DataContext; Select((LayoutModel)dataContext); - App.Overlay.StartEditing((LayoutModel)dataContext); + + App.Overlay.StartEditing(_settings.SelectedModel); Keyboard.ClearFocus(); EditLayoutDialogTitle.Text = string.Format(CultureInfo.CurrentCulture, Properties.Resources.Edit_Template, ((LayoutModel)dataContext).Name); @@ -358,16 +345,8 @@ private void EditZones_Click(object sender, RoutedEventArgs e) var dataContext = ((FrameworkElement)sender).DataContext; Select((LayoutModel)dataContext); EditLayoutDialog.Hide(); - var mainEditor = App.Overlay; - if (mainEditor.CurrentDataContext is not LayoutModel model) - { - return; - } - - _settings.SetSelectedModel(model); - Hide(); - mainEditor.OpenEditor(model); + App.Overlay.OpenEditor(_settings.SelectedModel); } private void ScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e) @@ -438,7 +417,7 @@ private void OnContentRendered(object sender, EventArgs e) // EditLayout: Cancel changes private void EditLayoutDialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) { - App.Overlay.EndEditing(false); + App.Overlay.EndEditing(_settings.SelectedModel); Select(_settings.AppliedModel); } @@ -447,13 +426,8 @@ private void EditLayoutDialog_PrimaryButtonClick(ContentDialog sender, ContentDi { Logger.LogTrace(); - var mainEditor = App.Overlay; - if (mainEditor.CurrentDataContext is not LayoutModel model) - { - return; - } - - mainEditor.EndEditing(false); + App.Overlay.EndEditing(null); + LayoutModel model = _settings.SelectedModel; // update current settings if (model == _settings.AppliedModel) @@ -465,6 +439,7 @@ private void EditLayoutDialog_PrimaryButtonClick(ContentDialog sender, ContentDi App.FancyZonesEditorIO.SerializeCustomLayouts(); App.FancyZonesEditorIO.SerializeLayoutTemplates(); App.FancyZonesEditorIO.SerializeLayoutHotkeys(); + App.FancyZonesEditorIO.SerializeDefaultLayouts(); // reset selected model Select(_settings.AppliedModel); @@ -653,7 +628,6 @@ private void SetLayoutAsVerticalDefaultButton_Click(object sender, RoutedEventAr if (dataContext is LayoutModel model) { MainWindowSettingsModel.DefaultLayouts.Set(model, MonitorConfigurationType.Vertical); - App.FancyZonesEditorIO.SerializeDefaultLayouts(); } } @@ -663,7 +637,6 @@ private void SetLayoutAsHorizontalDefaultButton_Click(object sender, RoutedEvent if (dataContext is LayoutModel model) { MainWindowSettingsModel.DefaultLayouts.Set(model, MonitorConfigurationType.Horizontal); - App.FancyZonesEditorIO.SerializeDefaultLayouts(); } } @@ -673,7 +646,6 @@ private void HorizontalDefaultLayoutButton_Click(object sender, RoutedEventArgs if (dataContext is LayoutModel model) { MainWindowSettingsModel.DefaultLayouts.Reset(MonitorConfigurationType.Horizontal); - App.FancyZonesEditorIO.SerializeDefaultLayouts(); } } @@ -683,7 +655,6 @@ private void VerticalDefaultLayoutButton_Click(object sender, RoutedEventArgs e) if (dataContext is LayoutModel model) { MainWindowSettingsModel.DefaultLayouts.Reset(MonitorConfigurationType.Vertical); - App.FancyZonesEditorIO.SerializeDefaultLayouts(); } } } diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/Models/CanvasLayoutModel.cs b/src/modules/fancyzones/editor/FancyZonesEditor/Models/CanvasLayoutModel.cs index bad7a06aef3..7eaa5f52e8e 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/Models/CanvasLayoutModel.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/Models/CanvasLayoutModel.cs @@ -184,6 +184,8 @@ public override LayoutModel Clone() public void RestoreTo(CanvasLayoutModel other) { + base.RestoreTo(other); + other.Zones.Clear(); foreach (Int32Rect zone in Zones) { @@ -191,7 +193,6 @@ public void RestoreTo(CanvasLayoutModel other) } other._topLeft = _topLeft; - other.SensitivityRadius = SensitivityRadius; other.CanvasRect = CanvasRect; other.UpdateLayout(); } diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/Models/GridLayoutModel.cs b/src/modules/fancyzones/editor/FancyZonesEditor/Models/GridLayoutModel.cs index 9010b2e9e6d..537dd741d1d 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/Models/GridLayoutModel.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/Models/GridLayoutModel.cs @@ -280,6 +280,8 @@ public override LayoutModel Clone() public void RestoreTo(GridLayoutModel layout) { + base.RestoreTo(layout); + int rows = Rows; int cols = Columns; @@ -315,7 +317,6 @@ public void RestoreTo(GridLayoutModel layout) layout.ShowSpacing = ShowSpacing; layout.Spacing = Spacing; - layout.SensitivityRadius = SensitivityRadius; layout.FirePropertyChanged(); } diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/Models/LayoutHotkeysModel.cs b/src/modules/fancyzones/editor/FancyZonesEditor/Models/LayoutHotkeysModel.cs index f48a25b552c..54311b4b033 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/Models/LayoutHotkeysModel.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/Models/LayoutHotkeysModel.cs @@ -68,6 +68,19 @@ public bool SelectKey(string key, string uuid) return true; } + public string Key(string uuid) + { + foreach (var pair in SelectedKeys) + { + if (pair.Value == uuid) + { + return pair.Key; + } + } + + return Properties.Resources.Quick_Key_None; + } + public void CleanUp() { var keys = SelectedKeys.Keys.ToList(); diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/Models/LayoutModel.cs b/src/modules/fancyzones/editor/FancyZonesEditor/Models/LayoutModel.cs index b7b244cdf2c..8968ef6e210 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/Models/LayoutModel.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/Models/LayoutModel.cs @@ -339,6 +339,12 @@ public void Delete() } } + public void RestoreTo(LayoutModel layout) + { + layout.SensitivityRadius = SensitivityRadius; + layout.TemplateZoneCount = TemplateZoneCount; + } + // Adds new custom Layout public void AddCustomLayout(LayoutModel model) { diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/Overlay.cs b/src/modules/fancyzones/editor/FancyZonesEditor/Overlay.cs index a1cbaeb77b3..1708ae6eefd 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/Overlay.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/Overlay.cs @@ -186,26 +186,19 @@ public void OpenEditor(LayoutModel model) Logger.LogTrace(); _layoutPreview = null; - if (CurrentDataContext is GridLayoutModel) + if (model is GridLayoutModel grid) { - _editorLayout = new GridEditor(); + _editorLayout = new GridEditor(grid); + _editorWindow = new GridEditorWindow(grid); } - else if (CurrentDataContext is CanvasLayoutModel) + else if (model is CanvasLayoutModel canvas) { - _editorLayout = new CanvasEditor(); + _editorLayout = new CanvasEditor(canvas); + _editorWindow = new CanvasEditorWindow(canvas); } CurrentLayoutWindow.Content = _editorLayout; - if (model is GridLayoutModel) - { - _editorWindow = new GridEditorWindow(); - } - else - { - _editorWindow = new CanvasEditorWindow(); - } - _editorWindow.Owner = Monitors[App.Overlay.CurrentDesktop].Window; _editorWindow.DataContext = model; _editorWindow.Show(); @@ -267,11 +260,11 @@ public void StartEditing(LayoutModel model) _layoutBackup.Backup(model); } - public void EndEditing(bool restoreBackup) + public void EndEditing(LayoutModel modelToRestore) { - if (restoreBackup) + if (modelToRestore != null) { - _layoutBackup.Restore(); + _layoutBackup.Restore(modelToRestore); } _layoutBackup.Clear();