GraphicalEngine/Show-TuiMainApplication.ps1
|
# orchestrator: wires all TUI components together and starts the application function Show-TuiMainApplication { [CmdletBinding()] param( [System.Collections.Generic.List[psTPCCLASSES.CounterConfiguration]] $Counters, [string] $ConfigName, [int] $Interval = 2, [switch] $ExportCsv, [string] $CsvPath = [Environment]::GetFolderPath('Desktop'), [switch] $ExportHtml, [string] $HtmlPath = [Environment]::GetFolderPath('Desktop'), [ValidateSet('Counter', 'Host')] [string] $HtmlGroupBy = 'Counter', # $false for multi-server: table-only view, no sparkline area [bool] $ShowGraphs = $true ) # 1. initialize Terminal.Gui [Terminal.Gui.Application]::Init() # 2. create spark block characters $sparkBlocks = New-TuiSparkBlocks # 3. create centered column names $columnNames = New-TuiColumnNames # 4. create data table with column definitions $dataTable = New-TuiDataTable -ColumnNames $columnNames # 5. build the full UI layout $layout = New-TuiLayout -DataTable $dataTable -ColumnNames $columnNames ` -ShowGraphs $ShowGraphs -CounterCount $Counters.Count # 6. initialize mutable state object (hashtable = reference type) $tuiState = @{ IsPaused = $false ShowSparklines = $true StartTime = Get-Date SampleCount = 0 ConfigName = $ConfigName ExportCsv = [bool]$ExportCsv CsvPath = $CsvPath ExportHtml = [bool]$ExportHtml HtmlPath = $HtmlPath HtmlGroupBy = $HtmlGroupBy } # 7. register button handlers and timer callback (includes data collection) Register-TuiEventHandlers -Layout $layout -TuiState $tuiState -Counters $Counters ` -ColumnNames $columnNames -DataTable $dataTable ` -SparkBlocks $sparkBlocks -Interval $Interval ` -ExportCsv:$ExportCsv -CsvPath $CsvPath ` -ExportHtml:$ExportHtml -HtmlPath $HtmlPath -HtmlGroupBy $HtmlGroupBy # 8. collect initial data batch [psTPCCLASSES.CounterConfiguration]::GetValuesBatched($Counters) # 9. initial UI render Update-TuiHeader -HeaderLabel $layout.HeaderLabel -ConfigName $ConfigName ` -StartTime $tuiState.StartTime -CounterCount $Counters.Count ` -SampleCount 0 -IsPaused $false -Interval $Interval Update-TuiTable -DataTable $dataTable -TableView $layout.TableView ` -Counters $Counters -ColumnNames $columnNames if ( $layout.SparkLabel ) { Update-TuiSparklines -SparkLabel $layout.SparkLabel -Counters $Counters ` -SparkBlocks $sparkBlocks -ShowSparklines $true } # 10. add window to application and run (blocks until quit) [Terminal.Gui.Application]::Top.Add($layout.Window) [Terminal.Gui.Application]::Run() # 11. restore terminal [Terminal.Gui.Application]::Shutdown() } |