/ src / settings-ui / Settings.UI.Library / FZConfigProperties.cs
FZConfigProperties.cs
  1  // Copyright (c) Microsoft Corporation
  2  // The Microsoft Corporation licenses this file to you under the MIT license.
  3  // See the LICENSE file in the project root for more information.
  4  
  5  using System.Text.Json;
  6  using System.Text.Json.Serialization;
  7  
  8  using Settings.UI.Library.Attributes;
  9  
 10  namespace Microsoft.PowerToys.Settings.UI.Library
 11  {
 12      public class FZConfigProperties
 13      {
 14          // in reality, this file needs to be kept in sync currently with src\modules\fancyzones\lib\Settings.h
 15          public const int VkOem3 = 0xc0;
 16          public const int VkNext = 0x22;
 17          public const int VkPrior = 0x21;
 18  
 19          public static readonly HotkeySettings DefaultEditorHotkeyValue = new HotkeySettings(true, false, false, true, VkOem3);
 20          public static readonly HotkeySettings DefaultNextTabHotkeyValue = new HotkeySettings(true, false, false, false, VkNext);
 21          public static readonly HotkeySettings DefaultPrevTabHotkeyValue = new HotkeySettings(true, false, false, false, VkPrior);
 22  
 23          public FZConfigProperties()
 24          {
 25              FancyzonesShiftDrag = new BoolProperty(ConfigDefaults.DefaultFancyzonesShiftDrag);
 26              FancyzonesOverrideSnapHotkeys = new BoolProperty();
 27              FancyzonesMouseSwitch = new BoolProperty();
 28              FancyzonesMouseMiddleClickSpanningMultipleZones = new BoolProperty();
 29              FancyzonesMoveWindowsAcrossMonitors = new BoolProperty();
 30              FancyzonesMoveWindowsBasedOnPosition = new BoolProperty();
 31              FancyzonesOverlappingZonesAlgorithm = new IntProperty();
 32              FancyzonesDisplayOrWorkAreaChangeMoveWindows = new BoolProperty(ConfigDefaults.DefaultFancyzonesDisplayOrWorkAreaChangeMoveWindows);
 33              FancyzonesZoneSetChangeMoveWindows = new BoolProperty();
 34              FancyzonesAppLastZoneMoveWindows = new BoolProperty();
 35              FancyzonesOpenWindowOnActiveMonitor = new BoolProperty();
 36              FancyzonesRestoreSize = new BoolProperty();
 37              FancyzonesQuickLayoutSwitch = new BoolProperty(ConfigDefaults.DefaultFancyzonesQuickLayoutSwitch);
 38              FancyzonesFlashZonesOnQuickSwitch = new BoolProperty(ConfigDefaults.DefaultFancyzonesFlashZonesOnQuickSwitch);
 39              UseCursorposEditorStartupscreen = new BoolProperty(ConfigDefaults.DefaultUseCursorposEditorStartupscreen);
 40              FancyzonesShowOnAllMonitors = new BoolProperty();
 41              FancyzonesSpanZonesAcrossMonitors = new BoolProperty();
 42              FancyzonesZoneHighlightColor = new StringProperty(ConfigDefaults.DefaultFancyZonesZoneHighlightColor);
 43              FancyzonesHighlightOpacity = new IntProperty(50);
 44              FancyzonesEditorHotkey = new KeyboardKeysProperty(DefaultEditorHotkeyValue);
 45              FancyzonesWindowSwitching = new BoolProperty(true);
 46              FancyzonesNextTabHotkey = new KeyboardKeysProperty(DefaultNextTabHotkeyValue);
 47              FancyzonesPrevTabHotkey = new KeyboardKeysProperty(DefaultPrevTabHotkeyValue);
 48              FancyzonesMakeDraggedWindowTransparent = new BoolProperty();
 49              FancyzonesAllowPopupWindowSnap = new BoolProperty();
 50              FancyzonesAllowChildWindowSnap = new BoolProperty();
 51              FancyzonesDisableRoundCornersOnSnap = new BoolProperty();
 52              FancyzonesExcludedApps = new StringProperty();
 53              FancyzonesInActiveColor = new StringProperty(ConfigDefaults.DefaultFancyZonesInActiveColor);
 54              FancyzonesBorderColor = new StringProperty(ConfigDefaults.DefaultFancyzonesBorderColor);
 55              FancyzonesNumberColor = new StringProperty(ConfigDefaults.DefaultFancyzonesNumberColor);
 56              FancyzonesSystemTheme = new BoolProperty(true);
 57              FancyzonesShowZoneNumber = new BoolProperty(true);
 58          }
 59  
 60          [JsonPropertyName("fancyzones_shiftDrag")]
 61          public BoolProperty FancyzonesShiftDrag { get; set; }
 62  
 63          [JsonPropertyName("fancyzones_mouseSwitch")]
 64          public BoolProperty FancyzonesMouseSwitch { get; set; }
 65  
 66          [JsonPropertyName("fancyzones_mouseMiddleClickSpanningMultipleZones")]
 67          public BoolProperty FancyzonesMouseMiddleClickSpanningMultipleZones { get; set; }
 68  
 69          [JsonPropertyName("fancyzones_overrideSnapHotkeys")]
 70          public BoolProperty FancyzonesOverrideSnapHotkeys { get; set; }
 71  
 72          [JsonPropertyName("fancyzones_moveWindowAcrossMonitors")]
 73          public BoolProperty FancyzonesMoveWindowsAcrossMonitors { get; set; }
 74  
 75          [JsonPropertyName("fancyzones_moveWindowsBasedOnPosition")]
 76          public BoolProperty FancyzonesMoveWindowsBasedOnPosition { get; set; }
 77  
 78          [JsonPropertyName("fancyzones_overlappingZonesAlgorithm")]
 79          public IntProperty FancyzonesOverlappingZonesAlgorithm { get; set; }
 80  
 81          [JsonPropertyName("fancyzones_displayOrWorkAreaChange_moveWindows")]
 82          public BoolProperty FancyzonesDisplayOrWorkAreaChangeMoveWindows { get; set; }
 83  
 84          [JsonPropertyName("fancyzones_zoneSetChange_moveWindows")]
 85          public BoolProperty FancyzonesZoneSetChangeMoveWindows { get; set; }
 86  
 87          [JsonPropertyName("fancyzones_appLastZone_moveWindows")]
 88          public BoolProperty FancyzonesAppLastZoneMoveWindows { get; set; }
 89  
 90          [JsonPropertyName("fancyzones_openWindowOnActiveMonitor")]
 91          public BoolProperty FancyzonesOpenWindowOnActiveMonitor { get; set; }
 92  
 93          [JsonPropertyName("fancyzones_restoreSize")]
 94          public BoolProperty FancyzonesRestoreSize { get; set; }
 95  
 96          [JsonPropertyName("fancyzones_quickLayoutSwitch")]
 97          public BoolProperty FancyzonesQuickLayoutSwitch { get; set; }
 98  
 99          [JsonPropertyName("fancyzones_flashZonesOnQuickSwitch")]
100          public BoolProperty FancyzonesFlashZonesOnQuickSwitch { get; set; }
101  
102          [JsonPropertyName("use_cursorpos_editor_startupscreen")]
103          public BoolProperty UseCursorposEditorStartupscreen { get; set; }
104  
105          [JsonPropertyName("fancyzones_show_on_all_monitors")]
106          public BoolProperty FancyzonesShowOnAllMonitors { get; set; }
107  
108          [JsonPropertyName("fancyzones_span_zones_across_monitors")]
109          public BoolProperty FancyzonesSpanZonesAcrossMonitors { get; set; }
110  
111          [JsonPropertyName("fancyzones_makeDraggedWindowTransparent")]
112          public BoolProperty FancyzonesMakeDraggedWindowTransparent { get; set; }
113  
114          [JsonPropertyName("fancyzones_allowPopupWindowSnap")]
115          [CmdConfigureIgnore]
116          public BoolProperty FancyzonesAllowPopupWindowSnap { get; set; }
117  
118          [JsonPropertyName("fancyzones_allowChildWindowSnap")]
119          public BoolProperty FancyzonesAllowChildWindowSnap { get; set; }
120  
121          [JsonPropertyName("fancyzones_disableRoundCornersOnSnap")]
122          public BoolProperty FancyzonesDisableRoundCornersOnSnap { get; set; }
123  
124          [JsonPropertyName("fancyzones_zoneHighlightColor")]
125          public StringProperty FancyzonesZoneHighlightColor { get; set; }
126  
127          [JsonPropertyName("fancyzones_highlight_opacity")]
128          public IntProperty FancyzonesHighlightOpacity { get; set; }
129  
130          [JsonPropertyName("fancyzones_editor_hotkey")]
131          public KeyboardKeysProperty FancyzonesEditorHotkey { get; set; }
132  
133          [JsonPropertyName("fancyzones_windowSwitching")]
134          public BoolProperty FancyzonesWindowSwitching { get; set; }
135  
136          [JsonPropertyName("fancyzones_nextTab_hotkey")]
137          public KeyboardKeysProperty FancyzonesNextTabHotkey { get; set; }
138  
139          [JsonPropertyName("fancyzones_prevTab_hotkey")]
140          public KeyboardKeysProperty FancyzonesPrevTabHotkey { get; set; }
141  
142          [JsonPropertyName("fancyzones_excluded_apps")]
143          public StringProperty FancyzonesExcludedApps { get; set; }
144  
145          [JsonPropertyName("fancyzones_zoneBorderColor")]
146          public StringProperty FancyzonesBorderColor { get; set; }
147  
148          [JsonPropertyName("fancyzones_zoneColor")]
149          public StringProperty FancyzonesInActiveColor { get; set; }
150  
151          [JsonPropertyName("fancyzones_zoneNumberColor")]
152          public StringProperty FancyzonesNumberColor { get; set; }
153  
154          [JsonPropertyName("fancyzones_systemTheme")]
155          public BoolProperty FancyzonesSystemTheme { get; set; }
156  
157          [JsonPropertyName("fancyzones_showZoneNumber")]
158          public BoolProperty FancyzonesShowZoneNumber { get; set; }
159  
160          // converts the current to a json string.
161          public string ToJsonString()
162          {
163              return JsonSerializer.Serialize(this);
164          }
165      }
166  }