[FancyZones Editor] Highlight the user-defined default layout when no layout applied (#27879)

This commit is contained in:
Seraphima Zykova
2023-08-15 13:25:54 +03:00
committed by GitHub
parent 7ab2717b09
commit 3dcfd93ee8
11 changed files with 196 additions and 92 deletions

View File

@@ -171,5 +171,20 @@ LayoutData DefaultLayouts::GetDefaultLayout(MonitorConfigurationType type) const
return iter->second;
}
switch (type)
{
case MonitorConfigurationType::Horizontal:
return LayoutData{};
case MonitorConfigurationType::Vertical:
return LayoutData{
.uuid = GUID_NULL,
.type = FancyZonesDataTypes::ZoneSetLayoutType::Rows,
.showSpacing = DefaultValues::ShowSpacing,
.spacing = DefaultValues::Spacing,
.zoneCount = DefaultValues::ZoneCount,
.sensitivityRadius = DefaultValues::SensitivityRadius
};
}
return LayoutData{};
}

View File

@@ -96,15 +96,21 @@ namespace FancyZonesUnitTests
.sensitivityRadius = DefaultValues::SensitivityRadius
};
LayoutData rows{
.uuid = GUID_NULL,
.type = FancyZonesDataTypes::ZoneSetLayoutType::Rows,
.showSpacing = DefaultValues::ShowSpacing,
.spacing = DefaultValues::Spacing,
.zoneCount = DefaultValues::ZoneCount,
.sensitivityRadius = DefaultValues::SensitivityRadius
};
Assert::IsTrue(priorityGrid == DefaultLayouts::instance().GetDefaultLayout(MonitorConfigurationType::Horizontal));
Assert::IsTrue(priorityGrid == DefaultLayouts::instance().GetDefaultLayout(MonitorConfigurationType::Vertical));
Assert::IsTrue(rows == DefaultLayouts::instance().GetDefaultLayout(MonitorConfigurationType::Vertical));
}
TEST_METHOD (DefaultLayoutsNoFile)
{
// test
DefaultLayouts::instance().LoadData();
LayoutData priorityGrid{
.uuid = GUID_NULL,
.type = FancyZonesDataTypes::ZoneSetLayoutType::PriorityGrid,
@@ -114,8 +120,20 @@ namespace FancyZonesUnitTests
.sensitivityRadius = DefaultValues::SensitivityRadius
};
LayoutData rows{
.uuid = GUID_NULL,
.type = FancyZonesDataTypes::ZoneSetLayoutType::Rows,
.showSpacing = DefaultValues::ShowSpacing,
.spacing = DefaultValues::Spacing,
.zoneCount = DefaultValues::ZoneCount,
.sensitivityRadius = DefaultValues::SensitivityRadius
};
// test
DefaultLayouts::instance().LoadData();
Assert::IsTrue(priorityGrid == DefaultLayouts::instance().GetDefaultLayout(MonitorConfigurationType::Horizontal));
Assert::IsTrue(priorityGrid == DefaultLayouts::instance().GetDefaultLayout(MonitorConfigurationType::Vertical));
Assert::IsTrue(rows == DefaultLayouts::instance().GetDefaultLayout(MonitorConfigurationType::Vertical));
}
};
}

View File

@@ -78,8 +78,6 @@ namespace FancyZonesEditor
_themeManager = new ThemeManager(this);
var parseResult = FancyZonesEditorIO.ParseParams();
RunnerHelper.WaitForPowerToysRunner(PowerToysPID, () =>
{
Logger.LogInfo("Runner exited");
@@ -87,27 +85,8 @@ namespace FancyZonesEditor
Application.Current.Dispatcher.Invoke(Application.Current.Shutdown);
});
if (!parseResult.Result)
{
Logger.LogError(ParsingErrorReportTag + ": " + parseResult.Message + "; " + ParsingErrorDataTag + ": " + parseResult.MalformedData);
MessageBox.Show(parseResult.Message, FancyZonesEditor.Properties.Resources.Error_Parsing_Data_Title, MessageBoxButton.OK);
}
var parseResult = FancyZonesEditorIO.ParseParams();
parseResult = FancyZonesEditorIO.ParseAppliedLayouts();
if (!parseResult.Result)
{
Logger.LogError(ParsingErrorReportTag + ": " + parseResult.Message + "; " + ParsingErrorDataTag + ": " + parseResult.MalformedData);
MessageBox.Show(parseResult.Message, FancyZonesEditor.Properties.Resources.Error_Parsing_Data_Title, MessageBoxButton.OK);
}
parseResult = FancyZonesEditorIO.ParseCustomLayouts();
if (!parseResult.Result)
{
Logger.LogError(ParsingErrorReportTag + ": " + parseResult.Message + "; " + ParsingErrorDataTag + ": " + parseResult.MalformedData);
MessageBox.Show(parseResult.Message, FancyZonesEditor.Properties.Resources.Error_Parsing_Data_Title, MessageBoxButton.OK);
}
parseResult = FancyZonesEditorIO.ParseLayoutHotkeys();
if (!parseResult.Result)
{
Logger.LogError(ParsingErrorReportTag + ": " + parseResult.Message + "; " + ParsingErrorDataTag + ": " + parseResult.MalformedData);
@@ -121,6 +100,13 @@ namespace FancyZonesEditor
MessageBox.Show(parseResult.Message, FancyZonesEditor.Properties.Resources.Error_Parsing_Data_Title, MessageBoxButton.OK);
}
parseResult = FancyZonesEditorIO.ParseCustomLayouts();
if (!parseResult.Result)
{
Logger.LogError(ParsingErrorReportTag + ": " + parseResult.Message + "; " + ParsingErrorDataTag + ": " + parseResult.MalformedData);
MessageBox.Show(parseResult.Message, FancyZonesEditor.Properties.Resources.Error_Parsing_Data_Title, MessageBoxButton.OK);
}
parseResult = FancyZonesEditorIO.ParseDefaultLayouts();
if (!parseResult.Result)
{
@@ -128,6 +114,20 @@ namespace FancyZonesEditor
MessageBox.Show(parseResult.Message, FancyZonesEditor.Properties.Resources.Error_Parsing_Data_Title, MessageBoxButton.OK);
}
parseResult = FancyZonesEditorIO.ParseLayoutHotkeys();
if (!parseResult.Result)
{
Logger.LogError(ParsingErrorReportTag + ": " + parseResult.Message + "; " + ParsingErrorDataTag + ": " + parseResult.MalformedData);
MessageBox.Show(parseResult.Message, FancyZonesEditor.Properties.Resources.Error_Parsing_Data_Title, MessageBoxButton.OK);
}
parseResult = FancyZonesEditorIO.ParseAppliedLayouts();
if (!parseResult.Result)
{
Logger.LogError(ParsingErrorReportTag + ": " + parseResult.Message + "; " + ParsingErrorDataTag + ": " + parseResult.MalformedData);
MessageBox.Show(parseResult.Message, FancyZonesEditor.Properties.Resources.Error_Parsing_Data_Title, MessageBoxButton.OK);
}
MainWindowSettingsModel settings = ((App)Current).MainWindowSettings;
settings.UpdateSelectedLayoutModel();

View File

@@ -28,7 +28,7 @@ namespace FancyZonesEditor
MainWindowSettingsModel settings = ((App)Application.Current).MainWindowSettings;
settings.SetAppliedModel(model);
App.Overlay.SetLayoutSettings(App.Overlay.Monitors[App.Overlay.CurrentDesktop], model);
App.Overlay.Monitors[App.Overlay.CurrentDesktop].SetLayoutSettings(model);
}
App.FancyZonesEditorIO.SerializeLayoutTemplates();

View File

@@ -296,7 +296,7 @@ namespace FancyZonesEditor
model.Persist();
App.Overlay.SetLayoutSettings(App.Overlay.Monitors[App.Overlay.CurrentDesktop], model);
App.Overlay.Monitors[App.Overlay.CurrentDesktop].SetLayoutSettings(model);
App.FancyZonesEditorIO.SerializeAppliedLayouts();
App.FancyZonesEditorIO.SerializeCustomLayouts();
}
@@ -318,7 +318,7 @@ namespace FancyZonesEditor
if (mainEditor.CurrentDataContext is LayoutModel model)
{
_settings.SetAppliedModel(model);
App.Overlay.SetLayoutSettings(App.Overlay.Monitors[App.Overlay.CurrentDesktop], model);
App.Overlay.Monitors[App.Overlay.CurrentDesktop].SetLayoutSettings(model);
App.FancyZonesEditorIO.SerializeAppliedLayouts();
App.FancyZonesEditorIO.SerializeCustomLayouts();
}
@@ -366,7 +366,7 @@ namespace FancyZonesEditor
_backup = new CanvasLayoutModel(canvas);
}
_defaultLayoutsBackup = new List<LayoutModel>(MainWindowSettingsModel.DefaultLayouts.DefaultLayouts);
_defaultLayoutsBackup = new List<LayoutModel>(MainWindowSettingsModel.DefaultLayouts.Layouts);
Keyboard.ClearFocus();
EditLayoutDialogTitle.Text = string.Format(CultureInfo.CurrentCulture, Properties.Resources.Edit_Template, ((LayoutModel)dataContext).Name);
@@ -480,7 +480,7 @@ namespace FancyZonesEditor
// update current settings
if (model == _settings.AppliedModel)
{
App.Overlay.SetLayoutSettings(App.Overlay.Monitors[App.Overlay.CurrentDesktop], model);
App.Overlay.Monitors[App.Overlay.CurrentDesktop].SetLayoutSettings(model);
}
App.FancyZonesEditorIO.SerializeAppliedLayouts();
@@ -528,7 +528,7 @@ namespace FancyZonesEditor
{
if (monitor.Settings.ZonesetUuid == model.Uuid)
{
App.Overlay.SetLayoutSettings(monitor, _settings.BlankModel);
monitor.SetLayoutSettings(_settings.BlankModel);
}
}

View File

@@ -13,7 +13,7 @@ namespace FancyZonesEditor.Models
{
private static int Count { get; } = Enum.GetValues(typeof(MonitorConfigurationType)).Length;
public List<LayoutModel> DefaultLayouts { get; } = new List<LayoutModel>(Count);
public List<LayoutModel> Layouts { get; } = new List<LayoutModel>(Count);
public DefaultLayoutsModel()
{
@@ -23,30 +23,39 @@ namespace FancyZonesEditor.Models
public void Reset(MonitorConfigurationType type)
{
Set(MainWindowSettingsModel.TemplateModels[(int)LayoutType.PriorityGrid], type);
switch (type)
{
case MonitorConfigurationType.Horizontal:
Set(MainWindowSettingsModel.TemplateModels[(int)LayoutType.PriorityGrid], type);
break;
case MonitorConfigurationType.Vertical:
Set(MainWindowSettingsModel.TemplateModels[(int)LayoutType.Rows], type);
break;
}
}
public void Reset(string uuid)
{
for (int i = 0; i < Count; i++)
if (Layouts[(int)MonitorConfigurationType.Horizontal].Uuid == uuid)
{
if (DefaultLayouts[i].Uuid == uuid)
{
Set(MainWindowSettingsModel.TemplateModels[(int)LayoutType.PriorityGrid], (MonitorConfigurationType)i);
break;
}
Set(MainWindowSettingsModel.TemplateModels[(int)LayoutType.PriorityGrid], MonitorConfigurationType.Horizontal);
}
if (Layouts[(int)MonitorConfigurationType.Vertical].Uuid == uuid)
{
Set(MainWindowSettingsModel.TemplateModels[(int)LayoutType.Rows], MonitorConfigurationType.Vertical);
}
}
public void Set(LayoutModel layout, MonitorConfigurationType type)
{
if (DefaultLayouts.Count <= (int)type)
if (Layouts.Count <= (int)type)
{
DefaultLayouts.Insert((int)type, layout);
Layouts.Insert((int)type, layout);
}
else
{
DefaultLayouts[(int)type] = layout;
Layouts[(int)type] = layout;
}
FirePropertyChanged();

View File

@@ -150,7 +150,7 @@ namespace FancyZonesEditor.Models
{
get
{
return MainWindowSettingsModel.DefaultLayouts.DefaultLayouts[(int)MonitorConfigurationType.Horizontal].Uuid == this.Uuid;
return MainWindowSettingsModel.DefaultLayouts.Layouts[(int)MonitorConfigurationType.Horizontal].Uuid == this.Uuid;
}
}
@@ -158,7 +158,7 @@ namespace FancyZonesEditor.Models
{
get
{
return MainWindowSettingsModel.DefaultLayouts.DefaultLayouts[(int)MonitorConfigurationType.Horizontal].Uuid != this.Uuid;
return MainWindowSettingsModel.DefaultLayouts.Layouts[(int)MonitorConfigurationType.Horizontal].Uuid != this.Uuid;
}
}
@@ -166,7 +166,7 @@ namespace FancyZonesEditor.Models
{
get
{
return MainWindowSettingsModel.DefaultLayouts.DefaultLayouts[(int)MonitorConfigurationType.Vertical].Uuid == this.Uuid;
return MainWindowSettingsModel.DefaultLayouts.Layouts[(int)MonitorConfigurationType.Vertical].Uuid == this.Uuid;
}
}
@@ -174,7 +174,7 @@ namespace FancyZonesEditor.Models
{
get
{
return MainWindowSettingsModel.DefaultLayouts.DefaultLayouts[(int)MonitorConfigurationType.Vertical].Uuid != this.Uuid;
return MainWindowSettingsModel.DefaultLayouts.Layouts[(int)MonitorConfigurationType.Vertical].Uuid != this.Uuid;
}
}

View File

@@ -81,7 +81,7 @@ namespace FancyZonesEditor
// set default layouts
DefaultLayouts.Set(priorityGridModel, MonitorConfigurationType.Horizontal);
DefaultLayouts.Set(priorityGridModel, MonitorConfigurationType.Vertical);
DefaultLayouts.Set(rowsModel, MonitorConfigurationType.Vertical);
}
// IsShiftKeyPressed - is the shift key currently being held down
@@ -261,11 +261,6 @@ namespace FancyZonesEditor
}
}
if (foundModel == null)
{
foundModel = TemplateModels[(int)LayoutType.PriorityGrid];
}
SetSelectedModel(foundModel);
SetAppliedModel(foundModel);
FirePropertyChanged(nameof(IsCustomLayoutActive));

View File

@@ -14,21 +14,45 @@ namespace FancyZonesEditor.Models
{
public LayoutOverlayWindow Window { get; private set; }
public LayoutSettings Settings { get; set; }
public Device Device { get; set; }
public LayoutSettings Settings
{
get
{
if (_settings != null)
{
return _settings;
}
return DefaultLayoutSettings;
}
set
{
_settings = value;
}
}
public bool IsInitialized
{
get
{
return _settings != null;
}
}
public MonitorConfigurationType MonitorConfigurationType
{
get
{
return Device.MonitorSize.Width > Device.MonitorSize.Height ? MonitorConfigurationType.Horizontal : MonitorConfigurationType.Vertical;
}
}
public Monitor(Rect workArea, Size monitorSize)
{
Window = new LayoutOverlayWindow();
Settings = new LayoutSettings();
// provide a good default for vertical monitors
if (monitorSize.Height > monitorSize.Width)
{
Settings.Type = LayoutType.Rows;
}
Device = new Device(workArea, monitorSize);
if (App.DebugMode)
@@ -54,6 +78,8 @@ namespace FancyZonesEditor.Models
Device = new Device(monitorName, monitorInstanceId, monitorSerialNumber, virtualDesktop, dpi, workArea, monitorSize);
}
private LayoutSettings _settings;
public void Scale(double scaleFactor)
{
Device.Scale(scaleFactor);
@@ -64,5 +90,48 @@ namespace FancyZonesEditor.Models
Window.Width = workArea.Width;
Window.Height = workArea.Height;
}
public void SetLayoutSettings(LayoutModel model)
{
if (model == null)
{
return;
}
if (_settings == null)
{
_settings = new LayoutSettings();
}
_settings.ZonesetUuid = model.Uuid;
_settings.Type = model.Type;
_settings.SensitivityRadius = model.SensitivityRadius;
_settings.ZoneCount = model.TemplateZoneCount;
if (model is GridLayoutModel grid)
{
_settings.ShowSpacing = grid.ShowSpacing;
_settings.Spacing = grid.Spacing;
}
else
{
_settings.ShowSpacing = false;
_settings.Spacing = 0;
}
}
private LayoutSettings DefaultLayoutSettings
{
get
{
LayoutSettings settings = new LayoutSettings();
if (MonitorConfigurationType == MonitorConfigurationType.Vertical)
{
settings.Type = LayoutType.Rows;
}
return settings;
}
}
}
}

View File

@@ -180,30 +180,6 @@ namespace FancyZonesEditor
}
}
public void SetLayoutSettings(Monitor monitor, LayoutModel model)
{
if (model == null)
{
return;
}
monitor.Settings.ZonesetUuid = model.Uuid;
monitor.Settings.Type = model.Type;
monitor.Settings.SensitivityRadius = model.SensitivityRadius;
monitor.Settings.ZoneCount = model.TemplateZoneCount;
if (model is GridLayoutModel grid)
{
monitor.Settings.ShowSpacing = grid.ShowSpacing;
monitor.Settings.Spacing = grid.Spacing;
}
else
{
monitor.Settings.ShowSpacing = false;
monitor.Settings.Spacing = 0;
}
}
public void OpenEditor(LayoutModel model)
{
Logger.LogTrace();

View File

@@ -1159,15 +1159,17 @@ namespace FancyZonesEditor.Utils
foreach (var layout in layouts)
{
LayoutModel defaultLayoutModel = null;
MonitorConfigurationType type = JsonTagToMonitorConfigurationType(layout.MonitorConfiguration);
if (layout.Layout.Uuid != null && layout.Layout.Uuid != string.Empty)
{
MonitorConfigurationType type = JsonTagToMonitorConfigurationType(layout.MonitorConfiguration);
foreach (var customLayout in MainWindowSettingsModel.CustomModels)
{
if (customLayout.Uuid == layout.Layout.Uuid)
{
MainWindowSettingsModel.DefaultLayouts.Set(customLayout, type);
defaultLayoutModel = customLayout;
break;
}
}
@@ -1175,8 +1177,28 @@ namespace FancyZonesEditor.Utils
else
{
LayoutType layoutType = JsonTagToLayoutType(layout.Layout.Type);
MonitorConfigurationType type = JsonTagToMonitorConfigurationType(layout.MonitorConfiguration);
MainWindowSettingsModel.DefaultLayouts.Set(MainWindowSettingsModel.TemplateModels[(int)layoutType], type);
defaultLayoutModel = MainWindowSettingsModel.TemplateModels[(int)layoutType];
defaultLayoutModel.TemplateZoneCount = layout.Layout.ZoneCount;
defaultLayoutModel.SensitivityRadius = layout.Layout.SensitivityRadius;
if (defaultLayoutModel is GridLayoutModel gridDefaultLayoutModel)
{
gridDefaultLayoutModel.ShowSpacing = layout.Layout.ShowSpacing;
gridDefaultLayoutModel.Spacing = layout.Layout.Spacing;
}
MainWindowSettingsModel.DefaultLayouts.Set(defaultLayoutModel, type);
}
if (defaultLayoutModel != null)
{
foreach (Monitor monitor in App.Overlay.Monitors)
{
if (!monitor.IsInitialized && monitor.MonitorConfigurationType == type)
{
monitor.SetLayoutSettings(defaultLayoutModel);
}
}
}
}