Refactor UI initialization and event handling

Moves the VM Switch data population and event handler logic from the main UI script into the `FFUUI.Core.Initialize` module.

This change improves code organization by centralizing UI initialization and event registration into dedicated functions, making the main script cleaner.

It also simplifies module manifests by changing explicit function exports to a wildcard.
This commit is contained in:
rbalsleyMSFT
2025-06-17 14:18:41 -07:00
parent 0fb9878cff
commit ab7c8aa250
3 changed files with 68 additions and 47 deletions
+5 -44
View File
@@ -147,8 +147,12 @@ $window.Add_Loaded({
Initialize-DynamicUIElements -State $script:uiState Initialize-DynamicUIElements -State $script:uiState
Initialize-VMSwitchData -State $script:uiState
Register-EventHandlers -State $script:uiState
# Get Windows Settings UI using data from helper module # Get Windows Settings UI using data from helper module
Get-WindowsSettingsCombos -isoPath $script:uiState.Defaults.windowsSettingsDefaults.DefaultISOPath -State $script:uiState # Use combined refresh function Get-WindowsSettingsCombos -isoPath $script:uiState.Defaults.windowsSettingsDefaults.DefaultISOPath -State $script:uiState
$script:uiState.Controls.txtISOPath.Add_TextChanged({ $script:uiState.Controls.txtISOPath.Add_TextChanged({
Get-WindowsSettingsCombos -isoPath $script:uiState.Controls.txtISOPath.Text -State $script:uiState Get-WindowsSettingsCombos -isoPath $script:uiState.Controls.txtISOPath.Text -State $script:uiState
@@ -170,49 +174,6 @@ $window.Add_Loaded({
if ($ofd.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) { $script:uiState.Controls.txtISOPath.Text = $ofd.FileName } if ($ofd.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) { $script:uiState.Controls.txtISOPath.Text = $ofd.FileName }
}) })
# Hyper-V Settings: Populate VM Switch ComboBox (Keep existing logic)
$vmSwitchData = Get-VMSwitchData
$script:uiState.Data.vmSwitchMap = $vmSwitchData.SwitchMap
$script:uiState.Controls.cmbVMSwitchName.Items.Clear()
foreach ($switchName in $vmSwitchData.SwitchNames) {
$script:uiState.Controls.cmbVMSwitchName.Items.Add($switchName) | Out-Null
}
$script:uiState.Controls.cmbVMSwitchName.Items.Add('Other') | Out-Null
if ($script:uiState.Controls.cmbVMSwitchName.Items.Count -gt 1) {
$script:uiState.Controls.cmbVMSwitchName.SelectedIndex = 0
$firstSwitch = $script:uiState.Controls.cmbVMSwitchName.SelectedItem
if ($script:uiState.Data.vmSwitchMap.ContainsKey($firstSwitch)) {
$script:uiState.Controls.txtVMHostIPAddress.Text = $script:uiState.Data.vmSwitchMap[$firstSwitch]
}
else {
$script:uiState.Controls.txtVMHostIPAddress.Text = $script:uiState.Defaults.generalDefaults.VMHostIPAddress # Use default if IP not found
}
$script:uiState.Controls.txtCustomVMSwitchName.Visibility = 'Collapsed'
}
else {
$script:uiState.Controls.cmbVMSwitchName.SelectedItem = 'Other'
$script:uiState.Controls.txtCustomVMSwitchName.Visibility = 'Visible'
$script:uiState.Controls.txtVMHostIPAddress.Text = $script:uiState.Defaults.generalDefaults.VMHostIPAddress # Use default
}
$script:uiState.Controls.cmbVMSwitchName.Add_SelectionChanged({
param($eventSource, $selectionChangedEventArgs)
$selectedItem = $eventSource.SelectedItem
if ($selectedItem -eq 'Other') {
$script:uiState.Controls.txtCustomVMSwitchName.Visibility = 'Visible'
$script:uiState.Controls.txtVMHostIPAddress.Text = '' # Clear IP for custom
}
else {
$script:uiState.Controls.txtCustomVMSwitchName.Visibility = 'Collapsed'
if ($script:uiState.Data.vmSwitchMap.ContainsKey($selectedItem)) {
$script:uiState.Controls.txtVMHostIPAddress.Text = $script:uiState.Data.vmSwitchMap[$selectedItem]
}
else {
$script:uiState.Controls.txtVMHostIPAddress.Text = '' # Clear IP if not found in map
}
}
})
# 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) { [void]$script:uiState.Controls.cmbMake.Items.Add($m) }
@@ -150,7 +150,7 @@ function Initialize-UIControls {
function Initialize-UIDefaults { function Initialize-UIDefaults {
param([PSCustomObject]$State) param([PSCustomObject]$State)
WriteLog "Initializing UI defaults..." WriteLog "Initializing UI defaults..."
# Get default values from helper functions # Get default values from helper functions
$State.Defaults.windowsSettingsDefaults = Get-WindowsSettingsDefaults $State.Defaults.windowsSettingsDefaults = Get-WindowsSettingsDefaults
$State.Defaults.generalDefaults = Get-GeneralDefaults -FFUDevelopmentPath $State.FFUDevelopmentPath $State.Defaults.generalDefaults = Get-GeneralDefaults -FFUDevelopmentPath $State.FFUDevelopmentPath
@@ -371,4 +371,64 @@ function Initialize-DynamicUIElements {
} }
} }
Export-ModuleMember -Function Initialize-UIControls, Initialize-DynamicUIElements, Initialize-UIDefaults function Initialize-VMSwitchData {
param([PSCustomObject]$State)
WriteLog "Initializing VM Switch data..."
# Hyper-V Settings: Populate VM Switch ComboBox
$vmSwitchData = Get-VMSwitchData
$State.Data.vmSwitchMap = $vmSwitchData.SwitchMap
$State.Controls.cmbVMSwitchName.Items.Clear()
foreach ($switchName in $vmSwitchData.SwitchNames) {
$State.Controls.cmbVMSwitchName.Items.Add($switchName) | Out-Null
}
$State.Controls.cmbVMSwitchName.Items.Add('Other') | Out-Null
if ($State.Controls.cmbVMSwitchName.Items.Count -gt 1) {
$State.Controls.cmbVMSwitchName.SelectedIndex = 0
$firstSwitch = $State.Controls.cmbVMSwitchName.SelectedItem
if ($State.Data.vmSwitchMap.ContainsKey($firstSwitch)) {
$State.Controls.txtVMHostIPAddress.Text = $State.Data.vmSwitchMap[$firstSwitch]
}
else {
$State.Controls.txtVMHostIPAddress.Text = $State.Defaults.generalDefaults.VMHostIPAddress # Use default if IP not found
}
$State.Controls.txtCustomVMSwitchName.Visibility = 'Collapsed'
}
else {
$State.Controls.cmbVMSwitchName.SelectedItem = 'Other'
$State.Controls.txtCustomVMSwitchName.Visibility = 'Visible'
$State.Controls.txtVMHostIPAddress.Text = $State.Defaults.generalDefaults.VMHostIPAddress # Use default
}
}
function Register-EventHandlers {
param([PSCustomObject]$State)
WriteLog "Registering UI event handlers..."
# Hyper-V VM Switch Selection Changed Event
# This event handler updates the IP address field based on the selected VM switch
$State.Controls.cmbVMSwitchName.Add_SelectionChanged({
param($eventSource, $selectionChangedEventArgs)
# The state object is available via the parent window's Tag property
$window = [System.Windows.Window]::GetWindow($eventSource)
$localState = $window.Tag
$selectedItem = $eventSource.SelectedItem
if ($selectedItem -eq 'Other') {
$localState.Controls.txtCustomVMSwitchName.Visibility = 'Visible'
$localState.Controls.txtVMHostIPAddress.Text = '' # Clear IP for custom
}
else {
$localState.Controls.txtCustomVMSwitchName.Visibility = 'Collapsed'
if ($localState.Data.vmSwitchMap.ContainsKey($selectedItem)) {
$localState.Controls.txtVMHostIPAddress.Text = $localState.Data.vmSwitchMap[$selectedItem]
}
else {
$localState.Controls.txtVMHostIPAddress.Text = '' # Clear IP if not found in map
}
}
})
}
Export-ModuleMember -Function *
@@ -567,4 +567,4 @@ function BuildFeaturesGrid {
# SECTION: Module Export # SECTION: Module Export
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------
Export-ModuleMember -Function Get-WindowsSettingsDefaults, Get-AvailableWindowsReleases, Get-AvailableWindowsVersions, Get-AvailableSkusForRelease, Update-WindowsReleaseCombo, Update-WindowsVersionCombo, Update-WindowsSkuCombo, Initialize-WindowsSettingsCombos, UpdateOptionalFeaturesString, BuildFeaturesGrid Export-ModuleMember -Function *