348 lines
21 KiB
XML
348 lines
21 KiB
XML
<Window x:Class="CursorLang.Views.MainWindow"
|
|
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"
|
|
xmlns:local="clr-namespace:CursorLang.Views"
|
|
xmlns:vm="clr-namespace:CursorLang.ViewModels"
|
|
mc:Ignorable="d"
|
|
d:DataContext="{d:DesignInstance Type=vm:SettingsViewModel}"
|
|
Title="{Binding Localization[SettingsTitle]}"
|
|
Width="560" SizeToContent="Height" MaxHeight="900"
|
|
ResizeMode="CanMinimize"
|
|
Background="{DynamicResource Theme.WindowBackground}"
|
|
Foreground="{DynamicResource Theme.Foreground}">
|
|
<Window.Resources>
|
|
<local:EnumToVisibilityConverter x:Key="EnumToVisibility" />
|
|
<local:ColorToBrushConverter x:Key="ColorToBrush" />
|
|
<local:ColorToHexConverter x:Key="ColorToHex" />
|
|
|
|
<DataTemplate x:Key="EnumOptionTemplate">
|
|
<TextBlock Text="{Binding Display}" />
|
|
</DataTemplate>
|
|
|
|
<!-- Образец цвета с подписью: одинаково для фона и для текста -->
|
|
<DataTemplate x:Key="ColorSwatchTemplate">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Border Width="32" Height="16" CornerRadius="2"
|
|
BorderBrush="#888" BorderThickness="1"
|
|
Background="{Binding Converter={StaticResource ColorToBrush}}" />
|
|
<TextBlock Margin="8,0,0,0"
|
|
Text="{Binding Converter={StaticResource ColorToHex}}" />
|
|
</StackPanel>
|
|
</DataTemplate>
|
|
|
|
<Style TargetType="TextBlock" x:Key="FieldLabel">
|
|
<Setter Property="VerticalAlignment" Value="Center" />
|
|
<Setter Property="Margin" Value="0,0,12,0" />
|
|
<!-- The caption column is narrow, and a translation may not fit into it:
|
|
such a caption is better wrapped onto a second line than cut off -->
|
|
<Setter Property="TextWrapping" Value="Wrap" />
|
|
</Style>
|
|
<Style TargetType="TextBlock" x:Key="FieldValue">
|
|
<Setter Property="VerticalAlignment" Value="Center" />
|
|
<Setter Property="Margin" Value="12,0,0,0" />
|
|
<Setter Property="MinWidth" Value="48" />
|
|
<Setter Property="TextAlignment" Value="Right" />
|
|
<Setter Property="Foreground" Value="{DynamicResource Theme.SecondaryForeground}" />
|
|
</Style>
|
|
</Window.Resources>
|
|
|
|
<!-- The settings are laid out in two columns: this way the window fits on the
|
|
screen entirely and does without scrolling. Scrolling is kept for the case of
|
|
a large system font, with which the content is taller than the monitor after all -->
|
|
<ScrollViewer VerticalScrollBarVisibility="Auto" Padding="16">
|
|
<StackPanel>
|
|
|
|
<GroupBox Header="{Binding Localization[SectionInterface]}">
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="180" />
|
|
<ColumnDefinition Width="*" />
|
|
</Grid.ColumnDefinitions>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
</Grid.RowDefinitions>
|
|
|
|
<TextBlock Style="{StaticResource FieldLabel}"
|
|
Text="{Binding Localization[LanguageLabel]}" />
|
|
<ComboBox Grid.Column="1"
|
|
ItemsSource="{Binding Localization.AvailableLanguages}"
|
|
DisplayMemberPath="DisplayName"
|
|
SelectedValuePath="Code"
|
|
SelectedValue="{Binding Settings.Language}" />
|
|
|
|
<TextBlock Grid.Row="1" Margin="0,12,12,0"
|
|
Style="{StaticResource FieldLabel}"
|
|
Text="{Binding Localization[ThemeLabel]}" />
|
|
<ComboBox Grid.Row="1" Grid.Column="1" Margin="0,12,0,0"
|
|
ItemsSource="{Binding Themes}"
|
|
ItemTemplate="{StaticResource EnumOptionTemplate}"
|
|
SelectedValuePath="Value"
|
|
SelectedValue="{Binding Settings.Theme}" />
|
|
</Grid>
|
|
</GroupBox>
|
|
|
|
<GroupBox Header="{Binding Localization[SectionPlacement]}">
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="180" />
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="Auto" />
|
|
</Grid.ColumnDefinitions>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
</Grid.RowDefinitions>
|
|
|
|
<TextBlock Style="{StaticResource FieldLabel}"
|
|
Text="{Binding Localization[PlacementModeLabel]}" />
|
|
<ComboBox Grid.Column="1" Grid.ColumnSpan="2"
|
|
ItemsSource="{Binding PlacementModes}"
|
|
ItemTemplate="{StaticResource EnumOptionTemplate}"
|
|
SelectedValuePath="Value"
|
|
SelectedValue="{Binding Settings.PlacementMode}" />
|
|
|
|
<!-- Режим «у курсора»: своя сторона и свой отступ -->
|
|
<TextBlock Grid.Row="1" Margin="0,12,12,0"
|
|
Style="{StaticResource FieldLabel}"
|
|
Text="{Binding Localization[CursorCornerLabel]}"
|
|
Visibility="{Binding Settings.PlacementMode,
|
|
Converter={StaticResource EnumToVisibility},
|
|
ConverterParameter=AtCursor}" />
|
|
<ComboBox Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" Margin="0,12,0,0"
|
|
ItemsSource="{Binding AnchorSides}"
|
|
ItemTemplate="{StaticResource EnumOptionTemplate}"
|
|
SelectedValuePath="Value"
|
|
SelectedValue="{Binding Settings.CursorSide}"
|
|
Visibility="{Binding Settings.PlacementMode,
|
|
Converter={StaticResource EnumToVisibility},
|
|
ConverterParameter=AtCursor}" />
|
|
|
|
<TextBlock Grid.Row="2" Margin="0,12,12,0"
|
|
Style="{StaticResource FieldLabel}"
|
|
Text="{Binding Localization[CursorOffsetLabel]}"
|
|
Visibility="{Binding Settings.PlacementMode,
|
|
Converter={StaticResource EnumToVisibility},
|
|
ConverterParameter=AtCursor}" />
|
|
<Slider Grid.Row="2" Grid.Column="1" Margin="0,12,0,0"
|
|
Minimum="0" Maximum="80" TickFrequency="1"
|
|
Value="{Binding Settings.CursorOffset}"
|
|
Visibility="{Binding Settings.PlacementMode,
|
|
Converter={StaticResource EnumToVisibility},
|
|
ConverterParameter=AtCursor}" />
|
|
<TextBlock Grid.Row="2" Grid.Column="2" Margin="12,12,0,0"
|
|
Style="{StaticResource FieldValue}"
|
|
Text="{Binding Settings.CursorOffset, StringFormat={}{0:F0}}"
|
|
Visibility="{Binding Settings.PlacementMode,
|
|
Converter={StaticResource EnumToVisibility},
|
|
ConverterParameter=AtCursor}" />
|
|
|
|
<!-- Режим «у каретки»: свои сторона и отступ -->
|
|
<TextBlock Grid.Row="3" Margin="0,12,12,0"
|
|
Style="{StaticResource FieldLabel}"
|
|
Text="{Binding Localization[CursorCornerLabel]}"
|
|
Visibility="{Binding Settings.PlacementMode,
|
|
Converter={StaticResource EnumToVisibility},
|
|
ConverterParameter=AtCaret}" />
|
|
<ComboBox Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2" Margin="0,12,0,0"
|
|
ItemsSource="{Binding AnchorSides}"
|
|
ItemTemplate="{StaticResource EnumOptionTemplate}"
|
|
SelectedValuePath="Value"
|
|
SelectedValue="{Binding Settings.CaretSide}"
|
|
Visibility="{Binding Settings.PlacementMode,
|
|
Converter={StaticResource EnumToVisibility},
|
|
ConverterParameter=AtCaret}" />
|
|
|
|
<TextBlock Grid.Row="4" Margin="0,12,12,0"
|
|
Style="{StaticResource FieldLabel}"
|
|
Text="{Binding Localization[CursorOffsetLabel]}"
|
|
Visibility="{Binding Settings.PlacementMode,
|
|
Converter={StaticResource EnumToVisibility},
|
|
ConverterParameter=AtCaret}" />
|
|
<Slider Grid.Row="4" Grid.Column="1" Margin="0,12,0,0"
|
|
Minimum="0" Maximum="80" TickFrequency="1"
|
|
Value="{Binding Settings.CaretOffset}"
|
|
Visibility="{Binding Settings.PlacementMode,
|
|
Converter={StaticResource EnumToVisibility},
|
|
ConverterParameter=AtCaret}" />
|
|
<TextBlock Grid.Row="4" Grid.Column="2" Margin="12,12,0,0"
|
|
Style="{StaticResource FieldValue}"
|
|
Text="{Binding Settings.CaretOffset, StringFormat={}{0:F0}}"
|
|
Visibility="{Binding Settings.PlacementMode,
|
|
Converter={StaticResource EnumToVisibility},
|
|
ConverterParameter=AtCaret}" />
|
|
|
|
<!-- Режим «фиксированная точка» -->
|
|
<TextBlock Grid.Row="5" Margin="0,12,12,0"
|
|
Style="{StaticResource FieldLabel}"
|
|
Text="{Binding Localization[ScreenPositionLabel]}"
|
|
Visibility="{Binding Settings.PlacementMode,
|
|
Converter={StaticResource EnumToVisibility},
|
|
ConverterParameter=FixedPoint}" />
|
|
<ComboBox Grid.Row="5" Grid.Column="1" Grid.ColumnSpan="2" Margin="0,12,0,0"
|
|
ItemsSource="{Binding ScreenPositions}"
|
|
ItemTemplate="{StaticResource EnumOptionTemplate}"
|
|
SelectedValuePath="Value"
|
|
SelectedValue="{Binding Settings.ScreenPosition}"
|
|
Visibility="{Binding Settings.PlacementMode,
|
|
Converter={StaticResource EnumToVisibility},
|
|
ConverterParameter=FixedPoint}" />
|
|
|
|
<TextBlock Grid.Row="6" Margin="0,12,12,0"
|
|
Style="{StaticResource FieldLabel}"
|
|
Text="{Binding Localization[ScreenMarginLabel]}"
|
|
Visibility="{Binding Settings.PlacementMode,
|
|
Converter={StaticResource EnumToVisibility},
|
|
ConverterParameter=FixedPoint}" />
|
|
<Slider Grid.Row="6" Grid.Column="1" Margin="0,12,0,0"
|
|
Minimum="0" Maximum="200" TickFrequency="1"
|
|
Value="{Binding Settings.ScreenMargin}"
|
|
Visibility="{Binding Settings.PlacementMode,
|
|
Converter={StaticResource EnumToVisibility},
|
|
ConverterParameter=FixedPoint}" />
|
|
<TextBlock Grid.Row="6" Grid.Column="2" Margin="12,12,0,0"
|
|
Style="{StaticResource FieldValue}"
|
|
Text="{Binding Settings.ScreenMargin, StringFormat={}{0:F0}}"
|
|
Visibility="{Binding Settings.PlacementMode,
|
|
Converter={StaticResource EnumToVisibility},
|
|
ConverterParameter=FixedPoint}" />
|
|
</Grid>
|
|
</GroupBox>
|
|
|
|
<GroupBox Header="{Binding Localization[SectionAppearance]}">
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="180" />
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="Auto" />
|
|
</Grid.ColumnDefinitions>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
</Grid.RowDefinitions>
|
|
|
|
<TextBlock Style="{StaticResource FieldLabel}"
|
|
Text="{Binding Localization[FontSizeLabel]}" />
|
|
<Slider Grid.Column="1" Minimum="10" Maximum="72" TickFrequency="1"
|
|
Value="{Binding Settings.FontSize}" />
|
|
<TextBlock Grid.Column="2" Style="{StaticResource FieldValue}"
|
|
Text="{Binding Settings.FontSize, StringFormat={}{0:F0}}" />
|
|
|
|
<TextBlock Grid.Row="1" Margin="0,12,12,0"
|
|
Style="{StaticResource FieldLabel}"
|
|
Text="{Binding Localization[OpacityLabel]}" />
|
|
<Slider Grid.Row="1" Grid.Column="1" Margin="0,12,0,0"
|
|
Minimum="0.1" Maximum="1" TickFrequency="0.05"
|
|
Value="{Binding Settings.Opacity}" />
|
|
<TextBlock Grid.Row="1" Grid.Column="2" Margin="12,12,0,0"
|
|
Style="{StaticResource FieldValue}"
|
|
Text="{Binding Settings.Opacity, StringFormat={}{0:P0}}" />
|
|
|
|
<TextBlock Grid.Row="2" Margin="0,12,12,0"
|
|
Style="{StaticResource FieldLabel}"
|
|
Text="{Binding Localization[BackgroundColorLabel]}" />
|
|
<ComboBox Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" Margin="0,12,0,0"
|
|
ItemsSource="{Binding BackgroundPalette}"
|
|
ItemTemplate="{StaticResource ColorSwatchTemplate}"
|
|
SelectedItem="{Binding Settings.BackgroundColor}" />
|
|
|
|
<TextBlock Grid.Row="3" Margin="0,12,12,0"
|
|
Style="{StaticResource FieldLabel}"
|
|
Text="{Binding Localization[TextColorLabel]}" />
|
|
<ComboBox Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2" Margin="0,12,0,0"
|
|
ItemsSource="{Binding TextPalette}"
|
|
ItemTemplate="{StaticResource ColorSwatchTemplate}"
|
|
SelectedItem="{Binding Settings.ForegroundColor}" />
|
|
|
|
<TextBlock Grid.Row="4" Margin="0,12,12,0"
|
|
Style="{StaticResource FieldLabel}"
|
|
Text="{Binding Localization[PreviewLabel]}" />
|
|
<Border Grid.Row="4" Grid.Column="1" Grid.ColumnSpan="2"
|
|
Margin="0,12,0,0" Padding="16"
|
|
Height="144" ClipToBounds="True"
|
|
Background="{DynamicResource Theme.SurfaceStrong}" CornerRadius="4"
|
|
HorizontalAlignment="Stretch">
|
|
<Border CornerRadius="4" Padding="10,4"
|
|
HorizontalAlignment="Center" VerticalAlignment="Center"
|
|
Opacity="{Binding Settings.Opacity}"
|
|
Background="{Binding Settings.BackgroundColor,
|
|
Converter={StaticResource ColorToBrush}}">
|
|
<TextBlock Text="RU" FontWeight="SemiBold"
|
|
FontSize="{Binding Settings.FontSize}"
|
|
Foreground="{Binding Settings.ForegroundColor,
|
|
Converter={StaticResource ColorToBrush}}" />
|
|
</Border>
|
|
</Border>
|
|
</Grid>
|
|
</GroupBox>
|
|
|
|
<GroupBox Header="{Binding Localization[SectionBehavior]}">
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="180" />
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="Auto" />
|
|
</Grid.ColumnDefinitions>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
</Grid.RowDefinitions>
|
|
|
|
<TextBlock Style="{StaticResource FieldLabel}"
|
|
Text="{Binding Localization[DurationLabel]}" />
|
|
<Slider Grid.Column="1" Minimum="200" Maximum="5000" TickFrequency="100"
|
|
Value="{Binding Settings.DurationMilliseconds}" />
|
|
<StackPanel Grid.Column="2" Orientation="Horizontal" VerticalAlignment="Center">
|
|
<TextBlock Style="{StaticResource FieldValue}"
|
|
Text="{Binding Settings.DurationMilliseconds, StringFormat={}{0:F0}}" />
|
|
<TextBlock Margin="4,0,0,0"
|
|
Foreground="{DynamicResource Theme.SecondaryForeground}"
|
|
Text="{Binding Localization[MillisecondsSuffix]}" />
|
|
</StackPanel>
|
|
|
|
<TextBlock Grid.Row="1" Margin="0,12,12,0"
|
|
Style="{StaticResource FieldLabel}"
|
|
Text="{Binding Localization[CapsLockLabel]}" />
|
|
<CheckBox Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" Margin="0,12,0,0"
|
|
IsChecked="{Binding Settings.UseCapsLockHotkey}"
|
|
Content="{Binding Localization[CapsLockHotkeyCheck]}" />
|
|
|
|
<TextBlock Grid.Row="2" Margin="0,12,12,0"
|
|
Style="{StaticResource FieldLabel}"
|
|
Text="{Binding Localization[CapsLockHoldLabel]}" />
|
|
<Slider Grid.Row="2" Grid.Column="1" Margin="0,12,0,0"
|
|
Minimum="150" Maximum="1500" TickFrequency="50"
|
|
Value="{Binding Settings.CapsLockHoldMilliseconds}"
|
|
IsEnabled="{Binding Settings.UseCapsLockHotkey}" />
|
|
<StackPanel Grid.Row="2" Grid.Column="2" Margin="0,12,0,0"
|
|
Orientation="Horizontal" VerticalAlignment="Center">
|
|
<TextBlock Style="{StaticResource FieldValue}"
|
|
Text="{Binding Settings.CapsLockHoldMilliseconds, StringFormat={}{0:F0}}" />
|
|
<TextBlock Margin="4,0,0,0"
|
|
Foreground="{DynamicResource Theme.SecondaryForeground}"
|
|
Text="{Binding Localization[MillisecondsSuffix]}" />
|
|
</StackPanel>
|
|
|
|
<TextBlock Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2"
|
|
Margin="0,6,0,0" TextWrapping="Wrap"
|
|
Foreground="{DynamicResource Theme.SecondaryForeground}"
|
|
Text="{Binding Localization[CapsLockHoldHint]}" />
|
|
</Grid>
|
|
</GroupBox>
|
|
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
</Window>
|