Files
Win11Debloat/Scripts/GUI/Show-AboutDialog.ps1
2026-02-15 23:08:54 +01:00

95 lines
2.5 KiB
PowerShell

function Show-AboutDialog {
param (
[Parameter(Mandatory=$false)]
[System.Windows.Window]$Owner = $null
)
Add-Type -AssemblyName PresentationFramework,PresentationCore,WindowsBase | Out-Null
$usesDarkMode = GetSystemUsesDarkMode
# Determine owner window
$ownerWindow = if ($Owner) { $Owner } else { $script:GuiWindow }
# Show overlay if owner window exists
$overlay = $null
if ($ownerWindow) {
try {
$overlay = $ownerWindow.FindName('ModalOverlay')
if ($overlay) {
$ownerWindow.Dispatcher.Invoke([action]{ $overlay.Visibility = 'Visible' })
}
}
catch { }
}
# Load XAML from file
$xaml = Get-Content -Path $script:AboutWindowSchema -Raw
$reader = [System.Xml.XmlReader]::Create([System.IO.StringReader]::new($xaml))
try {
$aboutWindow = [System.Windows.Markup.XamlReader]::Load($reader)
}
finally {
$reader.Close()
}
# Set owner to owner window if it exists
if ($ownerWindow) {
try {
$aboutWindow.Owner = $ownerWindow
}
catch { }
}
# Apply theme resources
SetWindowThemeResources -window $aboutWindow -usesDarkMode $usesDarkMode
# Get UI elements
$titleBar = $aboutWindow.FindName('TitleBar')
$versionText = $aboutWindow.FindName('VersionText')
$projectLink = $aboutWindow.FindName('ProjectLink')
$kofiLink = $aboutWindow.FindName('KofiLink')
$closeButton = $aboutWindow.FindName('CloseButton')
# Set version
$versionText.Text = $script:Version
# Title bar drag to move window
$titleBar.Add_MouseLeftButtonDown({
$aboutWindow.DragMove()
})
# Project link click handler
$projectLink.Add_MouseLeftButtonDown({
Start-Process "https://github.com/Raphire/Win11Debloat"
})
# Ko-fi link click handler
$kofiLink.Add_MouseLeftButtonDown({
Start-Process "https://ko-fi.com/raphire"
})
# Close button handler
$closeButton.Add_Click({
$aboutWindow.Close()
})
# Handle Escape key to close
$aboutWindow.Add_KeyDown({
param($sender, $e)
if ($e.Key -eq 'Escape') {
$aboutWindow.Close()
}
})
# Show dialog
$aboutWindow.ShowDialog() | Out-Null
# Hide overlay after dialog closes
if ($overlay) {
try {
$ownerWindow.Dispatcher.Invoke([action]{ $overlay.Visibility = 'Collapsed' })
}
catch { }
}
}