Refactor and centralize UI panel visibility logic

Consolidates the logic for showing and hiding UI elements into dedicated functions, `Update-DriverDownloadPanelVisibility` and `Update-OfficePanelVisibility`.

This change simplifies the event handlers for the "Download Drivers" checkbox by using a single handler for both checked and unchecked states. It also moves the initial UI setup from the main script into the core initialization module, improving code organization and reducing duplication.
This commit is contained in:
rbalsleyMSFT
2025-06-19 16:37:32 -07:00
parent 52085cf521
commit 094e084316
4 changed files with 66 additions and 43 deletions
+1 -18
View File
@@ -135,24 +135,7 @@ $window.Add_Loaded({
Register-EventHandlers -State $script:uiState Register-EventHandlers -State $script:uiState
# Drivers tab UI logic
$makeList = @('Microsoft', 'Dell', 'HP', 'Lenovo')
foreach ($m in $makeList) {
[void]$script:uiState.Controls.cmbMake.Items.Add($m)
}
if ($script:uiState.Controls.cmbMake.Items.Count -gt 0) {
$script:uiState.Controls.cmbMake.SelectedIndex = 0
}
$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.spModelFilterSection.Visibility = 'Collapsed'
$script:uiState.Controls.lstDriverModels.Visibility = 'Collapsed'
$script:uiState.Controls.spDriverActionButtons.Visibility = 'Collapsed'
# Office interplay (Keep existing logic) # Office interplay (Keep existing logic)
$script:uiState.Flags.installAppsCheckedByOffice = $false $script:uiState.Flags.installAppsCheckedByOffice = $false
@@ -704,31 +704,16 @@ function Register-EventHandlers {
} }
}) })
$State.Controls.chkDownloadDrivers.Add_Checked({ # Define a single handler for the Download Drivers checkbox
param($eventSource, $routedEventArgs) $driverDownloadCheckboxHandler = {
$window = [System.Windows.Window]::GetWindow($eventSource) param($eventSource, $routedEventArgs)
$localState = $window.Tag $window = [System.Windows.Window]::GetWindow($eventSource)
$localState.Controls.cmbMake.Visibility = 'Visible' if ($null -ne $window) {
$localState.Controls.btnGetModels.Visibility = 'Visible' Update-DriverDownloadPanelVisibility -State $window.Tag
$localState.Controls.spMakeSection.Visibility = 'Visible' }
$localState.Controls.spModelFilterSection.Visibility = 'Visible' }
$localState.Controls.lstDriverModels.Visibility = 'Visible' $State.Controls.chkDownloadDrivers.Add_Checked($driverDownloadCheckboxHandler)
$localState.Controls.spDriverActionButtons.Visibility = 'Visible' $State.Controls.chkDownloadDrivers.Add_Unchecked($driverDownloadCheckboxHandler)
})
$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 = ""
})
$State.Controls.btnGetModels.Add_Click({ $State.Controls.btnGetModels.Add_Click({
param($eventSource, $routedEventArgs) param($eventSource, $routedEventArgs)
@@ -239,6 +239,16 @@ function Initialize-UIDefaults {
$State.Controls.chkCopyDrivers.IsChecked = $State.Defaults.generalDefaults.CopyDrivers $State.Controls.chkCopyDrivers.IsChecked = $State.Defaults.generalDefaults.CopyDrivers
$State.Controls.chkCopyPEDrivers.IsChecked = $State.Defaults.generalDefaults.CopyPEDrivers $State.Controls.chkCopyPEDrivers.IsChecked = $State.Defaults.generalDefaults.CopyPEDrivers
$State.Controls.chkCompressDriversToWIM.IsChecked = $State.Defaults.generalDefaults.CompressDownloadedDriversToWim $State.Controls.chkCompressDriversToWIM.IsChecked = $State.Defaults.generalDefaults.CompressDownloadedDriversToWim
# Drivers tab UI logic
$makeList = @('Microsoft', 'Dell', 'HP', 'Lenovo')
foreach ($m in $makeList) {
[void]$State.Controls.cmbMake.Items.Add($m)
}
if ($State.Controls.cmbMake.Items.Count -gt 0) {
$State.Controls.cmbMake.SelectedIndex = 0
}
Update-DriverDownloadPanelVisibility -State $State
# Set initial state for driver checkbox interplay # Set initial state for driver checkbox interplay
Update-DriverCheckboxStates -State $State Update-DriverCheckboxStates -State $State
@@ -246,6 +256,9 @@ function Initialize-UIDefaults {
# Set initial state for InstallApps checkbox based on updates # Set initial state for InstallApps checkbox based on updates
Update-InstallAppsState -State $State Update-InstallAppsState -State $State
# Set initial state for Office panel visibility
Update-OfficePanelVisibility -State $State
} }
function Initialize-DynamicUIElements { function Initialize-DynamicUIElements {
+42
View File
@@ -253,6 +253,48 @@ function Update-DriverCheckboxStates {
} }
} }
# Function to manage the visibility of Office UI panels
function Update-OfficePanelVisibility {
param([PSCustomObject]$State)
if ($State.Controls.chkInstallOffice.IsChecked) {
$State.Controls.OfficePathStackPanel.Visibility = 'Visible'
$State.Controls.OfficePathGrid.Visibility = 'Visible'
$State.Controls.CopyOfficeConfigXMLStackPanel.Visibility = 'Visible'
# Show/hide XML file path based on checkbox state
$State.Controls.OfficeConfigurationXMLFileStackPanel.Visibility = if ($State.Controls.chkCopyOfficeConfigXML.IsChecked) { 'Visible' } else { 'Collapsed' }
$State.Controls.OfficeConfigurationXMLFileGrid.Visibility = if ($State.Controls.chkCopyOfficeConfigXML.IsChecked) { 'Visible' } else { 'Collapsed' }
}
else {
$State.Controls.OfficePathStackPanel.Visibility = 'Collapsed'
$State.Controls.OfficePathGrid.Visibility = 'Collapsed'
$State.Controls.CopyOfficeConfigXMLStackPanel.Visibility = 'Collapsed'
$State.Controls.OfficeConfigurationXMLFileStackPanel.Visibility = 'Collapsed'
$State.Controls.OfficeConfigurationXMLFileGrid.Visibility = 'Collapsed'
}
}
# Function to manage the visibility of the driver download UI panels
function Update-DriverDownloadPanelVisibility {
param([PSCustomObject]$State)
if ($State.Controls.chkDownloadDrivers.IsChecked) {
$State.Controls.spMakeSection.Visibility = 'Visible'
$State.Controls.btnGetModels.Visibility = 'Visible'
# The other panels are shown/hidden by the Get Models button click handler
}
else {
$State.Controls.spMakeSection.Visibility = 'Collapsed'
$State.Controls.btnGetModels.Visibility = 'Collapsed'
$State.Controls.spModelFilterSection.Visibility = 'Collapsed'
$State.Controls.lstDriverModels.Visibility = 'Collapsed'
$State.Controls.spDriverActionButtons.Visibility = 'Collapsed'
$State.Controls.lstDriverModels.ItemsSource = $null
$State.Data.allDriverModels.Clear()
$State.Controls.txtModelFilter.Text = ""
}
}
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------
# SECTION: Module Export # SECTION: Module Export
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------