Files
FoxBrowser/MainWindow.xaml
T
2026-10-11 23:49:55 +03:00

223 lines
15 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<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>
<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}">
<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="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="8"
Padding="{TemplateBinding Padding}"
Margin="0,0,6,2">
<ContentPresenter ContentSource="Header" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="TabBorder" Property="Background" Value="#222A35" />
<Setter TargetName="TabBorder" Property="BorderBrush" Value="{StaticResource BorderMedium}" />
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="TabBorder" Property="Background" Value="#26354B" />
<Setter TargetName="TabBorder" Property="BorderBrush" Value="{StaticResource AurBlue}" />
</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>