From af5d5206f86cafe2c5f4fb9c3d5a1e5f335968db Mon Sep 17 00:00:00 2001 From: rbalsleyMSFT <53497092+rbalsleyMSFT@users.noreply.github.com> Date: Tue, 17 Jun 2025 22:55:42 -0700 Subject: [PATCH] Refactors Office UI event handlers into core module Moves the event handling logic for the M365 Apps/Office options from the main UI script into the `FFUUI.Core.Handlers` module. This change centralizes UI event handling, improving code organization and maintainability. It also decouples the handlers from the main script by using a local state object instead of a global script variable. --- FFUDevelopment/BuildFFUVM_UI.ps1 | 38 +------------ .../FFUUI.Core/FFUUI.Core.Handlers.psm1 | 55 ++++++++++++++++++- 2 files changed, 55 insertions(+), 38 deletions(-) diff --git a/FFUDevelopment/BuildFFUVM_UI.ps1 b/FFUDevelopment/BuildFFUVM_UI.ps1 index cbd75cd..d5a5b93 100644 --- a/FFUDevelopment/BuildFFUVM_UI.ps1 +++ b/FFUDevelopment/BuildFFUVM_UI.ps1 @@ -169,7 +169,7 @@ $window.Add_Loaded({ $script:uiState.Controls.spModelFilterSection.Visibility = 'Collapsed' $script:uiState.Controls.lstDriverModels.Visibility = 'Collapsed' $script:uiState.Controls.spDriverActionButtons.Visibility = 'Collapsed' - + # Office interplay (Keep existing logic) $script:uiState.Flags.installAppsCheckedByOffice = $false if ($script:uiState.Controls.chkInstallOffice.IsChecked) { @@ -187,42 +187,6 @@ $window.Add_Loaded({ $script:uiState.Controls.OfficeConfigurationXMLFileStackPanel.Visibility = 'Collapsed' $script:uiState.Controls.OfficeConfigurationXMLFileGrid.Visibility = 'Collapsed' } - $script:uiState.Controls.chkInstallOffice.Add_Checked({ - if (-not $script:uiState.Controls.chkInstallApps.IsChecked) { - $script:uiState.Controls.chkInstallApps.IsChecked = $true - $script:uiState.Flags.installAppsCheckedByOffice = $true - } - $script:uiState.Controls.chkInstallApps.IsEnabled = $false - $script:uiState.Controls.OfficePathStackPanel.Visibility = 'Visible' - $script:uiState.Controls.OfficePathGrid.Visibility = 'Visible' - $script:uiState.Controls.CopyOfficeConfigXMLStackPanel.Visibility = 'Visible' - # Show/hide XML file path based on checkbox state - $script:uiState.Controls.OfficeConfigurationXMLFileStackPanel.Visibility = if ($script:uiState.Controls.chkCopyOfficeConfigXML.IsChecked) { 'Visible' } else { 'Collapsed' } - $script:uiState.Controls.OfficeConfigurationXMLFileGrid.Visibility = if ($script:uiState.Controls.chkCopyOfficeConfigXML.IsChecked) { 'Visible' } else { 'Collapsed' } - }) - $script:uiState.Controls.chkInstallOffice.Add_Unchecked({ - if ($script:uiState.Flags.installAppsCheckedByOffice) { - $script:uiState.Controls.chkInstallApps.IsChecked = $false - $script:uiState.Flags.installAppsCheckedByOffice = $false - } - # Only re-enable InstallApps if not forced by Updates - if (-not $script:uiState.Flags.installAppsForcedByUpdates) { - $script:uiState.Controls.chkInstallApps.IsEnabled = $true - } - $script:uiState.Controls.OfficePathStackPanel.Visibility = 'Collapsed' - $script:uiState.Controls.OfficePathGrid.Visibility = 'Collapsed' - $script:uiState.Controls.CopyOfficeConfigXMLStackPanel.Visibility = 'Collapsed' - $script:uiState.Controls.OfficeConfigurationXMLFileStackPanel.Visibility = 'Collapsed' - $script:uiState.Controls.OfficeConfigurationXMLFileGrid.Visibility = 'Collapsed' - }) - $script:uiState.Controls.chkCopyOfficeConfigXML.Add_Checked({ - $script:uiState.Controls.OfficeConfigurationXMLFileStackPanel.Visibility = 'Visible' - $script:uiState.Controls.OfficeConfigurationXMLFileGrid.Visibility = 'Visible' - }) - $script:uiState.Controls.chkCopyOfficeConfigXML.Add_Unchecked({ - $script:uiState.Controls.OfficeConfigurationXMLFileStackPanel.Visibility = 'Collapsed' - $script:uiState.Controls.OfficeConfigurationXMLFileGrid.Visibility = 'Collapsed' - }) # Updates/InstallApps interplay (Keep existing logic) $script:uiState.Flags.installAppsForcedByUpdates = $false diff --git a/FFUDevelopment/FFUUI.Core/FFUUI.Core.Handlers.psm1 b/FFUDevelopment/FFUUI.Core/FFUUI.Core.Handlers.psm1 index 7b64b12..5021f68 100644 --- a/FFUDevelopment/FFUUI.Core/FFUUI.Core.Handlers.psm1 +++ b/FFUDevelopment/FFUUI.Core/FFUUI.Core.Handlers.psm1 @@ -57,6 +57,60 @@ function Register-EventHandlers { if ($ofd.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) { $localState.Controls.txtISOPath.Text = $ofd.FileName } }) + # M365 Apps/Office tab Event Handlers + $State.Controls.chkInstallOffice.Add_Checked({ + param($eventSource, $routedEventArgs) + $window = [System.Windows.Window]::GetWindow($eventSource) + $localState = $window.Tag + + if (-not $localState.Controls.chkInstallApps.IsChecked) { + $localState.Controls.chkInstallApps.IsChecked = $true + $localState.Flags.installAppsCheckedByOffice = $true + } + $localState.Controls.chkInstallApps.IsEnabled = $false + $localState.Controls.OfficePathStackPanel.Visibility = 'Visible' + $localState.Controls.OfficePathGrid.Visibility = 'Visible' + $localState.Controls.CopyOfficeConfigXMLStackPanel.Visibility = 'Visible' + # Show/hide XML file path based on checkbox state + $localState.Controls.OfficeConfigurationXMLFileStackPanel.Visibility = if ($localState.Controls.chkCopyOfficeConfigXML.IsChecked) { 'Visible' } else { 'Collapsed' } + $localState.Controls.OfficeConfigurationXMLFileGrid.Visibility = if ($localState.Controls.chkCopyOfficeConfigXML.IsChecked) { 'Visible' } else { 'Collapsed' } + }) + $State.Controls.chkInstallOffice.Add_Unchecked({ + param($eventSource, $routedEventArgs) + $window = [System.Windows.Window]::GetWindow($eventSource) + $localState = $window.Tag + + if ($localState.Flags.installAppsCheckedByOffice) { + $localState.Controls.chkInstallApps.IsChecked = $false + $localState.Flags.installAppsCheckedByOffice = $false + } + # Only re-enable InstallApps if not forced by Updates + if (-not $localState.Flags.installAppsForcedByUpdates) { + $localState.Controls.chkInstallApps.IsEnabled = $true + } + $localState.Controls.OfficePathStackPanel.Visibility = 'Collapsed' + $localState.Controls.OfficePathGrid.Visibility = 'Collapsed' + $localState.Controls.CopyOfficeConfigXMLStackPanel.Visibility = 'Collapsed' + $localState.Controls.OfficeConfigurationXMLFileStackPanel.Visibility = 'Collapsed' + $localState.Controls.OfficeConfigurationXMLFileGrid.Visibility = 'Collapsed' + }) + $State.Controls.chkCopyOfficeConfigXML.Add_Checked({ + param($eventSource, $routedEventArgs) + $window = [System.Windows.Window]::GetWindow($eventSource) + $localState = $window.Tag + + $localState.Controls.OfficeConfigurationXMLFileStackPanel.Visibility = 'Visible' + $localState.Controls.OfficeConfigurationXMLFileGrid.Visibility = 'Visible' + }) + $State.Controls.chkCopyOfficeConfigXML.Add_Unchecked({ + param($eventSource, $routedEventArgs) + $window = [System.Windows.Window]::GetWindow($eventSource) + $localState = $window.Tag + + $localState.Controls.OfficeConfigurationXMLFileStackPanel.Visibility = 'Collapsed' + $localState.Controls.OfficeConfigurationXMLFileGrid.Visibility = 'Collapsed' + }) + # Drivers Tab Event Handlers $State.Controls.chkDownloadDrivers.Add_Checked({ param($eventSource, $routedEventArgs) @@ -308,5 +362,4 @@ function Register-EventHandlers { Import-DriversJson -State $localState }) } - Export-ModuleMember -Function * \ No newline at end of file