public/Start-SplitterUi.ps1
|
<#
.SYNOPSIS Starts the Splitter desktop UI powered by GliderUI. .DESCRIPTION Loads a GliderUI/Avalonia window for planning and running edition-specific Split-WindowsInstallMedia operations with guided preflight checks. .PARAMETER NoWait Shows the window and returns immediately without waiting for the window to close. .PARAMETER UiScriptPath Optional path to a UI script file. Defaults to ui\splitterui.ps1 in this module. .EXAMPLE Start-SplitterUi .EXAMPLE Start-SplitterUi -NoWait #> function Start-SplitterUi { [CmdletBinding()] param( [switch] $NoWait, [string] $UiScriptPath ) if ($PSVersionTable.PSVersion -lt [version] '7.4.0') { throw 'Start-SplitterUi requires PowerShell 7.4 or newer because GliderUI requires PowerShell 7.4+.' } $importGliderUiModuleParams = @{ Name = 'GliderUI' ErrorAction = 'Stop' } Import-Module @importGliderUiModuleParams if ([string]::IsNullOrWhiteSpace($UiScriptPath)) { $UiScriptPath = Join-Path $PSScriptRoot '..\ui\splitterui.ps1' } $resolveUiScriptPathParams = @{ Path = $UiScriptPath ErrorAction = 'Stop' } $resolvedUiScriptPath = Resolve-Path @resolveUiScriptPathParams $dotSourceUiScript = $resolvedUiScriptPath.ProviderPath . $dotSourceUiScript $newSplitterUiWindowCommand = Get-Command -Name 'New-SplitterUiWindow' -ErrorAction SilentlyContinue if ($null -eq $newSplitterUiWindowCommand) { throw "UI script '$dotSourceUiScript' did not define New-SplitterUiWindow." } $ui = New-SplitterUiWindow if ($null -eq $ui) { throw "UI script '$dotSourceUiScript' returned no UI object." } if ($null -eq $ui.Window) { throw "UI script '$dotSourceUiScript' returned no Window object." } if ($null -eq $ui.Controls) { throw "UI script '$dotSourceUiScript' returned no Controls hashtable." } $initializeSplitterUiParams = @{ Window = $ui.Window Controls = $ui.Controls } Initialize-SplitterUi @initializeSplitterUiParams if ($NoWait) { $ui.Window.Show() return $ui.Window } $ui.Window.Show() $ui.Window.WaitForClosed() } |