emby-toolbox/EmbyToolbox/Views/BulkFileConversionSettingsWindow.xaml
Emby Toolbox 6264b487fe Initial commit: Emby Toolbox (conversion scroll fix, bulk Del for tracks).
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-12 21:33:47 +05:00

209 lines
12 KiB
XML

<Window x:Class="EmbyToolbox.Views.BulkFileConversionSettingsWindow"
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:converters="clr-namespace:EmbyToolbox.Converters"
Title="Массовая настройка дорожек"
MinWidth="900"
MinHeight="560"
Width="960"
Height="720"
WindowStartupLocation="CenterOwner"
Background="{DynamicResource Ui.Brush.Surface}">
<Window.Resources>
<converters:TrackActionKindToRussianConverter x:Key="TrackActionRu" />
<converters:BooleanToVisibilityConverter x:Key="BoolToVis" />
<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}" />
<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>
</Window.Resources>
<Grid Margin="12">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Margin="0,0,0,8">
<TextBlock Text="Массовая настройка дорожек" Style="{StaticResource UiTextH2}" />
<TextBlock Margin="0,4,0,0"
Text="{Binding FilesCount, StringFormat=Файлов: {0}}"
Foreground="{DynamicResource Ui.Brush.Caption}" />
<TextBlock Margin="0,2,0,0"
Text="{Binding TargetRowNumbersText, StringFormat=Строки: {0}}"
Foreground="{DynamicResource Ui.Brush.Caption}" />
</StackPanel>
<DataGrid x:Name="TracksGrid"
Grid.Row="1"
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"
SelectionChanged="TracksGrid_OnSelectionChanged"
Style="{StaticResource UiDataGrid}"
ColumnHeaderStyle="{StaticResource UiDataGridColumnHeader}"
CellStyle="{StaticResource UiDataGridCell}">
<DataGrid.InputBindings>
<KeyBinding Key="Delete"
Command="{Binding SetSelectedTracksRemoveCommand}"
CommandParameter="{Binding ElementName=TracksGrid, Path=SelectedItems}" />
</DataGrid.InputBindings>
<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" />
<Style.Triggers>
<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}" />
</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}" />
</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}" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
<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" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
<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" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
<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" />
</MultiDataTrigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{StaticResource TracksRow.SelNormal}" />
<Setter Property="BorderBrush" Value="{StaticResource TracksRow.SelectionStripe}" />
<Setter Property="BorderThickness" Value="3,0,0,0" />
</Trigger>
</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="80" />
<DataGridTextColumn Header="Title"
Binding="{Binding Title, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Width="*"
MinWidth="180" />
<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="120">
<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="90">
<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">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Style="{StaticResource TracksGridWrapTextDisplay}"
Text="{Binding Details, Mode=OneWay}"
ToolTip="{Binding Details, Mode=OneWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,8,0,0">
<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>
</Window>