public/controls/display/New-UiGlyph.ps1
|
function New-UiGlyph { <# .SYNOPSIS Creates a glyph icon from the active icon font. .DESCRIPTION Displays an icon from the built-in icon library with optional tooltip showing the glyph name. .PARAMETER Name The name of the glyph to display (e.g., 'Star', 'Heart', 'Gear'). Use Show-UiGlyphBrowser to see all available glyphs. .PARAMETER Size Font size for the glyph. Default is 16. .PARAMETER Color Color for the glyph. Can be a color name ('Red'), hex ('#FF0000'), or theme key ('Accent'). Defaults to the current theme's ControlFg color. .PARAMETER ShowTooltip If specified, shows the glyph name as a tooltip on hover. .PARAMETER WPFProperties Hashtable of additional WPF properties to set on the control. .EXAMPLE New-UiGlyph -Name 'Star' -Size 24 -Color 'Gold' .EXAMPLE New-UiGlyph -Name 'Gear' -ShowTooltip .EXAMPLE New-UiPanel -Orientation Horizontal -Content { New-UiGlyph -Name 'CircleCheck' -Color 'Green' -Size 20 New-UiLabel -Text 'Operation completed successfully' } #> [CmdletBinding()] param( [Parameter(Mandatory)] [string]$Name, [double]$Size = 16, [string]$Color, [switch]$ShowTooltip, [Parameter()] [hashtable]$WPFProperties ) $session = Assert-UiSession -CallerName 'New-UiGlyph' $colors = Get-ThemeColors $parent = $session.CurrentParent Write-Debug "Name='$Name', Size=$Size, Parent: $($parent.GetType().Name)" $glyphChar = [PsUi.ModuleContext]::GetIcon($Name) if (!$glyphChar) { Write-Warning "Glyph '$Name' not found. Using placeholder." $glyphChar = [PsUi.ModuleContext]::GetIcon('Error') # Fallback icon } $brush = $null $brushTag = 'ControlFgBrush' if ($Color) { # Color could be a theme key like 'Primary' or a literal color value if ($colors.ContainsKey($Color)) { $brush = ConvertTo-UiBrush $colors[$Color] $brushTag = "${Color}Brush" } else { $brush = ConvertTo-UiBrush $Color $brushTag = $null # Custom color, no theme tracking } } else { $brush = ConvertTo-UiBrush $colors.ControlFg } $glyph = [System.Windows.Controls.TextBlock]@{ Text = $glyphChar FontFamily = [PsUi.ModuleContext]::ActiveIconFontFamily FontSize = $Size Foreground = $brush TextAlignment = 'Center' VerticalAlignment = 'Center' Margin = [System.Windows.Thickness]::new(2) } # Track for theme changes if using theme color if ($brushTag) { $glyph.Tag = $brushTag try { [PsUi.ThemeEngine]::RegisterElement($glyph) } catch { Write-Debug "ThemeEngine registration failed: $_" } } if ($ShowTooltip) { $glyph.ToolTip = $Name } if ($WPFProperties) { Set-UiProperties -Control $glyph -Properties $WPFProperties } Write-Debug "Adding glyph '$Name' to parent" $parent.Children.Add($glyph) | Out-Null return $glyph } |