mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2025-06-28 09:04:47 -05:00
[02] Refactoring code (Reopening of PR #2469, plus some modifications to make PR #2629 merge easily without any problem) (#2630)
* Remove leftover comment & update another comment in 'Get-TabXaml' Private Function
* Add new 'CloseIconFontSize' Theme Option
This's done to fix the Visual Issue of the Close Button being smaller than the Settings Button.
* Rename 'CheckBoxBulletDecoratorFontSize' to 'CheckBoxBulletDecoratorSize'
* Experiment with DPI Aware Units
* Remove extra whitespace characters in 'theme.json'
* Implement Default Theming - Add Error Checking & Quitting Early upon XML Related Failures - Simple Code Formatting here & there
* Replace Tabs with Spaces to follow the conventions
* Fix some logic issue in 'Set-WinUtilUITheme.ps1' Private Function - Rename 'Set-WinUtilUiTheme.ps1' -> 'Set-WinUtilUITheme.ps1'
* Change output info from 'Write-Warning' to 'Write-Host' to make sure it's displayed even in RunSpaces as well as PowerShell 5 Environments
* Revert back to default Unit of Measuring for WPF (1/96 in)
* Revert "Remove leftover comment & update another comment in 'Get-TabXaml' Private Function"
This reverts commit 368e5980df
.
* Update 'themes.json' so the general changes will work with PR #2629
* Support the fallback to default theme (if it exists)
* Update 'Set-WinUtilUITheme' Documentation
---------
Co-authored-by: MyDrift <personal@mdiana.ch>
This commit is contained in:
83
functions/private/Set-WinUtilUITheme.ps1
Normal file
83
functions/private/Set-WinUtilUITheme.ps1
Normal file
@ -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);
|
||||
}
|
@ -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;
|
||||
}
|
Reference in New Issue
Block a user