Files
PulsarK-main/Pulsar.Server/Controls/Wpf/ClientsListView.xaml
T
i2p 773d05f8f1
Pulsar .NET 9.0 Windows Release / build (push) Waiting to run
Mirror to Codeberg and Gitea / mirror (push) Waiting to run
initial commit
2026-08-27 10:57:58 -06:00

265 lines
15 KiB
XML

<UserControl x:Class="Pulsar.Server.Controls.Wpf.ClientsListView"
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" Background="Transparent">
<UserControl.Resources>
<controlsWpf:FavoriteToBrushConverter x:Key="FavoriteToBrushConverter"
xmlns:controlsWpf="clr-namespace:Pulsar.Server.Controls.Wpf" />
<SolidColorBrush x:Key="RowBackgroundBrush" Color="#1E1E1E" />
<SolidColorBrush x:Key="RowAlternateBackgroundBrush" Color="#232323" />
<SolidColorBrush x:Key="RowHoverBrush" Color="#2B2B2B" />
<SolidColorBrush x:Key="RowSelectedBrush" Color="#3A3A3A" />
<SolidColorBrush x:Key="RowSelectedInactiveBrush" Color="#333333" />
<SolidColorBrush x:Key="RowForegroundBrush" Color="#FFFFFF" />
<SolidColorBrush x:Key="RowSelectedForegroundBrush" Color="#FFFFFF" />
<SolidColorBrush x:Key="HeaderBackgroundBrush" Color="#2A2A2A" />
<SolidColorBrush x:Key="HeaderForegroundBrush" Color="#FFFFFF" />
<SolidColorBrush x:Key="GridBackgroundBrush" Color="#141414" />
<SolidColorBrush x:Key="ScrollBarTrackBrush" Color="#1E1E1E" />
<SolidColorBrush x:Key="ScrollBarThumbBrush" Color="#444444" />
<SolidColorBrush x:Key="ScrollBarThumbHoverBrush" Color="#5A5A5A" />
<SolidColorBrush x:Key="ScrollBarThumbPressedBrush" Color="#737373" />
<Style x:Key="ClientsRowStyle" TargetType="DataGridRow">
<Setter Property="FontSize" Value="12" />
<Setter Property="Background" Value="{DynamicResource RowBackgroundBrush}" />
<Setter Property="Foreground" Value="{DynamicResource RowForegroundBrush}" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<EventSetter Event="PreviewMouseRightButtonDown" Handler="DataGridRow_OnPreviewMouseRightButtonDown" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{DynamicResource RowHoverBrush}" />
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{DynamicResource RowSelectedBrush}" />
<Setter Property="Foreground" Value="{DynamicResource RowSelectedForegroundBrush}" />
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="True" />
<Condition Property="IsKeyboardFocusWithin" Value="False" />
</MultiTrigger.Conditions>
<Setter Property="Background" Value="{DynamicResource RowSelectedInactiveBrush}" />
</MultiTrigger>
</Style.Triggers>
</Style>
<Style x:Key="StatusTextStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="{DynamicResource RowForegroundBrush}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Status}" Value="Connected">
<Setter Property="Foreground" Value="#32CD32" />
</DataTrigger>
</Style.Triggers>
</Style>
<Style x:Key="SlimScrollBarThumbStyle" TargetType="Thumb">
<Setter Property="Background" Value="{DynamicResource ScrollBarThumbBrush}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Thumb">
<Border Background="{TemplateBinding Background}" CornerRadius="4" />
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{DynamicResource ScrollBarThumbHoverBrush}" />
</Trigger>
<Trigger Property="IsDragging" Value="True">
<Setter Property="Background" Value="{DynamicResource ScrollBarThumbPressedBrush}" />
</Trigger>
</Style.Triggers>
</Style>
<ControlTemplate x:Key="SlimVerticalScrollBarTemplate" TargetType="ScrollBar">
<Grid Background="{TemplateBinding Background}" Width="{TemplateBinding Width}">
<Grid.RowDefinitions>
<RowDefinition Height="0" />
<RowDefinition Height="*" />
<RowDefinition Height="0" />
</Grid.RowDefinitions>
<Track x:Name="PART_Track"
Grid.Row="1"
IsDirectionReversed="true"
Orientation="Vertical"
Maximum="{TemplateBinding Maximum}"
Minimum="{TemplateBinding Minimum}"
Value="{TemplateBinding Value}"
ViewportSize="{TemplateBinding ViewportSize}">
<Track.Thumb>
<Thumb Style="{StaticResource SlimScrollBarThumbStyle}" />
</Track.Thumb>
</Track>
</Grid>
</ControlTemplate>
<ControlTemplate x:Key="SlimHorizontalScrollBarTemplate" TargetType="ScrollBar">
<Grid Background="{TemplateBinding Background}" Height="{TemplateBinding Height}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="0" />
</Grid.ColumnDefinitions>
<Track x:Name="PART_Track"
Grid.Column="1"
Orientation="Horizontal"
Maximum="{TemplateBinding Maximum}"
Minimum="{TemplateBinding Minimum}"
Value="{TemplateBinding Value}"
ViewportSize="{TemplateBinding ViewportSize}">
<Track.Thumb>
<Thumb Style="{StaticResource SlimScrollBarThumbStyle}" />
</Track.Thumb>
</Track>
</Grid>
</ControlTemplate>
<Style x:Key="SlimScrollBarStyle" TargetType="ScrollBar">
<Setter Property="Background" Value="{DynamicResource ScrollBarTrackBrush}" />
<Setter Property="Width" Value="10" />
<Setter Property="Template" Value="{StaticResource SlimVerticalScrollBarTemplate}" />
<Style.Triggers>
<Trigger Property="Orientation" Value="Horizontal">
<Setter Property="Height" Value="10" />
<Setter Property="Width" Value="Auto" />
<Setter Property="Template" Value="{StaticResource SlimHorizontalScrollBarTemplate}" />
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="ClientsCellStyle" TargetType="DataGridCell">
<Setter Property="Background" Value="{Binding Background, RelativeSource={RelativeSource AncestorType=DataGridRow}}" />
<Setter Property="Foreground" Value="{DynamicResource RowForegroundBrush}" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Foreground" Value="{DynamicResource RowSelectedForegroundBrush}" />
</Trigger>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="Foreground" Value="{DynamicResource RowSelectedForegroundBrush}" />
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="DataGridColumnHeader">
<Setter Property="Foreground" Value="{DynamicResource HeaderForegroundBrush}" />
<Setter Property="Background" Value="{DynamicResource HeaderBackgroundBrush}" />
</Style>
<Style TargetType="DataGrid">
<Setter Property="RowBackground" Value="{DynamicResource RowBackgroundBrush}" />
<Setter Property="AlternatingRowBackground" Value="{DynamicResource RowAlternateBackgroundBrush}" />
<Setter Property="Foreground" Value="{DynamicResource RowForegroundBrush}" />
</Style>
</UserControl.Resources>
<Grid>
<DataGrid x:Name="ClientsGrid"
AutoGenerateColumns="False"
HeadersVisibility="Column"
IsReadOnly="True"
SelectionMode="Extended"
SelectionUnit="FullRow"
EnableRowVirtualization="True"
EnableColumnVirtualization="True"
GridLinesVisibility="None"
ScrollViewer.CanContentScroll="True"
ItemsSource="{Binding ClientsView}"
SelectionChanged="ClientsGrid_OnSelectionChanged"
MouseDoubleClick="ClientsGrid_OnMouseDoubleClick"
BorderThickness="0"
CanUserResizeRows="False"
AlternationCount="2"
Background="{DynamicResource GridBackgroundBrush}"
RowStyle="{StaticResource ClientsRowStyle}"
CellStyle="{StaticResource ClientsCellStyle}">
<DataGrid.Resources>
<Style TargetType="ScrollBar" BasedOn="{StaticResource SlimScrollBarStyle}" />
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn Header="IP" Width="180">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Image Source="{Binding FlagImage}"
Width="28"
Height="20"
VerticalAlignment="Center"
Stretch="Uniform"
RenderOptions.BitmapScalingMode="Fant">
<Image.Style>
<Style TargetType="Image">
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<Trigger Property="Source" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed" />
</Trigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<TextBlock Text="{Binding Ip}" VerticalAlignment="Center">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Margin" Value="6,0,0,0" />
<Style.Triggers>
<DataTrigger Binding="{Binding FlagImage}" Value="{x:Null}">
<Setter Property="Margin" Value="0" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Binding="{Binding Nickname}" Header="Nickname" Width="120" />
<DataGridTextColumn Binding="{Binding Tag}" Header="Tag" Width="80" />
<DataGridTextColumn Binding="{Binding UserAtPc}" Header="User@PC" Width="150" />
<DataGridTemplateColumn Header="Version" Width="100">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Version}" Foreground="{Binding VersionBrush}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Status" Width="120">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Status}" Style="{StaticResource StatusTextStyle}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Binding="{Binding CurrentWindow}" Header="Current Window" Width="200" />
<DataGridTextColumn Binding="{Binding UserStatus}" Header="User Status" Width="120" />
<DataGridTextColumn Binding="{Binding CountryWithCode}" Header="Country" Width="160" />
<DataGridTextColumn Binding="{Binding OperatingSystem}" Header="OS" Width="180" />
<DataGridTextColumn Binding="{Binding AccountType}" Header="Account Type" Width="120" />
<DataGridTemplateColumn Width="40" Header="★">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ToggleButton HorizontalAlignment="Center"
VerticalAlignment="Center"
Content="★"
FontSize="14"
Background="Transparent"
BorderThickness="0"
Foreground="{Binding IsFavorite, Converter={StaticResource FavoriteToBrushConverter}}"
Command="{Binding DataContext.ToggleFavoriteCommand, RelativeSource={RelativeSource AncestorType=UserControl}}"
CommandParameter="{Binding}"
IsChecked="{Binding IsFavorite, Mode=TwoWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</UserControl>