217 lines
9.0 KiB
XML
217 lines
9.0 KiB
XML
<UserControl x:Class="AmebaPro3_ControlPanel.Views.Controls.ConsolePanel"
|
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
mc:Ignorable="d"
|
|
d:DesignHeight="450"
|
|
d:DesignWidth="800">
|
|
<Border Style="{StaticResource CardStyle}">
|
|
<Grid>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto"/> <!-- Header with custom controls -->
|
|
<RowDefinition Height="*"/> <!-- Log -->
|
|
<RowDefinition Height="Auto"/> <!-- GridSplitter -->
|
|
<RowDefinition Height="*" MinHeight="140"/> <!-- History -->
|
|
<RowDefinition Height="Auto"/> <!-- Command buttons slot -->
|
|
<RowDefinition Height="Auto"/> <!-- Actions row -->
|
|
<RowDefinition Height="Auto"/> <!-- Input -->
|
|
</Grid.RowDefinitions>
|
|
|
|
<!-- Header -->
|
|
<Grid Grid.Row="0" Margin="0,0,0,12">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*"/>
|
|
<ColumnDefinition Width="Auto"/>
|
|
</Grid.ColumnDefinitions>
|
|
|
|
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
|
|
<Ellipse Width="10"
|
|
Height="10"
|
|
VerticalAlignment="Center"
|
|
Margin="0,0,10,0">
|
|
<Ellipse.Style>
|
|
<Style TargetType="Ellipse">
|
|
<Setter Property="Fill" Value="{StaticResource DangerBrush}"/>
|
|
<Style.Triggers>
|
|
<DataTrigger Binding="{Binding IsConnected}" Value="True">
|
|
<Setter Property="Fill" Value="{StaticResource SuccessBrush}"/>
|
|
</DataTrigger>
|
|
</Style.Triggers>
|
|
</Style>
|
|
</Ellipse.Style>
|
|
</Ellipse>
|
|
<StackPanel>
|
|
<TextBlock Text="{Binding Title}"
|
|
FontSize="16"
|
|
FontWeight="SemiBold"/>
|
|
<TextBlock FontSize="12">
|
|
<TextBlock.Style>
|
|
<Style TargetType="TextBlock" BasedOn="{StaticResource CaptionTextStyle}">
|
|
<Setter Property="Text" Value="Disconnected"/>
|
|
<Style.Triggers>
|
|
<DataTrigger Binding="{Binding IsConnected}" Value="True">
|
|
<Setter Property="Text" Value="Connected"/>
|
|
<Setter Property="Foreground" Value="{StaticResource SuccessBrush}"/>
|
|
</DataTrigger>
|
|
</Style.Triggers>
|
|
</Style>
|
|
</TextBlock.Style>
|
|
</TextBlock>
|
|
</StackPanel>
|
|
</StackPanel>
|
|
|
|
<ContentPresenter Grid.Column="1"
|
|
VerticalAlignment="Center"
|
|
Content="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=HeaderContent}">
|
|
<ContentPresenter.Style>
|
|
<Style TargetType="ContentPresenter">
|
|
<Setter Property="Visibility" Value="Visible"/>
|
|
<Style.Triggers>
|
|
<DataTrigger Binding="{Binding Content, RelativeSource={RelativeSource Self}}" Value="{x:Null}">
|
|
<Setter Property="Visibility" Value="Collapsed"/>
|
|
</DataTrigger>
|
|
</Style.Triggers>
|
|
</Style>
|
|
</ContentPresenter.Style>
|
|
</ContentPresenter>
|
|
|
|
</Grid>
|
|
|
|
<!-- Log viewer -->
|
|
<Border Grid.Row="1"
|
|
Background="{StaticResource SurfaceAltBrush}"
|
|
BorderBrush="{StaticResource SubtleBorderBrush}"
|
|
BorderThickness="1"
|
|
CornerRadius="10">
|
|
<ListBox ItemsSource="{Binding LogLines}"
|
|
x:Name="LogListBox"
|
|
SelectionMode="Extended"
|
|
PreviewMouseWheel="LogListBox_OnPreviewMouseWheel"
|
|
PreviewMouseDown="LogListBox_OnPreviewMouseDown"
|
|
PreviewKeyDown="LogListBox_OnPreviewKeyDown"
|
|
KeyDown="LogListBox_OnKeyDown"
|
|
VirtualizingPanel.IsVirtualizing="True"
|
|
VirtualizingPanel.VirtualizationMode="Recycling"
|
|
ScrollViewer.HorizontalScrollBarVisibility="Auto"
|
|
ScrollViewer.VerticalScrollBarVisibility="Auto"
|
|
ScrollViewer.CanContentScroll="True">
|
|
<ListBox.ItemsPanel>
|
|
<ItemsPanelTemplate>
|
|
<VirtualizingStackPanel/>
|
|
</ItemsPanelTemplate>
|
|
</ListBox.ItemsPanel>
|
|
<ListBox.ItemTemplate>
|
|
<DataTemplate>
|
|
<TextBlock Text="{Binding}"
|
|
FontFamily="Cascadia Code, Consolas, Segoe UI Mono"
|
|
FontSize="12"
|
|
TextWrapping="NoWrap"/>
|
|
</DataTemplate>
|
|
</ListBox.ItemTemplate>
|
|
</ListBox>
|
|
</Border>
|
|
|
|
<!-- GridSplitter for resizing history -->
|
|
<GridSplitter Grid.Row="2"
|
|
Height="4"
|
|
HorizontalAlignment="Stretch"
|
|
VerticalAlignment="Top"
|
|
Background="{StaticResource SubtleBorderBrush}"
|
|
ResizeDirection="Rows"
|
|
ResizeBehavior="PreviousAndNext"
|
|
Margin="0,10,0,0"
|
|
ShowsPreview="True"/>
|
|
|
|
<!-- Command history -->
|
|
<Border Grid.Row="3"
|
|
Margin="0,14,0,0"
|
|
Background="{StaticResource SurfaceAltBrush}"
|
|
BorderBrush="{StaticResource SubtleBorderBrush}"
|
|
BorderThickness="1"
|
|
CornerRadius="10">
|
|
<ListBox x:Name="HistoryListBox"
|
|
ItemsSource="{Binding History}"
|
|
SelectionMode="Extended"
|
|
SelectionChanged="HistoryListBox_OnSelectionChanged"
|
|
MouseDoubleClick="HistoryListBox_OnMouseDoubleClick"
|
|
PreviewMouseWheel="HistoryListBox_OnPreviewMouseWheel"
|
|
PreviewMouseDown="HistoryListBox_OnPreviewMouseDown"
|
|
PreviewKeyDown="HistoryListBox_OnPreviewKeyDown"
|
|
KeyDown="HistoryListBox_OnKeyDown"
|
|
VirtualizingPanel.IsVirtualizing="True"
|
|
VirtualizingPanel.VirtualizationMode="Recycling"
|
|
ScrollViewer.VerticalScrollBarVisibility="Auto"
|
|
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
|
|
ScrollViewer.CanContentScroll="True">
|
|
<ListBox.ItemsPanel>
|
|
<ItemsPanelTemplate>
|
|
<VirtualizingStackPanel/>
|
|
</ItemsPanelTemplate>
|
|
</ListBox.ItemsPanel>
|
|
<ListBox.ItemTemplate>
|
|
<DataTemplate>
|
|
<TextBlock Text="{Binding}" FontSize="12"/>
|
|
</DataTemplate>
|
|
</ListBox.ItemTemplate>
|
|
</ListBox>
|
|
</Border>
|
|
|
|
<!-- Optional command buttons slot -->
|
|
<ContentPresenter Grid.Row="4"
|
|
Margin="0,10,0,0"
|
|
Content="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=CommandButtonsContent}">
|
|
<ContentPresenter.Style>
|
|
<Style TargetType="ContentPresenter">
|
|
<Setter Property="Visibility" Value="Visible"/>
|
|
<Style.Triggers>
|
|
<DataTrigger Binding="{Binding Content, RelativeSource={RelativeSource Self}}" Value="{x:Null}">
|
|
<Setter Property="Visibility" Value="Collapsed"/>
|
|
</DataTrigger>
|
|
</Style.Triggers>
|
|
</Style>
|
|
</ContentPresenter.Style>
|
|
</ContentPresenter>
|
|
|
|
<!-- Actions row -->
|
|
<StackPanel Grid.Row="5"
|
|
Orientation="Horizontal"
|
|
HorizontalAlignment="Right"
|
|
Margin="0,10,0,0">
|
|
<Button Content="Clear"
|
|
Command="{Binding ClearLog}"
|
|
Style="{StaticResource GhostButtonStyle}"
|
|
Width="120"
|
|
Margin="0,0,8,0"/>
|
|
<Button Content="Save"
|
|
Command="{Binding SaveLog}"
|
|
Style="{StaticResource GhostButtonStyle}"
|
|
Width="120"
|
|
Margin="0,0,8,0"/>
|
|
<Button Content="Load Commands"
|
|
Command="{Binding LoadCommandFileCommand}"
|
|
Style="{StaticResource GhostButtonStyle}"
|
|
Width="140"/>
|
|
</StackPanel>
|
|
|
|
<!-- Input row -->
|
|
<Grid Grid.Row="6" Margin="0,10,0,0">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*"/>
|
|
<ColumnDefinition Width="8"/>
|
|
<ColumnDefinition Width="Auto"/>
|
|
</Grid.ColumnDefinitions>
|
|
<TextBox x:Name="CommandInput"
|
|
Grid.Column="0"
|
|
Text="{Binding CurrentCommand, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
|
KeyDown="CommandInput_OnKeyDown"/>
|
|
<Button Grid.Column="2"
|
|
Content="Send"
|
|
Command="{Binding SendCommand}"
|
|
Style="{StaticResource PrimaryButtonStyle}"
|
|
MinWidth="96"/>
|
|
</Grid>
|
|
</Grid>
|
|
</Border>
|
|
</UserControl>
|