cowriter.psm1
function Start-Cowriter { [Alias('Cowriter')] [CmdletBinding()] param ( [string] $Xaml = "$PSScriptRoot/files/xaml/cowriter.xaml" ) Add-Type -AssemblyName PresentationFramework # Load XAML [xml]$xaml = Get-Content -Raw -Path $Xaml $reader = (New-Object System.Xml.XmlNodeReader $xaml) $window = [Windows.Markup.XamlReader]::Load($reader) $mainText = $window.FindName("MainText") $lineNumbers = $window.FindName("LineNumbers") # Logic for the text lines $lines_loaded = { $visibleLines = [Math]::Ceiling($mainText.ViewportHeight / $mainText.FontSize) $totalLines = [Math]::Max($mainText.LineCount, $visibleLines) $nums = "" for ($i=1; $i -le $totalLines; $i++) { $nums += "$i`n" } $lineNumbers.Text = $nums } $lines_textChanged = { $visibleLines = [Math]::Ceiling($mainText.ViewportHeight / $mainText.FontSize) $totalLines = [Math]::Max($mainText.LineCount, $visibleLines) $textLines = $mainText.Text -split "`n" $nums = "" for ($i=1; $i -le $totalLines; $i++) { $nums += "$i`n" } $lineNumbers.Text = $nums } $mainText.Add_Loaded($lines_loaded) $mainText.Add_TextChanged($lines_textChanged) # Logic for the formatting buttons $boldButton = $window.FindName("BoldButton") $italicButton = $window.FindName("ItalicButton") $underlineButton = $window.FindName("UnderlineButton") $bulletButton = $window.FindName("BulletButton") $numberButton = $window.FindName("NumberButton") # Bold $boldButton.Add_Click({ $mainText.Selection.ApplyPropertyValue([System.Windows.Documents.Inline]::FontWeightProperty, [System.Windows.FontWeights]::Bold) }) # Italic $italicButton.Add_Click({ $mainText.Selection.ApplyPropertyValue([System.Windows.Documents.Inline]::FontStyleProperty, [System.Windows.FontStyles]::Italic) }) # Underline $underlineButton.Add_Click({ $mainText.Selection.ApplyPropertyValue([System.Windows.Documents.Inline]::TextDecorationsProperty, [System.Windows.TextDecorations]::Underline) }) <# # Bulleted List $bulletButton.Add_Click({ $para = $mainText.Selection.Start.Paragraph if ($para -and -not $para.List) { $list = New-Object System.Windows.Documents.List $list.MarkerStyle = [System.Windows.TextMarkerStyle]::Disc $list.ListItems.Add((New-Object System.Windows.Documents.ListItem($para))) $mainText.Document.Blocks.InsertBefore($para, $list) $mainText.Document.Blocks.Remove($para) } }) # Numbered List $numberButton.Add_Click({ $para = $mainText.Selection.Start.Paragraph if ($para -and -not $para.List) { $list = New-Object System.Windows.Documents.List $list.MarkerStyle = [System.Windows.TextMarkerStyle]::Decimal $list.ListItems.Add((New-Object System.Windows.Documents.ListItem($para))) $mainText.Document.Blocks.InsertBefore($para, $list) $mainText.Document.Blocks.Remove($para) } }) #> $chatHistory = $window.FindName('ChatHistory') function Add-ChatBubble { [CmdletBinding()] param ( [string] $Message, [System.Windows.Media.SolidColorBrush] $Background = [System.Windows.Media.Brushes]::LightBlue, [System.Windows.Controls.StackPanel] $ChatPanel, [int] $CornerRadius = 10, [int] $Padding = 8, [int] $Margin = 4, [System.Windows.HorizontalAlignment] $HorizontalAlignment = 'Right', [int] $MaxWidth = 200, [System.Windows.TextWrapping] $TextWrapping = 'Wrap' ) $ChatPanel.AddChild( [System.Windows.Controls.Border] @{ CornerRadius = $CornerRadius Padding = $Padding Margin = $Margin HorizontalAlignment = $HorizontalAlignment Background = $Background MaxWidth = $MaxWidth Child = [System.Windows.Controls.TextBlock] @{ Text = $Message TextWrapping = $TextWrapping } } ) } # Show window $window.ShowDialog() } Export-ModuleMember -Function Start-Cowriter |