649 lines
39 KiB
XML
649 lines
39 KiB
XML
<Window x:Class="EmbyToolbox.Views.FileConversionSettingsWindow"
|
||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||
xmlns:models="clr-namespace:EmbyToolbox.Models"
|
||
xmlns:vm="clr-namespace:EmbyToolbox.ViewModels"
|
||
xmlns:converters="clr-namespace:EmbyToolbox.Converters"
|
||
xmlns:behaviors="clr-namespace:EmbyToolbox.Behaviors"
|
||
Title="Настройки конвертации файла"
|
||
MinWidth="900"
|
||
MinHeight="600"
|
||
Width="960"
|
||
Height="800"
|
||
WindowStartupLocation="CenterOwner"
|
||
Background="{DynamicResource Ui.Brush.Surface}">
|
||
<Window.InputBindings>
|
||
<KeyBinding Key="Enter"
|
||
Modifiers="Control"
|
||
Command="{Binding SaveAndCloseCommand}" />
|
||
</Window.InputBindings>
|
||
<Window.Resources>
|
||
<converters:BooleanToVisibilityConverter x:Key="BoolToVis" />
|
||
<converters:TrackActionKindToRussianConverter x:Key="TrackActionRu" />
|
||
<!-- Две строки текста в ячейках Title / Details -->
|
||
<Style x:Key="TracksGridWrapTextDisplay" TargetType="TextBlock" BasedOn="{StaticResource UiDataGridTextElement}">
|
||
<Setter Property="FontSize" Value="11" />
|
||
<Setter Property="LineHeight" Value="16" />
|
||
<Setter Property="LineStackingStrategy" Value="BlockLineHeight" />
|
||
<Setter Property="MaxHeight" Value="32" />
|
||
<Setter Property="TextWrapping" Value="Wrap" />
|
||
<Setter Property="TextTrimming" Value="CharacterEllipsis" />
|
||
<Setter Property="VerticalAlignment" Value="Center" />
|
||
</Style>
|
||
<!-- Пастельные фоны дорожек (таблица настроек) -->
|
||
<SolidColorBrush x:Key="TracksRow.DefaultBg" Color="{DynamicResource C.Track.DefaultBg}" />
|
||
<SolidColorBrush x:Key="TracksRow.ConvertBg" Color="{DynamicResource C.Track.ConvertBg}" />
|
||
<SolidColorBrush x:Key="TracksRow.RemoveBg" Color="{DynamicResource C.Track.RemoveBg}" />
|
||
<SolidColorBrush x:Key="TracksRow.NormalBg" Color="{DynamicResource C.Track.NormalBg}" />
|
||
<SolidColorBrush x:Key="TracksRow.HoverDefault" Color="{DynamicResource C.Track.HoverDefault}" />
|
||
<SolidColorBrush x:Key="TracksRow.HoverConvert" Color="{DynamicResource C.Track.HoverConvert}" />
|
||
<SolidColorBrush x:Key="TracksRow.HoverRemove" Color="{DynamicResource C.Track.HoverRemove}" />
|
||
<SolidColorBrush x:Key="TracksRow.SelDefault" Color="{DynamicResource C.Track.SelDefault}" />
|
||
<SolidColorBrush x:Key="TracksRow.SelConvert" Color="{DynamicResource C.Track.SelConvert}" />
|
||
<SolidColorBrush x:Key="TracksRow.SelRemove" Color="{DynamicResource C.Track.SelRemove}" />
|
||
<SolidColorBrush x:Key="TracksRow.SelNormal" Color="{DynamicResource C.Track.SelNormal}" />
|
||
<SolidColorBrush x:Key="TracksRow.SelHoverDefault" Color="{DynamicResource C.Track.SelHoverDefault}" />
|
||
<SolidColorBrush x:Key="TracksRow.SelHoverConvert" Color="{DynamicResource C.Track.SelHoverConvert}" />
|
||
<SolidColorBrush x:Key="TracksRow.SelHoverRemove" Color="{DynamicResource C.Track.SelHoverRemove}" />
|
||
<SolidColorBrush x:Key="TracksRow.SelHoverNormal" Color="{DynamicResource C.Track.SelHoverNormal}" />
|
||
<SolidColorBrush x:Key="TracksRow.SelectionStripe" Color="{DynamicResource C.Track.SelectionStripe}" />
|
||
<SolidColorBrush x:Key="TracksRow.ConflictBorder" Color="{DynamicResource C.Track.ConflictBorder}" />
|
||
</Window.Resources>
|
||
<Grid ClipToBounds="False">
|
||
<Grid Margin="12">
|
||
<Grid.RowDefinitions>
|
||
<RowDefinition Height="Auto" />
|
||
<RowDefinition Height="*" MinHeight="220" />
|
||
<RowDefinition Height="Auto" />
|
||
<RowDefinition Height="Auto" />
|
||
</Grid.RowDefinitions>
|
||
<StackPanel Grid.Row="0" Margin="0,0,0,8">
|
||
<Grid>
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="Auto" />
|
||
<ColumnDefinition Width="*" />
|
||
</Grid.ColumnDefinitions>
|
||
<Button Grid.Column="0"
|
||
VerticalAlignment="Center"
|
||
MinWidth="34"
|
||
Width="34"
|
||
MinHeight="{StaticResource Ui.BaseControlHeight}"
|
||
Height="{StaticResource Ui.BaseControlHeight}"
|
||
Margin="0,0,8,0"
|
||
Padding="0"
|
||
Style="{StaticResource UiButtonPrimary}"
|
||
Command="{Binding PlayFileCommand}"
|
||
CommandParameter="{Binding FilePath}"
|
||
ToolTip="{Binding PlayFileToolTip}">
|
||
<TextBlock Style="{StaticResource UiMdlGlyphOnPrimary}"
|
||
Text=""
|
||
Margin="0"
|
||
HorizontalAlignment="Center"
|
||
VerticalAlignment="Center"
|
||
FontSize="15" />
|
||
</Button>
|
||
<TextBlock Grid.Column="1"
|
||
Text="{Binding FilePath, Mode=OneWay}"
|
||
TextWrapping="Wrap"
|
||
FontSize="12"
|
||
Foreground="{DynamicResource Ui.Brush.Text}"
|
||
VerticalAlignment="Center" />
|
||
</Grid>
|
||
<TextBlock Margin="0,6,0,0" FontSize="11" Foreground="{DynamicResource Ui.Brush.Caption}">
|
||
<Run Text="Профиль: " />
|
||
<Run Text="{Binding ProfileName, Mode=OneWay}" />
|
||
</TextBlock>
|
||
<TextBlock Margin="0,4,0,0" Text="{Binding PlanPreview, Mode=OneWay}" TextWrapping="Wrap" FontSize="12" Foreground="{DynamicResource Ui.Brush.Text}" />
|
||
<TextBlock Margin="0,8,0,0" Text="Дорожки" FontSize="11" />
|
||
</StackPanel>
|
||
<Grid Grid.Row="1" ClipToBounds="False">
|
||
<DataGrid x:Name="TracksGrid"
|
||
ItemsSource="{Binding TrackRows, Mode=OneWay}"
|
||
AutoGenerateColumns="False"
|
||
IsReadOnly="False"
|
||
CanUserAddRows="False"
|
||
CanUserDeleteRows="False"
|
||
SelectionUnit="FullRow"
|
||
SelectionMode="Extended"
|
||
EnableRowVirtualization="True"
|
||
EnableColumnVirtualization="True"
|
||
VirtualizingPanel.IsVirtualizing="True"
|
||
VirtualizingPanel.VirtualizationMode="Recycling"
|
||
RowHeaderWidth="0"
|
||
RowHeight="38"
|
||
FontSize="11"
|
||
Foreground="{DynamicResource Ui.Brush.Text}"
|
||
VerticalAlignment="Stretch"
|
||
ScrollViewer.HorizontalScrollBarVisibility="Auto"
|
||
behaviors:DataGridRightClickSelectionBehavior.IsEnabled="True"
|
||
behaviors:DataGridSelectionChangedCommandBehavior.Command="{Binding OnSelectionChangedCommand}"
|
||
Style="{StaticResource UiDataGrid}"
|
||
Panel.ZIndex="0"
|
||
LoadingRow="TracksGrid_LoadingRow">
|
||
<DataGrid.InputBindings>
|
||
<KeyBinding Key="Delete"
|
||
Command="{Binding SetSelectedTracksRemoveCommand}"
|
||
CommandParameter="{Binding ElementName=TracksGrid, Path=SelectedItems}" />
|
||
<KeyBinding Key="Delete" Modifiers="Shift"
|
||
Command="{Binding MarkForeignTracksForRemovalCommand}" />
|
||
</DataGrid.InputBindings>
|
||
<DataGrid.ContextMenu>
|
||
<ContextMenu DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}">
|
||
<MenuItem Header="Оставить"
|
||
Command="{Binding ContextSetActionCommand}"
|
||
CommandParameter="{x:Static models:TrackActionKind.Keep}" />
|
||
<MenuItem Header="Конвертировать"
|
||
Command="{Binding ContextSetActionCommand}"
|
||
CommandParameter="{x:Static models:TrackActionKind.Convert}" />
|
||
<MenuItem Header="Удалить"
|
||
InputGestureText="Del"
|
||
Command="{Binding ContextSetActionCommand}"
|
||
CommandParameter="{x:Static models:TrackActionKind.Remove}" />
|
||
<MenuItem Header="Добавить"
|
||
Command="{Binding ContextSetActionCommand}"
|
||
CommandParameter="{x:Static models:TrackActionKind.Add}" />
|
||
<Separator />
|
||
<MenuItem Header="128 kbps"
|
||
Command="{Binding ContextSetBitrateCommand}"
|
||
CommandParameter="128 kbps" />
|
||
<MenuItem Header="192 kbps"
|
||
Command="{Binding ContextSetBitrateCommand}"
|
||
CommandParameter="192 kbps" />
|
||
<MenuItem Header="256 kbps"
|
||
Command="{Binding ContextSetBitrateCommand}"
|
||
CommandParameter="256 kbps" />
|
||
<MenuItem Header="320 kbps"
|
||
Command="{Binding ContextSetBitrateCommand}"
|
||
CommandParameter="320 kbps" />
|
||
<Separator />
|
||
<MenuItem Header="Удалить иностранные дорожки"
|
||
InputGestureText="Shift+Del"
|
||
Command="{Binding MarkForeignTracksForRemovalCommand}" />
|
||
</ContextMenu>
|
||
</DataGrid.ContextMenu>
|
||
<DataGrid.ColumnHeaderStyle>
|
||
<Style TargetType="DataGridColumnHeader" BasedOn="{StaticResource UiDataGridColumnHeader}" />
|
||
</DataGrid.ColumnHeaderStyle>
|
||
<DataGrid.CellStyle>
|
||
<Style TargetType="DataGridCell" BasedOn="{StaticResource UiDataGridCell}">
|
||
<Setter Property="VerticalContentAlignment" Value="Center" />
|
||
<Setter Property="Padding" Value="4,2" />
|
||
<!-- Фон строки — у DataGridRow; ячейки не перекрывают Selection -->
|
||
<Setter Property="Background" Value="Transparent" />
|
||
<Setter Property="BorderThickness" Value="0" />
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
<Style.Triggers>
|
||
<Trigger Property="IsSelected" Value="True">
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
<Setter Property="Background" Value="Transparent" />
|
||
</Trigger>
|
||
<Trigger Property="IsKeyboardFocusWithin" Value="True">
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
</Trigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</DataGrid.CellStyle>
|
||
<DataGrid.RowStyle>
|
||
<Style TargetType="DataGridRow" BasedOn="{StaticResource UiDataGridRow}">
|
||
<Setter Property="Background" Value="{StaticResource TracksRow.NormalBg}" />
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
<Setter Property="BorderBrush" Value="Transparent" />
|
||
<Setter Property="BorderThickness" Value="0" />
|
||
<Setter Property="SnapsToDevicePixels" Value="True" />
|
||
<Style.Triggers>
|
||
<!-- Не выбрано: пастель по статусу (порядок как раньше: Default → Convert → Remove) -->
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="False" />
|
||
<Condition Binding="{Binding Default}" Value="True" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Background" Value="{StaticResource TracksRow.DefaultBg}" />
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
</MultiDataTrigger>
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="False" />
|
||
<Condition Binding="{Binding Action}" Value="{x:Static models:TrackActionKind.Convert}" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Background" Value="{StaticResource TracksRow.ConvertBg}" />
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
</MultiDataTrigger>
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="False" />
|
||
<Condition Binding="{Binding Action}" Value="{x:Static models:TrackActionKind.Remove}" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Background" Value="{StaticResource TracksRow.RemoveBg}" />
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
</MultiDataTrigger>
|
||
<!-- Hover без выделения: лёгкое затемнение -->
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="False" />
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True" />
|
||
<Condition Binding="{Binding Action}" Value="{x:Static models:TrackActionKind.Remove}" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Background" Value="{StaticResource TracksRow.HoverRemove}" />
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
</MultiDataTrigger>
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="False" />
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True" />
|
||
<Condition Binding="{Binding Action}" Value="{x:Static models:TrackActionKind.Convert}" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Background" Value="{StaticResource TracksRow.HoverConvert}" />
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
</MultiDataTrigger>
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="False" />
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True" />
|
||
<Condition Binding="{Binding Default}" Value="True" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Background" Value="{StaticResource TracksRow.HoverDefault}" />
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
</MultiDataTrigger>
|
||
<!-- Конфликт Def без выделения -->
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="False" />
|
||
<Condition Binding="{Binding HasDefaultConflict}" Value="True" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="BorderBrush" Value="{StaticResource TracksRow.ConflictBorder}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
</MultiDataTrigger>
|
||
|
||
<!-- Выбрано без hover: более поздний триггер перекрывает — порядок низший→высший: Keep/Add, Default, Convert, Remove -->
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="False" />
|
||
<Condition Binding="{Binding Action}" Value="{x:Static models:TrackActionKind.Keep}" />
|
||
<Condition Binding="{Binding Default}" Value="False" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Background" Value="{StaticResource TracksRow.SelNormal}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource TracksRow.SelectionStripe}" />
|
||
<Setter Property="BorderThickness" Value="3,0,0,0" />
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
</MultiDataTrigger>
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="False" />
|
||
<Condition Binding="{Binding Action}" Value="{x:Static models:TrackActionKind.Add}" />
|
||
<Condition Binding="{Binding Default}" Value="False" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Background" Value="{StaticResource TracksRow.SelNormal}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource TracksRow.SelectionStripe}" />
|
||
<Setter Property="BorderThickness" Value="3,0,0,0" />
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
</MultiDataTrigger>
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="False" />
|
||
<Condition Binding="{Binding Default}" Value="True" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Background" Value="{StaticResource TracksRow.SelDefault}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource TracksRow.SelectionStripe}" />
|
||
<Setter Property="BorderThickness" Value="3,0,0,0" />
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
</MultiDataTrigger>
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="False" />
|
||
<Condition Binding="{Binding Action}" Value="{x:Static models:TrackActionKind.Convert}" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Background" Value="{StaticResource TracksRow.SelConvert}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource TracksRow.SelectionStripe}" />
|
||
<Setter Property="BorderThickness" Value="3,0,0,0" />
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
</MultiDataTrigger>
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="False" />
|
||
<Condition Binding="{Binding Action}" Value="{x:Static models:TrackActionKind.Remove}" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Background" Value="{StaticResource TracksRow.SelRemove}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource TracksRow.SelectionStripe}" />
|
||
<Setter Property="BorderThickness" Value="3,0,0,0" />
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
</MultiDataTrigger>
|
||
<!-- Выбрано + hover (тот же приоритет по действию) -->
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True" />
|
||
<Condition Binding="{Binding Action}" Value="{x:Static models:TrackActionKind.Keep}" />
|
||
<Condition Binding="{Binding Default}" Value="False" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Background" Value="{StaticResource TracksRow.SelHoverNormal}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource TracksRow.SelectionStripe}" />
|
||
<Setter Property="BorderThickness" Value="3,0,0,0" />
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
</MultiDataTrigger>
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True" />
|
||
<Condition Binding="{Binding Action}" Value="{x:Static models:TrackActionKind.Add}" />
|
||
<Condition Binding="{Binding Default}" Value="False" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Background" Value="{StaticResource TracksRow.SelHoverNormal}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource TracksRow.SelectionStripe}" />
|
||
<Setter Property="BorderThickness" Value="3,0,0,0" />
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
</MultiDataTrigger>
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True" />
|
||
<Condition Binding="{Binding Default}" Value="True" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Background" Value="{StaticResource TracksRow.SelHoverDefault}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource TracksRow.SelectionStripe}" />
|
||
<Setter Property="BorderThickness" Value="3,0,0,0" />
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
</MultiDataTrigger>
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True" />
|
||
<Condition Binding="{Binding Action}" Value="{x:Static models:TrackActionKind.Convert}" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Background" Value="{StaticResource TracksRow.SelHoverConvert}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource TracksRow.SelectionStripe}" />
|
||
<Setter Property="BorderThickness" Value="3,0,0,0" />
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
</MultiDataTrigger>
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True" />
|
||
<Condition Binding="{Binding Action}" Value="{x:Static models:TrackActionKind.Remove}" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Background" Value="{StaticResource TracksRow.SelHoverRemove}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource TracksRow.SelectionStripe}" />
|
||
<Setter Property="BorderThickness" Value="3,0,0,0" />
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
</MultiDataTrigger>
|
||
<!-- Teletext subtitle: текст строки акцентом ошибки -->
|
||
<DataTrigger Binding="{Binding IsTeletextSubtitle}" Value="True">
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.ErrorText}" />
|
||
</DataTrigger>
|
||
|
||
<!-- Конфликт + выбрано — тонкий контур поверх маркировки выбора -->
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
|
||
<Condition Binding="{Binding HasDefaultConflict}" Value="True" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="BorderBrush" Value="{StaticResource TracksRow.ConflictBorder}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
</MultiDataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</DataGrid.RowStyle>
|
||
<DataGrid.Columns>
|
||
<DataGridTextColumn Header="#" Binding="{Binding IndexDisplay, Mode=OneWay}" IsReadOnly="True" MinWidth="32" />
|
||
<DataGridTextColumn Header="сточник" Binding="{Binding SourceDisplay, Mode=OneWay}" IsReadOnly="True" MinWidth="80" />
|
||
<DataGridTextColumn Header="Тип" Binding="{Binding TypeDisplay, Mode=OneWay}" IsReadOnly="True" MinWidth="60" />
|
||
<DataGridTextColumn Header="Codec" Binding="{Binding Codec, Mode=OneWay}" IsReadOnly="True" MinWidth="70" />
|
||
<DataGridTextColumn Header="Language" Binding="{Binding Language, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" MinWidth="64" />
|
||
<DataGridTextColumn Header="Title"
|
||
Binding="{Binding Title, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
||
Width="*"
|
||
MinWidth="160"
|
||
MaxWidth="340">
|
||
<DataGridTextColumn.ElementStyle>
|
||
<Style TargetType="TextBlock" BasedOn="{StaticResource TracksGridWrapTextDisplay}">
|
||
<Setter Property="ToolTip" Value="{Binding Title, Mode=OneWay}" />
|
||
</Style>
|
||
</DataGridTextColumn.ElementStyle>
|
||
<DataGridTextColumn.EditingElementStyle>
|
||
<Style TargetType="TextBox">
|
||
<Setter Property="TextWrapping" Value="Wrap" />
|
||
<Setter Property="AcceptsReturn" Value="True" />
|
||
<Setter Property="VerticalScrollBarVisibility" Value="Auto" />
|
||
<Setter Property="MaxHeight" Value="64" />
|
||
<Setter Property="FontSize" Value="11" />
|
||
</Style>
|
||
</DataGridTextColumn.EditingElementStyle>
|
||
</DataGridTextColumn>
|
||
<DataGridTemplateColumn Header="Def" MinWidth="44">
|
||
<DataGridTemplateColumn.CellTemplate>
|
||
<DataTemplate>
|
||
<CheckBox IsChecked="{Binding Default, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
||
IsEnabled="{Binding IsDefaultEnabled, Mode=OneWay}" HorizontalAlignment="Center" />
|
||
</DataTemplate>
|
||
</DataGridTemplateColumn.CellTemplate>
|
||
</DataGridTemplateColumn>
|
||
<DataGridTemplateColumn Header="Действие" MinWidth="110">
|
||
<DataGridTemplateColumn.CellTemplate>
|
||
<DataTemplate>
|
||
<ComboBox Style="{StaticResource UiCombo}"
|
||
ItemsSource="{Binding ValidActions, Mode=OneWay}"
|
||
SelectedItem="{Binding Action, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
|
||
<ComboBox.ItemTemplate>
|
||
<DataTemplate>
|
||
<TextBlock Text="{Binding Converter={StaticResource TrackActionRu}}" />
|
||
</DataTemplate>
|
||
</ComboBox.ItemTemplate>
|
||
</ComboBox>
|
||
</DataTemplate>
|
||
</DataGridTemplateColumn.CellTemplate>
|
||
</DataGridTemplateColumn>
|
||
<DataGridTemplateColumn Header="Битрейт" MinWidth="88">
|
||
<DataGridTemplateColumn.CellTemplate>
|
||
<DataTemplate>
|
||
<ComboBox Style="{StaticResource UiCombo}"
|
||
Visibility="{Binding IsAudioBitrateVisible, Mode=OneWay, Converter={StaticResource BoolToVis}}"
|
||
ItemsSource="{Binding DataContext.FormOptions.AudioBitrateKbps, RelativeSource={RelativeSource AncestorType=Window}}"
|
||
SelectedItem="{Binding AudioBitrateKbps, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
|
||
</DataTemplate>
|
||
</DataGridTemplateColumn.CellTemplate>
|
||
</DataGridTemplateColumn>
|
||
<DataGridTemplateColumn Header="Details" Width="*" MinWidth="160" MaxWidth="360">
|
||
<DataGridTemplateColumn.CellTemplate>
|
||
<DataTemplate>
|
||
<TextBlock Style="{StaticResource TracksGridWrapTextDisplay}"
|
||
Text="{Binding Details, Mode=OneWay}"
|
||
ToolTip="{Binding Details, Mode=OneWay}" />
|
||
</DataTemplate>
|
||
</DataGridTemplateColumn.CellTemplate>
|
||
</DataGridTemplateColumn>
|
||
</DataGrid.Columns>
|
||
</DataGrid>
|
||
|
||
<!-- Toast поверх таблицы дорожек (не сдвигает layout DataGrid) -->
|
||
<Border HorizontalAlignment="Stretch"
|
||
VerticalAlignment="Top"
|
||
Margin="8,44,8,0"
|
||
MaxHeight="108"
|
||
Panel.ZIndex="1"
|
||
Background="Transparent"
|
||
Cursor="Hand"
|
||
Visibility="{Binding IsToastVisible, Converter={StaticResource BoolToVis}}">
|
||
<Border.InputBindings>
|
||
<MouseBinding MouseAction="LeftClick" Command="{Binding CloseToastCommand}" />
|
||
</Border.InputBindings>
|
||
<Border HorizontalAlignment="Right"
|
||
MaxWidth="420"
|
||
CornerRadius="6"
|
||
Background="Transparent">
|
||
<Border.Effect>
|
||
<DropShadowEffect BlurRadius="14"
|
||
Direction="282"
|
||
Opacity="0.22"
|
||
ShadowDepth="2" />
|
||
</Border.Effect>
|
||
<Border CornerRadius="6"
|
||
Padding="14,12"
|
||
BorderThickness="2">
|
||
<Border.Style>
|
||
<Style TargetType="Border">
|
||
<!-- Full (Success) по умолчанию -->
|
||
<Setter Property="Background" Value="{DynamicResource Ui.Brush.Track.DefaultBg}" />
|
||
<Setter Property="BorderBrush" Value="{DynamicResource Ui.Brush.Toast.SuccessBorder}" />
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding ToastKind}" Value="{x:Static vm:ToastKind.Warning}">
|
||
<Setter Property="Background" Value="{DynamicResource Ui.Brush.Toast.WarningBg}" />
|
||
<Setter Property="BorderBrush" Value="{DynamicResource Ui.Brush.Toast.WarningBorder}" />
|
||
</DataTrigger>
|
||
<DataTrigger Binding="{Binding ToastKind}" Value="{x:Static vm:ToastKind.Error}">
|
||
<Setter Property="Background" Value="{DynamicResource Ui.Brush.Toast.ErrorBg}" />
|
||
<Setter Property="BorderBrush" Value="{DynamicResource Ui.Brush.Toast.ErrorBorder}" />
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</Border.Style>
|
||
<Grid>
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="Auto" />
|
||
<ColumnDefinition Width="*" />
|
||
</Grid.ColumnDefinitions>
|
||
<TextBlock Grid.Column="0"
|
||
Text="{Binding ToastIconGlyph}"
|
||
FontFamily="Segoe MDL2 Assets"
|
||
FontSize="20"
|
||
TextAlignment="Center"
|
||
Margin="0,0,12,0"
|
||
VerticalAlignment="Center">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Toast.SuccessIcon}" />
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding ToastKind}" Value="{x:Static vm:ToastKind.Warning}">
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Toast.WarningIcon}" />
|
||
</DataTrigger>
|
||
<DataTrigger Binding="{Binding ToastKind}" Value="{x:Static vm:ToastKind.Error}">
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Toast.ErrorBorder}" />
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
<TextBlock Grid.Column="1"
|
||
Text="{Binding ToastMessage}"
|
||
FontSize="13"
|
||
FontWeight="SemiBold"
|
||
TextWrapping="Wrap"
|
||
LineHeight="18"
|
||
VerticalAlignment="Center">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
</Grid>
|
||
</Border>
|
||
</Border>
|
||
</Border>
|
||
</Grid>
|
||
<StackPanel Grid.Row="2" Margin="0,4,0,0" VerticalAlignment="Top">
|
||
<TextBlock Text="Параметры видео" FontSize="11" Margin="0,0,0,4" />
|
||
<Grid MaxWidth="620" HorizontalAlignment="Left">
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="200" />
|
||
<ColumnDefinition Width="200" />
|
||
<ColumnDefinition Width="200" />
|
||
</Grid.ColumnDefinitions>
|
||
<Grid.RowDefinitions>
|
||
<RowDefinition Height="Auto" />
|
||
<RowDefinition Height="Auto" />
|
||
</Grid.RowDefinitions>
|
||
<StackPanel Grid.Row="0" Grid.Column="0" Margin="0,0,8,0">
|
||
<TextBlock Text="Контейнер" Margin="0,0,0,2" FontSize="11" />
|
||
<ComboBox Width="180" Style="{StaticResource UiCombo}" FontSize="11"
|
||
ItemsSource="{Binding FormOptions.ContainerOptions}" SelectedItem="{Binding TargetContainer, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
|
||
<TextBlock Text="{Binding CurrentFileContainer, StringFormat='Текущее: {0}'}" Margin="2,2,0,0" FontSize="10" Foreground="{DynamicResource Ui.Brush.Muted}" TextTrimming="CharacterEllipsis" />
|
||
</StackPanel>
|
||
<StackPanel Grid.Row="0" Grid.Column="1" Margin="0,0,8,0">
|
||
<TextBlock Text="Видео" Margin="0,0,0,2" FontSize="11" />
|
||
<ComboBox Width="180" Style="{StaticResource UiCombo}" FontSize="11"
|
||
ItemsSource="{Binding FormOptions.VideoCodecOptions}" SelectedItem="{Binding TargetVideo, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
|
||
<TextBlock Text="{Binding CurrentFileVideo, StringFormat='Текущее: {0}'}" Margin="2,2,0,0" FontSize="10" Foreground="{DynamicResource Ui.Brush.Muted}" TextTrimming="CharacterEllipsis" />
|
||
</StackPanel>
|
||
<StackPanel Grid.Row="0" Grid.Column="2">
|
||
<TextBlock Text="Pixel format" Margin="0,0,0,2" FontSize="11" />
|
||
<ComboBox Width="180" Style="{StaticResource UiCombo}" FontSize="11"
|
||
ItemsSource="{Binding FormOptions.PixelFormatOptions}" SelectedItem="{Binding TargetPixelFormat, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
|
||
<TextBlock Text="{Binding CurrentFilePixel, StringFormat='Текущее: {0}'}" Margin="2,2,0,0" FontSize="10" Foreground="{DynamicResource Ui.Brush.Muted}" TextTrimming="CharacterEllipsis" />
|
||
</StackPanel>
|
||
<StackPanel Grid.Row="1" Grid.Column="0" Margin="0,6,8,0">
|
||
<TextBlock Text="Разрешение" Margin="0,0,0,2" FontSize="11" />
|
||
<ComboBox Width="180" Style="{StaticResource UiCombo}" FontSize="11"
|
||
ItemsSource="{Binding FormOptions.ResolutionOptions}" SelectedItem="{Binding TargetResolution, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
|
||
<TextBlock Text="{Binding CurrentFileResolution, StringFormat='Текущее: {0}'}" Margin="2,2,0,0" FontSize="10" Foreground="{DynamicResource Ui.Brush.Muted}" TextTrimming="CharacterEllipsis" />
|
||
</StackPanel>
|
||
<StackPanel Grid.Row="1" Grid.Column="1" Margin="0,6,8,0">
|
||
<TextBlock Text="FPS" Margin="0,0,0,2" FontSize="11" />
|
||
<ComboBox Width="180" Style="{StaticResource UiCombo}" FontSize="11"
|
||
ItemsSource="{Binding FormOptions.FpsOptions}" SelectedItem="{Binding TargetFps, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
|
||
<TextBlock Text="{Binding CurrentFileFps, StringFormat='Текущее: {0}'}" Margin="2,2,0,0" FontSize="10" Foreground="{DynamicResource Ui.Brush.Muted}" TextTrimming="CharacterEllipsis" />
|
||
</StackPanel>
|
||
<StackPanel Grid.Row="1" Grid.Column="2" Margin="0,6,0,0">
|
||
<TextBlock Text="Видеобитрейт" Margin="0,0,0,2" FontSize="11" />
|
||
<ComboBox Width="180"
|
||
Style="{StaticResource UiCombo}"
|
||
FontSize="11"
|
||
MinHeight="{StaticResource Ui.BaseControlHeight}"
|
||
ItemsSource="{Binding VideoBitrateOptions}"
|
||
SelectedItem="{Binding TargetVideoBitrateMode, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
|
||
<TextBlock Text="{Binding CurrentFileVideoBitrate}"
|
||
Margin="2,2,0,0"
|
||
FontSize="10"
|
||
Foreground="{DynamicResource Ui.Brush.Muted}"
|
||
TextTrimming="CharacterEllipsis" />
|
||
<StackPanel Margin="0,6,0,0"
|
||
Visibility="{Binding IsVideoBitrateCustomVisible, Converter={StaticResource BoolToVis}}">
|
||
<TextBlock Text="Custom bitrate, Mbps" Margin="0,0,0,2" FontSize="11" />
|
||
<TextBox Width="180"
|
||
Style="{StaticResource UiTextInput}"
|
||
FontSize="11"
|
||
MinHeight="{StaticResource Ui.BaseControlHeight}"
|
||
Text="{Binding VideoBitrateCustomMbps, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
|
||
</StackPanel>
|
||
</StackPanel>
|
||
</Grid>
|
||
</StackPanel>
|
||
<Grid Grid.Row="3" Margin="0,8,0,0">
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="*" />
|
||
<ColumnDefinition Width="Auto" />
|
||
</Grid.ColumnDefinitions>
|
||
<StackPanel Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center">
|
||
<TextBlock Text="{Binding SnapshotStatusText}"
|
||
VerticalAlignment="Center"
|
||
Foreground="{DynamicResource Ui.Brush.Caption}" />
|
||
<Button Margin="12,0,0,0"
|
||
MinWidth="190"
|
||
Content="Отменить автоприменение"
|
||
Command="{Binding UndoAutoApplyCommand}">
|
||
<Button.Style>
|
||
<Style TargetType="Button" BasedOn="{StaticResource UiButtonSecondary}">
|
||
<Setter Property="Visibility" Value="Collapsed" />
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding IsAutoAppliedFromSnapshot}" Value="True">
|
||
<Setter Property="Visibility" Value="Visible" />
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</Button.Style>
|
||
</Button>
|
||
</StackPanel>
|
||
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right">
|
||
<Button MinWidth="100" Margin="0,0,8,0" Style="{StaticResource UiButtonPrimary}" Content="Сохранить" Command="{Binding SaveCommand}" />
|
||
<Button MinWidth="100" Style="{StaticResource UiButtonSecondary}" Content="Отмена" Command="{Binding CancelCommand}" />
|
||
</StackPanel>
|
||
</Grid>
|
||
</Grid>
|
||
</Grid>
|
||
</Window>
|
||
|