emby-toolbox/EmbyToolbox/Views/ConversionView.xaml
2026-05-16 15:04:43 +05:00

517 lines
29 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.

<UserControl x:Class="EmbyToolbox.Views.ConversionView"
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:models="clr-namespace:EmbyToolbox.Models"
xmlns:vm="clr-namespace:EmbyToolbox.ViewModels"
xmlns:behaviors="clr-namespace:EmbyToolbox.Behaviors"
xmlns:converters="clr-namespace:EmbyToolbox.Converters"
mc:Ignorable="d"
d:DesignWidth="900"
d:DesignHeight="600">
<UserControl.Resources>
<converters:BooleanToVisibilityConverter x:Key="BoolToVis" />
<Style x:Key="QueueDataGridColumnHeader" TargetType="DataGridColumnHeader" BasedOn="{StaticResource UiDataGridColumnHeader}">
<Setter Property="Height" Value="NaN" />
<Setter Property="MinHeight" Value="40" />
<Setter Property="Padding" Value="4,6" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
<Style x:Key="QueueDataGridCell" TargetType="DataGridCell" BasedOn="{StaticResource UiDataGridCell}">
<Setter Property="VerticalContentAlignment" Value="Center" />
</Style>
<!-- Две строки текста (FontSize 11, LineHeight 16), обрезка лишнего -->
<Style x:Key="QueueTextBlockTwoLine" 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>
<Style x:Key="QueueTextBlockCellSingle" TargetType="TextBlock" BasedOn="{StaticResource UiDataGridTextElement}">
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
</UserControl.Resources>
<Border BorderBrush="{DynamicResource Ui.Brush.BorderSubtle}"
BorderThickness="1"
Background="{DynamicResource Ui.Brush.Surface}"
Padding="8">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid Grid.Row="0" Margin="0,0,0,12" VerticalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0"
Orientation="Horizontal"
VerticalAlignment="Center">
<Button MinWidth="120"
Margin="0,0,8,0"
Style="{StaticResource UiButtonSecondary}"
IsEnabled="{Binding CanEditQueue}"
behaviors:ContextMenuOpenOnButtonClickBehavior.IsEnabled="True"
ToolTipService.ShowDuration="60000"
ToolTip="Добавить файлы или каталог">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Файл" Command="{Binding AddFilesCommand}" />
<MenuItem Header="Каталог" Command="{Binding AddFolderCommand}" />
</ContextMenu>
</Button.ContextMenu>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="&#xE710;"
FontFamily="Segoe MDL2 Assets"
FontSize="16"
Foreground="{DynamicResource Ui.Brush.Muted}"
VerticalAlignment="Center"
Margin="0,0,6,0" />
<TextBlock VerticalAlignment="Center" Text="Добавить" />
<TextBlock Style="{StaticResource UiSplitChevronMuted}" Text="&#xE70D;" />
</StackPanel>
</Button>
<Button MinWidth="124"
Margin="0,0,8,0"
Style="{StaticResource UiButtonSecondary}"
IsEnabled="{Binding CanEditQueue}"
behaviors:ContextMenuOpenOnButtonClickBehavior.IsEnabled="True"
ToolTip="Сохранить или загрузить очередь">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Сохранить очередь" Command="{Binding SaveQueueCommand}" />
<MenuItem Header="Загрузить очередь" Command="{Binding LoadQueueCommand}" />
<Separator />
<MenuItem Header="Настроить дорожки"
Command="{Binding OpenBulkFileConversionSettingsCommand}" />
</ContextMenu>
</Button.ContextMenu>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="&#xE8FD;"
FontFamily="Segoe MDL2 Assets"
FontSize="16"
Foreground="{DynamicResource Ui.Brush.Muted}"
VerticalAlignment="Center"
Margin="0,0,6,0" />
<TextBlock VerticalAlignment="Center" Text="Очередь" />
<TextBlock Style="{StaticResource UiSplitChevronMuted}" Text="&#xE70D;" />
</StackPanel>
</Button>
<Button MinWidth="120"
Style="{StaticResource UiButtonGhost}"
IsEnabled="{Binding CanEditQueue}"
behaviors:ContextMenuOpenOnButtonClickBehavior.IsEnabled="True"
ToolTip="Очистить завершенные задачи или всю очередь">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Очистить завершенные" Command="{Binding ClearCompletedFromQueueCommand}" />
<MenuItem Header="Очистить все" Command="{Binding ClearQueueCommand}" />
</ContextMenu>
</Button.ContextMenu>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphButton}"
Margin="0,0,4,0"
Text="&#xE894;" />
<TextBlock VerticalAlignment="Center" Margin="0,0,2,0" Text="Очистить" />
<TextBlock Style="{StaticResource UiSplitChevronMuted}" Text="&#xE70D;" />
</StackPanel>
</Button>
</StackPanel>
</Grid>
<Grid Grid.Row="1" MinHeight="0">
<DataGrid x:Name="QueueDataGrid"
VerticalAlignment="Stretch"
ItemsSource="{Binding QueueTasksView}"
IsReadOnly="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserResizeColumns="True"
CanUserSortColumns="True"
AutoGenerateColumns="False"
ColumnHeaderStyle="{StaticResource QueueDataGridColumnHeader}"
CellStyle="{StaticResource QueueDataGridCell}"
GridLinesVisibility="Horizontal"
HeadersVisibility="Column"
RowHeaderWidth="0"
SelectionMode="Extended"
SelectionUnit="FullRow"
EnableRowVirtualization="True"
EnableColumnVirtualization="True"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.VirtualizationMode="Recycling"
SelectedItem="{Binding SelectedQueueItem, Mode=TwoWay}"
FontSize="11"
RowHeight="46"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
behaviors:ConversionQueueDropTargetBehavior.IsDropTargetEnabled="True"
behaviors:DataGridRowDoubleClickCommandBehavior.Command="{Binding OpenFileConversionSettingsCommand}"
behaviors:DataGridAutoScrollSelectionBehavior.ScrollIntoViewItem="{Binding QueueItemToReveal}"
SelectionChanged="QueueDataGrid_SelectionChanged">
<DataGrid.InputBindings>
<KeyBinding Key="Delete"
Command="{Binding RemoveSelectedQueueItemsCommand}"
CommandParameter="{Binding ElementName=QueueDataGrid, Path=SelectedItems}" />
<KeyBinding Key="F2"
Command="{Binding OpenTrackSettingsCommand}"
CommandParameter="{Binding ElementName=QueueDataGrid, Path=SelectedItems}" />
</DataGrid.InputBindings>
<DataGrid.ContextMenu>
<ContextMenu Opened="QueueContextMenu_Opened"
DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}">
<MenuItem Header="Удалить из очереди"
Command="{Binding RemoveSelectedFromQueueCommand}"
CommandParameter="{Binding PlacementTarget.SelectedItems, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
<MenuItem Header="Настроить дорожки"
Command="{Binding OpenBulkFileConversionSettingsCommand}"
CommandParameter="{Binding PlacementTarget.SelectedItems, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
<Separator />
<MenuItem Header="Показать в папке"
Command="{Binding ShowInFolderCommand}"
CommandParameter="{Binding PlacementTarget.SelectedItems, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
<MenuItem Header="Воспроизвести"
Command="{Binding PlayFileCommand}"
CommandParameter="{Binding PlacementTarget.SelectedItems, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
<MenuItem Header="Копировать ошибку"
Visibility="{Binding CopyQueueItemErrorMenuVisible, Converter={StaticResource BoolToVis}}"
Command="{Binding CopyQueueItemErrorCommand}"
CommandParameter="{Binding PlacementTarget.SelectedItems, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Style>
<Style TargetType="DataGrid" BasedOn="{StaticResource UiDataGrid}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsQueueDropHighlight}" Value="True">
<Setter Property="BorderBrush" Value="{DynamicResource Ui.Brush.Accent}" />
<Setter Property="Background" Value="{DynamicResource Ui.Brush.QueueDropOverlay}" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Style>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow" BasedOn="{StaticResource UiDataGridRow}">
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Status}" Value="{x:Static models:ConversionQueueStatus.Running}">
<Setter Property="Background" Value="{DynamicResource Ui.Brush.QueueRunning}" />
<Setter Property="FontWeight" Value="SemiBold" />
<Setter Property="BorderBrush" Value="{DynamicResource Ui.Brush.QueueRunningBorder}" />
<Setter Property="BorderThickness" Value="1" />
</DataTrigger>
<DataTrigger Binding="{Binding Status}" Value="{x:Static models:ConversionQueueStatus.Copying}">
<Setter Property="Background" Value="{DynamicResource Ui.Brush.QueueCopying}" />
</DataTrigger>
<DataTrigger Binding="{Binding Status}" Value="{x:Static models:ConversionQueueStatus.Replacing}">
<Setter Property="Background" Value="{DynamicResource Ui.Brush.QueueReplacing}" />
</DataTrigger>
<DataTrigger Binding="{Binding Status}" Value="{x:Static models:ConversionQueueStatus.Done}">
<Setter Property="Background" Value="{DynamicResource Ui.Brush.QueueRowDone}" />
</DataTrigger>
<DataTrigger Binding="{Binding Status}" Value="{x:Static models:ConversionQueueStatus.Error}">
<Setter Property="Background" Value="{DynamicResource Ui.Brush.QueueError}" />
</DataTrigger>
<DataTrigger Binding="{Binding Status}" Value="{x:Static models:ConversionQueueStatus.Cancelled}">
<Setter Property="Background" Value="{DynamicResource Ui.Brush.QueueCancelled}" />
</DataTrigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
<Setter Property="Opacity" Value="0.95" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTemplateColumn IsReadOnly="True" MinWidth="45" Width="55" SortMemberPath="OrderNumber">
<DataGridTemplateColumn.Header>
<TextBlock Text="№" TextAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Center" MaxWidth="40" />
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="{x:Type models:ConversionQueueItem}">
<TextBlock Text="{Binding DisplayIndexText, Mode=OneWay}"
ToolTip="{Binding ManualEditToolTip, Mode=OneWay}"
HorizontalAlignment="Center"
Style="{StaticResource QueueTextBlockCellSingle}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn MinWidth="200" Width="1*" IsReadOnly="True" SortMemberPath="FullPath">
<DataGridTemplateColumn.Header>
<TextBlock Text="Файл" TextAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Center" />
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="{x:Type models:ConversionQueueItem}">
<Border Background="Transparent"
ClipToBounds="True"
MaxHeight="38"
ToolTip="{Binding FullPath, Mode=OneWay}"
VerticalAlignment="Center">
<StackPanel Orientation="Vertical"
VerticalAlignment="Center">
<TextBlock Text="{Binding FileName, Mode=OneWay}"
FontWeight="SemiBold"
TextTrimming="CharacterEllipsis"
Style="{StaticResource QueueTextBlockCellSingle}" />
<TextBlock Text="{Binding DirectoryPath, Mode=OneWay}"
FontSize="10"
Foreground="{DynamicResource Ui.Brush.Muted}"
TextTrimming="CharacterEllipsis"
Style="{StaticResource QueueTextBlockCellSingle}" />
</StackPanel>
</Border>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn IsReadOnly="True" MinWidth="70" Width="70" SortMemberPath="FileSizeMb" Binding="{Binding FileSizeMb, Mode=OneWay}">
<DataGridTextColumn.Header>
<TextBlock Text="Размер, МБ" TextAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Center" MaxWidth="66" />
</DataGridTextColumn.Header>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock" BasedOn="{StaticResource QueueTextBlockCellSingle}">
<Setter Property="TextAlignment" Value="Right" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Width="220" Binding="{Binding TrackSummaryDisplay, Mode=OneWay}">
<DataGridTextColumn.Header>
<TextBlock Text="Дорожки" TextAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Center" MaxWidth="120" />
</DataGridTextColumn.Header>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock" BasedOn="{StaticResource QueueTextBlockCellSingle}">
<Setter Property="TextAlignment" Value="Center" />
<Setter Property="TextTrimming" Value="None" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" MinWidth="80" Width="80" SortMemberPath="StatusSortOrder" Binding="{Binding Status, Mode=OneWay}">
<DataGridTextColumn.Header>
<TextBlock Text="Статус" TextAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Center" MaxWidth="76" />
</DataGridTextColumn.Header>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock" BasedOn="{StaticResource QueueTextBlockCellSingle}" />
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" MinWidth="70" Width="70" SortMemberPath="DisplayProgressPercent" Binding="{Binding DisplayProgressPercent, Mode=OneWay, StringFormat={}{0}}">
<DataGridTextColumn.Header>
<TextBlock Text="%" TextAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Center" MaxWidth="20" />
</DataGridTextColumn.Header>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock" BasedOn="{StaticResource QueueTextBlockCellSingle}">
<Setter Property="TextAlignment" Value="Right" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTemplateColumn MinWidth="100" Width="100" IsReadOnly="False" SortMemberPath="Profile">
<DataGridTemplateColumn.Header>
<TextBlock Text="Профиль" TextAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Center" MaxWidth="86" />
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="{x:Type models:ConversionQueueItem}">
<ComboBox
VerticalContentAlignment="Center"
Style="{StaticResource UiCombo}"
IsEnabled="{Binding DataContext.CanEditQueue, RelativeSource={RelativeSource AncestorType=UserControl}}"
DisplayMemberPath="Profile"
SelectedValuePath="Profile"
ItemsSource="{Binding DataContext.ConversionProfiles, RelativeSource={RelativeSource AncestorType=Window}}"
SelectedValue="{Binding Profile, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn IsReadOnly="True" MinWidth="120" Width="2*" SortMemberPath="PlanSummary" Binding="{Binding PlanSummary, Mode=OneWay}">
<DataGridTextColumn.Header>
<TextBlock Text="План обработки" TextAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Center" />
</DataGridTextColumn.Header>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock" BasedOn="{StaticResource QueueTextBlockTwoLine}">
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
<Setter Property="FontWeight" Value="Normal" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsSkipPlan}" Value="False">
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.PlanNonSkipText}" />
<Setter Property="FontWeight" Value="SemiBold" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
<Border HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Margin="0,0,0,0"
Padding="10,8"
Background="{DynamicResource Ui.Brush.Surface}"
BorderBrush="{DynamicResource Ui.Brush.BorderSubtle}"
BorderThickness="1"
MinWidth="220"
Visibility="{Binding AnalysisProgress.PanelVisibility}"
IsHitTestVisible="True">
<StackPanel>
<TextBlock Text="{Binding AnalysisProgress.StatusLine, Mode=OneWay}"
TextWrapping="Wrap"
Margin="0,0,0,6"
FontSize="11" />
<Button Margin="0,8,0,0"
HorizontalAlignment="Left"
Style="{StaticResource UiButtonSecondary}"
Command="{Binding AnalysisProgress.CancelCommand}">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphButton}" Text="&#xE711;" />
<TextBlock VerticalAlignment="Center" Text="Отмена" />
</StackPanel>
</Button>
</StackPanel>
</Border>
<Border HorizontalAlignment="Stretch"
VerticalAlignment="Top"
Margin="8,8,8,0"
MaxHeight="96"
Panel.ZIndex="2"
Background="Transparent"
Cursor="Hand"
Visibility="{Binding IsToastVisible, Converter={StaticResource BoolToVis}}">
<Border.InputBindings>
<MouseBinding MouseAction="LeftClick" Command="{Binding CloseToastCommand}" />
</Border.InputBindings>
<Border HorizontalAlignment="Right"
MaxWidth="520"
CornerRadius="6"
Padding="12,10"
BorderThickness="2">
<Border.Style>
<Style TargetType="Border">
<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>
<TextBlock Text="{Binding ToastMessage}"
TextWrapping="Wrap"
Foreground="{DynamicResource Ui.Brush.Text}"
FontWeight="SemiBold" />
</Border>
</Border>
</Grid>
<Grid Grid.Row="2" Margin="0,12,0,0" VerticalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" MinWidth="0" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0"
Margin="0,0,12,0"
Orientation="Vertical"
HorizontalAlignment="Left"
VerticalAlignment="Center">
<Border Padding="10,8"
BorderBrush="{DynamicResource Ui.Brush.BorderSubtle}"
BorderThickness="1"
Background="{DynamicResource Ui.Brush.Surface}"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Visibility="{Binding HasQueueTasks, Converter={StaticResource BoolToVis}}">
<StackPanel Orientation="Horizontal"
VerticalAlignment="Center">
<TextBlock VerticalAlignment="Center"
Foreground="{DynamicResource Ui.Brush.Caption}"
Text="Всего: " />
<TextBlock VerticalAlignment="Center"
FontWeight="SemiBold"
Foreground="{DynamicResource Ui.Brush.Text}"
Text="{Binding OverallQueueTotal, Mode=OneWay}" />
<TextBlock Margin="10,0"
VerticalAlignment="Center"
Foreground="{DynamicResource Ui.Brush.Caption}"
Text="|" />
<TextBlock VerticalAlignment="Center"
Foreground="{DynamicResource Ui.Brush.Caption}"
Text="Готово: " />
<TextBlock VerticalAlignment="Center"
FontWeight="SemiBold"
Foreground="{DynamicResource Ui.Brush.Success}"
Text="{Binding OverallQueueDoneCount, Mode=OneWay}" />
<TextBlock Margin="10,0"
VerticalAlignment="Center"
Foreground="{DynamicResource Ui.Brush.Caption}"
Text="|" />
<TextBlock VerticalAlignment="Center"
Foreground="{DynamicResource Ui.Brush.Caption}"
Text="Ошибки: " />
<TextBlock VerticalAlignment="Center"
FontWeight="SemiBold"
Foreground="{DynamicResource Ui.Brush.ErrorText}"
Text="{Binding OverallQueueErrorCount, Mode=OneWay}" />
</StackPanel>
</Border>
<StackPanel Orientation="Horizontal"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Margin="0,8,0,0">
<CheckBox Margin="0"
Height="24"
VerticalAlignment="Center"
VerticalContentAlignment="Center"
IsEnabled="{Binding CanEditQueue}"
IsChecked="{Binding CopyPreviousTrackSettings, Mode=TwoWay}">
<CheckBox.Content>
<TextBlock Text="Копировать настройки"
FontSize="12"
LineHeight="16"
LineStackingStrategy="BlockLineHeight" />
</CheckBox.Content>
<CheckBox.ToolTip>
<ToolTip MaxWidth="360">
<TextBlock TextWrapping="Wrap"
Text="Автоматически применять настройки дорожек из предыдущего файла, если структура дорожек совпадает." />
</ToolTip>
</CheckBox.ToolTip>
</CheckBox>
</StackPanel>
</StackPanel>
<StackPanel Grid.Column="1"
Orientation="Horizontal"
HorizontalAlignment="Right"
VerticalAlignment="Center">
<Button MinWidth="108"
Margin="0,0,8,0"
Style="{StaticResource UiButtonPrimary}"
Command="{Binding StartProcessingCommand}">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphOnPrimary}" Text="&#xE768;" />
<TextBlock VerticalAlignment="Center" Text="Старт" />
</StackPanel>
</Button>
<Button MinWidth="108"
Style="{StaticResource UiButtonSecondary}"
Command="{Binding StopProcessingCommand}">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphButton}" Text="&#xE71A;" />
<TextBlock VerticalAlignment="Center" Text="Стоп" />
</StackPanel>
</Button>
</StackPanel>
</Grid>
</Grid>
</Border>
</UserControl>