emby-toolbox/EmbyToolbox/Views/MergeView.xaml
2026-05-16 11:45:33 +05:00

198 lines
9.6 KiB
XML

<UserControl x:Class="EmbyToolbox.Views.MergeView"
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:converters="clr-namespace:EmbyToolbox.Converters"
xmlns:behaviors="clr-namespace:EmbyToolbox.Behaviors"
mc:Ignorable="d"
d:DesignWidth="900"
d:DesignHeight="600">
<UserControl.Resources>
<converters:BooleanToVisibilityConverter x:Key="BoolToVis" />
</UserControl.Resources>
<Border BorderBrush="{DynamicResource Ui.Brush.BorderSubtle}"
BorderThickness="1"
Background="{DynamicResource Ui.Brush.Surface}"
Padding="8">
<Grid Grid.IsSharedSizeScope="True">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid Grid.Column="0"
Background="Transparent"
behaviors:MergeDropTargetBehavior.IsEnabled="True">
<DataGrid x:Name="FilesGrid"
ItemsSource="{Binding Files}"
SelectedItem="{Binding SelectedItem, Mode=TwoWay}"
SelectionMode="Extended"
SelectionUnit="FullRow"
EnableRowVirtualization="True"
EnableColumnVirtualization="True"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.VirtualizationMode="Recycling"
SelectionChanged="FilesGrid_OnSelectionChanged"
PreviewKeyDown="FilesGrid_OnPreviewKeyDown"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
Style="{StaticResource UiDataGrid}"
RowStyle="{StaticResource UiDataGridRow}"
ColumnHeaderStyle="{StaticResource UiDataGridColumnHeader}"
CellStyle="{StaticResource UiDataGridCell}"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto">
<DataGrid.Columns>
<DataGridTextColumn Header="№" Binding="{Binding Number, Mode=OneWay}" IsReadOnly="True" Width="50" />
<DataGridTemplateColumn Header="Файл" Width="3*" MinWidth="200">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding FullPath}"
TextTrimming="CharacterEllipsis"
TextWrapping="NoWrap"
ToolTip="{Binding FullPath}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Размер, МБ" Binding="{Binding SizeMb, Mode=OneWay}" IsReadOnly="True" Width="90" />
<DataGridTextColumn Header="Имя части" Binding="{Binding PartName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="2*" MinWidth="200" />
</DataGrid.Columns>
</DataGrid>
<Border IsHitTestVisible="False">
<Border.Style>
<Style TargetType="Border">
<Setter Property="Background" Value="Transparent" />
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsMergeDropHighlight}" Value="True">
<Setter Property="Background" Value="{DynamicResource Ui.Brush.MergeDropOverlay}" />
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
</Grid>
<StackPanel Grid.Column="1" Margin="8,0,0,0">
<Button MinWidth="150"
Margin="0,0,0,8"
Style="{StaticResource UiButtonSecondary}"
Command="{Binding SelectVideoFilesCommand}"
Content="Добавить файлы" />
<Button MinWidth="150" Margin="0,0,0,8" Style="{StaticResource UiButtonSecondary}" Command="{Binding MoveUpCommand}" Content="Вверх" />
<Button MinWidth="150" Margin="0,0,0,8" Style="{StaticResource UiButtonSecondary}" Command="{Binding MoveDownCommand}" Content="Вниз" />
<Button MinWidth="150" Margin="0,0,0,8" Style="{StaticResource UiButtonSecondary}" Command="{Binding RefreshCommand}" Content="Обновить" />
<Button MinWidth="150" Margin="0,0,0,8" Style="{StaticResource UiButtonGhost}" Command="{Binding ClearListCommand}" Content="Очистить список" />
<Button MinWidth="150"
Style="{StaticResource UiButtonDanger}"
Command="{Binding RemoveFromListCommand}">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphButton}" Text="&#xE74D;" />
<TextBlock VerticalAlignment="Center" Text="Удалить из списка" />
</StackPanel>
</Button>
</StackPanel>
</Grid>
<StackPanel Grid.Row="1"
Margin="0,10,0,0"
Orientation="Vertical"
VerticalAlignment="Center">
<TextBlock Text="{Binding ValidationMessage, Mode=OneWay}"
Foreground="{DynamicResource Ui.Brush.ErrorText}"
Margin="0,0,0,6"
TextWrapping="Wrap">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding HasValidationMessage, Mode=OneWay}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</StackPanel>
<Grid Grid.Row="2"
Margin="0,10,0,8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="MergeFormLabelCol" />
<ColumnDefinition Width="8" />
<ColumnDefinition Width="*" MinWidth="160" />
<ColumnDefinition Width="8" />
<ColumnDefinition Width="Auto" SharedSizeGroup="MergeIconBtnCol" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Style="{StaticResource UiTextCaption}"
VerticalAlignment="Center"
Text="Итоговый файл:" />
<TextBox Grid.Column="2"
VerticalAlignment="Center"
Style="{StaticResource UiPathField}"
Text="{Binding MergedOutputPath, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
ToolTip="{Binding MergedOutputPath}" />
<Button Grid.Column="4"
Style="{StaticResource UiButtonIconOnlySecondary}"
Command="{Binding SelectOutputFileCommand}"
ToolTipService.ShowDuration="60000"
ToolTip="Выбор итогового файла">
<TextBlock Style="{StaticResource UiMdlGlyphIconOnlyMuted}" Text="&#xE712;" />
</Button>
</Grid>
<Grid Grid.Row="3"
Margin="0,0,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="1"
Orientation="Horizontal"
HorizontalAlignment="Right">
<Button MinWidth="138"
Margin="0,0,8,0"
Style="{StaticResource UiButtonPrimary}"
Command="{Binding MergeCommand}">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphOnPrimary}" Text="&#xEA3C;" />
<TextBlock VerticalAlignment="Center" Text="Объединить" />
</StackPanel>
</Button>
<Button MinWidth="118"
Margin="0,0,8,0"
Style="{StaticResource UiButtonSecondary}"
Command="{Binding CancelOrClearCommand}"
Visibility="{Binding IsRunning, Converter={StaticResource BoolToVis}}">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphButton}" Text="&#xE711;" />
<TextBlock VerticalAlignment="Center" Text="Отмена" />
</StackPanel>
</Button>
<Button MinWidth="118"
Style="{StaticResource UiButtonGhost}"
Command="{Binding CancelOrClearCommand}"
Visibility="{Binding IsRunning, Converter={StaticResource BoolToVis}, ConverterParameter=Invert}">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphButton}" Text="&#xE894;" />
<TextBlock VerticalAlignment="Center" Text="Очистить" />
</StackPanel>
</Button>
</StackPanel>
</Grid>
</Grid>
</Border>
</UserControl>