mirror of
https://github.com/MaxiFan/TunnelX.git
synced 2026-05-18 23:54:50 +03:00
0bc8992813
Co-authored-by: Cursor <cursoragent@cursor.com>
326 lines
19 KiB
XML
326 lines
19 KiB
XML
<UserControl x:Class="AppTunnel.Views.AppsTabView"
|
||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||
|
||
<UserControl.Resources>
|
||
<Style x:Key="CompactToggleSwitch" TargetType="CheckBox">
|
||
<Setter Property="Width" Value="32"/>
|
||
<Setter Property="Height" Value="18"/>
|
||
<Setter Property="Template">
|
||
<Setter.Value>
|
||
<ControlTemplate TargetType="CheckBox">
|
||
<Grid Width="32" Height="18">
|
||
<Border x:Name="track"
|
||
Width="32"
|
||
Height="18"
|
||
CornerRadius="9"
|
||
Background="#555"
|
||
Cursor="Hand"/>
|
||
<Border x:Name="thumb"
|
||
Width="14"
|
||
Height="14"
|
||
CornerRadius="7"
|
||
Background="White"
|
||
HorizontalAlignment="Left"
|
||
Margin="2,0,0,0"
|
||
VerticalAlignment="Center"/>
|
||
</Grid>
|
||
<ControlTemplate.Triggers>
|
||
<Trigger Property="IsChecked" Value="True">
|
||
<Setter TargetName="track" Property="Background" Value="{StaticResource SuccessBrush}"/>
|
||
<Setter TargetName="thumb" Property="HorizontalAlignment" Value="Right"/>
|
||
<Setter TargetName="thumb" Property="Margin" Value="0,0,2,0"/>
|
||
</Trigger>
|
||
</ControlTemplate.Triggers>
|
||
</ControlTemplate>
|
||
</Setter.Value>
|
||
</Setter>
|
||
</Style>
|
||
|
||
<Style x:Key="CompactIconButton" TargetType="Button" BasedOn="{StaticResource SecondaryButton}">
|
||
<Setter Property="MinWidth" Value="24"/>
|
||
<Setter Property="Width" Value="24"/>
|
||
<Setter Property="Height" Value="22"/>
|
||
<Setter Property="Padding" Value="0"/>
|
||
<Setter Property="FontSize" Value="12"/>
|
||
<Setter Property="FontWeight" Value="SemiBold"/>
|
||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||
</Style>
|
||
|
||
<Style x:Key="AppRowCard" TargetType="Border">
|
||
<Setter Property="Background" Value="#0EFFFFFF"/>
|
||
<Setter Property="BorderBrush" Value="#10FFFFFF"/>
|
||
<Setter Property="BorderThickness" Value="1"/>
|
||
<Setter Property="CornerRadius" Value="10"/>
|
||
<Setter Property="Padding" Value="8,6"/>
|
||
<Setter Property="Margin" Value="0,0,0,6"/>
|
||
<Setter Property="MinHeight" Value="50"/>
|
||
<Setter Property="FlowDirection" Value="LeftToRight"/>
|
||
</Style>
|
||
</UserControl.Resources>
|
||
|
||
<Grid Margin="12,8,12,4">
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="*"/>
|
||
<ColumnDefinition Width="12"/>
|
||
<ColumnDefinition Width="*"/>
|
||
</Grid.ColumnDefinitions>
|
||
|
||
<!-- LEFT: Selected Apps (Tunnel List) -->
|
||
<Border Grid.Column="0" Style="{StaticResource CardPanel}" Margin="0" BorderBrush="#2233C481">
|
||
<DockPanel>
|
||
<Grid DockPanel.Dock="Top" Margin="0,0,0,8">
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="*"/>
|
||
<ColumnDefinition Width="10"/>
|
||
<ColumnDefinition Width="Auto"/>
|
||
</Grid.ColumnDefinitions>
|
||
<StackPanel Grid.Column="0">
|
||
<TextBlock Text="✅ برنامههای داخل تونل" FontSize="14" FontWeight="SemiBold"
|
||
Foreground="{StaticResource TextPrimaryBrush}"
|
||
TextTrimming="CharacterEllipsis"/>
|
||
<TextBlock Text="برنامههای فعالشده از مسیر تونل عبور میکنند"
|
||
Foreground="{StaticResource TextSecondaryBrush}"
|
||
FontSize="10" Margin="0,2,0,0"
|
||
TextTrimming="CharacterEllipsis"/>
|
||
</StackPanel>
|
||
<Button Grid.Column="2" Style="{StaticResource SecondaryButton}"
|
||
Content="افزودن دستی"
|
||
ToolTip="افزودن دستی فایل exe"
|
||
Command="{Binding AddAppCommand}"
|
||
FontSize="10" Padding="10,6"
|
||
VerticalAlignment="Center"/>
|
||
</Grid>
|
||
|
||
<!-- Tunnel Search -->
|
||
<TextBox x:Name="TunnelSearchBox"
|
||
Style="{StaticResource ModernTextBox}"
|
||
Text="{Binding TunnelSearchText, UpdateSourceTrigger=PropertyChanged}"
|
||
Tag="فیلتر برنامههای تونل..."
|
||
DockPanel.Dock="Top"
|
||
Margin="0,0,0,7"
|
||
FontSize="12" Padding="9,6"
|
||
PreviewMouseDoubleClick="OnSearchBoxPreviewMouseDoubleClick"/>
|
||
|
||
<!-- Tunnel Apps List -->
|
||
<ListView ItemsSource="{Binding FilteredTunnelApps}"
|
||
SelectedItem="{Binding SelectedApp}"
|
||
Background="Transparent"
|
||
BorderThickness="0"
|
||
FlowDirection="{Binding AppFlowDirection}"
|
||
Cursor="Arrow"
|
||
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
|
||
<ListView.ItemTemplate>
|
||
<DataTemplate>
|
||
<Border Style="{StaticResource AppRowCard}" Cursor="Arrow">
|
||
<Grid>
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="Auto"/>
|
||
<ColumnDefinition Width="8"/>
|
||
<ColumnDefinition Width="*"/>
|
||
<ColumnDefinition Width="8"/>
|
||
<ColumnDefinition Width="Auto"/>
|
||
</Grid.ColumnDefinitions>
|
||
|
||
<!-- App Icon -->
|
||
<Image Grid.Column="0" Source="{Binding Icon}"
|
||
Width="28" Height="28"
|
||
VerticalAlignment="Center"/>
|
||
|
||
<!-- App Name & Exe -->
|
||
<StackPanel Grid.Column="2" VerticalAlignment="Center">
|
||
<TextBlock Text="{Binding DisplayName}"
|
||
Foreground="{StaticResource TextPrimaryBrush}"
|
||
FontSize="10.8"
|
||
FontWeight="Normal"
|
||
TextOptions.TextFormattingMode="Display"
|
||
TextOptions.TextRenderingMode="ClearType"
|
||
TextOptions.TextHintingMode="Fixed"
|
||
TextWrapping="Wrap"
|
||
FlowDirection="LeftToRight"
|
||
TextAlignment="Left"/>
|
||
<TextBlock Text="{Binding ExecutableName}"
|
||
Foreground="{StaticResource TextSecondaryBrush}"
|
||
FontSize="8.5"
|
||
Margin="0,2,0,0"
|
||
FlowDirection="LeftToRight"
|
||
TextAlignment="Left"/>
|
||
</StackPanel>
|
||
|
||
<!-- Compact actions -->
|
||
<Grid Grid.Column="4"
|
||
Width="76"
|
||
VerticalAlignment="Center"
|
||
FlowDirection="LeftToRight">
|
||
<Grid.RowDefinitions>
|
||
<RowDefinition Height="Auto"/>
|
||
<RowDefinition Height="Auto"/>
|
||
</Grid.RowDefinitions>
|
||
<StackPanel Grid.Row="0"
|
||
Orientation="Horizontal"
|
||
HorizontalAlignment="Right">
|
||
<CheckBox Style="{StaticResource CompactToggleSwitch}"
|
||
IsChecked="{Binding IsEnabled, Mode=OneWay}"
|
||
Command="{Binding DataContext.ToggleAppCommand,
|
||
RelativeSource={RelativeSource AncestorType=UserControl}}"
|
||
CommandParameter="{Binding}"
|
||
VerticalAlignment="Center"
|
||
Margin="0,0,4,0"/>
|
||
|
||
<Button Style="{StaticResource CompactIconButton}"
|
||
Content="×"
|
||
ToolTip="حذف"
|
||
Foreground="#FF8A80"
|
||
Command="{Binding DataContext.RemoveAppCommand,
|
||
RelativeSource={RelativeSource AncestorType=UserControl}}"
|
||
CommandParameter="{Binding}"/>
|
||
</StackPanel>
|
||
<Border Grid.Row="1"
|
||
Background="#15121212"
|
||
CornerRadius="6"
|
||
Padding="4,1"
|
||
Margin="0,4,0,0"
|
||
HorizontalAlignment="Right">
|
||
<TextBlock Text="{Binding TrafficDisplay}"
|
||
Foreground="{StaticResource AccentBrush}"
|
||
FontSize="8.5"
|
||
FlowDirection="LeftToRight"/>
|
||
</Border>
|
||
</Grid>
|
||
</Grid>
|
||
</Border>
|
||
</DataTemplate>
|
||
</ListView.ItemTemplate>
|
||
<ListView.ItemContainerStyle>
|
||
<Style TargetType="ListViewItem">
|
||
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
|
||
<Setter Property="Padding" Value="0"/>
|
||
<Setter Property="Margin" Value="0"/>
|
||
<Setter Property="Template">
|
||
<Setter.Value>
|
||
<ControlTemplate TargetType="ListViewItem">
|
||
<ContentPresenter/>
|
||
</ControlTemplate>
|
||
</Setter.Value>
|
||
</Setter>
|
||
</Style>
|
||
</ListView.ItemContainerStyle>
|
||
</ListView>
|
||
</DockPanel>
|
||
</Border>
|
||
|
||
<!-- RIGHT: Available Apps (Discovery) -->
|
||
<Border Grid.Column="2" Style="{StaticResource CardPanel}" Margin="0" BorderBrush="#22E8803A">
|
||
<DockPanel>
|
||
<Grid DockPanel.Dock="Top" Margin="0,0,0,8">
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="*"/>
|
||
<ColumnDefinition Width="10"/>
|
||
<ColumnDefinition Width="Auto"/>
|
||
</Grid.ColumnDefinitions>
|
||
<StackPanel Grid.Column="0">
|
||
<TextBlock Text="🔍 برنامههای نصبشده" FontSize="14" FontWeight="SemiBold"
|
||
Foreground="{StaticResource TextPrimaryBrush}"
|
||
TextTrimming="CharacterEllipsis"/>
|
||
<TextBlock Text="روی برنامه کلیک کنید تا به لیست تونل اضافه شود"
|
||
Foreground="{StaticResource TextSecondaryBrush}"
|
||
FontSize="10" Margin="0,2,0,0"
|
||
TextTrimming="CharacterEllipsis"/>
|
||
</StackPanel>
|
||
<Button Grid.Column="2" Style="{StaticResource SecondaryButton}"
|
||
Content="بروزرسانی"
|
||
ToolTip="بارگذاری مجدد لیست برنامهها"
|
||
Command="{Binding RefreshAppsCommand}"
|
||
FontSize="10" Padding="10,6"
|
||
VerticalAlignment="Center"/>
|
||
</Grid>
|
||
<TextBox x:Name="AvailableSearchBox"
|
||
Style="{StaticResource ModernTextBox}"
|
||
Text="{Binding SearchText, UpdateSourceTrigger=PropertyChanged}"
|
||
Tag="جستجوی برنامه..."
|
||
DockPanel.Dock="Top"
|
||
Margin="0,0,0,7"
|
||
FontSize="12"
|
||
Padding="9,6"
|
||
PreviewMouseDoubleClick="OnSearchBoxPreviewMouseDoubleClick"/>
|
||
|
||
<!-- Available Apps List -->
|
||
<ListView ItemsSource="{Binding FilteredAvailableApps}"
|
||
Background="Transparent"
|
||
BorderThickness="0"
|
||
FlowDirection="{Binding AppFlowDirection}"
|
||
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
|
||
<ListView.ItemTemplate>
|
||
<DataTemplate>
|
||
<Border x:Name="itemBorder"
|
||
Style="{StaticResource AppRowCard}"
|
||
Cursor="Hand"
|
||
MouseLeftButtonUp="OnAvailableAppClick">
|
||
<Grid>
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="Auto"/>
|
||
<ColumnDefinition Width="8"/>
|
||
<ColumnDefinition Width="*"/>
|
||
<ColumnDefinition Width="8"/>
|
||
<ColumnDefinition Width="Auto"/>
|
||
</Grid.ColumnDefinitions>
|
||
|
||
<Image Grid.Column="0" Source="{Binding Icon}"
|
||
Width="26" Height="26"
|
||
VerticalAlignment="Center"/>
|
||
|
||
<StackPanel Grid.Column="2" VerticalAlignment="Center">
|
||
<TextBlock Text="{Binding DisplayName}"
|
||
Foreground="{StaticResource TextPrimaryBrush}"
|
||
FontSize="10.8"
|
||
FontWeight="Normal"
|
||
TextOptions.TextFormattingMode="Display"
|
||
TextOptions.TextRenderingMode="ClearType"
|
||
TextOptions.TextHintingMode="Fixed"
|
||
TextWrapping="Wrap"
|
||
FlowDirection="LeftToRight"
|
||
TextAlignment="Left"/>
|
||
<TextBlock Text="{Binding ExecutableName}"
|
||
Foreground="{StaticResource TextSecondaryBrush}"
|
||
FontSize="8.5"
|
||
Margin="0,2,0,0"
|
||
FlowDirection="LeftToRight"
|
||
TextAlignment="Left"/>
|
||
</StackPanel>
|
||
|
||
<Button Grid.Column="4"
|
||
x:Name="addBadge"
|
||
Style="{StaticResource CompactIconButton}"
|
||
Content="+"
|
||
ToolTip="افزودن"
|
||
Foreground="{StaticResource PrimaryBrush}"
|
||
Click="OnAvailableAppAddClick"/>
|
||
</Grid>
|
||
</Border>
|
||
<DataTemplate.Triggers>
|
||
<Trigger SourceName="itemBorder" Property="IsMouseOver" Value="True">
|
||
<Setter TargetName="itemBorder" Property="Background" Value="#18FFFFFF"/>
|
||
</Trigger>
|
||
</DataTemplate.Triggers>
|
||
</DataTemplate>
|
||
</ListView.ItemTemplate>
|
||
<ListView.ItemContainerStyle>
|
||
<Style TargetType="ListViewItem">
|
||
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
|
||
<Setter Property="Padding" Value="0"/>
|
||
<Setter Property="Margin" Value="0"/>
|
||
<Setter Property="Template">
|
||
<Setter.Value>
|
||
<ControlTemplate TargetType="ListViewItem">
|
||
<ContentPresenter/>
|
||
</ControlTemplate>
|
||
</Setter.Value>
|
||
</Setter>
|
||
</Style>
|
||
</ListView.ItemContainerStyle>
|
||
</ListView>
|
||
</DockPanel>
|
||
</Border>
|
||
</Grid>
|
||
</UserControl>
|