diff --git a/README.md b/README.md
index 1233f475..b0820ded 100644
--- a/README.md
+++ b/README.md
@@ -52,7 +52,7 @@ If you have Issues, refer to [Known Issues](https://christitustech.github.io/win
These are the sponsors that help keep this project alive with monthly contributions.
-





















+























## 🏅 Thanks to all Contributors
Thanks a lot for spending your time helping Winutil grow. Thanks a lot! Keep rocking 🍻.
diff --git a/config/themes.json b/config/themes.json
index 2c11a09d..90615e8f 100644
--- a/config/themes.json
+++ b/config/themes.json
@@ -1,220 +1,169 @@
{
- "Classic": {
- "CustomDialogFontSize": "12",
- "CustomDialogFontSizeHeader": "14",
- "CustomDialogIconSize": "25",
- "CustomDialogWidth": "400",
- "CustomDialogHeight": "200",
+ "_default": {
+ "CustomDialogFontSize": "12",
+ "CustomDialogFontSizeHeader": "14",
+ "CustomDialogIconSize": "25",
+ "CustomDialogWidth": "400",
+ "CustomDialogHeight": "200",
- "FontSize": "12",
- "FontFamily": "Arial",
- "FontSizeHeading": "14",
- "HeaderFontFamily": "Consolas, Monaco",
+ "FontSize": "14",
+ "FontFamily": "Arial",
+ "FontSizeHeading": "16",
+ "HeaderFontFamily": "Consolas, Monaco",
- "CheckBoxBulletDecoratorFontSize": "14",
- "CheckBoxMargin": "15,0,0,2",
+ "CheckBoxBulletDecoratorSize": "14",
+ "CheckBoxMargin": "15,0,0,2",
- "TabButtonFontSize": "14",
- "TabButtonWidth": "100",
- "TabButtonHeight": "25",
- "TabRowHeightInPixels": "50",
- "IconFontSize": "14",
- "IconButtonSize": "35",
- "WinUtilIconSize": "Auto",
- "SettingsIconFontSize": "18",
+ "TabContentMargin": "5",
+ "TabButtonFontSize": "14",
+ "TabButtonWidth": "100",
+ "TabButtonHeight": "25",
+ "TabRowHeightInPixels": "50",
+ "IconFontSize": "14",
+ "IconButtonSize": "35",
+ "WinUtilIconSize": "Auto",
+ "SettingsIconFontSize": "18",
+ "CloseIconFontSize": "18",
- "MicroWinLogoSize": "10",
+ "MicroWinLogoSize": "10",
- "ProgressBarForegroundColor": "#FFAC1C",
- "ProgressBarBackgroundColor": "Transparent",
- "ProgressBarTextColor": "#000000",
+ "ProgressBarForegroundColor": "#FFAC1C",
+ "ProgressBarBackgroundColor": "Transparent",
+ "ProgressBarTextColor": "#000000",
- "ComboBoxBackgroundColor": "#FFFFFF",
- "LabelboxForegroundColor": "#000000",
- "MainForegroundColor": "#000000",
- "MainBackgroundColor": "#FFFFFF",
- "LabelBackgroundColor": "#FAFAFA",
- "LinkForegroundColor": "#000000",
- "LinkHoverForegroundColor": "#000000",
- "GroupBorderBackgroundColor": "#000000",
- "ComboBoxForegroundColor": "#000000",
+ "ComboBoxBackgroundColor": "#FFFFFF",
+ "LabelboxForegroundColor": "#000000",
+ "MainForegroundColor": "#000000",
+ "MainBackgroundColor": "#FFFFFF",
+ "LabelBackgroundColor": "#FAFAFA",
+ "LinkForegroundColor": "#000000",
+ "LinkHoverForegroundColor": "#000000",
+ "GroupBorderBackgroundColor": "#000000",
+ "ComboBoxForegroundColor": "#000000",
- "ButtonFontSize": "12",
- "ButtonFontFamily": "Arial",
- "ButtonWidth": "200",
- "ButtonHeight": "25",
- "ConfigTabButtonFontSize": "16",
+ "ButtonFontSize": "12",
+ "ButtonFontFamily": "Arial",
+ "ButtonWidth": "200",
+ "ButtonHeight": "25",
+ "ConfigTabButtonFontSize": "16",
- "SearchBarWidth": "200",
- "SearchBarHeight": "25",
- "SearchBarTextBoxFontSize": "16",
- "SearchBarClearButtonFontSize": "14",
+ "SearchBarWidth": "200",
+ "SearchBarHeight": "25",
+ "SearchBarTextBoxFontSize": "12",
+ "SearchBarClearButtonFontSize": "14",
- "ButtonInstallBackgroundColor": "#FFFFFF",
- "ButtonTweaksBackgroundColor": "#FFFFFF",
- "ButtonConfigBackgroundColor": "#FFFFFF",
- "ButtonUpdatesBackgroundColor": "#FFFFFF",
- "ButtonInstallForegroundColor": "#000000",
- "ButtonTweaksForegroundColor": "#000000",
- "ButtonConfigForegroundColor": "#000000",
- "ButtonUpdatesForegroundColor": "#000000",
- "ButtonBackgroundColor": "#F5F5F5",
- "ButtonBackgroundPressedColor": "#1A1A1A",
- "CheckboxMouseOverColor": "#999999",
- "ButtonBackgroundMouseoverColor": "#C2C2C2",
- "ButtonBackgroundSelectedColor": "#F0F0F0",
- "ButtonForegroundColor": "#000000",
- "ToggleButtonOnColor": "#2e77ff",
+ "ButtonInstallBackgroundColor": "#FFFFFF",
+ "ButtonTweaksBackgroundColor": "#FFFFFF",
+ "ButtonConfigBackgroundColor": "#FFFFFF",
+ "ButtonUpdatesBackgroundColor": "#FFFFFF",
+ "ButtonInstallForegroundColor": "#000000",
+ "ButtonTweaksForegroundColor": "#000000",
+ "ButtonConfigForegroundColor": "#000000",
+ "ButtonUpdatesForegroundColor": "#000000",
+ "ButtonBackgroundColor": "#F5F5F5",
+ "ButtonBackgroundPressedColor": "#1A1A1A",
+ "CheckboxMouseOverColor": "#999999",
+ "ButtonBackgroundMouseoverColor": "#C2C2C2",
+ "ButtonBackgroundSelectedColor": "#F0F0F0",
+ "ButtonForegroundColor": "#000000",
+ "ToggleButtonOnColor": "#2e77ff",
- "ButtonBorderThickness": "1",
- "ButtonMargin": "1",
- "ButtonCornerRadius": "2",
- "BorderColor": "#000000",
- "BorderOpacity": "0.2",
- "ShadowPulse": "Forever"
- },
- "Matrix": {
- "CustomDialogFontSize": "12",
- "CustomDialogFontSizeHeader": "14",
- "CustomDialogIconSize": "25",
- "CustomDialogWidth": "400",
- "CustomDialogHeight": "200",
+ "ButtonBorderThickness": "1",
+ "ButtonMargin": "1",
+ "ButtonCornerRadius": "2",
+ "BorderColor": "#000000",
+ "BorderOpacity": "0.2",
+ "ShadowPulse": "Forever"
+ },
+ "Classic": {
+ "ComboBoxBackgroundColor": "#FFFFFF",
+ "LabelboxForegroundColor": "#000000",
+ "MainForegroundColor": "#000000",
+ "MainBackgroundColor": "#FFFFFF",
+ "LabelBackgroundColor": "#FAFAFA",
+ "LinkForegroundColor": "#000000",
+ "LinkHoverForegroundColor": "#000000",
+ "GroupBorderBackgroundColor": "#000000",
+ "ComboBoxForegroundColor": "#000000",
- "FontSize": "12",
- "FontFamily": "Arial",
- "FontSizeHeading": "14",
- "HeaderFontFamily": "Consolas, Monaco",
+ "ButtonInstallBackgroundColor": "#FFFFFF",
+ "ButtonTweaksBackgroundColor": "#FFFFFF",
+ "ButtonConfigBackgroundColor": "#FFFFFF",
+ "ButtonUpdatesBackgroundColor": "#FFFFFF",
+ "ButtonInstallForegroundColor": "#000000",
+ "ButtonTweaksForegroundColor": "#000000",
+ "ButtonConfigForegroundColor": "#000000",
+ "ButtonUpdatesForegroundColor": "#000000",
+ "ButtonBackgroundColor": "#F5F5F5",
+ "ButtonBackgroundPressedColor": "#1A1A1A",
+ "CheckboxMouseOverColor": "#999999",
+ "ButtonBackgroundMouseoverColor": "#C2C2C2",
+ "ButtonBackgroundSelectedColor": "#F0F0F0",
+ "ButtonForegroundColor": "#000000",
+ "ToggleButtonOnColor": "#2e77ff"
+ },
+ "Matrix": {
+ "ComboBoxBackgroundColor": "#000000",
+ "LabelboxForegroundColor": "#FFEE58",
+ "MainForegroundColor": "#9CCC65",
+ "MainBackgroundColor": "#000000",
+ "LabelBackgroundColor": "#000000",
+ "LinkForegroundColor": "#add8e6",
+ "LinkHoverForegroundColor": "#FFFFFF",
+ "ComboBoxForegroundColor": "#FFEE58",
- "CheckBoxBulletDecoratorFontSize": "14",
- "CheckBoxMargin": "15,0,0,2",
+ "ProgressBarForegroundColor": "#222222",
+ "ProgressBarBackgroundColor": "Transparent",
+ "ProgressBarTextColor": "#cccccc",
- "TabButtonFontSize": "14",
- "TabButtonWidth": "100",
- "TabButtonHeight": "25",
- "TabRowHeightInPixels": "50",
- "IconFontSize": "14",
- "IconButtonSize": "35",
- "WinUtilIconSize": "Auto",
- "SettingsIconFontSize": "18",
+ "ButtonInstallBackgroundColor": "#222222",
+ "ButtonTweaksBackgroundColor": "#333333",
+ "ButtonConfigBackgroundColor": "#444444",
+ "ButtonUpdatesBackgroundColor": "#555555",
+ "ButtonInstallForegroundColor": "#FFFFFF",
+ "ButtonTweaksForegroundColor": "#FFFFFF",
+ "ButtonConfigForegroundColor": "#FFFFFF",
+ "ButtonUpdatesForegroundColor": "#FFFFFF",
+ "ButtonBackgroundColor": "#000019",
+ "ButtonBackgroundPressedColor": "#FFFFFF",
+ "ButtonBackgroundMouseoverColor": "#A55A64",
+ "ButtonBackgroundSelectedColor": "#FF5733",
+ "ButtonForegroundColor": "#9CCC65",
+ "ToggleButtonOnColor": "#2e77ff",
- "MicroWinLogoSize": "10",
+ "BorderColor": "#FFAC1C",
+ "BorderOpacity": "0.8",
+ "ShadowPulse": "0:0:3"
+ },
+ "Dark": {
+ "ComboBoxBackgroundColor": "#000000",
+ "LabelboxForegroundColor": "#FFEE58",
+ "MainForegroundColor": "#9CCC65",
+ "MainBackgroundColor": "#000000",
+ "LabelBackgroundColor": "#000000",
+ "LinkForegroundColor": "#add8e6",
+ "LinkHoverForegroundColor": "#FFFFFF",
+ "ComboBoxForegroundColor": "#FFEE58",
- "ProgressBarForegroundColor": "#222222",
- "ProgressBarBackgroundColor": "Transparent",
- "ProgressBarTextColor": "#cccccc",
+ "ProgressBarForegroundColor": "#222222",
+ "ProgressBarBackgroundColor": "Transparent",
+ "ProgressBarTextColor": "#cccccc",
- "ComboBoxBackgroundColor": "#000000",
- "LabelboxForegroundColor": "#FFEE58",
- "MainForegroundColor": "#9CCC65",
- "MainBackgroundColor": "#000000",
- "LabelBackgroundColor": "#000000",
- "LinkForegroundColor": "#add8e6",
- "LinkHoverForegroundColor": "#FFFFFF",
- "ComboBoxForegroundColor": "#FFEE58",
+ "ButtonInstallBackgroundColor": "#222222",
+ "ButtonTweaksBackgroundColor": "#333333",
+ "ButtonConfigBackgroundColor": "#444444",
+ "ButtonUpdatesBackgroundColor": "#555555",
+ "ButtonInstallForegroundColor": "#FFFFFF",
+ "ButtonTweaksForegroundColor": "#FFFFFF",
+ "ButtonConfigForegroundColor": "#FFFFFF",
+ "ButtonUpdatesForegroundColor": "#FFFFFF",
+ "ButtonBackgroundColor": "#000019",
+ "ButtonBackgroundPressedColor": "#9CCC65",
+ "ButtonBackgroundMouseoverColor": "#FF5733",
+ "ButtonBackgroundSelectedColor": "#FF5733",
+ "ButtonForegroundColor": "#9CCC65",
+ "ToggleButtonOnColor": "#2e77ff",
- "ButtonFontSize": "12",
- "ButtonFontFamily": "Arial",
- "ButtonWidth": "200",
- "ButtonHeight": "25",
- "ConfigTabButtonFontSize": "16",
-
- "SearchBarWidth": "200",
- "SearchBarHeight": "25",
- "SearchBarTextBoxFontSize": "16",
- "SearchBarClearButtonFontSize": "14",
-
- "ButtonInstallBackgroundColor": "#222222",
- "ButtonTweaksBackgroundColor": "#333333",
- "ButtonConfigBackgroundColor": "#444444",
- "ButtonUpdatesBackgroundColor": "#555555",
- "ButtonInstallForegroundColor": "#FFFFFF",
- "ButtonTweaksForegroundColor": "#FFFFFF",
- "ButtonConfigForegroundColor": "#FFFFFF",
- "ButtonUpdatesForegroundColor": "#FFFFFF",
- "ButtonBackgroundColor": "#000019",
- "ButtonBackgroundPressedColor": "#FFFFFF",
- "ButtonBackgroundMouseoverColor": "#A55A64",
- "ButtonBackgroundSelectedColor": "#FF5733",
- "ButtonForegroundColor": "#9CCC65",
- "ToggleButtonOnColor": "#2e77ff",
-
- "ButtonBorderThickness": "1",
- "ButtonMargin": "1",
- "ButtonCornerRadius": "2",
- "BorderColor": "#FFAC1C",
- "BorderOpacity": "0.8",
- "ShadowPulse": "0:0:3"
- },
- "Dark": {
- "CustomDialogFontSize": "12",
- "CustomDialogFontSizeHeader": "14",
- "CustomDialogIconSize": "25",
- "CustomDialogWidth": "400",
- "CustomDialogHeight": "200",
-
- "FontSize": "12",
- "FontFamily": "Arial",
- "FontSizeHeading": "14",
- "HeaderFontFamily": "Consolas, Monaco",
-
- "CheckBoxBulletDecoratorFontSize": "14",
- "CheckBoxMargin": "15,0,0,2",
-
- "TabButtonFontSize": "14",
- "TabButtonWidth": "100",
- "TabButtonHeight": "25",
- "TabRowHeightInPixels": "50",
- "IconFontSize": "14",
- "IconButtonSize": "35",
- "WinUtilIconSize": "Auto",
- "SettingsIconFontSize": "18",
-
- "MicroWinLogoSize": "10",
-
- "ProgressBarForegroundColor": "#222222",
- "ProgressBarBackgroundColor": "Transparent",
- "ProgressBarTextColor": "#FFFFFF",
-
- "ComboBoxBackgroundColor": "#000000",
- "LabelboxForegroundColor": "#FFEE58",
- "MainForegroundColor": "#9CCC65",
- "MainBackgroundColor": "#000000",
- "LabelBackgroundColor": "#000000",
- "LinkForegroundColor": "#add8e6",
- "LinkHoverForegroundColor": "#FFFFFF",
- "ComboBoxForegroundColor": "#FFEE58",
-
- "ButtonFontSize": "12",
- "ButtonFontFamily": "Arial",
- "ButtonWidth": "200",
- "ButtonHeight": "25",
- "ConfigTabButtonFontSize": "16",
-
- "SearchBarWidth": "200",
- "SearchBarHeight": "25",
- "SearchBarTextBoxFontSize": "16",
- "SearchBarClearButtonFontSize": "14",
-
- "ButtonInstallBackgroundColor": "#222222",
- "ButtonTweaksBackgroundColor": "#333333",
- "ButtonConfigBackgroundColor": "#444444",
- "ButtonUpdatesBackgroundColor": "#555555",
- "ButtonInstallForegroundColor": "#FFFFFF",
- "ButtonTweaksForegroundColor": "#FFFFFF",
- "ButtonConfigForegroundColor": "#FFFFFF",
- "ButtonUpdatesForegroundColor": "#FFFFFF",
- "ButtonBackgroundColor": "#000019",
- "ButtonBackgroundPressedColor": "#9CCC65",
- "ButtonBackgroundMouseoverColor": "#FF5733",
- "ButtonBackgroundSelectedColor": "#FF5733",
- "ButtonForegroundColor": "#9CCC65",
- "ToggleButtonOnColor": "#2e77ff",
-
- "ButtonBorderThickness": "1",
- "ButtonMargin": "1",
- "ButtonCornerRadius": "2",
- "BorderColor": "#FFAC1C",
- "BorderOpacity": "0.2",
- "ShadowPulse": "Forever"
- }
+ "BorderColor": "#FFAC1C"
+ }
}
diff --git a/functions/private/Set-WinUtilUITheme.ps1 b/functions/private/Set-WinUtilUITheme.ps1
new file mode 100644
index 00000000..c71ae88c
--- /dev/null
+++ b/functions/private/Set-WinUtilUITheme.ps1
@@ -0,0 +1,83 @@
+function Set-WinUtilUITheme {
+ <#
+ .SYNOPSIS
+ Sets the theme of the XAML file
+
+ .PARAMETER inputXML
+ A string representing the XAML object to modify
+
+ .PARAMETER customThemeName
+ The name of the custom theme to set the XAML to. Defaults to 'matrix'
+
+ .PARAMETER defaultThemeName
+ The name of the default theme to use when setting the XAML. Defaults to '_default'
+
+ .EXAMPLE
+ $returnVal = Set-WinUtilUITheme -inputXAML $inputXAML
+ if ($returnVal[0] -eq "") {
+ Write-Host "Failed to process inputXML"
+ } else {
+ $inputXML = $returnVal[0]
+ }
+ # to know which theme this function has used, access the second item in returned value.
+ Write-Host "Theme used in processing: $($returnVal[1])"
+ #>
+
+ param (
+ [Parameter(Mandatory, position=0)]
+ [string]$inputXML,
+
+ [Parameter(position=1)]
+ [string]$customThemeName = 'matrix',
+
+ [Parameter(position=2)]
+ [string]$defaultThemeName = '_default'
+ )
+
+ try {
+ # Note:
+ # Reason behind not caching the '$sync.configs.themes` object into a variable,
+ # because this code can modify the themes object.. meaning it's better to access it
+ # using the more verbose way, rather than introduce possible bugs into the code, just for the sake of readability.
+ #
+ if (-NOT $sync.configs.themes) {
+ throw [GenericException]::new("[Set-WinUtilTheme] Did not find 'config.themes' inside `$sync variable.")
+ }
+
+ if (-NOT $sync.configs.themes.$defaultThemeName) {
+ throw [GenericException]::new("[Set-WinUtilTheme] Did not find '$defaultThemeName' theme in the themes config file.")
+ }
+
+ $themeToUse = $customThemeName
+ if ($sync.configs.themes.$themeToUse) {
+ # Loop through every default theme option, and modify the custom theme in $sync variable,
+ # so that it has full options available for other functions to use.
+ foreach ($option in $sync.configs.themes.$defaultThemeName.PSObject.Properties) {
+ $optionName = $option.Name
+ $optionValue = $option.Value
+ if (-NOT $sync.configs.themes.$themeToUse.$optionName) {
+ $sync.configs.themes.$themeToUse | Add-Member -MemberType NoteProperty -Name $optionName -Value $optionValue
+ }
+ }
+ } else {
+ Write-Debug "[Set-WinUtilTheme] Theme '$customThemeName' was not found, using '$defaultThemeName' instead."
+ $themeToUse = $defaultThemeName
+ }
+
+ foreach ($property in $sync.configs.themes.$themeToUse.PSObject.Properties) {
+ $key = $property.Name
+ $value = $property.Value
+ # Add curly braces around the key
+ $formattedKey = "{$key}"
+ # Replace the key with the value in the input XML
+ $inputXML = $inputXML.Replace($formattedKey, $value)
+ }
+ }
+ catch {
+ Write-Host "[Set-WinUtilTheme] Unable to apply theme" -ForegroundColor Red
+ Write-Host "$($psitem.Exception.Message)" -ForegroundColor Red
+ $inputXML = "" # Make inputXML equal an empty string, indicating something went wrong to the function caller.
+ }
+
+ return @($inputXML, $themeToUse);
+}
diff --git a/functions/private/Set-WinUtilUiTheme.ps1 b/functions/private/Set-WinUtilUiTheme.ps1
deleted file mode 100644
index 45db1ab4..00000000
--- a/functions/private/Set-WinUtilUiTheme.ps1
+++ /dev/null
@@ -1,50 +0,0 @@
-function Set-WinUtilUITheme {
- <#
- .SYNOPSIS
- Sets the theme of the XAML file
-
- .PARAMETER inputXML
- A string representing the XAML object to modify
-
- .PARAMETER themeName
- The name of the theme to set the XAML to. Defaults to 'matrix'
-
- .EXAMPLE
- Set-WinUtilUITheme -inputXAML $inputXAML
- #>
-
- param
- (
- [Parameter(Mandatory, position=0)]
- [string]$inputXML,
- [Parameter(position=1)]
- [string]$themeName = 'matrix'
- )
-
- try {
- # Convert the JSON to a PowerShell object
- $themes = $sync.configs.themes
- # Select the specified theme
- $selectedTheme = $themes.$themeName
-
- if ($selectedTheme) {
- # Loop through all key-value pairs in the selected theme
- foreach ($property in $selectedTheme.PSObject.Properties) {
- $key = $property.Name
- $value = $property.Value
- # Add curly braces around the key
- $formattedKey = "{$key}"
- # Replace the key with the value in the input XML
- $inputXML = $inputXML.Replace($formattedKey, $value)
- }
- } else {
- Write-Host "Theme '$themeName' not found."
- }
-
- } catch {
- Write-Warning "Unable to apply theme"
- Write-Warning $psitem.Exception.StackTrace
- }
-
- return $inputXML;
-}
diff --git a/scripts/main.ps1 b/scripts/main.ps1
index f5c9b978..5f93cd39 100644
--- a/scripts/main.ps1
+++ b/scripts/main.ps1
@@ -52,6 +52,7 @@ $sync.runspace.Open()
$inputXML = $inputXML -replace 'mc:Ignorable="d"', '' -replace "x:N", 'N' -replace '^
-
+
+ Foreground="{MainForegroundColor}" FontSize="{CloseIconFontSize}" Name="WPFCloseButton" />