Classes.psm1
<#
PoshTui - UIRendering Class Library PowerShell Object Class Definitions used to render PoshTui forms-like Console Menus #> #region Enumerators Enum PoshTuiMenuItemFocusStyleEnum { Highlight HighlightInverted } Enum PoshTuiBorderStyleEnum { NoBorder SingleLight SingleHeavy Double Rounded } #endregion #region Pre-Configured Clases <# Object Class Definitions with preset values #> Class PoshTuiMenuBorderDrawingGlyphsets { # No Border Defined [System.Management.Automation.OrderedHashtable]$NoBorder = @{} # Single Border Light [System.Management.Automation.OrderedHashtable]$SingleLight = @{ CornerTopL = '┌' CornerTopR = '┐' Horizontal = '─' CornerBtmL = '└' CornerBtmR = '┘' Vertical = '│' VerticalSeparatorL = '├' VerticalSeparatorR = '┤' Separator = '─' AltSeparator = '┄' AccentChar = '█' } # Single Border Heavy [System.Management.Automation.OrderedHashtable]$SingleHeavy = @{ CornerTopL = '┏' CornerTopR = '┓' Horizontal = '━' CornerBtmL = '┗' CornerBtmR = '┛' Vertical = '┃' VerticalSeparatorL = '┠' VeritcalSeparatorR = '┨' Separator = '─' AltSeparator = '┄' AccentChar = '█' } # Double Border [System.Management.Automation.OrderedHashtable]$Double = @{ CornerTopL = '╔' CornerTopR = '╗' Horizontal = '═' CornerBtmL = '╚' CornerBtmR = '╝' Vertical = '║' VerticalSeparatorL = '╟' VerticalSeparatorR = '╢' Separator = '─' AltSeparator = '╍' AccentChar = '█' } # Single Border Light with Rounded Corners [System.Management.Automation.OrderedHashtable]$Rounded = @{ CornerTopL = '╭' CornerTopR = '╮' Horizontal = '─' CornerBtmL = '╰' CornerBtmR = '╯' Vertical = '│' VerticalSeparatorL = '├' VerticalSeparatorR = '┤' Separator = '─' AltSeparator = '┄' AccentChar = '█' } PoshTuiMenuBorderDrawingGlyphsets(){} } #endregion #region Base Classes <# Object Class Definitions that must be instantiated and configued for menu builidng #> Class PoshTuiMenuItem { # The name rendered within the menu [string]$DisplayName # A brief, helpful description of the menu item, explaining the action(s) executed upon selection [string]$Description [ScriptBlock]$Action PoshTuiMenuItem([string]$DisplayName){ $This.DisplayName = $DisplayName } AddItemDescription([string]$Description){ $This.Description = $Description } AddActionScriptBlock([ScriptBlock]$Action){ $This.Action = $Action } } Class PoshTuiConsoleFormColorscheme { hidden [string]$ResetColor = "`e[0m" [string]$UIBorderColor = "`e[38;5;230m" [string]$UIAccentColor = "`e[38;5;123m" [string]$FormTitleColor = "`e[38;5;51m" [string]$MenuHeaderColor = "`e[38;5;51m" [string]$MenuItemColor = "`e[38;5;243m" [string]$MenuItemHighlightColor = "`e[38;5;14m" [string]$MenuItemDescriptionHeaderColor = "`e[38;5;229m" [string]$MenuItemDescriptionColor = "`e[38;5;85m" [string]$UIHelpMenuTextColor = "`e[38;5;255m" [string]$VersionColor = "`e[38;5;240m" PoshTuiConsoleFormColorscheme(){} } Class PoshTuiConsoleForm { [int]$MenuId = 0 [string]$Name = 'PoshTuiConsoleForm' [int]$UIWidth = 208 [PoshTuiBorderStyleEnum]$UIBorderStyle = 'Rounded' [string]$FormTitle [string]$MenuHeader [PoshTuiMenuItemFocusStyleEnum]$MenuItemFocusStyle = 'HighlightInverted' [PoshTuiConsoleFormColorscheme]$UIColorscheme = [PoshTuiConsoleFormColorscheme]::new() [bool]$DisplayMenuItemDescription = $true hidden [string]$MenuItemDescriptionHeader = 'Item Details' [bool]$DisplayUIHelpMenu = $true hidden [string]$UIHelpMenuText = "[Up/Down - Navigate Menu] [ENTER - Confirm Selection] [ESC - Exit]" [PoshTuiMenuItem[]]$MenuItems PoshTuiConsoleForm(){} AddMenuItem([PoshTuiMenuItem[]]$MenuItem) { $This.MenuItems += $MenuItem } Initialize(){ Initialize-PoshTuiConsoleForm $This } } #endregion |