diff --git a/FFUDevelopment/BuildFFUVM_UI.ps1 b/FFUDevelopment/BuildFFUVM_UI.ps1 index d045841..c0127c2 100644 --- a/FFUDevelopment/BuildFFUVM_UI.ps1 +++ b/FFUDevelopment/BuildFFUVM_UI.ps1 @@ -147,8 +147,12 @@ $window.Add_Loaded({ 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-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({ 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 } }) - - # 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 $makeList = @('Microsoft', 'Dell', 'HP', 'Lenovo') foreach ($m in $makeList) { [void]$script:uiState.Controls.cmbMake.Items.Add($m) } diff --git a/FFUDevelopment/FFUUI.Core/FFUUI.Core.Initialize.psm1 b/FFUDevelopment/FFUUI.Core/FFUUI.Core.Initialize.psm1 index da8d8f1..2713d40 100644 --- a/FFUDevelopment/FFUUI.Core/FFUUI.Core.Initialize.psm1 +++ b/FFUDevelopment/FFUUI.Core/FFUUI.Core.Initialize.psm1 @@ -150,7 +150,7 @@ function Initialize-UIControls { function Initialize-UIDefaults { param([PSCustomObject]$State) WriteLog "Initializing UI defaults..." - + # Get default values from helper functions $State.Defaults.windowsSettingsDefaults = Get-WindowsSettingsDefaults $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 * diff --git a/FFUDevelopment/FFUUI.Core/FFUUI.Core.WindowsSettings.psm1 b/FFUDevelopment/FFUUI.Core/FFUUI.Core.WindowsSettings.psm1 index 78750e4..14e6da4 100644 --- a/FFUDevelopment/FFUUI.Core/FFUUI.Core.WindowsSettings.psm1 +++ b/FFUDevelopment/FFUUI.Core/FFUUI.Core.WindowsSettings.psm1 @@ -567,4 +567,4 @@ function BuildFeaturesGrid { # SECTION: Module Export # -------------------------------------------------------------------------- -Export-ModuleMember -Function Get-WindowsSettingsDefaults, Get-AvailableWindowsReleases, Get-AvailableWindowsVersions, Get-AvailableSkusForRelease, Update-WindowsReleaseCombo, Update-WindowsVersionCombo, Update-WindowsSkuCombo, Initialize-WindowsSettingsCombos, UpdateOptionalFeaturesString, BuildFeaturesGrid \ No newline at end of file +Export-ModuleMember -Function * \ No newline at end of file