mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2025-01-16 09:50:36 -06:00
Implement Default Theming - Add Error Checking & Quitting Early upon XML Related Failures - Simple Code Formatting here & there
This commit is contained in:
parent
8fa1e175b3
commit
6235949819
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"Classic": {
|
"_default": {
|
||||||
"CustomDialogFontSize": "12",
|
"CustomDialogFontSize": "12",
|
||||||
"CustomDialogFontSizeHeader": "14",
|
"CustomDialogFontSizeHeader": "14",
|
||||||
"CustomDialogIconSize": "25",
|
"CustomDialogIconSize": "25",
|
||||||
@ -68,35 +68,38 @@
|
|||||||
"ButtonCornerRadius": "2",
|
"ButtonCornerRadius": "2",
|
||||||
"BorderColor": "#000000",
|
"BorderColor": "#000000",
|
||||||
"BorderOpacity": "0.2",
|
"BorderOpacity": "0.2",
|
||||||
|
"ShadowPulse": "0:0:6"
|
||||||
|
},
|
||||||
|
"Classic": {
|
||||||
|
"ComboBoxBackgroundColor": "#FFFFFF",
|
||||||
|
"LabelboxForegroundColor": "#000000",
|
||||||
|
"MainForegroundColor": "#000000",
|
||||||
|
"MainBackgroundColor": "#FFFFFF",
|
||||||
|
"LabelBackgroundColor": "#FAFAFA",
|
||||||
|
"LinkForegroundColor": "#000000",
|
||||||
|
"LinkHoverForegroundColor": "#000000",
|
||||||
|
"GroupBorderBackgroundColor": "#000000",
|
||||||
|
"ComboBoxForegroundColor": "#000000",
|
||||||
|
|
||||||
|
"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",
|
||||||
|
|
||||||
"ShadowPulse": "Forever"
|
"ShadowPulse": "Forever"
|
||||||
},
|
},
|
||||||
"Matrix": {
|
"Matrix": {
|
||||||
"CustomDialogFontSize": "12",
|
|
||||||
"CustomDialogFontSizeHeader": "14",
|
|
||||||
"CustomDialogIconSize": "25",
|
|
||||||
"CustomDialogWidth": "400",
|
|
||||||
"CustomDialogHeight": "200",
|
|
||||||
|
|
||||||
"FontSize": "0.35cm",
|
|
||||||
"FontFamily": "Arial",
|
|
||||||
"FontSizeHeading": "0.4cm",
|
|
||||||
"HeaderFontFamily": "Consolas, Monaco",
|
|
||||||
|
|
||||||
"CheckBoxBulletDecoratorSize": "14",
|
|
||||||
"CheckBoxMargin": "15,0,0,2",
|
|
||||||
|
|
||||||
"TabButtonFontSize": "14",
|
|
||||||
"TabButtonWidth": "100",
|
|
||||||
"TabButtonHeight": "25",
|
|
||||||
"TabRowHeightInPixels": "50",
|
|
||||||
"IconFontSize": "14",
|
|
||||||
"IconButtonSize": "35",
|
|
||||||
"WinUtilIconSize": "Auto",
|
|
||||||
"SettingsIconFontSize": "18",
|
|
||||||
"CloseIconFontSize": "18",
|
|
||||||
|
|
||||||
"MicroWinLogoSize": "10",
|
|
||||||
|
|
||||||
"ComboBoxBackgroundColor": "#000000",
|
"ComboBoxBackgroundColor": "#000000",
|
||||||
"LabelboxForegroundColor": "#FFEE58",
|
"LabelboxForegroundColor": "#FFEE58",
|
||||||
"MainForegroundColor": "#9CCC65",
|
"MainForegroundColor": "#9CCC65",
|
||||||
@ -106,17 +109,6 @@
|
|||||||
"LinkHoverForegroundColor": "#FFFFFF",
|
"LinkHoverForegroundColor": "#FFFFFF",
|
||||||
"ComboBoxForegroundColor": "#FFEE58",
|
"ComboBoxForegroundColor": "#FFEE58",
|
||||||
|
|
||||||
"ButtonFontSize": "12",
|
|
||||||
"ButtonFontFamily": "Arial",
|
|
||||||
"ButtonWidth": "200",
|
|
||||||
"ButtonHeight": "25",
|
|
||||||
"ConfigTabButtonFontSize": "16",
|
|
||||||
|
|
||||||
"SearchBarWidth": "200",
|
|
||||||
"SearchBarHeight": "25",
|
|
||||||
"SearchBarTextBoxFontSize": "16",
|
|
||||||
"SearchBarClearButtonFontSize": "14",
|
|
||||||
|
|
||||||
"ButtonInstallBackgroundColor": "#222222",
|
"ButtonInstallBackgroundColor": "#222222",
|
||||||
"ButtonTweaksBackgroundColor": "#333333",
|
"ButtonTweaksBackgroundColor": "#333333",
|
||||||
"ButtonConfigBackgroundColor": "#444444",
|
"ButtonConfigBackgroundColor": "#444444",
|
||||||
@ -132,40 +124,11 @@
|
|||||||
"ButtonForegroundColor": "#9CCC65",
|
"ButtonForegroundColor": "#9CCC65",
|
||||||
"ToggleButtonOnColor": "#2e77ff",
|
"ToggleButtonOnColor": "#2e77ff",
|
||||||
|
|
||||||
"ButtonBorderThickness": "1",
|
|
||||||
"ButtonMargin": "1",
|
|
||||||
"ButtonCornerRadius": "2",
|
|
||||||
"BorderColor": "#FFAC1C",
|
"BorderColor": "#FFAC1C",
|
||||||
"BorderOpacity": "0.8",
|
"BorderOpacity": "0.8",
|
||||||
"ShadowPulse": "0:0:3"
|
"ShadowPulse": "0:0:3"
|
||||||
},
|
},
|
||||||
"Dark": {
|
"Dark": {
|
||||||
"CustomDialogFontSize": "12",
|
|
||||||
"CustomDialogFontSizeHeader": "14",
|
|
||||||
"CustomDialogIconSize": "25",
|
|
||||||
"CustomDialogWidth": "400",
|
|
||||||
"CustomDialogHeight": "200",
|
|
||||||
|
|
||||||
"FontSize": "0.35cm",
|
|
||||||
"FontFamily": "Arial",
|
|
||||||
"FontSizeHeading": "0.4cm",
|
|
||||||
"HeaderFontFamily": "Consolas, Monaco",
|
|
||||||
|
|
||||||
"CheckBoxBulletDecoratorSize": "14",
|
|
||||||
"CheckBoxMargin": "15,0,0,2",
|
|
||||||
|
|
||||||
"TabButtonFontSize": "14",
|
|
||||||
"TabButtonWidth": "100",
|
|
||||||
"TabButtonHeight": "25",
|
|
||||||
"TabRowHeightInPixels": "50",
|
|
||||||
"IconFontSize": "14",
|
|
||||||
"IconButtonSize": "35",
|
|
||||||
"WinUtilIconSize": "Auto",
|
|
||||||
"SettingsIconFontSize": "18",
|
|
||||||
"CloseIconFontSize": "18",
|
|
||||||
|
|
||||||
"MicroWinLogoSize": "10",
|
|
||||||
|
|
||||||
"ComboBoxBackgroundColor": "#000000",
|
"ComboBoxBackgroundColor": "#000000",
|
||||||
"LabelboxForegroundColor": "#FFEE58",
|
"LabelboxForegroundColor": "#FFEE58",
|
||||||
"MainForegroundColor": "#9CCC65",
|
"MainForegroundColor": "#9CCC65",
|
||||||
@ -175,17 +138,6 @@
|
|||||||
"LinkHoverForegroundColor": "#FFFFFF",
|
"LinkHoverForegroundColor": "#FFFFFF",
|
||||||
"ComboBoxForegroundColor": "#FFEE58",
|
"ComboBoxForegroundColor": "#FFEE58",
|
||||||
|
|
||||||
"ButtonFontSize": "12",
|
|
||||||
"ButtonFontFamily": "Arial",
|
|
||||||
"ButtonWidth": "200",
|
|
||||||
"ButtonHeight": "25",
|
|
||||||
"ConfigTabButtonFontSize": "16",
|
|
||||||
|
|
||||||
"SearchBarWidth": "200",
|
|
||||||
"SearchBarHeight": "25",
|
|
||||||
"SearchBarTextBoxFontSize": "16",
|
|
||||||
"SearchBarClearButtonFontSize": "14",
|
|
||||||
|
|
||||||
"ButtonInstallBackgroundColor": "#222222",
|
"ButtonInstallBackgroundColor": "#222222",
|
||||||
"ButtonTweaksBackgroundColor": "#333333",
|
"ButtonTweaksBackgroundColor": "#333333",
|
||||||
"ButtonConfigBackgroundColor": "#444444",
|
"ButtonConfigBackgroundColor": "#444444",
|
||||||
@ -201,11 +153,6 @@
|
|||||||
"ButtonForegroundColor": "#9CCC65",
|
"ButtonForegroundColor": "#9CCC65",
|
||||||
"ToggleButtonOnColor": "#2e77ff",
|
"ToggleButtonOnColor": "#2e77ff",
|
||||||
|
|
||||||
"ButtonBorderThickness": "1",
|
"BorderColor": "#FFAC1C"
|
||||||
"ButtonMargin": "1",
|
|
||||||
"ButtonCornerRadius": "2",
|
|
||||||
"BorderColor": "#FFAC1C",
|
|
||||||
"BorderOpacity": "0.2",
|
|
||||||
"ShadowPulse": "Forever"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,40 +14,77 @@ function Set-WinUtilUITheme {
|
|||||||
Set-WinUtilUITheme -inputXAML $inputXAML
|
Set-WinUtilUITheme -inputXAML $inputXAML
|
||||||
|
|
||||||
#>
|
#>
|
||||||
param
|
param (
|
||||||
(
|
[Parameter(Mandatory, position=0)]
|
||||||
[Parameter(Mandatory=$true, Position=0)]
|
|
||||||
[string] $inputXML,
|
[string] $inputXML,
|
||||||
[Parameter(Mandatory=$false, Position=1)]
|
[Parameter(position=1)]
|
||||||
[string] $themeName = 'matrix'
|
[string] $themeName = 'matrix'
|
||||||
)
|
)
|
||||||
|
|
||||||
try {
|
function Invoke-Theming {
|
||||||
# Convert the JSON to a PowerShell object
|
param (
|
||||||
$themes = $sync.configs.themes
|
[Parameter(Mandatory, position=0)]
|
||||||
# Select the specified theme
|
[string] $XMLToProcess,
|
||||||
$selectedTheme = $themes.$themeName
|
|
||||||
|
|
||||||
if ($selectedTheme) {
|
[Parameter(Mandatory, position=1)]
|
||||||
|
[PSCustomObject] $theme
|
||||||
|
)
|
||||||
|
|
||||||
|
if ($XMLToProcess -eq "") {
|
||||||
|
throw [GenericException]::new("[Invoke-Theming] 'XMLToProcess' can not be an empty string")
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
# Loop through all key-value pairs in the selected theme
|
# Loop through all key-value pairs in the selected theme
|
||||||
foreach ($property in $selectedTheme.PSObject.Properties) {
|
foreach ($property in $theme.PSObject.Properties) {
|
||||||
$key = $property.Name
|
$key = $property.Name
|
||||||
$value = $property.Value
|
$value = $property.Value
|
||||||
# Add curly braces around the key
|
# Add curly braces around the key
|
||||||
$formattedKey = "{$key}"
|
$formattedKey = "{$key}"
|
||||||
# Replace the key with the value in the input XML
|
# Replace the key with the value in the input XML
|
||||||
$inputXML = $inputXML.Replace($formattedKey, $value)
|
$XMLToProcess = $XMLToProcess.Replace($formattedKey, $value)
|
||||||
}
|
}
|
||||||
|
} catch {
|
||||||
|
throw [GenericException]::new("[Invoke-Theming] Failed to apply theme, StackTrace: $($psitem.Exception.StackTrace)")
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
Write-Host "Theme '$themeName' not found."
|
return $XMLToProcess
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
# Convert the JSON to a PowerShell object
|
||||||
|
$themes = $sync.configs.themes
|
||||||
|
if (-NOT $themes) {
|
||||||
|
throw [GenericException]::new("[Set-WinUtilTheme] Did not find 'config.themes' inside `$sync variable.")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$defaultTheme = $themes."_default"
|
||||||
|
if (-NOT $defaultTheme) {
|
||||||
|
throw [GenericException]::new("[Set-WinUtilTheme] Did not find '_default' theme in the themes config file.")
|
||||||
|
}
|
||||||
|
|
||||||
|
# First apply the selected theme (if it exists), then apply the default theme
|
||||||
|
$selectedTheme = $themes.$themeName
|
||||||
|
if (-NOT $selectedTheme) {
|
||||||
|
Write-Warning "[Set-WinUtilTheme] Theme '$themeName' was not found."
|
||||||
|
} else {
|
||||||
|
$inputXML = Invoke-Theming -XMLToProcess $inputXML -theme $selectedTheme
|
||||||
|
}
|
||||||
|
|
||||||
|
$inputXML = Invoke-Theming -XMLToProcess $inputXML -theme $defaultTheme
|
||||||
|
|
||||||
}
|
}
|
||||||
catch {
|
catch {
|
||||||
Write-Warning "Unable to apply theme"
|
Write-Warning "[Set-WinUtilTheme] Unable to apply theme"
|
||||||
Write-Warning $psitem.Exception.StackTrace
|
$err = $psitem.Exception.StackTrace
|
||||||
|
Write-Warning $err
|
||||||
}
|
}
|
||||||
|
|
||||||
return $inputXML;
|
$returnVal = @{
|
||||||
|
err="$err";
|
||||||
|
processedXML="$inputXML";
|
||||||
|
}
|
||||||
|
|
||||||
|
return $returnVal;
|
||||||
}
|
}
|
||||||
|
@ -63,15 +63,27 @@ if ((Get-WinUtilToggleStatus WPFToggleDarkMode) -eq $True) {
|
|||||||
else {
|
else {
|
||||||
$ctttheme = 'Classic'
|
$ctttheme = 'Classic'
|
||||||
}
|
}
|
||||||
$inputXML = Set-WinUtilUITheme -inputXML $inputXML -themeName $ctttheme
|
|
||||||
|
$returnVal = Set-WinUtilUITheme -inputXML $inputXML -themeName $ctttheme
|
||||||
|
if ($returnVal.err -eq $null) {
|
||||||
|
Write-Warning "Failed to statically apply theming to xaml content using Set-WinUtilTheme, please check previous Error/Warning messages."
|
||||||
|
Write-Warning "Quitting winutil..."
|
||||||
|
$sync.runspace.Dispose()
|
||||||
|
$sync.runspace.Close()
|
||||||
|
[System.GC]::Collect()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
$inputXML = $returnVal.processedXML
|
||||||
|
|
||||||
[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
|
[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
|
||||||
[xml]$XAML = $inputXML
|
[xml]$XAML = $inputXML
|
||||||
|
|
||||||
# Read the XAML file
|
# Read the XAML file
|
||||||
|
$readerOperationSuccessful = $false # There's more cases of failure then success.
|
||||||
$reader = (New-Object System.Xml.XmlNodeReader $xaml)
|
$reader = (New-Object System.Xml.XmlNodeReader $xaml)
|
||||||
try {
|
try {
|
||||||
$sync["Form"] = [Windows.Markup.XamlReader]::Load( $reader )
|
$sync["Form"] = [Windows.Markup.XamlReader]::Load( $reader )
|
||||||
|
$readerOperationSuccessful = $true
|
||||||
} catch [System.Management.Automation.MethodInvocationException] {
|
} catch [System.Management.Automation.MethodInvocationException] {
|
||||||
Write-Warning "We ran into a problem with the XAML code. Check the syntax for this control..."
|
Write-Warning "We ran into a problem with the XAML code. Check the syntax for this control..."
|
||||||
Write-Host $error[0].Exception.Message -ForegroundColor Red
|
Write-Host $error[0].Exception.Message -ForegroundColor Red
|
||||||
@ -83,6 +95,14 @@ try {
|
|||||||
Write-Host "Unable to load Windows.Markup.XamlReader. Double-check syntax and ensure .net is installed."
|
Write-Host "Unable to load Windows.Markup.XamlReader. Double-check syntax and ensure .net is installed."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (-NOT ($readerOperationSuccessful)) {
|
||||||
|
Write-Warning "Failed to parse xaml content using Windows.Markup.XamlReader's Load Method, quitting winutil..."
|
||||||
|
$sync.runspace.Dispose()
|
||||||
|
$sync.runspace.Close()
|
||||||
|
[System.GC]::Collect()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
#===========================================================================
|
#===========================================================================
|
||||||
# Store Form Objects In PowerShell
|
# Store Form Objects In PowerShell
|
||||||
#===========================================================================
|
#===========================================================================
|
||||||
@ -279,11 +299,11 @@ Add-Type @"
|
|||||||
|
|
||||||
foreach ($proc in (Get-Process).where{ $_.MainWindowTitle -and $_.MainWindowTitle -like "*titus*" }) {
|
foreach ($proc in (Get-Process).where{ $_.MainWindowTitle -and $_.MainWindowTitle -like "*titus*" }) {
|
||||||
# Check if the process's MainWindowHandle is valid
|
# Check if the process's MainWindowHandle is valid
|
||||||
if ($proc.MainWindowHandle -ne [System.IntPtr]::Zero) {
|
if ($proc.MainWindowHandle -ne [System.IntPtr]::Zero) {
|
||||||
Write-Debug "MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle) $($proc.MainWindowHandle)"
|
Write-Debug "MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle) $($proc.MainWindowHandle)"
|
||||||
$windowHandle = $proc.MainWindowHandle
|
$windowHandle = $proc.MainWindowHandle
|
||||||
} else {
|
} else {
|
||||||
Write-Warning "Process found, but no MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle)"
|
Write-Warning "Process found, but no MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle)"
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user