/ src / settings-ui / Settings.UI.Library / Helpers / ModuleHelper.cs
ModuleHelper.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 ManagedCommon;
  6  
  7  namespace Microsoft.PowerToys.Settings.UI.Library.Helpers
  8  {
  9      public static class ModuleHelper
 10      {
 11          public static string GetModuleLabelResourceName(ModuleType moduleType)
 12          {
 13              return moduleType switch
 14              {
 15                  ModuleType.Workspaces => "Workspaces/ModuleTitle",
 16                  ModuleType.PowerAccent => "QuickAccent/ModuleTitle",
 17                  ModuleType.PowerOCR => "TextExtractor/ModuleTitle",
 18                  ModuleType.FindMyMouse => "MouseUtils_FindMyMouse/Header",
 19                  ModuleType.MouseHighlighter => "MouseUtils_MouseHighlighter/Header",
 20                  ModuleType.MouseJump => "MouseUtils_MouseJump/Header",
 21                  ModuleType.MousePointerCrosshairs => "MouseUtils_MousePointerCrosshairs/Header",
 22                  ModuleType.CursorWrap => "MouseUtils_CursorWrap/Header",
 23                  ModuleType.GeneralSettings => "QuickAccessTitle/Title",
 24                  _ => $"{moduleType}/ModuleTitle",
 25              };
 26          }
 27  
 28          public static string GetModuleTypeFluentIconName(ModuleType moduleType)
 29          {
 30              return moduleType switch
 31              {
 32                  ModuleType.AdvancedPaste => "ms-appx:///Assets/Settings/Icons/AdvancedPaste.png",
 33                  ModuleType.Workspaces => "ms-appx:///Assets/Settings/Icons/Workspaces.png",
 34                  ModuleType.PowerOCR => "ms-appx:///Assets/Settings/Icons/TextExtractor.png",
 35                  ModuleType.PowerAccent => "ms-appx:///Assets/Settings/Icons/QuickAccent.png",
 36                  ModuleType.MousePointerCrosshairs => "ms-appx:///Assets/Settings/Icons/MouseCrosshairs.png",
 37                  ModuleType.MeasureTool => "ms-appx:///Assets/Settings/Icons/ScreenRuler.png",
 38                  ModuleType.PowerLauncher => "ms-appx:///Assets/Settings/Icons/PowerToysRun.png",
 39                  ModuleType.GeneralSettings => "ms-appx:///Assets/Settings/Icons/PowerToys.png",
 40                  _ => $"ms-appx:///Assets/Settings/Icons/{moduleType}.png",
 41              };
 42          }
 43  
 44          public static bool GetIsModuleEnabled(GeneralSettings generalSettingsConfig, ModuleType moduleType)
 45          {
 46              return moduleType switch
 47              {
 48                  ModuleType.AdvancedPaste => generalSettingsConfig.Enabled.AdvancedPaste,
 49                  ModuleType.AlwaysOnTop => generalSettingsConfig.Enabled.AlwaysOnTop,
 50                  ModuleType.Awake => generalSettingsConfig.Enabled.Awake,
 51                  ModuleType.CmdPal => generalSettingsConfig.Enabled.CmdPal,
 52                  ModuleType.ColorPicker => generalSettingsConfig.Enabled.ColorPicker,
 53                  ModuleType.CropAndLock => generalSettingsConfig.Enabled.CropAndLock,
 54                  ModuleType.CursorWrap => generalSettingsConfig.Enabled.CursorWrap,
 55                  ModuleType.EnvironmentVariables => generalSettingsConfig.Enabled.EnvironmentVariables,
 56                  ModuleType.FancyZones => generalSettingsConfig.Enabled.FancyZones,
 57                  ModuleType.FileLocksmith => generalSettingsConfig.Enabled.FileLocksmith,
 58                  ModuleType.FindMyMouse => generalSettingsConfig.Enabled.FindMyMouse,
 59                  ModuleType.Hosts => generalSettingsConfig.Enabled.Hosts,
 60                  ModuleType.ImageResizer => generalSettingsConfig.Enabled.ImageResizer,
 61                  ModuleType.KeyboardManager => generalSettingsConfig.Enabled.KeyboardManager,
 62                  ModuleType.LightSwitch => generalSettingsConfig.Enabled.LightSwitch,
 63                  ModuleType.MouseHighlighter => generalSettingsConfig.Enabled.MouseHighlighter,
 64                  ModuleType.MouseJump => generalSettingsConfig.Enabled.MouseJump,
 65                  ModuleType.MousePointerCrosshairs => generalSettingsConfig.Enabled.MousePointerCrosshairs,
 66                  ModuleType.MouseWithoutBorders => generalSettingsConfig.Enabled.MouseWithoutBorders,
 67                  ModuleType.NewPlus => generalSettingsConfig.Enabled.NewPlus,
 68                  ModuleType.Peek => generalSettingsConfig.Enabled.Peek,
 69                  ModuleType.PowerRename => generalSettingsConfig.Enabled.PowerRename,
 70                  ModuleType.PowerLauncher => generalSettingsConfig.Enabled.PowerLauncher,
 71                  ModuleType.PowerAccent => generalSettingsConfig.Enabled.PowerAccent,
 72                  ModuleType.RegistryPreview => generalSettingsConfig.Enabled.RegistryPreview,
 73                  ModuleType.MeasureTool => generalSettingsConfig.Enabled.MeasureTool,
 74                  ModuleType.ShortcutGuide => generalSettingsConfig.Enabled.ShortcutGuide,
 75                  ModuleType.PowerOCR => generalSettingsConfig.Enabled.PowerOcr,
 76                  ModuleType.PowerDisplay => generalSettingsConfig.Enabled.PowerDisplay,
 77                  ModuleType.Workspaces => generalSettingsConfig.Enabled.Workspaces,
 78                  ModuleType.ZoomIt => generalSettingsConfig.Enabled.ZoomIt,
 79                  ModuleType.GeneralSettings => generalSettingsConfig.EnableQuickAccess,
 80                  _ => false,
 81              };
 82          }
 83  
 84          public static void SetIsModuleEnabled(GeneralSettings generalSettingsConfig, ModuleType moduleType, bool isEnabled)
 85          {
 86              switch (moduleType)
 87              {
 88                  case ModuleType.AdvancedPaste: generalSettingsConfig.Enabled.AdvancedPaste = isEnabled; break;
 89                  case ModuleType.AlwaysOnTop: generalSettingsConfig.Enabled.AlwaysOnTop = isEnabled; break;
 90                  case ModuleType.Awake: generalSettingsConfig.Enabled.Awake = isEnabled; break;
 91                  case ModuleType.CmdPal: generalSettingsConfig.Enabled.CmdPal = isEnabled; break;
 92                  case ModuleType.ColorPicker: generalSettingsConfig.Enabled.ColorPicker = isEnabled; break;
 93                  case ModuleType.CropAndLock: generalSettingsConfig.Enabled.CropAndLock = isEnabled; break;
 94                  case ModuleType.CursorWrap: generalSettingsConfig.Enabled.CursorWrap = isEnabled; break;
 95                  case ModuleType.EnvironmentVariables: generalSettingsConfig.Enabled.EnvironmentVariables = isEnabled; break;
 96                  case ModuleType.FancyZones: generalSettingsConfig.Enabled.FancyZones = isEnabled; break;
 97                  case ModuleType.FileLocksmith: generalSettingsConfig.Enabled.FileLocksmith = isEnabled; break;
 98                  case ModuleType.FindMyMouse: generalSettingsConfig.Enabled.FindMyMouse = isEnabled; break;
 99                  case ModuleType.Hosts: generalSettingsConfig.Enabled.Hosts = isEnabled; break;
100                  case ModuleType.ImageResizer: generalSettingsConfig.Enabled.ImageResizer = isEnabled; break;
101                  case ModuleType.KeyboardManager: generalSettingsConfig.Enabled.KeyboardManager = isEnabled; break;
102                  case ModuleType.LightSwitch: generalSettingsConfig.Enabled.LightSwitch = isEnabled; break;
103                  case ModuleType.MouseHighlighter: generalSettingsConfig.Enabled.MouseHighlighter = isEnabled; break;
104                  case ModuleType.MouseJump: generalSettingsConfig.Enabled.MouseJump = isEnabled; break;
105                  case ModuleType.MousePointerCrosshairs: generalSettingsConfig.Enabled.MousePointerCrosshairs = isEnabled; break;
106                  case ModuleType.MouseWithoutBorders: generalSettingsConfig.Enabled.MouseWithoutBorders = isEnabled; break;
107                  case ModuleType.NewPlus: generalSettingsConfig.Enabled.NewPlus = isEnabled; break;
108                  case ModuleType.Peek: generalSettingsConfig.Enabled.Peek = isEnabled; break;
109                  case ModuleType.PowerRename: generalSettingsConfig.Enabled.PowerRename = isEnabled; break;
110                  case ModuleType.PowerLauncher: generalSettingsConfig.Enabled.PowerLauncher = isEnabled; break;
111                  case ModuleType.PowerAccent: generalSettingsConfig.Enabled.PowerAccent = isEnabled; break;
112                  case ModuleType.RegistryPreview: generalSettingsConfig.Enabled.RegistryPreview = isEnabled; break;
113                  case ModuleType.MeasureTool: generalSettingsConfig.Enabled.MeasureTool = isEnabled; break;
114                  case ModuleType.ShortcutGuide: generalSettingsConfig.Enabled.ShortcutGuide = isEnabled; break;
115                  case ModuleType.PowerOCR: generalSettingsConfig.Enabled.PowerOcr = isEnabled; break;
116                  case ModuleType.PowerDisplay: generalSettingsConfig.Enabled.PowerDisplay = isEnabled; break;
117                  case ModuleType.Workspaces: generalSettingsConfig.Enabled.Workspaces = isEnabled; break;
118                  case ModuleType.ZoomIt: generalSettingsConfig.Enabled.ZoomIt = isEnabled; break;
119                  case ModuleType.GeneralSettings: generalSettingsConfig.EnableQuickAccess = isEnabled; break;
120              }
121          }
122  
123          /// <summary>
124          /// Gets the module key name used in IPC messages and settings JSON.
125          /// These names match the JsonPropertyName attributes in EnabledModules class.
126          /// </summary>
127          public static string GetModuleKey(ModuleType moduleType)
128          {
129              return moduleType switch
130              {
131                  ModuleType.AdvancedPaste => AdvancedPasteSettings.ModuleName,
132                  ModuleType.AlwaysOnTop => AlwaysOnTopSettings.ModuleName,
133                  ModuleType.Awake => AwakeSettings.ModuleName,
134                  ModuleType.CmdPal => "CmdPal", // No dedicated settings class
135                  ModuleType.ColorPicker => ColorPickerSettings.ModuleName,
136                  ModuleType.CropAndLock => CropAndLockSettings.ModuleName,
137                  ModuleType.CursorWrap => CursorWrapSettings.ModuleName,
138                  ModuleType.EnvironmentVariables => EnvironmentVariablesSettings.ModuleName,
139                  ModuleType.FancyZones => FancyZonesSettings.ModuleName,
140                  ModuleType.FileLocksmith => FileLocksmithSettings.ModuleName,
141                  ModuleType.FindMyMouse => FindMyMouseSettings.ModuleName,
142                  ModuleType.Hosts => HostsSettings.ModuleName,
143                  ModuleType.ImageResizer => ImageResizerSettings.ModuleName,
144                  ModuleType.KeyboardManager => KeyboardManagerSettings.ModuleName,
145                  ModuleType.LightSwitch => LightSwitchSettings.ModuleName,
146                  ModuleType.MouseHighlighter => MouseHighlighterSettings.ModuleName,
147                  ModuleType.MouseJump => MouseJumpSettings.ModuleName,
148                  ModuleType.MousePointerCrosshairs => MousePointerCrosshairsSettings.ModuleName,
149                  ModuleType.MouseWithoutBorders => MouseWithoutBordersSettings.ModuleName,
150                  ModuleType.NewPlus => NewPlusSettings.ModuleName,
151                  ModuleType.Peek => PeekSettings.ModuleName,
152                  ModuleType.PowerRename => PowerRenameSettings.ModuleName,
153                  ModuleType.PowerLauncher => PowerLauncherSettings.ModuleName,
154                  ModuleType.PowerAccent => PowerAccentSettings.ModuleName,
155                  ModuleType.RegistryPreview => RegistryPreviewSettings.ModuleName,
156                  ModuleType.MeasureTool => MeasureToolSettings.ModuleName,
157                  ModuleType.ShortcutGuide => ShortcutGuideSettings.ModuleName,
158                  ModuleType.PowerOCR => PowerOcrSettings.ModuleName,
159                  ModuleType.Workspaces => WorkspacesSettings.ModuleName,
160                  ModuleType.ZoomIt => ZoomItSettings.ModuleName,
161                  _ => moduleType.ToString(),
162              };
163          }
164      }
165  }