Refactor: Move application tab event handlers to core module

Relocates the event handling logic for the "Applications" tab from the main UI script into the `FFUUI.Core.Handlers` module.

This improves code organization and modularity by centralizing UI logic. The handlers are also updated to use local state instead of a global variable.
This commit is contained in:
rbalsleyMSFT
2025-06-19 11:00:14 -07:00
parent f7f78da1a1
commit ec8ce1f2f6
2 changed files with 81 additions and 53 deletions
+1 -52
View File
@@ -203,58 +203,7 @@ $window.Add_Loaded({
$script:uiState.Controls.wingetPanel.Visibility = if ($script:uiState.Controls.chkInstallWingetApps.IsChecked) { 'Visible' } else { 'Collapsed' }
$script:uiState.Controls.wingetSearchPanel.Visibility = 'Collapsed' # Keep search hidden initially
$script:uiState.Controls.chkInstallApps.Add_Checked({
$script:uiState.Controls.chkInstallWingetApps.Visibility = 'Visible'
$script:uiState.Controls.applicationPathPanel.Visibility = 'Visible'
$script:uiState.Controls.appListJsonPathPanel.Visibility = 'Visible'
$script:uiState.Controls.chkBringYourOwnApps.Visibility = 'Visible'
# New logic for AppsScriptVariables
$script:uiState.Controls.chkDefineAppsScriptVariables.Visibility = 'Visible'
})
$script:uiState.Controls.chkInstallApps.Add_Unchecked({
$script:uiState.Controls.chkInstallWingetApps.IsChecked = $false # Uncheck children when parent is unchecked
$script:uiState.Controls.chkBringYourOwnApps.IsChecked = $false
$script:uiState.Controls.chkInstallWingetApps.Visibility = 'Collapsed'
$script:uiState.Controls.applicationPathPanel.Visibility = 'Collapsed'
$script:uiState.Controls.appListJsonPathPanel.Visibility = 'Collapsed'
$script:uiState.Controls.chkBringYourOwnApps.Visibility = 'Collapsed'
$script:uiState.Controls.wingetPanel.Visibility = 'Collapsed'
$script:uiState.Controls.wingetSearchPanel.Visibility = 'Collapsed'
$script:uiState.Controls.byoApplicationPanel.Visibility = 'Collapsed'
# New logic for AppsScriptVariables
$script:uiState.Controls.chkDefineAppsScriptVariables.IsChecked = $false # Also uncheck it
$script:uiState.Controls.chkDefineAppsScriptVariables.Visibility = 'Collapsed'
$script:uiState.Controls.appsScriptVariablesPanel.Visibility = 'Collapsed' # Ensure panel is hidden
})
$script:uiState.Controls.btnBrowseApplicationPath.Add_Click({
$selectedPath = Show-ModernFolderPicker -Title "Select Application Path Folder"
if ($selectedPath) { $script:uiState.Controls.txtApplicationPath.Text = $selectedPath }
})
$script:uiState.Controls.btnBrowseAppListJsonPath.Add_Click({
$ofd = New-Object System.Windows.Forms.OpenFileDialog
$ofd.Filter = "JSON files (*.json)|*.json"
$ofd.Title = "Select AppList.json File"
$ofd.CheckFileExists = $false
if ($ofd.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) { $script:uiState.Controls.txtAppListJsonPath.Text = $ofd.FileName }
})
$script:uiState.Controls.chkBringYourOwnApps.Add_Checked({
$script:uiState.Controls.byoApplicationPanel.Visibility = 'Visible'
})
$script:uiState.Controls.chkBringYourOwnApps.Add_Unchecked({
$script:uiState.Controls.byoApplicationPanel.Visibility = 'Collapsed'
# Clear fields when hiding
$script:uiState.Controls.txtAppName.Text = ''
$script:uiState.Controls.txtAppCommandLine.Text = ''
$script:uiState.Controls.txtAppArguments.Text = ''
$script:uiState.Controls.txtAppSource.Text = ''
})
$script:uiState.Controls.chkInstallWingetApps.Add_Checked({
$script:uiState.Controls.wingetPanel.Visibility = 'Visible'
})
$script:uiState.Controls.chkInstallWingetApps.Add_Unchecked({
$script:uiState.Controls.wingetPanel.Visibility = 'Collapsed'
$script:uiState.Controls.wingetSearchPanel.Visibility = 'Collapsed' # Hide search when unchecked
})
$script:uiState.Controls.btnCheckWingetModule.Add_Click({
param($buttonSender, $clickEventArgs)
$buttonSender.IsEnabled = $false
@@ -206,6 +206,85 @@ function Register-EventHandlers {
$localState.Controls.chkLatestCU.IsEnabled = $true
})
# Applications Tab Event Handlers
$State.Controls.chkInstallApps.Add_Checked({
param($eventSource, $routedEventArgs)
$window = [System.Windows.Window]::GetWindow($eventSource)
$localState = $window.Tag
$localState.Controls.chkInstallWingetApps.Visibility = 'Visible'
$localState.Controls.applicationPathPanel.Visibility = 'Visible'
$localState.Controls.appListJsonPathPanel.Visibility = 'Visible'
$localState.Controls.chkBringYourOwnApps.Visibility = 'Visible'
$localState.Controls.chkDefineAppsScriptVariables.Visibility = 'Visible'
})
$State.Controls.chkInstallApps.Add_Unchecked({
param($eventSource, $routedEventArgs)
$window = [System.Windows.Window]::GetWindow($eventSource)
$localState = $window.Tag
$localState.Controls.chkInstallWingetApps.IsChecked = $false
$localState.Controls.chkBringYourOwnApps.IsChecked = $false
$localState.Controls.chkInstallWingetApps.Visibility = 'Collapsed'
$localState.Controls.applicationPathPanel.Visibility = 'Collapsed'
$localState.Controls.appListJsonPathPanel.Visibility = 'Collapsed'
$localState.Controls.chkBringYourOwnApps.Visibility = 'Collapsed'
$localState.Controls.wingetPanel.Visibility = 'Collapsed'
$localState.Controls.wingetSearchPanel.Visibility = 'Collapsed'
$localState.Controls.byoApplicationPanel.Visibility = 'Collapsed'
$localState.Controls.chkDefineAppsScriptVariables.IsChecked = $false
$localState.Controls.chkDefineAppsScriptVariables.Visibility = 'Collapsed'
$localState.Controls.appsScriptVariablesPanel.Visibility = 'Collapsed'
})
$State.Controls.btnBrowseApplicationPath.Add_Click({
param($eventSource, $routedEventArgs)
$window = [System.Windows.Window]::GetWindow($eventSource)
$localState = $window.Tag
$selectedPath = Show-ModernFolderPicker -Title "Select Application Path Folder"
if ($selectedPath) { $localState.Controls.txtApplicationPath.Text = $selectedPath }
})
$State.Controls.btnBrowseAppListJsonPath.Add_Click({
param($eventSource, $routedEventArgs)
$window = [System.Windows.Window]::GetWindow($eventSource)
$localState = $window.Tag
$ofd = New-Object System.Windows.Forms.OpenFileDialog
$ofd.Filter = "JSON files (*.json)|*.json"
$ofd.Title = "Select AppList.json File"
$ofd.CheckFileExists = $false
if ($ofd.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) { $localState.Controls.txtAppListJsonPath.Text = $ofd.FileName }
})
$State.Controls.chkBringYourOwnApps.Add_Checked({
param($eventSource, $routedEventArgs)
$window = [System.Windows.Window]::GetWindow($eventSource)
$localState = $window.Tag
$localState.Controls.byoApplicationPanel.Visibility = 'Visible'
})
$State.Controls.chkBringYourOwnApps.Add_Unchecked({
param($eventSource, $routedEventArgs)
$window = [System.Windows.Window]::GetWindow($eventSource)
$localState = $window.Tag
$localState.Controls.byoApplicationPanel.Visibility = 'Collapsed'
$localState.Controls.txtAppName.Text = ''
$localState.Controls.txtAppCommandLine.Text = ''
$localState.Controls.txtAppArguments.Text = ''
$localState.Controls.txtAppSource.Text = ''
})
$State.Controls.chkInstallWingetApps.Add_Checked({
param($eventSource, $routedEventArgs)
$window = [System.Windows.Window]::GetWindow($eventSource)
$localState = $window.Tag
$localState.Controls.wingetPanel.Visibility = 'Visible'
})
$State.Controls.chkInstallWingetApps.Add_Unchecked({
param($eventSource, $routedEventArgs)
$window = [System.Windows.Window]::GetWindow($eventSource)
$localState = $window.Tag
$localState.Controls.wingetPanel.Visibility = 'Collapsed'
$localState.Controls.wingetSearchPanel.Visibility = 'Collapsed'
})
# M365 Apps/Office tab Event Handlers
$State.Controls.chkInstallOffice.Add_Checked({
param($eventSource, $routedEventArgs)