diff --git a/functions/public/Invoke-WPFPopup.ps1 b/functions/public/Invoke-WPFPopup.ps1
new file mode 100644
index 00000000..ea8942d1
--- /dev/null
+++ b/functions/public/Invoke-WPFPopup.ps1
@@ -0,0 +1,91 @@
+function Invoke-WPFPopup {
+ param (
+ [Parameter(position=0)]
+ [ValidateSet("Show","Hide","Toggle", ErrorMessage="Action '{0}' is not part of the valid set '{1}'.")]
+ [string]$Action = "",
+
+ [Parameter(position=1)]
+ [string[]]$Popups = @(),
+
+ [Parameter(position=2)]
+ [ValidateScript({
+ $PossibleActions = @("Show", "Hide", "Toggle")
+ [hashtable]$UnExpectedPairs = @{}
+ Foreach ($pair in $_.GetEnumerator()) {
+ $key = $pair.Name
+ $value = $pair.Value
+ if (-not ($value -in $PossibleActions)) {
+ $UnExpectedPairs.Add("$key", "$value")
+ }
+ }
+
+ if ($UnExpectedPairs.Count -gt 0) {
+ $UnExpectedPairsAsString = "@{"
+ Foreach ($pair in $UnExpectedPairs.GetEnumerator()) { $UnExpectedPairsAsString += "`"$($pair.Name)`" = `"$($pair.Value)`"; " }
+ $UnExpectedPairsAsString = $UnExpectedPairsAsString -replace (';\s*$', '')
+ $UnExpectedPairsAsString += "}"
+ throw "Found Unexpected pair(s), these Popup & Action pair(s) are: $UnExpectedPairsAsString"
+ }
+
+ # Return true for passing validation checks
+ $true
+ })]
+ [hashtable]$PopupActionTable = @{}
+ )
+
+ if ($PopupActionTable.Count -eq 0 -and $Action -eq "" -and $Popups.Count -eq 0) {
+ throw [GenericException]::new("No Parameter was provided, please use either 'PopupActionTable' on its own, or use 'Action' and 'Popups' on their own, depending on your use case.")
+ }
+ if ($PopupActionTable.Count -gt 0 -and ($Action -ne "" -or $Popups.Count -gt 0)) {
+ throw [GenericException]::new("Only use 'PopupActionTable' on its own, or use 'Action' and 'Popups' on their own, depending on your use case.")
+ }
+
+ $PopupsNotFound = [System.Collections.Generic.List[string]]::new($Popups.Count)
+
+ if ($PopupActionTable.Count -gt 0) {
+ Foreach ($popupActionPair in $PopupActionTable.GetEnumerator()) {
+ $popup = $popupActionPair.Name + "Popup"
+ $action = $popupActionPair.Value
+ if ($sync.$popup -eq $null) {
+ $PopupsNotFound.Add("$popup") | Out-Null
+ continue
+ }
+ switch ($action) {
+ 'Show' { $actionAsBool = $true }
+ 'Hide' { $actionAsBool = $false }
+ 'Toggle' { $actionAsBool = -not $sync.$popup.IsOpen }
+ default { throw [GenericException]::new("Action can only be `"Show`" or `"Hide`" or `"Toggle`".") }
+ }
+ $sync.$popup.IsOpen = $actionAsBool
+ }
+ } else {
+ if ($Action -eq "" -or $Popups.Count -eq 0) {
+ throw [GenericException]::new("Please provide both the 'Action' and 'Popups' Parameters, with the appropriate values foreach parameter.")
+ }
+ Foreach ($popup in $Popups) {
+ $popup += "Popup"
+ if ($sync.$popup -eq $null) {
+ $PopupsNotFound.Add("$popup") | Out-Null
+ continue
+ }
+ switch ($action) {
+ 'Show' { $actionAsBool = $true }
+ 'Hide' { $actionAsBool = $false }
+ 'Toggle' { $actionAsBool = -not $sync.$popup.IsOpen }
+ default { throw [GenericException]::new("Action can only be `"Show`" or `"Hide`" or `"Toggle`".") }
+ }
+ $sync.$popup.IsOpen = $actionAsBool
+ }
+ }
+
+ if ($PopupsNotFound.Count -gt 0) {
+ $PopupsNotFoundAsString = "@("
+ Foreach ($popupNotFound in $PopupsNotFound) {
+ $PopupsNotFoundAsString += "$popupNotFound"
+ $PopupsNotFoundAsString += ", "
+ }
+ $PopupsNotFoundAsString = $PopupsNotFoundAsString -replace (',\s*$', '')
+ $PopupsNotFoundAsString += ")"
+ throw [GenericException]::new("Could not find $PopupsNotFoundAsString Popups in `$sync variable.")
+ }
+}
diff --git a/scripts/main.ps1 b/scripts/main.ps1
index e361a88e..b865d5e4 100644
--- a/scripts/main.ps1
+++ b/scripts/main.ps1
@@ -251,12 +251,7 @@ $commonKeyEvents = {
$sync["Form"].Add_PreViewKeyDown($commonKeyEvents)
$sync["Form"].Add_MouseLeftButtonDown({
- if ($sync.SettingsPopup -eq $null -or
- $sync.ThemePopup -eq $null) {
- Write-Host "Either Settings or Theme Popup is null, this's not allowed to happen in the first place. Please double check your UI code." -ForegroundColor Red
- }
- $sync.SettingsPopup.IsOpen = $false
- $sync.ThemePopup.IsOpen = $false
+ Invoke-WPFPopup -Action "Hide" -Popups @("Settings", "Theme")
$sync["Form"].DragMove()
})
@@ -274,12 +269,7 @@ $sync["Form"].Add_MouseDoubleClick({
$sync["Form"].Add_Deactivated({
Write-Debug "WinUtil lost focus"
- if ($sync.SettingsPopup -eq $null -or
- $sync.ThemePopup -eq $null) {
- Write-Host "Either Settings or Theme Popup is null, this's not allowed to happen in the first place. Please double check your UI code." -ForegroundColor Red
- }
- $sync.SettingsPopup.IsOpen = $false
- $sync.ThemePopup.IsOpen = $false
+ Invoke-WPFPopup -Action "Hide" -Popups @("Settings", "Theme")
})
$sync["Form"].Add_ContentRendered({
@@ -520,90 +510,53 @@ Set-WinUtilTaskbaritem -overlay "logo"
$sync["Form"].Add_Activated({
Set-WinUtilTaskbaritem -overlay "logo"
})
-# Define event handler for ThemeButton click
+
$sync["ThemeButton"].Add_Click({
- if ($sync.SettingsPopup -eq $null -or
- $sync.ThemePopup -eq $null) {
- Write-Host "Either Settings or Theme Popup is null, this's not allowed to happen in the first place. Please double check your UI code." -ForegroundColor Red
- }
- # Hide the settings popup and toggle the themes popup
- $sync.ThemePopup.IsOpen = -not $sync.ThemePopup.IsOpen
- $sync.SettingsPopup.IsOpen = $false
+ Write-Debug "ThemeButton clicked"
+ Invoke-WPFPopup -PopupActionTable @{ "Settings" = "Hide"; "Theme" = "Toggle" }
$_.Handled = $false
})
-
-# Define event handlers for menu items
$sync["AutoThemeMenuItem"].Add_Click({
- if ($sync.ThemePopup -eq $null) {
- Write-Host "Theme Popup is null, this's not allowed to happen in the first place. Please double check your UI code." -ForegroundColor Red
- }
- $sync.ThemePopup.IsOpen = $false
+ Write-Debug "About clicked"
+ Invoke-WPFPopup -Action "Hide" -Popups @("Theme")
Invoke-WinutilThemeChange -theme "Auto"
$_.Handled = $false
})
-# Define event handlers for menu items
$sync["DarkThemeMenuItem"].Add_Click({
- if ($sync.ThemePopup -eq $null) {
- Write-Host "Theme Popup is null, this's not allowed to happen in the first place. Please double check your UI code." -ForegroundColor Red
- }
- $sync.ThemePopup.IsOpen = $false
+ Write-Debug "Dark Theme clicked"
+ Invoke-WPFPopup -Action "Hide" -Popups @("Theme")
Invoke-WinutilThemeChange -theme "Dark"
$_.Handled = $false
})
-# Define event handlers for menu items
$sync["LightThemeMenuItem"].Add_Click({
- if ($sync.ThemePopup -eq $null) {
- Write-Host "Theme Popup is null, this's not allowed to happen in the first place. Please double check your UI code." -ForegroundColor Red
- }
- $sync.ThemePopup.IsOpen = $false
+ Write-Debug "Light Theme clicked"
+ Invoke-WPFPopup -Action "Hide" -Popups @("Theme")
Invoke-WinutilThemeChange -theme "Light"
$_.Handled = $false
})
-# Define event handler for button click
$sync["SettingsButton"].Add_Click({
Write-Debug "SettingsButton clicked"
- if ($sync.SettingsPopup -eq $null -or
- $sync.ThemePopup -eq $null) {
- Write-Host "Either Settings or Theme Popup is null, this's not allowed to happen in the first place. Please double check your UI code." -ForegroundColor Red
- }
- # Hide the themes popup and toggle the settings popup
- $sync.SettingsPopup.IsOpen = -not $sync.SettingsPopup.IsOpen
- $sync.ThemePopup.IsOpen = $false
+ Invoke-WPFPopup -PopupActionTable @{ "Settings" = "Toggle"; "Theme" = "Hide" }
$_.Handled = $false
})
-
-# Define event handlers for menu items
$sync["ImportMenuItem"].Add_Click({
- # Handle Import menu item click
Write-Debug "Import clicked"
- if ($sync.SettingsPopup -eq $null) {
- Write-Host "Either Settings is null, this's not allowed to happen in the first place. Please double check your UI code." -ForegroundColor Red
- }
- $sync.SettingsPopup.IsOpen = $false
+ Invoke-WPFPopup -Action "Hide" -Popups @("Settings")
Invoke-WPFImpex -type "import"
$_.Handled = $false
})
-
$sync["ExportMenuItem"].Add_Click({
- # Handle Export menu item click
Write-Debug "Export clicked"
- if ($sync.SettingsPopup -eq $null) {
- Write-Host "Either Settings is null, this's not allowed to happen in the first place. Please double check your UI code." -ForegroundColor Red
- }
- $sync.SettingsPopup.IsOpen = $false
+ Invoke-WPFPopup -Action "Hide" -Popups @("Settings")
Invoke-WPFImpex -type "export"
$_.Handled = $false
})
-
$sync["AboutMenuItem"].Add_Click({
- # Handle Export menu item click
Write-Debug "About clicked"
- if ($sync.SettingsPopup -eq $null) {
- Write-Host "Either Settings is null, this's not allowed to happen in the first place. Please double check your UI code." -ForegroundColor Red
- }
- $sync.SettingsPopup.IsOpen = $false
+ Invoke-WPFPopup -Action "Hide" -Popups @("Settings")
+
$authorInfo = @"
Author : @christitustech
Runspace : @DeveloperDurp
@@ -611,33 +564,24 @@ MicroWin : @KonTy, ChrisTitusTech/winutil
Version : $($sync.version)
"@
-
Show-CustomDialog -Title "About" -Message $authorInfo
})
-
$sync["SponsorMenuItem"].Add_Click({
- # Handle Export menu item click
Write-Debug "Sponsors clicked"
- if ($sync.SettingsPopup -eq $null) {
- Write-Host "Either Settings is null, this's not allowed to happen in the first place. Please double check your UI code." -ForegroundColor Red
- }
- $sync.SettingsPopup.IsOpen = $false
+ Invoke-WPFPopup -Action "Hide" -Popups @("Settings")
+
$authorInfo = @"
Current sponsors for ChrisTitusTech:
"@
$authorInfo += "`n"
try {
- # Call the function to get the sponsors
$sponsors = Invoke-WinUtilSponsors
-
- # Append the sponsors to the authorInfo
foreach ($sponsor in $sponsors) {
$authorInfo += "$sponsor`n"
}
} catch {
$authorInfo += "An error occurred while fetching or processing the sponsors: $_`n"
}
-
Show-CustomDialog -Title "Sponsors" -Message $authorInfo -EnableScroll $true
})