288 lines
21 KiB
XML
288 lines
21 KiB
XML
<Window x:Class="FoxBrowser.MainWindow"
|
||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||
Title="FoxBrowser" Width="1180" Height="760" MinWidth="760" MinHeight="480"
|
||
Background="{StaticResource WindowBg}" Foreground="{StaticResource TextPrimary}"
|
||
Closing="Window_Closing" StateChanged="Window_StateChanged"
|
||
UseLayoutRounding="True" SnapsToDevicePixels="True"
|
||
TextOptions.TextFormattingMode="Display"
|
||
RenderOptions.ClearTypeHint="Enabled">
|
||
<Window.Resources>
|
||
<QuadraticEase x:Key="TabEase" EasingMode="EaseOut" />
|
||
<DataTemplate x:Key="TabTemplate">
|
||
<Grid MinWidth="126" MaxWidth="250" Height="34">
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="*" />
|
||
<ColumnDefinition Width="Auto" />
|
||
</Grid.ColumnDefinitions>
|
||
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
|
||
<Ellipse Width="6" Height="6" Fill="{StaticResource TextMuted}" Margin="0,0,8,0" />
|
||
<TextBlock Text="{Binding DisplayTitle}"
|
||
TextTrimming="CharacterEllipsis"
|
||
VerticalAlignment="Center"
|
||
FontSize="12"
|
||
FontWeight="SemiBold"
|
||
Foreground="{StaticResource TextSecondary}" />
|
||
</StackPanel>
|
||
<Button Grid.Column="1"
|
||
Content="×"
|
||
Tag="{Binding}"
|
||
Click="CloseTab_Click"
|
||
ToolTip="Закрити вкладку"
|
||
Width="22" Height="22"
|
||
Padding="0"
|
||
Margin="8,0,0,0"
|
||
FontSize="14"
|
||
FontWeight="Bold"
|
||
Background="Transparent"
|
||
BorderBrush="Transparent"
|
||
Foreground="{StaticResource TextMuted}"
|
||
Opacity="0">
|
||
<Button.Style>
|
||
<Style TargetType="Button">
|
||
<Setter Property="Opacity" Value="0" />
|
||
<Setter Property="IsHitTestVisible" Value="False" />
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=TabItem}, Path=IsMouseOver}" Value="True">
|
||
<Setter Property="IsHitTestVisible" Value="True" />
|
||
<DataTrigger.EnterActions>
|
||
<BeginStoryboard>
|
||
<Storyboard>
|
||
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.12" EasingFunction="{StaticResource TabEase}" />
|
||
</Storyboard>
|
||
</BeginStoryboard>
|
||
</DataTrigger.EnterActions>
|
||
<DataTrigger.ExitActions>
|
||
<BeginStoryboard>
|
||
<Storyboard>
|
||
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="0" Duration="0:0:0.12" EasingFunction="{StaticResource TabEase}" />
|
||
</Storyboard>
|
||
</BeginStoryboard>
|
||
</DataTrigger.ExitActions>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</Button.Style>
|
||
<Button.Template>
|
||
<ControlTemplate TargetType="Button">
|
||
<Border x:Name="CloseBorder" Background="{TemplateBinding Background}" CornerRadius="5">
|
||
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,-1,0,0" />
|
||
</Border>
|
||
<ControlTemplate.Triggers>
|
||
<Trigger Property="IsMouseOver" Value="True">
|
||
<Setter TargetName="CloseBorder" Property="Background" Value="{StaticResource DangerBg}" />
|
||
<Setter Property="Foreground" Value="{StaticResource DangerText}" />
|
||
</Trigger>
|
||
</ControlTemplate.Triggers>
|
||
</ControlTemplate>
|
||
</Button.Template>
|
||
</Button>
|
||
</Grid>
|
||
</DataTemplate>
|
||
|
||
<Style TargetType="TabItem">
|
||
<Setter Property="Background" Value="#191F28" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource BorderDark}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextSecondary}" />
|
||
<Setter Property="Margin" Value="0" />
|
||
<Setter Property="Padding" Value="12,0" />
|
||
<Setter Property="Cursor" Value="Hand" />
|
||
<Setter Property="Template">
|
||
<Setter.Value>
|
||
<ControlTemplate TargetType="TabItem">
|
||
<Border x:Name="TabBorder"
|
||
Background="#191F28"
|
||
BorderBrush="#2B3441"
|
||
BorderThickness="{TemplateBinding BorderThickness}"
|
||
CornerRadius="8,8,0,0"
|
||
Padding="{TemplateBinding Padding}"
|
||
Margin="0,0,6,2"
|
||
RenderTransformOrigin="0.5,0.5">
|
||
<Border.RenderTransform>
|
||
<ScaleTransform ScaleX="1" ScaleY="1" />
|
||
</Border.RenderTransform>
|
||
<ContentPresenter ContentSource="Header" HorizontalAlignment="Center" VerticalAlignment="Center" />
|
||
</Border>
|
||
<ControlTemplate.Triggers>
|
||
<Trigger Property="IsMouseOver" Value="True">
|
||
<Trigger.EnterActions>
|
||
<BeginStoryboard>
|
||
<Storyboard>
|
||
<ColorAnimation Storyboard.TargetName="TabBorder" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" To="#222A35" Duration="0:0:0.13" EasingFunction="{StaticResource TabEase}" />
|
||
<ColorAnimation Storyboard.TargetName="TabBorder" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" To="#46566C" Duration="0:0:0.13" EasingFunction="{StaticResource TabEase}" />
|
||
</Storyboard>
|
||
</BeginStoryboard>
|
||
</Trigger.EnterActions>
|
||
<Trigger.ExitActions>
|
||
<BeginStoryboard>
|
||
<Storyboard>
|
||
<ColorAnimation Storyboard.TargetName="TabBorder" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" To="#191F28" Duration="0:0:0.13" EasingFunction="{StaticResource TabEase}" />
|
||
<ColorAnimation Storyboard.TargetName="TabBorder" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" To="#2B3441" Duration="0:0:0.13" EasingFunction="{StaticResource TabEase}" />
|
||
</Storyboard>
|
||
</BeginStoryboard>
|
||
</Trigger.ExitActions>
|
||
</Trigger>
|
||
<Trigger Property="IsSelected" Value="True">
|
||
<Setter TargetName="TabBorder" Property="Effect">
|
||
<Setter.Value>
|
||
<DropShadowEffect BlurRadius="7" ShadowDepth="1" Opacity="0.28" Color="#000000" />
|
||
</Setter.Value>
|
||
</Setter>
|
||
<Trigger.EnterActions>
|
||
<BeginStoryboard>
|
||
<Storyboard>
|
||
<ColorAnimation Storyboard.TargetName="TabBorder" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" To="#26354B" Duration="0:0:0.14" EasingFunction="{StaticResource TabEase}" />
|
||
<ColorAnimation Storyboard.TargetName="TabBorder" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" To="#78AFFF" Duration="0:0:0.14" EasingFunction="{StaticResource TabEase}" />
|
||
<DoubleAnimation Storyboard.TargetName="TabBorder" Storyboard.TargetProperty="(UIElement.Opacity)" To="1" Duration="0:0:0.14" EasingFunction="{StaticResource TabEase}" />
|
||
</Storyboard>
|
||
</BeginStoryboard>
|
||
</Trigger.EnterActions>
|
||
<Trigger.ExitActions>
|
||
<BeginStoryboard>
|
||
<Storyboard>
|
||
<ColorAnimation Storyboard.TargetName="TabBorder" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" To="#191F28" Duration="0:0:0.14" EasingFunction="{StaticResource TabEase}" />
|
||
<ColorAnimation Storyboard.TargetName="TabBorder" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" To="#2B3441" Duration="0:0:0.14" EasingFunction="{StaticResource TabEase}" />
|
||
</Storyboard>
|
||
</BeginStoryboard>
|
||
</Trigger.ExitActions>
|
||
</Trigger>
|
||
</ControlTemplate.Triggers>
|
||
</ControlTemplate>
|
||
</Setter.Value>
|
||
</Setter>
|
||
<Style.Triggers>
|
||
<Trigger Property="IsSelected" Value="True">
|
||
<Setter Property="Foreground" Value="{StaticResource TextPrimary}" />
|
||
<Setter Property="FontWeight" Value="SemiBold" />
|
||
</Trigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</Window.Resources>
|
||
|
||
<DockPanel>
|
||
<StackPanel x:Name="TopPanel" DockPanel.Dock="Top">
|
||
<!-- Tab strip -->
|
||
<Border Background="{StaticResource HeaderBg}" Padding="12,10,12,8" BorderBrush="{StaticResource BorderDark}" BorderThickness="0,0,0,1">
|
||
<DockPanel>
|
||
<StackPanel DockPanel.Dock="Left" Orientation="Horizontal" VerticalAlignment="Center" Margin="2,0,18,0">
|
||
<Border Width="32" Height="32" CornerRadius="9" Background="{StaticResource AurBlueSoft}">
|
||
<TextBlock Text="🦊" FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center" />
|
||
</Border>
|
||
</StackPanel>
|
||
<Button DockPanel.Dock="Right" Content="+" ToolTip="Нова вкладка" Click="NewTab_Click" Style="{StaticResource IconButton}" Margin="8,0,0,0" />
|
||
<TabControl x:Name="TabStrip"
|
||
ItemsSource="{Binding Tabs}"
|
||
ItemTemplate="{StaticResource TabTemplate}"
|
||
SelectionChanged="TabStrip_SelectionChanged"
|
||
AllowDrop="True"
|
||
PreviewMouseLeftButtonDown="TabStrip_PreviewMouseLeftButtonDown"
|
||
PreviewMouseMove="TabStrip_PreviewMouseMove"
|
||
DragOver="TabStrip_DragOver"
|
||
Drop="TabStrip_Drop"
|
||
Background="Transparent"
|
||
BorderThickness="0"
|
||
Padding="0"
|
||
Margin="0,0,0,0">
|
||
<TabControl.ContentTemplate>
|
||
<DataTemplate><Grid Visibility="Collapsed" /></DataTemplate>
|
||
</TabControl.ContentTemplate>
|
||
</TabControl>
|
||
</DockPanel>
|
||
</Border>
|
||
|
||
<!-- Browser controls -->
|
||
<Border Background="{StaticResource HeaderBgElevated}" Padding="12,9" BorderBrush="{StaticResource BorderDark}" BorderThickness="0,0,0,1">
|
||
<DockPanel LastChildFill="True">
|
||
<StackPanel DockPanel.Dock="Left" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,0,10,0">
|
||
<Button Content="←" ToolTip="Назад" Click="Back_Click" Style="{StaticResource IconButton}" />
|
||
<Button Content="→" ToolTip="Вперед" Click="Forward_Click" Style="{StaticResource IconButton}" />
|
||
<Button Content="⟳" ToolTip="Оновити" Click="Reload_Click" Style="{StaticResource IconButton}" Margin="4,0,0,0" />
|
||
</StackPanel>
|
||
|
||
<StackPanel DockPanel.Dock="Right" Orientation="Horizontal" VerticalAlignment="Center" Margin="10,0,0,0">
|
||
<ItemsControl x:Name="PinnedExtensionStrip" Margin="0,0,5,0">
|
||
<ItemsControl.ItemsPanel>
|
||
<ItemsPanelTemplate><StackPanel Orientation="Horizontal" /></ItemsPanelTemplate>
|
||
</ItemsControl.ItemsPanel>
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate>
|
||
<Button Tag="{Binding}" Click="PinnedExtension_Click" Width="32" Height="32" Padding="0" Margin="0,0,4,0" ToolTip="{Binding Name}" Style="{StaticResource IconButton}">
|
||
<Grid>
|
||
<Image Source="{Binding IconPath}" Width="18" Height="18" Stretch="Uniform" />
|
||
<TextBlock Text="{Binding Glyph}"
|
||
FontWeight="Bold"
|
||
HorizontalAlignment="Center"
|
||
VerticalAlignment="Center">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Visibility" Value="Visible" />
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding HasIcon}" Value="True">
|
||
<Setter Property="Visibility" Value="Collapsed" />
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
</Grid>
|
||
</Button>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
<Button x:Name="DarkModeButton" Content="◐" ToolTip="ЛКМ: увімкнути Dark Mode · ПКМ: налаштування" Click="DarkMode_Click" PreviewMouseRightButtonUp="DarkMode_RightClick" Height="32" Width="36" Padding="0" Margin="0,0,4,0" />
|
||
<Popup x:Name="DarkModePopup" PlacementTarget="{Binding ElementName=DarkModeButton}" Placement="Bottom" StaysOpen="False" AllowsTransparency="True" PopupAnimation="Fade" Opened="DarkModeMenu_Opened">
|
||
<Border Background="#171B22" BorderBrush="#33404E" BorderThickness="1" CornerRadius="8" Padding="14" Width="250">
|
||
<StackPanel>
|
||
<TextBlock Text="Dark Mode" Foreground="{StaticResource TextPrimary}" FontSize="14" FontWeight="SemiBold" Margin="0,0,0,8" />
|
||
<TextBlock Text="Яскравість" Foreground="{StaticResource TextSecondary}" FontSize="11" />
|
||
<Slider x:Name="DarkBrightnessSlider" Minimum="0.45" Maximum="1.00" Value="0.72" TickFrequency="0.05" IsSnapToTickEnabled="False" ValueChanged="DarkModeParameter_Changed" Margin="0,2,0,6" />
|
||
<TextBlock Text="Контраст" Foreground="{StaticResource TextSecondary}" FontSize="11" />
|
||
<Slider x:Name="DarkContrastSlider" Minimum="0.80" Maximum="1.40" Value="1.08" TickFrequency="0.05" IsSnapToTickEnabled="False" ValueChanged="DarkModeParameter_Changed" Margin="0,2,0,6" />
|
||
<TextBlock Text="Насиченість" Foreground="{StaticResource TextSecondary}" FontSize="11" />
|
||
<Slider x:Name="DarkSaturationSlider" Minimum="0.00" Maximum="1.20" Value="0.88" TickFrequency="0.05" IsSnapToTickEnabled="False" ValueChanged="DarkModeParameter_Changed" Margin="0,2,0,8" />
|
||
<Button Content="Скинути параметри" Style="{StaticResource FoxMenuButton}" Click="ResetDarkMode_Click" />
|
||
</StackPanel>
|
||
</Border>
|
||
</Popup>
|
||
<Button x:Name="ElementPickerButton" Content="✂" ToolTip="ЛКМ: вибрати елемент · ПКМ: керування вирізаними елементами" Click="ElementPicker_Click" PreviewMouseRightButtonUp="ElementPicker_RightClick" Height="32" Width="36" Padding="0" Margin="0,0,4,0" />
|
||
<Popup x:Name="BlockedElementsPopup" PlacementTarget="{Binding ElementName=ElementPickerButton}" Placement="Bottom" StaysOpen="False" AllowsTransparency="True" PopupAnimation="Fade">
|
||
<Border Background="#171B22" BorderBrush="#33404E" BorderThickness="1" CornerRadius="8" Padding="14" Width="260">
|
||
<StackPanel>
|
||
<TextBlock Text="Вирізані елементи" Foreground="{StaticResource TextPrimary}" FontWeight="SemiBold" Margin="0,0,0,8" />
|
||
<Button Content="Керувати правилами сайту…" Style="{StaticResource FoxMenuButton}" Click="ManageBlockedElements_Click" />
|
||
<Button Content="Очистити правила цього сайту" Style="{StaticResource FoxMenuButton}" Click="ClearBlockedSite_Click" />
|
||
<Button Content="Очистити всі правила" Style="{StaticResource FoxMenuButton}" Click="ClearAllBlocked_Click" />
|
||
</StackPanel>
|
||
</Border>
|
||
</Popup>
|
||
<Button Content="♫" ToolTip="Режим лише аудіо" Click="AudioOnly_Click" Height="32" Width="36" Padding="0" Margin="0,0,4,0" />
|
||
<Button Content="Розширення" ToolTip="Керування unpacked extensions" Click="Extensions_Click" Height="32" Padding="11,0" />
|
||
<Button Content="⌨" ToolTip="Клавіатурні скорочення" Click="Shortcuts_Click" Height="32" Width="36" Padding="0" Margin="4,0,0,0" />
|
||
</StackPanel>
|
||
|
||
<Grid VerticalAlignment="Center">
|
||
<TextBox x:Name="AddressBox"
|
||
VerticalContentAlignment="Center"
|
||
Height="32"
|
||
Padding="12,0,86,0"
|
||
KeyDown="AddressBox_KeyDown" />
|
||
<Button Content="Перейти" ToolTip="Відкрити адресу" Click="Go_Click" Style="{StaticResource PrimaryButton}" Height="26" Padding="12,0" HorizontalAlignment="Right" Margin="0,0,3,0" />
|
||
</Grid>
|
||
</DockPanel>
|
||
</Border>
|
||
</StackPanel>
|
||
|
||
<!-- Web content -->
|
||
<Grid x:Name="WebViewHost" Background="#0B0E12">
|
||
<TextBlock x:Name="BrowserStatus"
|
||
Text="Ініціалізація WebView2…"
|
||
Foreground="{StaticResource TextSecondary}"
|
||
FontSize="13"
|
||
HorizontalAlignment="Center"
|
||
VerticalAlignment="Center"
|
||
Visibility="Collapsed" />
|
||
</Grid>
|
||
</DockPanel>
|
||
</Window>
|