public void SerializeZoneSettings() { ZoneSettingsWrapper zoneSettings = new ZoneSettingsWrapper { }; zoneSettings.Devices = new List <DeviceWrapper>(); zoneSettings.CustomZoneSets = new List <CustomLayoutWrapper>(); zoneSettings.Templates = new List <TemplateLayoutWrapper>(); zoneSettings.QuickLayoutKeys = new List <QuickLayoutKeysWrapper>(); // Serialize used devices foreach (var monitor in App.Overlay.Monitors) { LayoutSettings zoneset = monitor.Settings; if (zoneset.ZonesetUuid.Length == 0) { continue; } zoneSettings.Devices.Add(new DeviceWrapper { DeviceId = monitor.Device.Id, ActiveZoneset = new DeviceWrapper.ActiveZoneSetWrapper { Uuid = zoneset.ZonesetUuid, Type = LayoutTypeToJsonTag(zoneset.Type), }, EditorShowSpacing = zoneset.ShowSpacing, EditorSpacing = zoneset.Spacing, EditorZoneCount = zoneset.ZoneCount, EditorSensitivityRadius = zoneset.SensitivityRadius, }); } // Serialize unused devices foreach (var device in _unusedDevices) { zoneSettings.Devices.Add(device); } // Serialize custom zonesets foreach (LayoutModel layout in MainWindowSettingsModel.CustomModels) { JsonElement info; string type; if (layout is CanvasLayoutModel) { type = CanvasLayoutModel.ModelTypeID; var canvasLayout = layout as CanvasLayoutModel; var canvasRect = canvasLayout.CanvasRect; if (canvasRect.Width == 0 || canvasRect.Height == 0) { canvasRect = App.Overlay.WorkArea; } var wrapper = new CanvasInfoWrapper { RefWidth = (int)canvasRect.Width, RefHeight = (int)canvasRect.Height, Zones = new List <CanvasInfoWrapper.CanvasZoneWrapper>(), SensitivityRadius = canvasLayout.SensitivityRadius, }; foreach (var zone in canvasLayout.Zones) { wrapper.Zones.Add(new CanvasInfoWrapper.CanvasZoneWrapper { X = zone.X, Y = zone.Y, Width = zone.Width, Height = zone.Height, }); } string json = JsonSerializer.Serialize(wrapper, _options); info = JsonSerializer.Deserialize <JsonElement>(json); } else if (layout is GridLayoutModel) { type = GridLayoutModel.ModelTypeID; var gridLayout = layout as GridLayoutModel; var cells = new int[gridLayout.Rows][]; for (int row = 0; row < gridLayout.Rows; row++) { cells[row] = new int[gridLayout.Columns]; for (int column = 0; column < gridLayout.Columns; column++) { cells[row][column] = gridLayout.CellChildMap[row, column]; } } var wrapper = new GridInfoWrapper { Rows = gridLayout.Rows, Columns = gridLayout.Columns, RowsPercentage = gridLayout.RowPercents, ColumnsPercentage = gridLayout.ColumnPercents, CellChildMap = cells, ShowSpacing = gridLayout.ShowSpacing, Spacing = gridLayout.Spacing, SensitivityRadius = gridLayout.SensitivityRadius, }; string json = JsonSerializer.Serialize(wrapper, _options); info = JsonSerializer.Deserialize <JsonElement>(json); } else { // Error continue; } CustomLayoutWrapper customLayout = new CustomLayoutWrapper { Uuid = layout.Uuid, Name = layout.Name, Type = type, Info = info, }; zoneSettings.CustomZoneSets.Add(customLayout); } // Serialize template layouts foreach (LayoutModel layout in MainWindowSettingsModel.DefaultModels) { TemplateLayoutWrapper wrapper = new TemplateLayoutWrapper { Type = LayoutTypeToJsonTag(layout.Type), SensitivityRadius = layout.SensitivityRadius, ZoneCount = layout.TemplateZoneCount, }; if (layout is GridLayoutModel grid) { wrapper.ShowSpacing = grid.ShowSpacing; wrapper.Spacing = grid.Spacing; } zoneSettings.Templates.Add(wrapper); } // Serialize quick layout switch keys foreach (var pair in MainWindowSettingsModel.QuickKeys.SelectedKeys) { if (pair.Value != string.Empty) { try { QuickLayoutKeysWrapper wrapper = new QuickLayoutKeysWrapper { Key = int.Parse(pair.Key), Uuid = pair.Value, }; zoneSettings.QuickLayoutKeys.Add(wrapper); } catch (Exception) { } } } try { string jsonString = JsonSerializer.Serialize(zoneSettings, _options); _fileSystem.File.WriteAllText(FancyZonesSettingsFile, jsonString); } catch (Exception ex) { App.ShowExceptionMessageBox(Properties.Resources.Error_Applying_Layout, ex); } }
public void SerializeCustomLayouts() { CustomLayoutListWrapper layouts = new CustomLayoutListWrapper { }; layouts.CustomLayouts = new List <CustomLayoutWrapper>(); foreach (LayoutModel layout in MainWindowSettingsModel.CustomModels) { JsonElement info; string type; if (layout is CanvasLayoutModel) { type = CanvasLayoutModel.ModelTypeID; var canvasLayout = layout as CanvasLayoutModel; var canvasRect = canvasLayout.CanvasRect; if (canvasRect.Width == 0 || canvasRect.Height == 0) { canvasRect = App.Overlay.WorkArea; } var wrapper = new CanvasInfoWrapper { RefWidth = (int)canvasRect.Width, RefHeight = (int)canvasRect.Height, Zones = new List <CanvasInfoWrapper.CanvasZoneWrapper>(), SensitivityRadius = canvasLayout.SensitivityRadius, }; foreach (var zone in canvasLayout.Zones) { wrapper.Zones.Add(new CanvasInfoWrapper.CanvasZoneWrapper { X = zone.X, Y = zone.Y, Width = zone.Width, Height = zone.Height, }); } string json = JsonSerializer.Serialize(wrapper, _options); info = JsonSerializer.Deserialize <JsonElement>(json); } else if (layout is GridLayoutModel) { type = GridLayoutModel.ModelTypeID; var gridLayout = layout as GridLayoutModel; var cells = new int[gridLayout.Rows][]; for (int row = 0; row < gridLayout.Rows; row++) { cells[row] = new int[gridLayout.Columns]; for (int column = 0; column < gridLayout.Columns; column++) { cells[row][column] = gridLayout.CellChildMap[row, column]; } } var wrapper = new GridInfoWrapper { Rows = gridLayout.Rows, Columns = gridLayout.Columns, RowsPercentage = gridLayout.RowPercents, ColumnsPercentage = gridLayout.ColumnPercents, CellChildMap = cells, ShowSpacing = gridLayout.ShowSpacing, Spacing = gridLayout.Spacing, SensitivityRadius = gridLayout.SensitivityRadius, }; string json = JsonSerializer.Serialize(wrapper, _options); info = JsonSerializer.Deserialize <JsonElement>(json); } else { // Error continue; } CustomLayoutWrapper customLayout = new CustomLayoutWrapper { Uuid = layout.Uuid, Name = layout.Name, Type = type, Info = info, }; layouts.CustomLayouts.Add(customLayout); } try { string jsonString = JsonSerializer.Serialize(layouts, _options); _fileSystem.File.WriteAllText(FancyZonesCustomLayoutsFile, jsonString); } catch (Exception ex) { Logger.LogError("Serialize custom layouts error", ex); App.ShowExceptionMessageBox(Properties.Resources.Error_Applying_Layout, ex); } }