Refactors UI event handlers into core module

Moves UI event handler registration logic from the main script to the `Register-EventHandlers` function in the `FFUUI.Core` module.

This change centralizes UI logic, improving code organization and modularity. The event handlers are also updated to access state via the window's tag, reducing reliance on script-scoped variables.
This commit is contained in:
rbalsleyMSFT
2025-06-17 15:03:12 -07:00
parent c1c5aa9239
commit 0bcedadc5c
2 changed files with 93 additions and 66 deletions
+12 -43
View File
@@ -151,50 +151,20 @@ $window.Add_Loaded({
Register-EventHandlers -State $script:uiState Register-EventHandlers -State $script:uiState
$script:uiState.Controls.txtISOPath.Add_TextChanged({
Get-WindowsSettingsCombos -isoPath $script:uiState.Controls.txtISOPath.Text -State $script:uiState
})
$script:uiState.Controls.cmbWindowsRelease.Add_SelectionChanged({
$selectedReleaseValue = 11 # Default if null
if ($null -ne $script:uiState.Controls.cmbWindowsRelease.SelectedItem) {
$selectedReleaseValue = $script:uiState.Controls.cmbWindowsRelease.SelectedItem.Value
}
# Only need to update the Version combo when Release changes
Update-WindowsVersionCombo -selectedRelease $selectedReleaseValue -isoPath $script:uiState.Controls.txtISOPath.Text -State $script:uiState
# Also update the SKU combo (now derives values internally)
Update-WindowsSkuCombo -State $script:uiState
})
$script:uiState.Controls.btnBrowseISO.Add_Click({
$ofd = New-Object System.Windows.Forms.OpenFileDialog
$ofd.Filter = "ISO files (*.iso)|*.iso"
$ofd.Title = "Select Windows ISO File"
if ($ofd.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) { $script:uiState.Controls.txtISOPath.Text = $ofd.FileName }
})
# Drivers tab UI logic # Drivers tab UI logic
$makeList = @('Microsoft', 'Dell', 'HP', 'Lenovo') $makeList = @('Microsoft', 'Dell', 'HP', 'Lenovo')
foreach ($m in $makeList) { [void]$script:uiState.Controls.cmbMake.Items.Add($m) } foreach ($m in $makeList) {
if ($script:uiState.Controls.cmbMake.Items.Count -gt 0) { $script:uiState.Controls.cmbMake.SelectedIndex = 0 } [void]$script:uiState.Controls.cmbMake.Items.Add($m)
$script:uiState.Controls.chkDownloadDrivers.Add_Checked({ }
$script:uiState.Controls.cmbMake.Visibility = 'Visible' if ($script:uiState.Controls.cmbMake.Items.Count -gt 0) {
$script:uiState.Controls.btnGetModels.Visibility = 'Visible' $script:uiState.Controls.cmbMake.SelectedIndex = 0
$script:uiState.Controls.spMakeSection.Visibility = 'Visible' }
$script:uiState.Controls.spModelFilterSection.Visibility = 'Visible' $script:uiState.Controls.spMakeSection.Visibility = if ($script:uiState.Controls.chkDownloadDrivers.IsChecked) {
$script:uiState.Controls.lstDriverModels.Visibility = 'Visible' 'Visible'
$script:uiState.Controls.spDriverActionButtons.Visibility = 'Visible' }
}) else {
$script:uiState.Controls.chkDownloadDrivers.Add_Unchecked({ 'Collapsed'
$script:uiState.Controls.cmbMake.Visibility = 'Collapsed' }
$script:uiState.Controls.btnGetModels.Visibility = 'Collapsed'
$script:uiState.Controls.spMakeSection.Visibility = 'Collapsed'
$script:uiState.Controls.spModelFilterSection.Visibility = 'Collapsed'
$script:uiState.Controls.lstDriverModels.Visibility = 'Collapsed'
$script:uiState.Controls.spDriverActionButtons.Visibility = 'Collapsed'
$script:uiState.Controls.lstDriverModels.ItemsSource = $null
$script:uiState.Data.allDriverModels = @()
$script:uiState.Controls.txtModelFilter.Text = ""
})
$script:uiState.Controls.spMakeSection.Visibility = if ($script:uiState.Controls.chkDownloadDrivers.IsChecked) { 'Visible' } else { 'Collapsed' }
$script:uiState.Controls.btnGetModels.Visibility = if ($script:uiState.Controls.chkDownloadDrivers.IsChecked) { 'Visible' } else { 'Collapsed' } $script:uiState.Controls.btnGetModels.Visibility = if ($script:uiState.Controls.chkDownloadDrivers.IsChecked) { 'Visible' } else { 'Collapsed' }
$script:uiState.Controls.spModelFilterSection.Visibility = 'Collapsed' $script:uiState.Controls.spModelFilterSection.Visibility = 'Collapsed'
$script:uiState.Controls.lstDriverModels.Visibility = 'Collapsed' $script:uiState.Controls.lstDriverModels.Visibility = 'Collapsed'
@@ -204,7 +174,6 @@ $window.Add_Loaded({
$script:uiState.Controls.txtStatus.Text = "Getting models for $selectedMake..." $script:uiState.Controls.txtStatus.Text = "Getting models for $selectedMake..."
$window.Cursor = [System.Windows.Input.Cursors]::Wait $window.Cursor = [System.Windows.Input.Cursors]::Wait
$this.IsEnabled = $false $this.IsEnabled = $false
try { try {
# Get previously selected models from the master list ($script:uiState.Data.allDriverModels) # Get previously selected models from the master list ($script:uiState.Data.allDriverModels)
# This ensures all selected items are captured, regardless of any active filter. # This ensures all selected items are captured, regardless of any active filter.
@@ -409,8 +409,7 @@ function Register-EventHandlers {
param([PSCustomObject]$State) param([PSCustomObject]$State)
WriteLog "Registering UI event handlers..." WriteLog "Registering UI event handlers..."
# Hyper-V VM Switch Selection Changed Event # Hyper-V tab event handlers
# This event handler updates the IP address field based on the selected VM switch
$State.Controls.cmbVMSwitchName.Add_SelectionChanged({ $State.Controls.cmbVMSwitchName.Add_SelectionChanged({
param($eventSource, $selectionChangedEventArgs) param($eventSource, $selectionChangedEventArgs)
# The state object is available via the parent window's Tag property # The state object is available via the parent window's Tag property
@@ -432,6 +431,65 @@ function Register-EventHandlers {
} }
} }
}) })
# Windows Settings tab Event Handlers
$State.Controls.txtISOPath.Add_TextChanged({
param($eventSource, $textChangedEventArgs)
$window = [System.Windows.Window]::GetWindow($eventSource)
$localState = $window.Tag
Get-WindowsSettingsCombos -isoPath $localState.Controls.txtISOPath.Text -State $localState
})
$State.Controls.cmbWindowsRelease.Add_SelectionChanged({
param($eventSource, $selectionChangedEventArgs)
$window = [System.Windows.Window]::GetWindow($eventSource)
$localState = $window.Tag
$selectedReleaseValue = 11 # Default if null
if ($null -ne $localState.Controls.cmbWindowsRelease.SelectedItem) {
$selectedReleaseValue = $localState.Controls.cmbWindowsRelease.SelectedItem.Value
}
# Only need to update the Version combo when Release changes
Update-WindowsVersionCombo -selectedRelease $selectedReleaseValue -isoPath $localState.Controls.txtISOPath.Text -State $localState
# Also update the SKU combo (now derives values internally)
Update-WindowsSkuCombo -State $localState
})
$State.Controls.btnBrowseISO.Add_Click({
param($eventSource, $routedEventArgs)
$window = [System.Windows.Window]::GetWindow($eventSource)
$localState = $window.Tag
$ofd = New-Object System.Windows.Forms.OpenFileDialog
$ofd.Filter = "ISO files (*.iso)|*.iso"
$ofd.Title = "Select Windows ISO File"
if ($ofd.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) { $localState.Controls.txtISOPath.Text = $ofd.FileName }
})
# Drivers Tab Event Handlers
$State.Controls.chkDownloadDrivers.Add_Checked({
param($eventSource, $routedEventArgs)
$window = [System.Windows.Window]::GetWindow($eventSource)
$localState = $window.Tag
$localState.Controls.cmbMake.Visibility = 'Visible'
$localState.Controls.btnGetModels.Visibility = 'Visible'
$localState.Controls.spMakeSection.Visibility = 'Visible'
$localState.Controls.spModelFilterSection.Visibility = 'Visible'
$localState.Controls.lstDriverModels.Visibility = 'Visible'
$localState.Controls.spDriverActionButtons.Visibility = 'Visible'
})
$State.Controls.chkDownloadDrivers.Add_Unchecked({
param($eventSource, $routedEventArgs)
$window = [System.Windows.Window]::GetWindow($eventSource)
$localState = $window.Tag
$localState.Controls.cmbMake.Visibility = 'Collapsed'
$localState.Controls.btnGetModels.Visibility = 'Collapsed'
$localState.Controls.spMakeSection.Visibility = 'Collapsed'
$localState.Controls.spModelFilterSection.Visibility = 'Collapsed'
$localState.Controls.lstDriverModels.Visibility = 'Collapsed'
$localState.Controls.spDriverActionButtons.Visibility = 'Collapsed'
$localState.Controls.lstDriverModels.ItemsSource = $null
$localState.Data.allDriverModels.Clear()
$localState.Controls.txtModelFilter.Text = ""
})
} }
Export-ModuleMember -Function * Export-ModuleMember -Function *