lib/events/MainForm.ps1
|
####################################################################################################################################################### # WARNING: DO NOT EDIT THIS FILE AS IT IS GENERATED AND WILL BE OVERWRITTEN ON THE NEXT UPDATE! # # # # Generated via psake on: 2026-07-14T04:20:30.625Z # # Version: 2026.7.14.27 # # Copyright Fortigi (C) 2024-2026 # ####################################################################################################################################################### #requires -Version 7.0 $Script:PendingWebViewCompletions = [System.Collections.Generic.List[object]]::new() $Script:WebViewCompletionPollTimer = New-Object System.Windows.Threading.DispatcherTimer $Script:WebViewCompletionPollTimer.Interval = [TimeSpan]::FromMilliseconds(50) $Script:WebViewCompletionPollTimer.Add_Tick({ try { $Completed = @($Script:PendingWebViewCompletions | Where-Object { $_.Task.IsCompleted }) foreach ($Pending in $Completed) { [void]$Script:PendingWebViewCompletions.Remove($Pending) if ($null -ne $Pending.TabSession) { $PreviouslyActiveTab = Get-ActiveTabSession try { Set-ActiveTabContext -TabSession $Pending.TabSession & $Pending.OnCompletedScriptBlock $Pending } finally { if ($null -ne $PreviouslyActiveTab) { Set-ActiveTabContext -TabSession $PreviouslyActiveTab } } } else { & $Pending.OnCompletedScriptBlock $Pending } } } catch { $_.Exception.Message | Write-LogOutput -LogType ERROR -ErrorObject $_ } }) $Script:WebViewCompletionPollTimer.Start() try { $TabStripPanelFactory = New-Object System.Windows.FrameworkElementFactory([Fortigi.ShrinkingTabPanel]) (Get-TabControlSessions).ItemsPanel = New-Object System.Windows.Controls.ItemsPanelTemplate($TabStripPanelFactory) } catch { "Failed to set the single-row tab panel: {0}" -f $_.Exception.Message | Write-LogOutput -LogType WARNING } try { $AddNewTabItem = (Get-TabControlSessions).Items | Where-Object { $_.Name -eq "TabItemAddNew" } | Select-Object -First 1 if ($null -ne $AddNewTabItem) { $AddNewTabItem.Add_PreviewMouseLeftButtonDown({ param($AddTabSender, $AddTabArgs) try { $AddTabArgs.Handled = $true New-EmptyTabSession | Out-Null } catch { $_.Exception.Message | Write-LogOutput -LogType ERROR -ErrorObject $_ } }) } } catch { "Failed to wire the '+' add-tab click handler: {0}" -f $_.Exception.Message | Write-LogOutput -LogType WARNING } $Script:MainForm.Definition.Add_Closed({ try { $_ | Show-EventInfo $Script:MainForm.State = "Closed" $Script:MainForm.Definition.Close() } catch { $_.Exception.Message | Write-LogOutput -LogType ERROR -ErrorObject $_ } }) $Script:MainForm.Definition.Add_Closing({ try { $_ | Show-EventInfo $Script:MainForm.State = "Closing" Save-TabSessions Save-FormMeasurements if (Test-LogFormIsVisible) { $Script:LogForm.Definition.Close() } if (Test-SqlHistoryFormOpen) { $Script:SqlHistoryForm.Definition.Close() } if (Test-SqlSchemaFormIsVisible) { $Script:SqlSchemaForm.Definition.Close() } } catch { $_.Exception.Message | Write-LogOutput -LogType ERROR -ErrorObject $_ } }) $Script:MainForm.Definition.Add_PreviewKeyDown({ param( $EventSender, $EventArgs ) try { $_ | Show-EventInfo $ControlPressed = [System.Windows.Input.Keyboard]::Modifiers -band [System.Windows.Input.ModifierKeys]::Control $ShiftPressed = [System.Windows.Input.Keyboard]::Modifiers -band [System.Windows.Input.ModifierKeys]::Shift if ($EventArgs.Key -eq [System.Windows.Input.Key]::F5) { if ($null -ne $Script:Webview.Object -and $Script:Webview.Object.IsKeyboardFocusWithin) { "F5 key at MainForm level - WebView2 has focus, deferring to Monaco" | Write-LogOutput -LogType VERBOSE } else { "F5 key intercepted at MainForm level" | Write-LogOutput -LogType VERBOSE $EventArgs.Handled = $true "Triggering Execute Query from F5 key press (MainForm)" | Write-LogOutput -LogType VERBOSE $Script:MainForm.Elements.ButtonExecuteQuery.RaiseEvent([System.Windows.RoutedEventArgs]::new([System.Windows.Controls.Primitives.ButtonBase]::ClickEvent)) } } elseif ($ControlPressed -and $EventArgs.Key -eq [System.Windows.Input.Key]::Tab) { $EventArgs.Handled = $true if ($ShiftPressed) { "Ctrl+Shift+Tab intercepted at MainForm level - select previous tab" | Write-LogOutput -LogType VERBOSE Select-AdjacentTab -Direction Previous } else { "Ctrl+Tab intercepted at MainForm level - select next tab" | Write-LogOutput -LogType VERBOSE Select-AdjacentTab -Direction Next } } elseif ($EventArgs.Key -eq [System.Windows.Input.Key]::S -and $ControlPressed -and -not $ShiftPressed) { "Ctrl+S key intercepted at MainForm level" | Write-LogOutput -LogType VERBOSE $EventArgs.Handled = $true "Triggering Save Query from Ctrl+S key press (MainForm)" | Write-LogOutput -LogType VERBOSE $Script:MainForm.Elements.ButtonSaveQuery.RaiseEvent([System.Windows.RoutedEventArgs]::new([System.Windows.Controls.Primitives.ButtonBase]::ClickEvent)) } elseif ($EventArgs.Key -eq [System.Windows.Input.Key]::C -and $ControlPressed -and -not $ShiftPressed) { "Ctrl+C detected at MainForm level - allowing to pass through to focused control" | Write-LogOutput -LogType VERBOSE } elseif ($ControlPressed -and $ShiftPressed -and $EventArgs.Key -eq [System.Windows.Input.Key]::K) { "Ctrl+Shift+K intercepted at MainForm level - duplicate active tab" | Write-LogOutput -LogType VERBOSE $EventArgs.Handled = $true $ActiveTab = Get-ActiveTabSession if ($null -ne $ActiveTab) { Invoke-DuplicateTab -TabId $ActiveTab.Id } } elseif ($ControlPressed -and -not $ShiftPressed -and $EventArgs.Key -eq [System.Windows.Input.Key]::T) { "Ctrl+T intercepted at MainForm level - duplicate active tab without query" | Write-LogOutput -LogType VERBOSE $EventArgs.Handled = $true $ActiveTab = Get-ActiveTabSession if ($null -ne $ActiveTab) { Invoke-DuplicateTab -TabId $ActiveTab.Id -WithoutQuery } } elseif ($ControlPressed -and -not $ShiftPressed -and ($EventArgs.Key -eq [System.Windows.Input.Key]::W -or $EventArgs.Key -eq [System.Windows.Input.Key]::F4)) { "Ctrl+W / Ctrl+F4 intercepted at MainForm level - close active tab" | Write-LogOutput -LogType VERBOSE $EventArgs.Handled = $true $ActiveTab = Get-ActiveTabSession if ($null -ne $ActiveTab) { Close-TabSession -TabId $ActiveTab.Id } } } catch { $_.Exception.Message | Write-LogOutput -LogType ERROR -ErrorObject $_ } }) $Script:MainForm.Definition.Add_PreviewKeyUp({ try { $_ | Show-EventInfo } catch { $_.Exception.Message | Write-LogOutput -LogType ERROR -ErrorObject $_ } }) $Script:MainForm.Definition.Add_Loaded({ try { $_ | Show-EventInfo $Script:MainForm.State = "Open" if ($Script:AppGlobalConfig.LogFormOpen) { Open-LogForm } if ($null -ne ($Script:MainForm.Definition | Get-FormPositionConfig)) { $Position = $Script:MainForm.Definition | Get-FormPositionConfig "Main form position: {0}" -f $Position | Write-LogOutput -LogType DEBUG $Script:MainForm.Definition.Left = [Int]::Abs($Position.Split("x")[0]) $Script:MainForm.Definition.Top = [Int]::Abs($Position.Split("x")[1]) } if ($null -ne ($Script:MainForm.Definition | Get-FormSizeConfig)) { $Size = $Script:MainForm.Definition | Get-FormSizeConfig "Main form size: {0}" -f $Size | Write-LogOutput -LogType DEBUG $Script:MainForm.Definition.Width = [Int]::Abs($Size.Split("x")[0]) $Script:MainForm.Definition.Height = [Int]::Abs($Size.Split("x")[1]) } Restore-TabSessions } catch { "Tab session restore failed: {0}" -f $_.Exception.Message | Write-LogOutput -LogType ERROR -ErrorObject $_ } }) $Script:MainForm.Definition.Add_LocationChanged({ try { $_ | Show-EventInfo -LogType VERBOSE2 $ActionId = [System.Guid]::NewGuid().ToString() if (!$Script:MainForm.Definition.IsVisible -or $Script:MainForm.Definition.Left -lt 0 -or $Script:MainForm.Definition.Top -lt 0) { "MainForm is not suitable for processing. Position: {0}x{1}, Dimensions: {2}x{3} (Id:{4})" -f $Script:MainForm.Definition.Left, $Script:MainForm.Definition.Top, $Script:MainForm.Definition.Width , $Script:MainForm.Definition.Height, $ActionId | Write-LogOutput -LogType VERBOSE2 return } "MainForm Position: {0}x{1}, Dimensions: {2}x{3} (Id:{4})" -f $Script:MainForm.Definition.Left, $Script:MainForm.Definition.Top, $Script:MainForm.Definition.Width , $Script:MainForm.Definition.Height, $ActionId | Write-LogOutput -LogType VERBOSE2 if ((Test-LogFormIsVisible) -and -not $Script:LogForm.PositionManager.Synchronizing) { if ($Script:LogForm.Definition.Left -lt 0 -or $Script:LogForm.Definition.Top -lt 0) { "LogForm is not suitable for processing. Position: {0}x{1}, Dimensions: {2}x{3} (Id:{4})" -f $Script:MainForm.Definition.Left, $Script:MainForm.Definition.Top, $Script:MainForm.Definition.Width , $Script:MainForm.Definition.Height, $ActionId | Write-LogOutput -LogType VERBOSE2 return } "LogForm Position: {0}x{1}, Dimensions: {2}x{3} (Id:{4})" -f $Script:LogForm.Definition.Left, $Script:LogForm.Definition.Top, $Script:LogForm.Definition.Width , $Script:LogForm.Definition.Height, $ActionId | Write-LogOutput -LogType VERBOSE2 $Script:LogForm.PositionManager.Synchronizing = $true $Script:MainForm.Definition.Dispatcher.Invoke({ $Script:LogForm.Definition.Left = [Int]::Abs($Script:MainForm.Definition.Left) + [Int]::Abs($Script:LogForm.PositionManager.PositionOffSetLeft) $Script:LogForm.Definition.Top = [Int]::Abs($Script:MainForm.Definition.Top) + [Int]::Abs($Script:LogForm.PositionManager.PositionOffSetTop) "LogForm Position: {0}x{1}, Dimensions: {2}x{3}, PositionManagerOffSet: {4}x{5} (Id:{6})" -f $Script:LogForm.Definition.Left, $Script:LogForm.Definition.Top, $Script:LogForm.Definition.Width , $Script:LogForm.Definition.Height, $Script:LogForm.PositionManager.PositionOffSetLeft, $Script:LogForm.PositionManager.PositionOffSetTop, $ActionId | Write-LogOutput -LogType VERBOSE2 $Script:LogForm.PositionManager.Synchronizing = $false }, [System.Windows.Threading.DispatcherPriority]::Render) } if ((Test-SqlSchemaFormIsVisible) -and -not $Script:SqlSchemaForm.PositionManager.Synchronizing) { $_ | Show-EventInfo -LogType VERBOSE2 if ($Script:SqlSchemaForm.Definition.Left -lt 0 -or $Script:SqlSchemaForm.Definition.Top -lt 0) { "SqlSchemaForm is not suitable for processing. Position: {0}x{1}, Dimensions: {2}x{3} (Id:{4})" -f $Script:SqlSchemaForm.Definition.Left, $Script:SqlSchemaForm.Definition.Top, $Script:SqlSchemaForm.Definition.Width , $Script:SqlSchemaForm.Definition.Height, $ActionId | Write-LogOutput -LogType VERBOSE2 return } "SqlSchemaForm Position: {0}x{1}, Dimensions: {2}x{3} (Id:{4})" -f $Script:SqlSchemaForm.Definition.Left, $Script:SqlSchemaForm.Definition.Top, $Script:SqlSchemaForm.Definition.Width , $Script:SqlSchemaForm.Definition.Height, $ActionId | Write-LogOutput -LogType VERBOSE2 $Script:SqlSchemaForm.PositionManager.Synchronizing = $true $Script:MainForm.Definition.Dispatcher.Invoke({ $Script:SqlSchemaForm.Definition.Left = [Int]::Abs($Script:MainForm.Definition.Left) - [Int]::Abs($Script:SqlSchemaForm.PositionManager.PositionOffSetLeft) $Script:SqlSchemaForm.Definition.Top = [Int]::Abs($Script:MainForm.Definition.Top) - [Int]::Abs($Script:SqlSchemaForm.PositionManager.PositionOffSetTop) "SqlSchemaForm Position: {0}x{1}, Dimensions: {2}x{3}, PositionManagerOffSet: {4}x{5} (Id:{6})" -f $Script:SqlSchemaForm.Definition.Left, $Script:SqlSchemaForm.Definition.Top, $Script:SqlSchemaForm.Definition.Width, $Script:SqlSchemaForm.Definition.Height, $Script:SqlSchemaForm.PositionManager.PositionOffSetLeft, $Script:SqlSchemaForm.PositionManager.PositionOffSetTop, $ActionId | Write-LogOutput -LogType VERBOSE2 $Script:SqlSchemaForm.PositionManager.Synchronizing = $false }, [System.Windows.Threading.DispatcherPriority]::Render) } } catch { "WebView2 initialization failed: {0}" -f $_.Exception.Message | Write-LogOutput -LogType ERROR -ErrorObject $_ } }) (Get-TabControlSessions).Add_SelectionChanged({ param( $EventSender, $EventArgs ) try { $_ | Show-EventInfo if ($Script:MainForm.State -ne "Open") { return } if ($EventArgs.OriginalSource -ne (Get-TabControlSessions)) { return } $SelectedItem = (Get-TabControlSessions).SelectedItem if ($null -eq $SelectedItem) { return } if ($SelectedItem.Name -eq "TabItemAddNew") { $CurrentTab = Get-ActiveTabSession if ($null -ne $CurrentTab -and $null -ne $CurrentTab.TabItem) { (Get-TabControlSessions).SelectedItem = $CurrentTab.TabItem } else { (Get-TabControlSessions).SelectedIndex = -1 } return } $TabSession = $Script:Tabs | Where-Object { $_.TabItem -eq $SelectedItem } | Select-Object -First 1 if ($null -ne $TabSession) { $OutgoingTabId = $Script:ActiveTabId Set-ActiveTabContext -TabSession $TabSession if (![string]::IsNullOrWhiteSpace($OutgoingTabId) -and $OutgoingTabId -ne $TabSession.Id) { $Script:PreviousActiveTabId = $OutgoingTabId } if (-not $Script:SuppressEditorSync -and -not $TabSession.IsMaterialized) { $OpeningPopup = Show-PopupWindow -Message ("Opening tab '{0}', please wait..." -f $TabSession.DisplayName) if ($null -ne $OpeningPopup) { $OpeningPopup.Dispatcher.Invoke([System.Action] {}, [System.Windows.Threading.DispatcherPriority]::Render) | Out-Null } try { Complete-TabMaterialization -TabSession $TabSession } finally { if ($null -ne $OpeningPopup) { $OpeningPopup.Close() } } } if ($TabSession.NeedsEditorSync -and -not $Script:SuppressEditorSync) { $TabSession.NeedsEditorSync = $false $Script:MainForm.Definition.Dispatcher.BeginInvoke( [System.Windows.Threading.DispatcherPriority]::Background, [System.Action] { Set-EditorValue }) | Out-Null } Update-ApplicationTitle if (Test-SqlSchemaFormIsVisible) { Get-SqlSchemaObject } } } catch { $_.Exception.Message | Write-LogOutput -LogType ERROR -ErrorObject $_ } }) |