Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ private int AddZone()
}
}

zone = new GridZone();
zone = new GridZone(Model.ShowSpacing ? Model.Spacing : 0);
zone.Split += OnSplit;
zone.MergeDrag += OnMergeDrag;
zone.MergeComplete += OnMergeComplete;
Expand Down Expand Up @@ -383,9 +383,7 @@ private void ArrangeGridRects(Size arrangeSize)
return;
}

MainWindowSettingsModel settings = ((App)Application.Current).MainWindowSettings;

int spacing = settings.ShowSpacing ? settings.Spacing : 0;
int spacing = model.ShowSpacing ? model.Spacing : 0;

_data.RecalculateZones(spacing, arrangeSize);
_data.ArrangeZones(Preview.Children, spacing);
Expand All @@ -411,10 +409,10 @@ private void Resizer_DragDelta(object sender, System.Windows.Controls.Primitives
if (_dragHandles.HasSnappedNonAdjacentResizers(resizer))
{
double spacing = 0;
MainWindowSettingsModel settings = ((App)Application.Current).MainWindowSettings;
if (settings.ShowSpacing)
GridLayoutModel model = Model;
if (model.ShowSpacing)
{
spacing = settings.Spacing;
spacing = model.Spacing;
}

_data.SplitOnDrag(resizer, delta, spacing);
Expand Down
28 changes: 7 additions & 21 deletions src/modules/fancyzones/editor/FancyZonesEditor/GridZone.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public bool IsSelected
set { SetValue(IsSelectedProperty, value); }
}

public GridZone()
public GridZone(int spacing)
{
InitializeComponent();
OnSelectionChanged();
Expand All @@ -69,6 +69,9 @@ public GridZone()
};
Body.Children.Add(_splitter);

Spacing = spacing;
SplitterThickness = Math.Max(spacing, 1);

((App)Application.Current).MainWindowSettings.PropertyChanged += ZoneSettings_PropertyChanged;
}

Expand Down Expand Up @@ -104,19 +107,9 @@ private bool IsVerticalSplit
}
}

private int SplitterThickness
{
get
{
MainWindowSettingsModel settings = ((App)Application.Current).MainWindowSettings;
if (!settings.ShowSpacing)
{
return 1;
}
private int Spacing { get; set; }

return Math.Max(settings.Spacing, 1);
}
}
private int SplitterThickness { get; set; }

private void UpdateSplitter()
{
Expand Down Expand Up @@ -282,14 +275,7 @@ private void DoMergeComplete(MouseButtonEventArgs e)

private void DoSplit(Orientation orientation, double offset)
{
int spacing = 0;
MainWindowSettingsModel settings = ((App)Application.Current).MainWindowSettings;
if (settings.ShowSpacing)
{
spacing = settings.Spacing;
}

Split?.Invoke(this, new SplitEventArgs(orientation, offset, spacing));
Split?.Invoke(this, new SplitEventArgs(orientation, offset, Spacing));
}

private void FullSplit_Click(object sender, RoutedEventArgs e)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,14 @@ public void UpdatePreview()

private void LayoutPreview_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (_model != null)
{
_model.PropertyChanged -= LayoutModel_PropertyChanged;
}

_model = (LayoutModel)DataContext;
_model.PropertyChanged += LayoutModel_PropertyChanged;

RenderPreview();
}

Expand All @@ -69,6 +76,11 @@ private void ZoneSettings_PropertyChanged(object sender, System.ComponentModel.P
}
}

private void LayoutModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
RenderPreview();
}

public Int32Rect[] GetZoneRects()
{
return _zones.ToArray();
Expand Down Expand Up @@ -115,9 +127,7 @@ private void RenderActualScalePreview(GridLayoutModel grid)
RowColInfo[] colInfo = (from percent in grid.ColumnPercents
select new RowColInfo(percent)).ToArray();

MainWindowSettingsModel settings = ((App)Application.Current).MainWindowSettings;

int spacing = settings.ShowSpacing ? settings.Spacing : 0;
int spacing = grid.ShowSpacing ? grid.Spacing : 0;

var workArea = App.Overlay.WorkArea;
double width = workArea.Width - (spacing * (cols + 1));
Expand Down Expand Up @@ -215,8 +225,7 @@ private void RenderSmallScalePreview(GridLayoutModel grid)
Body.ColumnDefinitions.Add(def);
}

MainWindowSettingsModel settings = ((App)Application.Current).MainWindowSettings;
Thickness margin = new Thickness(settings.ShowSpacing ? settings.Spacing / 20 : 0);
Thickness margin = new Thickness(grid.ShowSpacing ? grid.Spacing / 20 : 0);

List<int> visited = new List<int>();

Expand Down
11 changes: 7 additions & 4 deletions src/modules/fancyzones/editor/FancyZonesEditor/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -381,9 +381,12 @@
PrimaryButtonStyle="{StaticResource AccentButtonStyle}"
SecondaryButtonText="{x:Static props:Resources.Cancel}"
PrimaryButtonText="{x:Static props:Resources.Save}"
PrimaryButtonClick="EditLayoutDialog_PrimaryButtonClick"
SecondaryButtonClick="EditLayoutDialog_SecondaryButtonClick"
Title="{x:Static props:Resources.Edit_Layout}">
<StackPanel Margin="0,16,0,0"
MinWidth="420">
MinWidth="420"
DataContext="{Binding SelectedModel}">
<Button Click="EditZones_Click"
x:Name="editZoneLayoutButton"
HorizontalAlignment="Stretch"
Expand Down Expand Up @@ -418,7 +421,7 @@
Orientation="Vertical">
<ui:ToggleSwitch x:Name="spaceAroundSetting"
Header="{x:Static props:Resources.Show_Space_Zones}"
IsOn="true"
IsOn="{Binding ShowSpacing}"
Visibility="{Binding Converter={StaticResource LayoutModelTypeToVisibilityConverter}}" />

<TextBlock x:Name="paddingValue"
Expand All @@ -430,7 +433,7 @@

<TextBox Margin="0,6,0,0"
IsEnabled="{Binding ShowSpacing}"
Text="32"
Text="{Binding Spacing}"
Width="86"
HorizontalAlignment="Left"
AutomationProperties.LabeledBy="{Binding ElementName=paddingValue}"
Expand All @@ -443,7 +446,7 @@
x:Name="sensitivityRadiusValue" />

<TextBox Margin="0,6,0,0"
Text="20"
Text="{Binding SensitivityRadius}"
Width="86"
AutomationProperties.LabeledBy="{Binding ElementName=sensitivityRadiusValue}"
HorizontalAlignment="Left" />
Expand Down
102 changes: 70 additions & 32 deletions src/modules/fancyzones/editor/FancyZonesEditor/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,11 @@
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Automation.Peers;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using FancyZonesEditor.Models;
using FancyZonesEditor.Utils;
using FancyZonesEditor.ViewModels;
using ModernWpf.Controls;
using ModernWpf.Controls.Primitives;
using Windows.UI.Popups;

namespace FancyZonesEditor
{
Expand All @@ -23,13 +18,12 @@ namespace FancyZonesEditor
/// </summary>
public partial class MainWindow : Window
{
// TODO: share the constants b/w C# Editor and FancyZoneLib
public const int MaxZones = 40;
private const int DefaultWrapPanelItemSize = 164;
private const int SmallWrapPanelItemSize = 164;
private const int MinimalForDefaultWrapPanelsHeight = 900;

private readonly MainWindowSettingsModel _settings = ((App)Application.Current).MainWindowSettings;
private LayoutModel _backup = null;

public int WrapPanelItemSize { get; set; } = DefaultWrapPanelItemSize;

Expand Down Expand Up @@ -67,17 +61,29 @@ private void MainWindow_KeyUp(object sender, KeyEventArgs e)

private void DecrementZones_Click(object sender, RoutedEventArgs e)
{
if (_settings.ZoneCount > 1)
var mainEditor = App.Overlay;
if (!(mainEditor.CurrentDataContext is LayoutModel model))
{
_settings.ZoneCount--;
return;
}

if (model.TemplateZoneCount > 1)
{
model.TemplateZoneCount--;
}
}

private void IncrementZones_Click(object sender, RoutedEventArgs e)
{
if (_settings.ZoneCount < MaxZones)
var mainEditor = App.Overlay;
if (!(mainEditor.CurrentDataContext is LayoutModel model))
{
return;
}

if (model.TemplateZoneCount < LayoutSettings.MaxZones)
{
_settings.ZoneCount++;
model.TemplateZoneCount++;
}
}

Expand Down Expand Up @@ -110,12 +116,7 @@ private void LayoutItem_KeyDown(object sender, KeyEventArgs e)

private void Select(LayoutModel newSelection)
{
if (App.Overlay.CurrentDataContext is LayoutModel currentSelection)
{
currentSelection.IsSelected = false;
}

newSelection.IsSelected = true;
_settings.SetSelectedModel(newSelection);
App.Overlay.CurrentDataContext = newSelection;
}

Expand Down Expand Up @@ -175,22 +176,19 @@ private void DuplicateLayout_Click(object sender, RoutedEventArgs e)
model.Name = name + " (" + (++maxCustomIndex) + ')';

model.Persist();

App.Overlay.SaveCurrentLayoutSettings(model);
App.FancyZonesEditorIO.SerializeZoneSettings();
}

private void Apply()
{
((App)Application.Current).MainWindowSettings.ResetAppliedModel();

var mainEditor = App.Overlay;
if (mainEditor.CurrentDataContext is LayoutModel model)
{
model.Apply();
}

if (!mainEditor.MultiMonitorMode)
{
Close();
_settings.SetAppliedModel(model);
App.Overlay.SaveCurrentLayoutSettings(model);
App.FancyZonesEditorIO.SerializeZoneSettings();
}
}

Expand Down Expand Up @@ -220,6 +218,18 @@ private async void DeleteLayout_Click(object sender, RoutedEventArgs e)

private async void EditLayout_Click(object sender, RoutedEventArgs e)
{
var dataContext = ((FrameworkElement)sender).DataContext;
_settings.SetSelectedModel((LayoutModel)dataContext);

if (_settings.SelectedModel is GridLayoutModel grid)
{
_backup = new GridLayoutModel(grid);
}
else if (_settings.SelectedModel is CanvasLayoutModel canvas)
{
_backup = new CanvasLayoutModel(canvas);
}

await EditLayoutDialog.ShowAsync();
}

Expand All @@ -231,9 +241,9 @@ private void EditZones_Click(object sender, RoutedEventArgs e)
return;
}

model.IsSelected = false;
Hide();
_settings.SetSelectedModel(model);

Hide();
mainEditor.OpenEditor(model);
}

Expand Down Expand Up @@ -267,11 +277,6 @@ private void Reset_Click(object sender, RoutedEventArgs e)
overlay.CurrentDataContext = MainWindowSettingsModel.BlankModel;

App.FancyZonesEditorIO.SerializeZoneSettings();

if (!overlay.MultiMonitorMode)
{
Close();
}
}

private void NewLayoutDialog_PrimaryButtonClick(ModernWpf.Controls.ContentDialog sender, ModernWpf.Controls.ContentDialogButtonClickEventArgs args)
Expand Down Expand Up @@ -331,5 +336,38 @@ private void MonitorItem_MouseDown(object sender, MouseButtonEventArgs e)
{
monitorViewModel.SelectCommand.Execute((MonitorInfoModel)(sender as Border).DataContext);
}

// EditLayout: Cancel changes
private void EditLayoutDialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
{
// restore model properties from settings
_settings.RestoreSelectedModel(_backup);
_backup = null;

Select(_settings.AppliedModel);
}

// EditLayout: Save changes
private void EditLayoutDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
{
var mainEditor = App.Overlay;
if (!(mainEditor.CurrentDataContext is LayoutModel model))
{
return;
}

_backup = null;

// update current settings
if (model == _settings.AppliedModel)
{
App.Overlay.SaveCurrentLayoutSettings(model);
}

App.FancyZonesEditorIO.SerializeZoneSettings();

// reset selected model
Select(_settings.AppliedModel);
}
}
}
Loading