Skip to content

Commit

Permalink
[FZEditor]Fix "Save and close" not updating layouts (#28201)
Browse files Browse the repository at this point in the history
* keep editing model

* hotkey backup

* added restore to base model

* pass model as an arg to edit and backup

* init canvas zones

* serialization

* not needed line
  • Loading branch information
SeraphimaZykova committed Aug 29, 2023
1 parent 2305c8e commit 742e50e
Show file tree
Hide file tree
Showing 12 changed files with 101 additions and 134 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
36 changes: 21 additions & 15 deletions src/modules/fancyzones/editor/FancyZonesEditor/EditorWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
Expand All @@ -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;
Expand Down
15 changes: 4 additions & 11 deletions src/modules/fancyzones/editor/FancyZonesEditor/GridEditor.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,17 @@ public partial class GridEditor : UserControl

private GridData _data;

public GridEditor()
public GridEditor(GridLayoutModel layoutModel)
{
InitializeComponent();
Loaded += GridEditor_Loaded;
Unloaded += GridEditor_Unloaded;
KeyDown += GridEditor_KeyDown;
KeyUp += GridEditor_KeyUp;
gridEditorUniqueId = ++gridEditorUniqueIdCounter;

_data = new GridData(layoutModel);
Model = layoutModel;
}

public void FocusZone()
Expand All @@ -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();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ namespace FancyZonesEditor
{
public partial class GridEditorWindow : EditorWindow
{
public GridEditorWindow()
public GridEditorWindow(GridLayoutModel model)
: base(model)
{
InitializeComponent();

Expand Down
27 changes: 14 additions & 13 deletions src/modules/fancyzones/editor/FancyZonesEditor/LayoutBackup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<LayoutModel> _defaultLayoutsBackup;

public LayoutBackup()
Expand All @@ -28,32 +29,31 @@ public void Backup(LayoutModel model)
_backup = new CanvasLayoutModel(canvas);
}

_hotkeyBackup = MainWindowSettingsModel.LayoutHotkeys.Key(model.Uuid);
_defaultLayoutsBackup = new List<LayoutModel>(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);
Expand All @@ -63,6 +63,7 @@ public void Restore()
public void Clear()
{
_backup = null;
_hotkeyBackup = null;
_defaultLayoutsBackup = null;
}
}
Expand Down
Loading

0 comments on commit 742e50e

Please sign in to comment.