diff options
author | sr55 <[email protected]> | 2018-09-22 19:45:24 +0100 |
---|---|---|
committer | sr55 <[email protected]> | 2018-09-22 19:45:24 +0100 |
commit | c0ab54be2370f7ddd889738a425e8076d76c9043 (patch) | |
tree | 5b49b176cce9ea765538239aa5189a7c721529e2 /win/CS/HandBrakeWPF | |
parent | ebc64438a1c1621f9aef1d38f166419ed5b6e92c (diff) |
WinGui: Implementing the new queue design. This is currently experimental and has to be explicitly enabled in preferences -> General #1087
Diffstat (limited to 'win/CS/HandBrakeWPF')
17 files changed, 958 insertions, 289 deletions
diff --git a/win/CS/HandBrakeWPF/HandBrakeWPF.csproj b/win/CS/HandBrakeWPF/HandBrakeWPF.csproj index 7b9e55dac..c7c9d422b 100644 --- a/win/CS/HandBrakeWPF/HandBrakeWPF.csproj +++ b/win/CS/HandBrakeWPF/HandBrakeWPF.csproj @@ -351,6 +351,12 @@ <Compile Include="Views\MiniView.xaml.cs">
<DependentUpon>MiniView.xaml</DependentUpon>
</Compile>
+ <Compile Include="Views\Queue\QueueTwoContent.xaml.cs">
+ <DependentUpon>QueueTwoContent.xaml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Queue\QueueTwoView.xaml.cs">
+ <DependentUpon>QueueTwoView.xaml</DependentUpon>
+ </Compile>
<Compile Include="Views\Queue\Embedded.xaml.cs">
<DependentUpon>Embedded.xaml</DependentUpon>
</Compile>
@@ -552,6 +558,14 @@ <Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
+ <Page Include="Views\Queue\QueueTwoContent.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
+ <Page Include="Views\Queue\QueueTwoView.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </Page>
<Page Include="Views\Queue\Embedded.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
diff --git a/win/CS/HandBrakeWPF/Properties/ResourcesUI.Designer.cs b/win/CS/HandBrakeWPF/Properties/ResourcesUI.Designer.cs index 7478ef537..4c3609f4e 100644 --- a/win/CS/HandBrakeWPF/Properties/ResourcesUI.Designer.cs +++ b/win/CS/HandBrakeWPF/Properties/ResourcesUI.Designer.cs @@ -1618,6 +1618,15 @@ namespace HandBrakeWPF.Properties { }
/// <summary>
+ /// Looks up a localized string similar to Show the new experimental queue design..
+ /// </summary>
+ public static string Options_ShowExperimentalQueueDesign {
+ get {
+ return ResourceManager.GetString("Options_ShowExperimentalQueueDesign", resourceCulture);
+ }
+ }
+
+ /// <summary>
/// Looks up a localized string similar to Show Queue in line with the main UI..
/// </summary>
public static string Options_ShowQueueInline {
diff --git a/win/CS/HandBrakeWPF/Properties/ResourcesUI.resx b/win/CS/HandBrakeWPF/Properties/ResourcesUI.resx index e8660a2ab..dfa6745dc 100644 --- a/win/CS/HandBrakeWPF/Properties/ResourcesUI.resx +++ b/win/CS/HandBrakeWPF/Properties/ResourcesUI.resx @@ -1058,4 +1058,7 @@ This will not affect your current settings in the Subtitle tab.</value> <data name="SourceSelection_QueueArchiveRecoveryDesc" xml:space="preserve">
<value>A previous queue archive is available. </value>
</data>
+ <data name="Options_ShowExperimentalQueueDesign" xml:space="preserve">
+ <value>Show the new experimental queue design.</value>
+ </data>
</root>
\ No newline at end of file diff --git a/win/CS/HandBrakeWPF/Services/Queue/Model/QueueTask.cs b/win/CS/HandBrakeWPF/Services/Queue/Model/QueueTask.cs index be4c664fb..d8456519a 100644 --- a/win/CS/HandBrakeWPF/Services/Queue/Model/QueueTask.cs +++ b/win/CS/HandBrakeWPF/Services/Queue/Model/QueueTask.cs @@ -93,6 +93,7 @@ namespace HandBrakeWPF.Services.Queue.Model {
this.status = value;
this.NotifyOfPropertyChange(() => this.Status);
+ this.NotifyOfPropertyChange(() => this.ShowEncodeProgress);
}
}
@@ -116,6 +117,8 @@ namespace HandBrakeWPF.Services.Queue.Model }
}
+ public bool ShowEncodeProgress => this.Status == QueueItemStatus.InProgress && SystemInfo.IsWindows10();
+
#endregion
protected bool Equals(QueueTask other)
diff --git a/win/CS/HandBrakeWPF/UserSettingConstants.cs b/win/CS/HandBrakeWPF/UserSettingConstants.cs index 30d3d7557..c81f315a5 100644 --- a/win/CS/HandBrakeWPF/UserSettingConstants.cs +++ b/win/CS/HandBrakeWPF/UserSettingConstants.cs @@ -68,7 +68,9 @@ namespace HandBrakeWPF public const string EnableQuickSyncEncoding = "EnableQuickSyncEncoding";
public const string EnableVceEncoder = "EnableVceEncoder";
public const string EnableNvencEncoder = "EnableNvencEncoder";
+ public const string ShowExperimentalQueue = "ShowExperimentalQueue";
#endregion
+
}
}
\ No newline at end of file diff --git a/win/CS/HandBrakeWPF/Utilities/SystemInfo.cs b/win/CS/HandBrakeWPF/Utilities/SystemInfo.cs index 57c768fdd..ca32b7af4 100644 --- a/win/CS/HandBrakeWPF/Utilities/SystemInfo.cs +++ b/win/CS/HandBrakeWPF/Utilities/SystemInfo.cs @@ -110,5 +110,14 @@ namespace HandBrakeWPF.Utilities return gpuInfo; } } + + public static bool IsWindows10() + { + var reg = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion"); + + string productName = (string)reg.GetValue("ProductName"); + + return productName.StartsWith("Windows 10"); + } } } diff --git a/win/CS/HandBrakeWPF/ViewModels/Interfaces/IQueueViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/Interfaces/IQueueViewModel.cs index 4f455d373..2e1de25a4 100644 --- a/win/CS/HandBrakeWPF/ViewModels/Interfaces/IQueueViewModel.cs +++ b/win/CS/HandBrakeWPF/ViewModels/Interfaces/IQueueViewModel.cs @@ -15,6 +15,13 @@ namespace HandBrakeWPF.ViewModels.Interfaces public interface IQueueViewModel
{
/// <summary>
+ /// Temporary variable to toggle the new style experimental queue.
+ /// </summary>
+ bool IsNewQueueVisible { set; }
+
+ bool IsInline { set; }
+
+ /// <summary>
/// The when done action after a queue completes.
/// </summary>
/// <param name="action">
diff --git a/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs index 447810846..980e52531 100644 --- a/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs +++ b/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs @@ -1400,6 +1400,10 @@ namespace HandBrakeWPF.ViewModels public void OpenQueueWindow()
{
bool showQueueInline = this.userSettingService.GetUserSetting<bool>(UserSettingConstants.ShowQueueInline);
+ bool showNewQueue = this.userSettingService.GetUserSetting<bool>(UserSettingConstants.ShowExperimentalQueue); ;
+
+ this.QueueViewModel.IsNewQueueVisible = showNewQueue;
+ this.QueueViewModel.IsInline = showQueueInline;
if (showQueueInline)
{
diff --git a/win/CS/HandBrakeWPF/ViewModels/OptionsViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/OptionsViewModel.cs index 75e6d9da7..fb9cf5228 100644 --- a/win/CS/HandBrakeWPF/ViewModels/OptionsViewModel.cs +++ b/win/CS/HandBrakeWPF/ViewModels/OptionsViewModel.cs @@ -88,7 +88,6 @@ namespace HandBrakeWPF.ViewModels private bool showAdvancedTab;
private bool removePunctuation;
private bool resetWhenDoneAction;
-
private bool enableQuickSyncDecoding;
private bool showQueueInline;
private bool pauseOnLowDiskspace;
@@ -96,16 +95,13 @@ namespace HandBrakeWPF.ViewModels private bool useQsvDecodeForNonQsvEnc;
private bool showStatusInTitleBar;
private bool showPreviewOnSummaryTab;
-
private string whenDoneAudioFile;
private bool playSoundWhenDone;
private bool playSoundWhenQueueDone;
-
private bool enableQuickSyncEncoding;
-
- private bool enableVceEncoder;
-
+ private bool enableVceEncoder;
private bool enableNvencEncoder;
+ private bool showExperimentalQueue;
#endregion
@@ -369,6 +365,17 @@ namespace HandBrakeWPF.ViewModels }
}
+ public bool ShowExperimentalQueue
+ {
+ get => this.showExperimentalQueue;
+ set
+ {
+ if (value == this.showExperimentalQueue) return;
+ this.showExperimentalQueue = value;
+ this.NotifyOfPropertyChange(() => this.ShowExperimentalQueue);
+ }
+ }
+
/// <summary>
/// Gets or sets a value indicating whether to show encode status in the tile bar.
/// </summary>
@@ -1357,7 +1364,8 @@ namespace HandBrakeWPF.ViewModels this.WhenDoneAudioFileFullPath = this.userSettingService.GetUserSetting<string>(UserSettingConstants.WhenDoneAudioFile);
this.PlaySoundWhenDone = this.userSettingService.GetUserSetting<bool>(UserSettingConstants.PlaySoundWhenDone);
this.PlaySoundWhenQueueDone = this.userSettingService.GetUserSetting<bool>(UserSettingConstants.PlaySoundWhenQueueDone);
-
+ this.ShowExperimentalQueue = this.userSettingService.GetUserSetting<bool>(UserSettingConstants.ShowExperimentalQueue);
+
// #############################
// Output Settings
// #############################
@@ -1518,13 +1526,17 @@ namespace HandBrakeWPF.ViewModels this.userSettingService.SetUserSetting(UserSettingConstants.SendFile, this.SendFileAfterEncode);
this.userSettingService.SetUserSetting(UserSettingConstants.SendFileToArgs, this.Arguments);
this.userSettingService.SetUserSetting(UserSettingConstants.ResetWhenDoneAction, this.ResetWhenDoneAction);
- this.userSettingService.SetUserSetting(UserSettingConstants.ShowQueueInline, this.ShowQueueInline);
this.userSettingService.SetUserSetting(UserSettingConstants.ShowStatusInTitleBar, this.ShowStatusInTitleBar);
this.userSettingService.SetUserSetting(UserSettingConstants.ShowPreviewOnSummaryTab, this.ShowPreviewOnSummaryTab);
this.userSettingService.SetUserSetting(UserSettingConstants.PlaySoundWhenDone, this.PlaySoundWhenDone);
this.userSettingService.SetUserSetting(UserSettingConstants.PlaySoundWhenQueueDone, this.PlaySoundWhenQueueDone);
this.userSettingService.SetUserSetting(UserSettingConstants.WhenDoneAudioFile, this.WhenDoneAudioFileFullPath);
+ /* Experiments */
+ this.userSettingService.SetUserSetting(UserSettingConstants.ShowQueueInline, this.ShowQueueInline);
+ this.userSettingService.SetUserSetting(UserSettingConstants.ShowExperimentalQueue, this.ShowExperimentalQueue);
+
+
/* Output Files */
this.userSettingService.SetUserSetting(UserSettingConstants.AutoNaming, this.AutomaticallyNameFiles);
this.userSettingService.SetUserSetting(UserSettingConstants.AutoNameFormat, this.AutonameFormat);
diff --git a/win/CS/HandBrakeWPF/ViewModels/QueueViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/QueueViewModel.cs index 57ebd2830..aefcf2980 100644 --- a/win/CS/HandBrakeWPF/ViewModels/QueueViewModel.cs +++ b/win/CS/HandBrakeWPF/ViewModels/QueueViewModel.cs @@ -47,8 +47,10 @@ namespace HandBrakeWPF.ViewModels private string jobsPending;
private string whenDoneAction;
private QueueTask selectedTask;
-
private bool isQueueRunning;
+ private double progressValue;
+ private bool intermediateProgress;
+ private bool showEncodeProgress;
#endregion
@@ -183,6 +185,10 @@ namespace HandBrakeWPF.ViewModels this.selectedTask = value;
this.NotifyOfPropertyChange(() => this.SelectedTask);
this.HandleLogData();
+
+ this.NotifyOfPropertyChange(() => this.CanRetryJob);
+ this.NotifyOfPropertyChange(() => this.CanEditJob);
+ this.NotifyOfPropertyChange(() => this.CanRemoveJob);
}
}
@@ -190,6 +196,49 @@ namespace HandBrakeWPF.ViewModels public string ActivityLog { get; private set; }
+ public bool CanRetryJob => this.SelectedTask != null && this.SelectedTask.Status != QueueItemStatus.Waiting;
+
+ public bool CanEditJob => this.SelectedTask != null;
+
+ public bool CanRemoveJob => this.SelectedTask != null;
+
+ public double ProgressValue
+ {
+ get => this.progressValue;
+ set
+ {
+ if (value == this.progressValue) return;
+ this.progressValue = value;
+ this.NotifyOfPropertyChange(() => this.ProgressValue);
+ }
+ }
+
+ public bool IntermediateProgress
+ {
+ get => this.intermediateProgress;
+ set
+ {
+ if (value == this.intermediateProgress) return;
+ this.intermediateProgress = value;
+ this.NotifyOfPropertyChange(() => this.IntermediateProgress);
+ }
+ }
+
+ public bool ShowEncodeProgress
+ {
+ get => this.showEncodeProgress;
+ set
+ {
+ if (value == this.showEncodeProgress) return;
+ this.showEncodeProgress = value;
+ this.NotifyOfPropertyChange(() => this.ShowEncodeProgress);
+ }
+ }
+
+ public bool IsNewQueueVisible { get; set; }
+
+ public bool IsInline { get; set; }
+
#endregion
#region Public Methods
@@ -376,6 +425,7 @@ namespace HandBrakeWPF.ViewModels task.Status = QueueItemStatus.Waiting;
this.queueProcessor.BackupQueue(null);
this.JobsPending = string.Format(Resources.QueueViewModel_JobsPending, this.queueProcessor.Count);
+ this.NotifyOfPropertyChange(() => this.CanRetryJob);
}
/// <summary>
@@ -611,6 +661,8 @@ namespace HandBrakeWPF.ViewModels Execute.OnUIThread(() =>
{
string jobsPending = string.Format(Resources.Main_JobsPending_addon, this.queueProcessor.Count);
+ this.IntermediateProgress = false;
+
if (e.IsSubtitleScan)
{
this.JobStatus = string.Format(Resources.MainViewModel_EncodeStatusChanged_SubScan_StatusLabel,
@@ -620,14 +672,18 @@ namespace HandBrakeWPF.ViewModels e.EstimatedTimeLeft,
e.ElapsedTime,
jobsPending);
+
+ this.ProgressValue = e.PercentComplete;
}
else if (e.IsMuxing)
{
this.JobStatus = ResourcesUI.MainView_Muxing;
+ this.IntermediateProgress = true;
}
else if (e.IsSearching)
{
this.JobStatus = string.Format(ResourcesUI.MainView_ProgressStatusWithTask, ResourcesUI.MainView_Searching, e.PercentComplete, e.EstimatedTimeLeft, jobsPending);
+ this.ProgressValue = e.PercentComplete;
}
else
{
@@ -641,6 +697,7 @@ namespace HandBrakeWPF.ViewModels e.EstimatedTimeLeft,
e.ElapsedTime,
jobsPending);
+ this.ProgressValue = e.PercentComplete;
}
});
}
@@ -663,6 +720,10 @@ namespace HandBrakeWPF.ViewModels this.JobStatus = Resources.QueueViewModel_QueueNotRunning;
this.IsQueueRunning = false;
}
+
+ this.NotifyOfPropertyChange(() => this.CanRetryJob);
+ this.NotifyOfPropertyChange(() => this.CanEditJob);
+ this.NotifyOfPropertyChange(() => this.CanRemoveJob);
}
/// <summary>
diff --git a/win/CS/HandBrakeWPF/Views/MainView.xaml b/win/CS/HandBrakeWPF/Views/MainView.xaml index d9cea5db9..0c27e9ff1 100644 --- a/win/CS/HandBrakeWPF/Views/MainView.xaml +++ b/win/CS/HandBrakeWPF/Views/MainView.xaml @@ -547,14 +547,14 @@ </StackPanel>
<!-- Queue in-line display if enabled -->
- <Grid Grid.Row="4" Grid.Column="0" Margin="10,0,10,10" Visibility="{Binding IsQueueShowingInLine, Converter={StaticResource boolToVisConverter}, ConverterParameter=false}"
+ <Grid Grid.Row="4" Grid.Column="0" Margin="10,0,10,10" Visibility="{Binding IsQueueShowingInLine, Converter={StaticResource boolToVisConverter}, ConverterParameter=false}"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Label Content="Queue" FontWeight="Bold" Grid.Row="0"/>
- <ContentControl x:Name="QueueViewModel" cal:View.Context="Embedded" Grid.Row="1" />
+ <ContentControl cal:View.Model="{Binding QueueViewModel}" cal:View.Context="QueueTwoContent" Grid.Row="1" />
</Grid>
<!-- Presets -->
diff --git a/win/CS/HandBrakeWPF/Views/OptionsView.xaml b/win/CS/HandBrakeWPF/Views/OptionsView.xaml index cdfc4d862..ae6dccfca 100644 --- a/win/CS/HandBrakeWPF/Views/OptionsView.xaml +++ b/win/CS/HandBrakeWPF/Views/OptionsView.xaml @@ -184,7 +184,9 @@ <StackPanel Orientation="Vertical" Margin="20,0,0,0">
<TextBlock Text="{x:Static Properties:ResourcesUI.Options_ExperimentalFeatures}" Margin="0,0,0,10" />
- <CheckBox Content="{x:Static Properties:ResourcesUI.Options_ShowQueueInline}" IsChecked="{Binding ShowQueueInline}" />
+
+ <CheckBox Content="{x:Static Properties:ResourcesUI.Options_ShowExperimentalQueueDesign}" IsChecked="{Binding ShowExperimentalQueue}" />
+ <CheckBox Content="{x:Static Properties:ResourcesUI.Options_ShowQueueInline}" IsChecked="{Binding ShowQueueInline}" Margin="20,5,0,0" />
</StackPanel>
</StackPanel>
</StackPanel>
diff --git a/win/CS/HandBrakeWPF/Views/Queue/QueueTwoContent.xaml b/win/CS/HandBrakeWPF/Views/Queue/QueueTwoContent.xaml new file mode 100644 index 000000000..3e3a93d80 --- /dev/null +++ b/win/CS/HandBrakeWPF/Views/Queue/QueueTwoContent.xaml @@ -0,0 +1,386 @@ +<UserControl x:Class="HandBrakeWPF.Views.Queue.QueueTwoContent" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:cal="http://www.caliburnproject.org" + xmlns:Converters="clr-namespace:HandBrakeWPF.Converters" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:dd="clr-namespace:GongSolutions.Wpf.DragDrop;assembly=GongSolutions.Wpf.DragDrop" + xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:Audio="clr-namespace:HandBrakeWPF.Converters.Audio" + xmlns:Subtitles="clr-namespace:HandBrakeWPF.Converters.Subtitles" + xmlns:video="clr-namespace:HandBrakeWPF.Converters.Video" + xmlns:commands="clr-namespace:HandBrakeWPF.Commands" + xmlns:helpers="clr-namespace:HandBrakeWPF.Helpers" + xmlns:Properties="clr-namespace:HandBrakeWPF.Properties" + xmlns:queue="clr-namespace:HandBrakeWPF.Converters.Queue" + TextOptions.TextFormattingMode="Display" + mc:Ignorable="d"> + + <UserControl.Resources> + <Converters:BooleanToVisibilityConverter x:Key="boolToVisConverter" /> + <Converters:FullPathToFileNameConverter x:Key="filePathToFilenameConverter" /> + <Converters:EnumComboConverter x:Key="enumComboConverter" /> + <Converters:QueueStatusToVisibilityConverter x:Key="queueStatusVisConverter" /> + <Converters:InverseBooleanConverter x:Key="notBooleanConverter" /> + <Audio:AudioQueueDisplayConverter x:Key="audioTrackDisplayConverter" /> + <Subtitles:SubtitlesQueueDisplayConverter x:Key="subtitleTrackDisplayConverter" /> + <video:EncoderOptionsTooltipConverter x:Key="encoderOptionsTooltipConverter" /> + <video:VideoOptionsTooltipConverter x:Key="videoOptionsTooltipConverter" /> + <queue:PictureSettingsDescConveter x:Key="pictureSettingsDescConverter" /> + + <Style x:Key="LongToolTipHolder" TargetType="FrameworkElement"> + <Setter Property="ToolTipService.ShowDuration" Value="10000" /> + </Style> + + </UserControl.Resources> + + <Grid> + + <Grid.RowDefinitions> + <RowDefinition Height="Auto" /> + <RowDefinition Height="Auto" /> + <RowDefinition Height="*" /> + </Grid.RowDefinitions> + + <Grid HorizontalAlignment="Stretch" Grid.Row="0" Visibility="{Binding IsNewQueueVisible, Converter={StaticResource boolToVisConverter}}"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto" /> + <ColumnDefinition Width="*" /> + <ColumnDefinition Width="Auto" /> + <ColumnDefinition Width="Auto" /> + </Grid.ColumnDefinitions> + + <TextBlock Text="{x:Static Properties:ResourcesUI.MainView_ShowQueue}" FontSize="28" VerticalAlignment="Center" FontFamily="Segoe UI Light" Margin="10,0,0,0" /> + + <Menu HorizontalAlignment="Right" VerticalAlignment="Center" Background="Transparent" Grid.Column="2"> + <MenuItem> + <MenuItem.Header> + <StackPanel Height="32" Orientation="Horizontal"> + <TextBlock VerticalAlignment="Center" + FontWeight="Bold" + Text="{x:Static Properties:ResourcesUI.QueueView_WhenDone}" /> + <Label Margin="8,0,0,0" + VerticalAlignment="Center" + Content="{Binding WhenDoneAction}" /> + <Path Height="5" + Margin="2,2,2,0" + Data="M 0 0 L 4 4 L 8 0 Z" + Fill="{DynamicResource GlyphBrush}" /> + </StackPanel> + </MenuItem.Header> + + <MenuItem x:Name="doNothing" + cal:Message.Attach="[Event Click] = [Action WhenDone(doNothing.Header)]" + Header="{x:Static Properties:ResourcesUI.QueueView_DoNothing}" /> + <MenuItem x:Name="shutdown" + cal:Message.Attach="[Event Click] = [Action WhenDone(shutdown.Header)]" + Header="{x:Static Properties:ResourcesUI.QueueView_Shutdown}" /> + <MenuItem x:Name="suspend" + cal:Message.Attach="[Event Click] = [Action WhenDone(suspend.Header)]" + Header="{x:Static Properties:ResourcesUI.QueueView_Suspend}" /> + <MenuItem x:Name="hibernate" + cal:Message.Attach="[Event Click] = [Action WhenDone(hibernate.Header)]" + Header="{x:Static Properties:ResourcesUI.QueueView_Hibernate}"/> + <MenuItem x:Name="lock" + cal:Message.Attach="[Event Click] = [Action WhenDone(lock.Header)]" + Header="{x:Static Properties:ResourcesUI.QueueView_LockSystem}" /> + <MenuItem x:Name="logoff" + cal:Message.Attach="[Event Click] = [Action WhenDone(logoff.Header)]" + Header="{x:Static Properties:ResourcesUI.QueueView_Logoff}"/> + <MenuItem x:Name="quit" + cal:Message.Attach="[Event Click] = [Action WhenDone(quit.Header)]" + Header="{x:Static Properties:ResourcesUI.QueueView_QuitHandBrake}"/> + </MenuItem> + </Menu> + + <Menu HorizontalAlignment="Right" Background="Transparent" VerticalAlignment="Center" Grid.Column="3"> + <MenuItem> + <MenuItem.Header> + <StackPanel Height="32" Orientation="Horizontal"> + <Image Source="..\Images\Advanced.png" Width="20" Height="20" VerticalAlignment="Center" /> + <TextBlock VerticalAlignment="Center" + Text="{x:Static Properties:ResourcesUI.QueueView_Options}" Margin="5,0,0,0" /> + <Path Height="5" + Margin="2,2,2,0" + Data="M 0 0 L 4 4 L 8 0 Z" + Fill="{DynamicResource GlyphBrush}" /> + </StackPanel> + </MenuItem.Header> + + <MenuItem cal:Message.Attach="[Event Click] = [Action ClearCompleted]" Header="{x:Static Properties:ResourcesUI.QueueView_ClearCompleted}" /> + <MenuItem cal:Message.Attach="[Event Click] = [Action Clear]" Header="{x:Static Properties:ResourcesUI.QueueView_ClearQueue}" /> + <Separator /> + <MenuItem cal:Message.Attach="[Event Click] = [Action Export]" Header="{x:Static Properties:ResourcesUI.QueueView_Export}" /> + + </MenuItem> + </Menu> + + </Grid> + + <StackPanel Grid.Row="1" Margin="20,10,10,0" Visibility="{Binding IsNewQueueVisible, Converter={StaticResource boolToVisConverter}}"> + <TextBlock Text="{Binding JobsPending}" TextWrapping="WrapWithOverflow" TextTrimming="CharacterEllipsis" /> + <TextBlock Text="{Binding JobStatus}" TextWrapping="WrapWithOverflow" TextTrimming="CharacterEllipsis"/> + </StackPanel> + + <Grid Grid.Row="2" Margin="0,10,0,0"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="3*" MaxWidth="400" x:Name="leftTabPanel" /> + <ColumnDefinition Width="5*" x:Name="rightTabPanel" /> + </Grid.ColumnDefinitions> + + <ListBox Tag="{Binding}" x:Name="queueJobs" + Margin="10,0,10,10" + dd:DragDrop.DropHandler="{Binding}" + dd:DragDrop.IsDragSource="True" + dd:DragDrop.IsDropTarget="True" + ItemsSource="{Binding QueueTasks, Mode=OneWay}" + helpers:ListBoxHelper.SelectedItems="{Binding SelectedItems}" + SelectedItem="{Binding SelectedTask}" + SelectionMode="Extended"> + + <i:Interaction.Triggers> + <commands:InputBindingTrigger> + <commands:InputBindingTrigger.InputBinding> + <KeyBinding Key="Delete"/> + </commands:InputBindingTrigger.InputBinding> + <cal:ActionMessage MethodName="RemoveSelectedJobs" /> + </commands:InputBindingTrigger> + </i:Interaction.Triggers> + + <ListBox.ContextMenu> + <ContextMenu cal:Action.TargetWithoutContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}" Opened="ContextMenu_OnOpened"> + <MenuItem cal:Message.Attach="[Event Click] = [Action StartQueue]" Header="{x:Static Properties:ResourcesUI.QueueView_Start}" /> + <MenuItem cal:Message.Attach="[Event Click] = [Action PauseQueue]" Header="{x:Static Properties:ResourcesUI.QueueView_Pause}" /> + <Separator /> + <MenuItem cal:Message.Attach="[Event Click] = [Action ClearCompleted]" Header="{x:Static Properties:ResourcesUI.QueueView_ClearCompleted}" /> + <MenuItem cal:Message.Attach="[Event Click] = [Action Clear]" Header="{x:Static Properties:ResourcesUI.QueueView_ClearAll}" /> + <MenuItem cal:Message.Attach="[Event Click] = [Action RemoveSelectedJobs]" Header="{x:Static Properties:ResourcesUI.QueueView_ClearSelected}" /> + <Separator /> + <MenuItem Header="{x:Static Properties:ResourcesUI.QueueView_OpenSourceDir}" x:Name="openSourceDir" Click="OpenSourceDir_OnClick" /> + <MenuItem Header="{x:Static Properties:ResourcesUI.QueueView_OpenDestDir}" x:Name="openDestDir" Click="OpenDestDir_OnClick" /> + <Separator /> + <MenuItem cal:Message.Attach="[Event Click] = [Action Export]" Header="{x:Static Properties:ResourcesUI.QueueView_Export}" /> + </ContextMenu> + </ListBox.ContextMenu> + + <ListBox.ItemContainerStyle> + <Style TargetType="{x:Type ListBoxItem}"> + <Setter Property="HorizontalContentAlignment" Value="Stretch" /> + <Setter Property="Margin" Value="0,0,0,1" /> + </Style> + </ListBox.ItemContainerStyle> + + <ListBox.ItemTemplate> + <DataTemplate x:Name="QueueItemTemplate"> + + <Grid HorizontalAlignment="Stretch"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="40" /> + <ColumnDefinition Width="*" /> + <ColumnDefinition Width="Auto" /> + </Grid.ColumnDefinitions> + + <!-- Marker --> + <Image Grid.Column="0" Width="16" Height="16" SnapsToDevicePixels="True"> + + <Image.LayoutTransform> + <RotateTransform CenterX="8" CenterY="8" Angle="0"/> + </Image.LayoutTransform> + + <Image.Style> + <Style TargetType="{x:Type Image}"> + <Style.Triggers> + <DataTrigger Binding="{Binding Status, Converter={StaticResource enumComboConverter}}" Value="Waiting"> + <Setter Property="Source" Value="..\Images\Movies.png" /> + </DataTrigger> + <DataTrigger Binding="{Binding Status, Converter={StaticResource enumComboConverter}}" Value="In Progress"> + <Setter Property="Source" Value="..\Images\Working0.png" /> + <DataTrigger.EnterActions> + <BeginStoryboard> + <Storyboard> + <DoubleAnimation Duration="0:0:2" To="180" Storyboard.TargetProperty="(Image.LayoutTransform).(RotateTransform.Angle)" RepeatBehavior="Forever" /> + </Storyboard> + </BeginStoryboard> + </DataTrigger.EnterActions> + <DataTrigger.ExitActions> + <BeginStoryboard> + <Storyboard> + <DoubleAnimation Duration="0:0:0" To="0" Storyboard.TargetProperty="(Image.LayoutTransform).(RotateTransform.Angle)"/> + </Storyboard> + </BeginStoryboard> + </DataTrigger.ExitActions> + </DataTrigger> + <DataTrigger Binding="{Binding Status, Converter={StaticResource enumComboConverter}}" Value="Completed"> + <Setter Property="Source" Value="..\Images\Complete.png" /> + </DataTrigger> + <DataTrigger Binding="{Binding Status, Converter={StaticResource enumComboConverter}}" Value="Error"> + <Setter Property="Source" Value="..\Images\WarningSmall.png" /> + </DataTrigger> + </Style.Triggers> + </Style> + </Image.Style> + </Image> + + <!-- Settings --> + <StackPanel Grid.Column="1" + Margin="0,5,0,5" + HorizontalAlignment="Stretch"> + <StackPanel Orientation="Horizontal"> + <TextBlock FontWeight="Bold" Text="Title: " /> + <TextBlock Text="{Binding Task.Title}" /> + + <TextBlock Margin="10,0,0,0" + FontWeight="Bold" + Text="{Binding Task.PointToPointMode}" /> + <TextBlock Text=": " /> + <TextBlock Text="{Binding Task.StartPoint}" /> + <TextBlock Margin="5,0,5,0" Text="to" /> + <TextBlock Text="{Binding Task.EndPoint}" /> + </StackPanel> + + <StackPanel Orientation="Horizontal"> + <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_Source}" /> + <TextBlock Text="{Binding Task.Source, Converter={StaticResource filePathToFilenameConverter}}" /> + </StackPanel> + + <StackPanel Orientation="Horizontal"> + <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_Destination}" /> + <TextBlock Text="{Binding Task.Destination, Converter={StaticResource filePathToFilenameConverter}}" /> + </StackPanel> + + <ProgressBar Minimum="0" Height="4" Maximum="100" Name="pbStatus" Margin="0,0,5,0" + Value="{Binding DataContext.ProgressValue, ElementName=queueJobs}" IsIndeterminate="{Binding DataContext.IntermediateProgress, ElementName=queueJobs}" + Visibility="{Binding ShowEncodeProgress, Converter={StaticResource boolToVisConverter}}" /> + </StackPanel> + </Grid> + </DataTemplate> + </ListBox.ItemTemplate> + </ListBox> + + <TabControl x:Name="summaryTabControl" Grid.Column="1" Margin="0,0,10,10"> + <TabItem Header="Summary" > + <ScrollViewer VerticalScrollBarVisibility="Auto" Margin="5,5,0,5"> + + <StackPanel Orientation="Vertical" Margin="5,5,0,5"> + + <StackPanel Orientation="Horizontal" > + + <StackPanel.Resources> + <Style TargetType="Button"> + <Setter Property="Padding" Value="8,2" /> + </Style> + </StackPanel.Resources> + + + <Button Visibility="{Binding Status, Converter={StaticResource queueStatusVisConverter}}" > + <Button.Content> + <StackPanel Orientation="Horizontal"> + <Image Width="20" Height="20" VerticalAlignment="Center" Margin="0,0,5,0" + Source="../Images/Refresh.ico" ToolTip="{x:Static Properties:ResourcesTooltips.QueueView_ResetJobStatus}"> + </Image> + <TextBlock Text="Retry" /> + </StackPanel> + + </Button.Content> + <i:Interaction.Triggers> + <i:EventTrigger EventName="Click"> + <cal:ActionMessage MethodName="RetryJob"> + <cal:Parameter Value="{Binding SelectedTask}" /> + </cal:ActionMessage> + </i:EventTrigger> + </i:Interaction.Triggers> + </Button> + + <Button Margin="10,0,0,0"> + <Button.Content> + <StackPanel Orientation="Horizontal"> + <Image Width="20" Margin="0,0,5,0" Height="20" VerticalAlignment="Center" + Source="../Images/options24.png" ToolTip="{x:Static Properties:ResourcesTooltips.QueueView_ResetJobStatus}"> + </Image> + <TextBlock Text="Edit" /> + </StackPanel> + </Button.Content> + <i:Interaction.Triggers> + <i:EventTrigger EventName="Click"> + <cal:ActionMessage MethodName="EditJob"> + <cal:Parameter Value="{Binding SelectedTask}" /> + </cal:ActionMessage> + </i:EventTrigger> + </i:Interaction.Triggers> + </Button> + + <Button Margin="10,0,0,0"> + <Button.Content> + <StackPanel Orientation="Horizontal"> + <Image Width="20" Height="20" VerticalAlignment="Center" Margin="0,0,5,0" + Source="../Images/delete.png" ToolTip="{x:Static Properties:ResourcesTooltips.QueueView_ResetJobStatus}"> + </Image> + <TextBlock Text="Delete" /> + </StackPanel> + </Button.Content> + <i:Interaction.Triggers> + <i:EventTrigger EventName="Click"> + <cal:ActionMessage MethodName="RemoveJob"> + <cal:Parameter Value="{Binding SelectedTask}" /> + </cal:ActionMessage> + </i:EventTrigger> + </i:Interaction.Triggers> + </Button> + </StackPanel> + + <Grid Style="{StaticResource LongToolTipHolder}" Margin="0,5,0,0" > + <Grid.Resources> + <Style TargetType="TextBlock"> + <Setter Property="Margin" Value="0,5,0,5" /> + </Style> + </Grid.Resources> + + <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> + + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto" MinWidth="100" /> + <ColumnDefinition Width="*" /> + </Grid.ColumnDefinitions> + + <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_Source}" VerticalAlignment="Top" Grid.Row="0" Grid.Column="0" /> + <TextBlock Text="{Binding SelectedTask.Task.Source}" TextWrapping="Wrap" Grid.Row="0" Grid.Column="1" /> + + <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_Destination}" VerticalAlignment="Top" Grid.Row="1" Grid.Column="0" /> + <TextBlock Text="{Binding SelectedTask.Task.Destination}" TextWrapping="Wrap" Grid.Row="1" Grid.Column="1" /> + + <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_PictureSettings}" VerticalAlignment="Top" Grid.Row="2" Grid.Column="0" /> + <TextBlock Text="{Binding SelectedTask.Task, Converter={StaticResource pictureSettingsDescConverter}}" TextWrapping="Wrap" Grid.Row="2" Grid.Column="1" /> + + <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_Video}" Grid.Row="3" Grid.Column="0" /> + <TextBlock Text="{Binding SelectedTask.Task, Converter={StaticResource videoOptionsTooltipConverter}}" Grid.Row="3" Grid.Column="1" TextWrapping="Wrap" /> + + <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_Audio}" Grid.Row="4" Grid.Column="0"/> + <TextBlock Text="{Binding SelectedTask.Task.AudioTracks, Converter={StaticResource audioTrackDisplayConverter}}" + Grid.Row="4" Grid.Column="1"/> + + <TextBlock FontWeight="Bold" VerticalAlignment="Top" Text="{x:Static Properties:ResourcesUI.QueueView_Subtitles}" Grid.Row="5" Grid.Column="0" /> + <TextBlock Text="{Binding SelectedTask.Task.SubtitleTracks, Converter={StaticResource subtitleTrackDisplayConverter}}" + Grid.Row="5" Grid.Column="1" /> + + <TextBlock FontWeight="Bold" VerticalAlignment="Top" Grid.Row="6" Grid.Column="0" Text="{x:Static Properties:ResourcesUI.QueueView_Advanced}" /> + <TextBlock Text="{Binding SelectedTask.Task, Converter={StaticResource encoderOptionsTooltipConverter}}" Grid.Row="6" Grid.Column="1" TextWrapping="Wrap" /> + </Grid> + + </StackPanel> + </ScrollViewer> + </TabItem> + </TabControl> + + </Grid> + </Grid> +</UserControl> + diff --git a/win/CS/HandBrakeWPF/Views/Queue/QueueTwoContent.xaml.cs b/win/CS/HandBrakeWPF/Views/Queue/QueueTwoContent.xaml.cs new file mode 100644 index 000000000..4046d2c39 --- /dev/null +++ b/win/CS/HandBrakeWPF/Views/Queue/QueueTwoContent.xaml.cs @@ -0,0 +1,97 @@ +// -------------------------------------------------------------------------------------------------------------------- +// <copyright file="QueueTwoView.xaml.cs" company="HandBrake Project (http://handbrake.fr)"> +// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License. +// </copyright> +// <summary> +// Interaction logic for QueueTwoView.xaml +// </summary> +// -------------------------------------------------------------------------------------------------------------------- + +namespace HandBrakeWPF.Views.Queue +{ + using System.Windows; + using System.Windows.Controls; + using System.Windows.Input; + using System.Windows.Media; + + using HandBrakeWPF.Services.Queue.Model; + using HandBrakeWPF.ViewModels; + + /// <summary> + /// Interaction logic for VideoView + /// </summary> + public partial class QueueTwoContent : UserControl + { + private QueueTask mouseActiveQueueTask; + + /// <summary> + /// Initializes a new instance of the <see cref="Queue2View"/> class. + /// </summary> + public QueueTwoContent() + { + this.InitializeComponent(); + this.SizeChanged += this.Queue2View_SizeChanged; + } + + private void Queue2View_SizeChanged(object sender, SizeChangedEventArgs e) + { + // Make the view adaptive. + if (e.WidthChanged) + { + this.summaryTabControl.Visibility = this.ActualWidth < 550 ? Visibility.Collapsed : Visibility.Visible; + this.leftTabPanel.Width = this.ActualWidth < 550 ? new GridLength(this.ActualWidth - 10, GridUnitType.Star) : new GridLength(3, GridUnitType.Star); + this.leftTabPanel.MaxWidth = this.ActualWidth < 550 ? 550 : 400; + } + } + private void ContextMenu_OnOpened(object sender, RoutedEventArgs e) + { + ContextMenu menu = sender as ContextMenu; + this.mouseActiveQueueTask = null; + + if (menu != null) + { + Point p = Mouse.GetPosition(this); + HitTestResult result = VisualTreeHelper.HitTest(this, p); + + if (result != null) + { + ListBoxItem listBoxItem = FindParent<ListBoxItem>(result.VisualHit); + if (listBoxItem != null) + { + this.mouseActiveQueueTask = listBoxItem.DataContext as QueueTask; + } + } + } + + this.openSourceDir.IsEnabled = this.mouseActiveQueueTask != null; + this.openDestDir.IsEnabled = this.mouseActiveQueueTask != null; + } + + private static T FindParent<T>(DependencyObject from) where T : class + { + DependencyObject parent = VisualTreeHelper.GetParent(from); + + T result = null; + if (parent is T) + { + result = parent as T; + } + else if (parent != null) + { + result = FindParent<T>(parent); + } + + return result; + } + + private void OpenSourceDir_OnClick(object sender, RoutedEventArgs e) + { + ((QueueViewModel)this.DataContext).OpenSourceDirectory(this.mouseActiveQueueTask); + } + + private void OpenDestDir_OnClick(object sender, RoutedEventArgs e) + { + ((QueueViewModel)this.DataContext).OpenDestinationDirectory(this.mouseActiveQueueTask); + } + } +} diff --git a/win/CS/HandBrakeWPF/Views/Queue/QueueTwoView.xaml b/win/CS/HandBrakeWPF/Views/Queue/QueueTwoView.xaml new file mode 100644 index 000000000..a49d2503b --- /dev/null +++ b/win/CS/HandBrakeWPF/Views/Queue/QueueTwoView.xaml @@ -0,0 +1,15 @@ +<Window x:Class="HandBrakeWPF.Views.Queue.QueueTwoView" + 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:queue1="clr-namespace:HandBrakeWPF.Views.Queue" + Title="{Binding Title}" + WindowStartupLocation="CenterScreen" + TextOptions.TextFormattingMode="Display" + mc:Ignorable="d"> + + <queue1:QueueTwoContent DataContext="{Binding DataContext}" /> + +</Window> + diff --git a/win/CS/HandBrakeWPF/Views/Queue/QueueTwoView.xaml.cs b/win/CS/HandBrakeWPF/Views/Queue/QueueTwoView.xaml.cs new file mode 100644 index 000000000..550ab4b85 --- /dev/null +++ b/win/CS/HandBrakeWPF/Views/Queue/QueueTwoView.xaml.cs @@ -0,0 +1,35 @@ +// -------------------------------------------------------------------------------------------------------------------- +// <copyright file="QueueTwoView.xaml.cs" company="HandBrake Project (http://handbrake.fr)"> +// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License. +// </copyright> +// <summary> +// Interaction logic for QueueTwoView.xaml +// </summary> +// -------------------------------------------------------------------------------------------------------------------- + +namespace HandBrakeWPF.Views.Queue +{ + using System.Windows; + using System.Windows.Controls; + using System.Windows.Input; + using System.Windows.Media; + + using HandBrakeWPF.Services.Queue.Model; + using HandBrakeWPF.ViewModels; + + /// <summary> + /// Interaction logic for VideoView + /// </summary> + public partial class QueueTwoView : Window + { + + /// <summary> + /// Initializes a new instance of the <see cref="Queue2View"/> class. + /// </summary> + public QueueTwoView() + { + } + + + } +} diff --git a/win/CS/HandBrakeWPF/Views/QueueView.xaml b/win/CS/HandBrakeWPF/Views/QueueView.xaml index 8fe2aeaeb..305a7b9f4 100644 --- a/win/CS/HandBrakeWPF/Views/QueueView.xaml +++ b/win/CS/HandBrakeWPF/Views/QueueView.xaml @@ -14,11 +14,12 @@ xmlns:helpers="clr-namespace:HandBrakeWPF.Helpers"
xmlns:Properties="clr-namespace:HandBrakeWPF.Properties"
xmlns:queue="clr-namespace:HandBrakeWPF.Converters.Queue"
+ xmlns:queue1="clr-namespace:HandBrakeWPF.Views.Queue"
Title="{Binding Title}"
- Width="700"
+ Width="850"
Height="500"
- MinWidth="350"
- MinHeight="250"
+ MinWidth="450"
+ MinHeight="260"
WindowStartupLocation="CenterScreen"
TextOptions.TextFormattingMode="Display"
mc:Ignorable="d">
@@ -44,133 +45,141 @@ <Grid>
<Grid.RowDefinitions>
- <RowDefinition Height="Auto" />
- <RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
+ <queue1:QueueTwoContent DataContext="{Binding}" Visibility="{Binding IsNewQueueVisible, Converter={StaticResource boolToVisConverter}, ConverterParameter=false}" />
- <ToolBar Name="mainToolBar"
+ <Grid Visibility="{Binding IsNewQueueVisible, Converter={StaticResource boolToVisConverter}, ConverterParameter=true}">
+
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto" />
+ <RowDefinition Height="Auto" />
+ <RowDefinition Height="*" />
+ </Grid.RowDefinitions>
+
+
+ <ToolBar Name="mainToolBar"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
SnapsToDevicePixels="True"
AllowDrop="False" Focusable="False" >
- <ToolBar.Resources>
- <Style TargetType="{x:Type ToolBarPanel}">
- <Setter Property="Orientation" Value="Vertical"/>
- </Style>
+ <ToolBar.Resources>
+ <Style TargetType="{x:Type ToolBarPanel}">
+ <Setter Property="Orientation" Value="Vertical"/>
+ </Style>
- <Style BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" TargetType="{x:Type Button}" />
- </ToolBar.Resources>
+ <Style BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" TargetType="{x:Type Button}" />
+ </ToolBar.Resources>
- <DockPanel Background="Transparent" HorizontalAlignment="Stretch">
+ <DockPanel Background="Transparent" HorizontalAlignment="Stretch">
- <Button Name="Start" DockPanel.Dock="Left" AutomationProperties.Name="Start Queue"
+ <Button Name="Start" DockPanel.Dock="Left" AutomationProperties.Name="Start Queue"
cal:Message.Attach="[Event Click] = [Action StartQueue]"
IsEnabled="{Binding IsQueueRunning, Converter={StaticResource notBooleanConverter}}"
Visibility="{Binding IsQueueRunning,
Converter={StaticResource boolToVisConverter},
ConverterParameter=true}">
- <StackPanel Orientation="Horizontal">
- <Image Width="32"
+ <StackPanel Orientation="Horizontal">
+ <Image Width="32"
Height="32"
Source="Images/Play.png" />
- <Label Margin="8,0,0,0"
+ <Label Margin="8,0,0,0"
VerticalAlignment="Center"
Content="{x:Static Properties:ResourcesUI.QueueView_Start}" />
- </StackPanel>
- </Button>
+ </StackPanel>
+ </Button>
- <Button Name="Pause" DockPanel.Dock="Left" AutomationProperties.Name="Pause Queue"
+ <Button Name="Pause" DockPanel.Dock="Left" AutomationProperties.Name="Pause Queue"
cal:Message.Attach="[Event Click] = [Action PauseQueueToolbar]"
Visibility="{Binding IsQueueRunning,
Converter={StaticResource boolToVisConverter},
ConverterParameter=false}">
- <StackPanel Orientation="Horizontal">
- <Image Width="32"
+ <StackPanel Orientation="Horizontal">
+ <Image Width="32"
Height="32"
Source="Images/Pause.png" />
- <Label Margin="8,0,0,0"
+ <Label Margin="8,0,0,0"
VerticalAlignment="Center"
Content="{x:Static Properties:ResourcesUI.QueueView_Pause}" />
- </StackPanel>
- </Button>
-
- <StackPanel Orientation="Horizontal" DockPanel.Dock="Right" HorizontalAlignment="Right">
- <Menu HorizontalAlignment="Right" VerticalAlignment="Center" Background="Transparent">
- <MenuItem>
- <MenuItem.Header>
- <StackPanel Height="32" Orientation="Horizontal">
- <TextBlock VerticalAlignment="Center"
+ </StackPanel>
+ </Button>
+
+ <StackPanel Orientation="Horizontal" DockPanel.Dock="Right" HorizontalAlignment="Right">
+ <Menu HorizontalAlignment="Right" VerticalAlignment="Center" Background="Transparent">
+ <MenuItem>
+ <MenuItem.Header>
+ <StackPanel Height="32" Orientation="Horizontal">
+ <TextBlock VerticalAlignment="Center"
FontWeight="Bold"
Text="{x:Static Properties:ResourcesUI.QueueView_WhenDone}" />
- <Label Margin="8,0,0,0"
+ <Label Margin="8,0,0,0"
VerticalAlignment="Center"
Content="{Binding WhenDoneAction}" />
- <Path Height="5"
+ <Path Height="5"
Margin="2,2,2,0"
Data="M 0 0 L 4 4 L 8 0 Z"
Fill="{DynamicResource GlyphBrush}" />
- </StackPanel>
- </MenuItem.Header>
+ </StackPanel>
+ </MenuItem.Header>
- <MenuItem x:Name="doNothing"
+ <MenuItem x:Name="doNothing"
cal:Message.Attach="[Event Click] = [Action WhenDone(doNothing.Header)]"
Header="{x:Static Properties:ResourcesUI.QueueView_DoNothing}" />
- <MenuItem x:Name="shutdown"
+ <MenuItem x:Name="shutdown"
cal:Message.Attach="[Event Click] = [Action WhenDone(shutdown.Header)]"
Header="{x:Static Properties:ResourcesUI.QueueView_Shutdown}" />
- <MenuItem x:Name="suspend"
+ <MenuItem x:Name="suspend"
cal:Message.Attach="[Event Click] = [Action WhenDone(suspend.Header)]"
Header="{x:Static Properties:ResourcesUI.QueueView_Suspend}" />
- <MenuItem x:Name="hibernate"
+ <MenuItem x:Name="hibernate"
cal:Message.Attach="[Event Click] = [Action WhenDone(hibernate.Header)]"
Header="{x:Static Properties:ResourcesUI.QueueView_Hibernate}"/>
- <MenuItem x:Name="lock"
+ <MenuItem x:Name="lock"
cal:Message.Attach="[Event Click] = [Action WhenDone(lock.Header)]"
Header="{x:Static Properties:ResourcesUI.QueueView_LockSystem}" />
- <MenuItem x:Name="logoff"
+ <MenuItem x:Name="logoff"
cal:Message.Attach="[Event Click] = [Action WhenDone(logoff.Header)]"
Header="{x:Static Properties:ResourcesUI.QueueView_Logoff}"/>
- <MenuItem x:Name="quit"
+ <MenuItem x:Name="quit"
cal:Message.Attach="[Event Click] = [Action WhenDone(quit.Header)]"
Header="{x:Static Properties:ResourcesUI.QueueView_QuitHandBrake}"/>
- </MenuItem>
- </Menu>
-
- <Menu HorizontalAlignment="Right" Background="Transparent" VerticalAlignment="Center">
- <MenuItem>
- <MenuItem.Header>
- <StackPanel Height="32" Orientation="Horizontal">
- <Image Source="Images\Advanced.png" Width="20" Height="20" VerticalAlignment="Center" />
- <TextBlock VerticalAlignment="Center"
+ </MenuItem>
+ </Menu>
+
+ <Menu HorizontalAlignment="Right" Background="Transparent" VerticalAlignment="Center">
+ <MenuItem>
+ <MenuItem.Header>
+ <StackPanel Height="32" Orientation="Horizontal">
+ <Image Source="Images\Advanced.png" Width="20" Height="20" VerticalAlignment="Center" />
+ <TextBlock VerticalAlignment="Center"
Text="{x:Static Properties:ResourcesUI.QueueView_Options}" Margin="5,0,0,0" />
- <Path Height="5"
+ <Path Height="5"
Margin="2,2,2,0"
Data="M 0 0 L 4 4 L 8 0 Z"
Fill="{DynamicResource GlyphBrush}" />
- </StackPanel>
- </MenuItem.Header>
+ </StackPanel>
+ </MenuItem.Header>
- <MenuItem cal:Message.Attach="[Event Click] = [Action ClearCompleted]" Header="{x:Static Properties:ResourcesUI.QueueView_ClearCompleted}" />
- <MenuItem cal:Message.Attach="[Event Click] = [Action Clear]" Header="{x:Static Properties:ResourcesUI.QueueView_ClearQueue}" />
- <Separator />
- <MenuItem cal:Message.Attach="[Event Click] = [Action Export]" Header="{x:Static Properties:ResourcesUI.QueueView_Export}" />
+ <MenuItem cal:Message.Attach="[Event Click] = [Action ClearCompleted]" Header="{x:Static Properties:ResourcesUI.QueueView_ClearCompleted}" />
+ <MenuItem cal:Message.Attach="[Event Click] = [Action Clear]" Header="{x:Static Properties:ResourcesUI.QueueView_ClearQueue}" />
+ <Separator />
+ <MenuItem cal:Message.Attach="[Event Click] = [Action Export]" Header="{x:Static Properties:ResourcesUI.QueueView_Export}" />
- </MenuItem>
- </Menu>
+ </MenuItem>
+ </Menu>
- </StackPanel>
+ </StackPanel>
- </DockPanel>
- </ToolBar>
+ </DockPanel>
+ </ToolBar>
- <StackPanel Grid.Row="1" Margin="10,20,10,0">
- <TextBlock Text="{Binding JobsPending}" TextWrapping="WrapWithOverflow" TextTrimming="CharacterEllipsis" />
- <TextBlock Text="{Binding JobStatus}" TextWrapping="WrapWithOverflow" TextTrimming="CharacterEllipsis"/>
- </StackPanel>
+ <StackPanel Grid.Row="1" Margin="10,20,10,0">
+ <TextBlock Text="{Binding JobsPending}" TextWrapping="WrapWithOverflow" TextTrimming="CharacterEllipsis" />
+ <TextBlock Text="{Binding JobStatus}" TextWrapping="WrapWithOverflow" TextTrimming="CharacterEllipsis"/>
+ </StackPanel>
- <ListBox Grid.Row="2" Tag="{Binding}"
+ <ListBox Grid.Row="2" Tag="{Binding}"
Margin="10,20,10,10"
dd:DragDrop.DropHandler="{Binding}"
dd:DragDrop.IsDragSource="True"
@@ -180,251 +189,252 @@ SelectedItem="{Binding SelectedTask}"
SelectionMode="Extended">
- <i:Interaction.Triggers>
- <commands:InputBindingTrigger>
- <commands:InputBindingTrigger.InputBinding>
- <KeyBinding Key="Delete"/>
- </commands:InputBindingTrigger.InputBinding>
- <cal:ActionMessage MethodName="RemoveSelectedJobs" />
- </commands:InputBindingTrigger>
- </i:Interaction.Triggers>
-
- <ListBox.ContextMenu>
- <ContextMenu cal:Action.TargetWithoutContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}" Opened="ContextMenu_OnOpened">
- <MenuItem cal:Message.Attach="[Event Click] = [Action StartQueue]" Header="{x:Static Properties:ResourcesUI.QueueView_Start}" />
- <MenuItem cal:Message.Attach="[Event Click] = [Action PauseQueue]" Header="{x:Static Properties:ResourcesUI.QueueView_Pause}" />
- <Separator />
- <MenuItem cal:Message.Attach="[Event Click] = [Action ClearCompleted]" Header="{x:Static Properties:ResourcesUI.QueueView_ClearCompleted}" />
- <MenuItem cal:Message.Attach="[Event Click] = [Action Clear]" Header="{x:Static Properties:ResourcesUI.QueueView_ClearAll}" />
- <MenuItem cal:Message.Attach="[Event Click] = [Action RemoveSelectedJobs]" Header="{x:Static Properties:ResourcesUI.QueueView_ClearSelected}" />
- <Separator />
- <MenuItem Header="{x:Static Properties:ResourcesUI.QueueView_OpenSourceDir}" x:Name="openSourceDir" Click="OpenSourceDir_OnClick" />
- <MenuItem Header="{x:Static Properties:ResourcesUI.QueueView_OpenDestDir}" x:Name="openDestDir" Click="OpenDestDir_OnClick" />
- <Separator />
- <MenuItem cal:Message.Attach="[Event Click] = [Action Export]" Header="{x:Static Properties:ResourcesUI.QueueView_Export}" />
- </ContextMenu>
- </ListBox.ContextMenu>
-
- <ListBox.ItemContainerStyle>
- <Style TargetType="{x:Type ListBoxItem}">
- <Setter Property="HorizontalContentAlignment" Value="Stretch" />
- <Setter Property="Margin" Value="0,0,0,1" />
- <Setter Property="ToolTip">
- <Setter.Value>
- <Grid MaxWidth="650" Margin="0,5,0,5" Style="{StaticResource LongToolTipHolder}">
- <Grid.Resources>
- <Style TargetType="TextBlock">
- <Setter Property="Margin" Value="0,5,0,5" />
- </Style>
- </Grid.Resources>
-
- <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>
-
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="95" />
- <ColumnDefinition Width="*" />
- </Grid.ColumnDefinitions>
+ <i:Interaction.Triggers>
+ <commands:InputBindingTrigger>
+ <commands:InputBindingTrigger.InputBinding>
+ <KeyBinding Key="Delete"/>
+ </commands:InputBindingTrigger.InputBinding>
+ <cal:ActionMessage MethodName="RemoveSelectedJobs" />
+ </commands:InputBindingTrigger>
+ </i:Interaction.Triggers>
+
+ <ListBox.ContextMenu>
+ <ContextMenu cal:Action.TargetWithoutContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}" Opened="ContextMenu_OnOpened">
+ <MenuItem cal:Message.Attach="[Event Click] = [Action StartQueue]" Header="{x:Static Properties:ResourcesUI.QueueView_Start}" />
+ <MenuItem cal:Message.Attach="[Event Click] = [Action PauseQueue]" Header="{x:Static Properties:ResourcesUI.QueueView_Pause}" />
+ <Separator />
+ <MenuItem cal:Message.Attach="[Event Click] = [Action ClearCompleted]" Header="{x:Static Properties:ResourcesUI.QueueView_ClearCompleted}" />
+ <MenuItem cal:Message.Attach="[Event Click] = [Action Clear]" Header="{x:Static Properties:ResourcesUI.QueueView_ClearAll}" />
+ <MenuItem cal:Message.Attach="[Event Click] = [Action RemoveSelectedJobs]" Header="{x:Static Properties:ResourcesUI.QueueView_ClearSelected}" />
+ <Separator />
+ <MenuItem Header="{x:Static Properties:ResourcesUI.QueueView_OpenSourceDir}" x:Name="openSourceDir" Click="OpenSourceDir_OnClick" />
+ <MenuItem Header="{x:Static Properties:ResourcesUI.QueueView_OpenDestDir}" x:Name="openDestDir" Click="OpenDestDir_OnClick" />
+ <Separator />
+ <MenuItem cal:Message.Attach="[Event Click] = [Action Export]" Header="{x:Static Properties:ResourcesUI.QueueView_Export}" />
+ </ContextMenu>
+ </ListBox.ContextMenu>
+
+ <ListBox.ItemContainerStyle>
+ <Style TargetType="{x:Type ListBoxItem}">
+ <Setter Property="HorizontalContentAlignment" Value="Stretch" />
+ <Setter Property="Margin" Value="0,0,0,1" />
+ <Setter Property="ToolTip">
+ <Setter.Value>
+ <Grid MaxWidth="650" Margin="0,5,0,5" Style="{StaticResource LongToolTipHolder}">
+ <Grid.Resources>
+ <Style TargetType="TextBlock">
+ <Setter Property="Margin" Value="0,5,0,5" />
+ </Style>
+ </Grid.Resources>
+
+ <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>
+
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="95" />
+ <ColumnDefinition Width="*" />
+ </Grid.ColumnDefinitions>
+
+ <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_Source}" VerticalAlignment="Top" Grid.Row="0" Grid.Column="0" />
+ <TextBlock Text="{Binding Task.Source}" TextWrapping="Wrap" Grid.Row="0" Grid.Column="1" />
+
+ <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_Destination}" VerticalAlignment="Top" Grid.Row="1" Grid.Column="0" />
+ <TextBlock Text="{Binding Task.Destination}" TextWrapping="Wrap" Grid.Row="1" Grid.Column="1" />
+
+ <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_PictureSettings}" VerticalAlignment="Top" Grid.Row="2" Grid.Column="0" />
+ <TextBlock Text="{Binding Task, Converter={StaticResource pictureSettingsDescConverter}}" TextWrapping="Wrap" Grid.Row="2" Grid.Column="1" />
+
+ <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_Video}" Grid.Row="3" Grid.Column="0" />
+ <TextBlock Text="{Binding Task, Converter={StaticResource videoOptionsTooltipConverter}}" Grid.Row="3" Grid.Column="1" TextWrapping="Wrap" />
+
+ <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_Audio}" Grid.Row="4" Grid.Column="0"/>
+ <TextBlock Text="{Binding Task.AudioTracks, Converter={StaticResource audioTrackDisplayConverter}}"
+ Grid.Row="4" Grid.Column="1"/>
- <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_Source}" VerticalAlignment="Top" Grid.Row="0" Grid.Column="0" />
- <TextBlock Text="{Binding Task.Source}" TextWrapping="Wrap" Grid.Row="0" Grid.Column="1" />
+ <TextBlock FontWeight="Bold" VerticalAlignment="Top" Text="{x:Static Properties:ResourcesUI.QueueView_Subtitles}" Grid.Row="5" Grid.Column="0" />
+ <TextBlock Text="{Binding Task.SubtitleTracks, Converter={StaticResource subtitleTrackDisplayConverter}}"
+ Grid.Row="5" Grid.Column="1" />
- <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_Destination}" VerticalAlignment="Top" Grid.Row="1" Grid.Column="0" />
- <TextBlock Text="{Binding Task.Destination}" TextWrapping="Wrap" Grid.Row="1" Grid.Column="1" />
+ <TextBlock FontWeight="Bold" VerticalAlignment="Top" Grid.Row="6" Grid.Column="0" Text="{x:Static Properties:ResourcesUI.QueueView_Advanced}" />
+ <TextBlock Text="{Binding Task, Converter={StaticResource encoderOptionsTooltipConverter}}" Grid.Row="6" Grid.Column="1" TextWrapping="Wrap" />
+ </Grid>
- <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_PictureSettings}" VerticalAlignment="Top" Grid.Row="2" Grid.Column="0" />
- <TextBlock Text="{Binding Task, Converter={StaticResource pictureSettingsDescConverter}}" TextWrapping="Wrap" Grid.Row="2" Grid.Column="1" />
+ </Setter.Value>
+ </Setter>
- <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_Video}" Grid.Row="3" Grid.Column="0" />
- <TextBlock Text="{Binding Task, Converter={StaticResource videoOptionsTooltipConverter}}" Grid.Row="3" Grid.Column="1" TextWrapping="Wrap" />
+ </Style>
+ </ListBox.ItemContainerStyle>
- <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_Audio}" Grid.Row="4" Grid.Column="0"/>
- <TextBlock Text="{Binding Task.AudioTracks, Converter={StaticResource audioTrackDisplayConverter}}"
- Grid.Row="4" Grid.Column="1"/>
+ <ListBox.ItemTemplate>
+ <DataTemplate x:Name="QueueItemTemplate">
- <TextBlock FontWeight="Bold" VerticalAlignment="Top" Text="{x:Static Properties:ResourcesUI.QueueView_Subtitles}" Grid.Row="5" Grid.Column="0" />
- <TextBlock Text="{Binding Task.SubtitleTracks, Converter={StaticResource subtitleTrackDisplayConverter}}"
- Grid.Row="5" Grid.Column="1" />
+ <Grid HorizontalAlignment="Stretch">
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="40" />
+ <ColumnDefinition Width="*" />
+ <ColumnDefinition Width="Auto" />
+ </Grid.ColumnDefinitions>
- <TextBlock FontWeight="Bold" VerticalAlignment="Top" Grid.Row="6" Grid.Column="0" Text="{x:Static Properties:ResourcesUI.QueueView_Advanced}" />
- <TextBlock Text="{Binding Task, Converter={StaticResource encoderOptionsTooltipConverter}}" Grid.Row="6" Grid.Column="1" TextWrapping="Wrap" />
- </Grid>
+ <!-- Marker -->
+ <Image Grid.Column="0" Width="16" Height="16" SnapsToDevicePixels="True">
+
+ <Image.LayoutTransform>
+ <RotateTransform CenterX="8" CenterY="8" Angle="0"/>
+ </Image.LayoutTransform>
+
+ <Image.Style>
+ <Style TargetType="{x:Type Image}">
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding Status, Converter={StaticResource enumComboConverter}}" Value="Waiting">
+ <Setter Property="Source" Value="Images\Movies.png" />
+ </DataTrigger>
+ <DataTrigger Binding="{Binding Status, Converter={StaticResource enumComboConverter}}" Value="In Progress">
+ <Setter Property="Source" Value="Images\Working0.png" />
+ <DataTrigger.EnterActions>
+ <BeginStoryboard>
+ <Storyboard>
+ <DoubleAnimation Duration="0:0:2" To="180" Storyboard.TargetProperty="(Image.LayoutTransform).(RotateTransform.Angle)" RepeatBehavior="Forever" />
+ </Storyboard>
+ </BeginStoryboard>
+ </DataTrigger.EnterActions>
+ <DataTrigger.ExitActions>
+ <BeginStoryboard>
+ <Storyboard>
+ <DoubleAnimation Duration="0:0:0" To="0" Storyboard.TargetProperty="(Image.LayoutTransform).(RotateTransform.Angle)"/>
+ </Storyboard>
+ </BeginStoryboard>
+ </DataTrigger.ExitActions>
+ </DataTrigger>
+ <DataTrigger Binding="{Binding Status, Converter={StaticResource enumComboConverter}}" Value="Completed">
+ <Setter Property="Source" Value="Images\Complete.png" />
+ </DataTrigger>
+ <DataTrigger Binding="{Binding Status, Converter={StaticResource enumComboConverter}}" Value="Error">
+ <Setter Property="Source" Value="Images\WarningSmall.png" />
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </Image.Style>
+ </Image>
- </Setter.Value>
- </Setter>
-
- </Style>
- </ListBox.ItemContainerStyle>
-
- <ListBox.ItemTemplate>
- <DataTemplate x:Name="QueueItemTemplate">
-
- <Grid HorizontalAlignment="Stretch">
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="40" />
- <ColumnDefinition Width="*" />
- <ColumnDefinition Width="Auto" />
- </Grid.ColumnDefinitions>
-
- <!-- Marker -->
- <Image Grid.Column="0" Width="16" Height="16" SnapsToDevicePixels="True">
-
- <Image.LayoutTransform>
- <RotateTransform CenterX="8" CenterY="8" Angle="0"/>
- </Image.LayoutTransform>
-
- <Image.Style>
- <Style TargetType="{x:Type Image}">
- <Style.Triggers>
- <DataTrigger Binding="{Binding Status, Converter={StaticResource enumComboConverter}}" Value="Waiting">
- <Setter Property="Source" Value="Images\Movies.png" />
- </DataTrigger>
- <DataTrigger Binding="{Binding Status, Converter={StaticResource enumComboConverter}}" Value="In Progress">
- <Setter Property="Source" Value="Images\Working0.png" />
- <DataTrigger.EnterActions>
- <BeginStoryboard>
- <Storyboard>
- <DoubleAnimation Duration="0:0:2" To="180" Storyboard.TargetProperty="(Image.LayoutTransform).(RotateTransform.Angle)" RepeatBehavior="Forever" />
- </Storyboard>
- </BeginStoryboard>
- </DataTrigger.EnterActions>
- <DataTrigger.ExitActions>
- <BeginStoryboard>
- <Storyboard>
- <DoubleAnimation Duration="0:0:0" To="0" Storyboard.TargetProperty="(Image.LayoutTransform).(RotateTransform.Angle)"/>
- </Storyboard>
- </BeginStoryboard>
- </DataTrigger.ExitActions>
- </DataTrigger>
- <DataTrigger Binding="{Binding Status, Converter={StaticResource enumComboConverter}}" Value="Completed">
- <Setter Property="Source" Value="Images\Complete.png" />
- </DataTrigger>
- <DataTrigger Binding="{Binding Status, Converter={StaticResource enumComboConverter}}" Value="Error">
- <Setter Property="Source" Value="Images\WarningSmall.png" />
- </DataTrigger>
- </Style.Triggers>
- </Style>
- </Image.Style>
- </Image>
-
- <!-- Settings -->
- <StackPanel Grid.Column="1"
+ <!-- Settings -->
+ <StackPanel Grid.Column="1"
Margin="0,5,0,5"
HorizontalAlignment="Stretch">
- <StackPanel Orientation="Horizontal">
- <TextBlock FontWeight="Bold" Text="Title: " />
- <TextBlock Text="{Binding Task.Title}" />
+ <StackPanel Orientation="Horizontal">
+ <TextBlock FontWeight="Bold" Text="Title: " />
+ <TextBlock Text="{Binding Task.Title}" />
- <TextBlock Margin="10,0,0,0"
+ <TextBlock Margin="10,0,0,0"
FontWeight="Bold"
Text="{Binding Task.PointToPointMode}" />
- <TextBlock Text=": " />
- <TextBlock Text="{Binding Task.StartPoint}" />
- <TextBlock Margin="5,0,5,0" Text="to" />
- <TextBlock Text="{Binding Task.EndPoint}" />
- </StackPanel>
+ <TextBlock Text=": " />
+ <TextBlock Text="{Binding Task.StartPoint}" />
+ <TextBlock Margin="5,0,5,0" Text="to" />
+ <TextBlock Text="{Binding Task.EndPoint}" />
+ </StackPanel>
- <!-- TODO Support Drive Label Name -->
- <StackPanel Orientation="Horizontal">
- <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_Source}" />
- <TextBlock Text="{Binding Task.Source, Converter={StaticResource filePathToFilenameConverter}}" />
- </StackPanel>
+ <!-- TODO Support Drive Label Name -->
+ <StackPanel Orientation="Horizontal">
+ <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_Source}" />
+ <TextBlock Text="{Binding Task.Source, Converter={StaticResource filePathToFilenameConverter}}" />
+ </StackPanel>
- <StackPanel Orientation="Horizontal">
- <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_Destination}" />
- <TextBlock Text="{Binding Task.Destination, Converter={StaticResource filePathToFilenameConverter}}" />
+ <StackPanel Orientation="Horizontal">
+ <TextBlock FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.QueueView_Destination}" />
+ <TextBlock Text="{Binding Task.Destination, Converter={StaticResource filePathToFilenameConverter}}" />
+ </StackPanel>
</StackPanel>
- </StackPanel>
- <!-- Delete -->
- <Grid Grid.Column="2"
+ <!-- Delete -->
+ <Grid Grid.Column="2"
Margin="10,0,10,0"
VerticalAlignment="Center">
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto" />
- </Grid.RowDefinitions>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto" />
+ </Grid.RowDefinitions>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="Auto" />
- <ColumnDefinition Width="Auto" />
- <ColumnDefinition Width="Auto" />
- </Grid.ColumnDefinitions>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="Auto" />
+ <ColumnDefinition Width="Auto" />
+ <ColumnDefinition Width="Auto" />
+ </Grid.ColumnDefinitions>
- <Button Visibility="{Binding Status, Converter={StaticResource queueStatusVisConverter}}"
+ <Button Visibility="{Binding Status, Converter={StaticResource queueStatusVisConverter}}"
Grid.Row="0" Grid.Column="0" Margin="0,5,0,0">
- <Button.Template>
- <ControlTemplate>
- <Image Width="20"
+ <Button.Template>
+ <ControlTemplate>
+ <Image Width="20"
Height="20" VerticalAlignment="Center"
Source="Images/Refresh.ico"
ToolTip="{x:Static Properties:ResourcesTooltips.QueueView_ResetJobStatus}">
- </Image>
- </ControlTemplate>
- </Button.Template>
- <i:Interaction.Triggers>
- <i:EventTrigger EventName="Click">
- <cal:ActionMessage MethodName="RetryJob">
- <cal:Parameter Value="{Binding}" />
- </cal:ActionMessage>
- </i:EventTrigger>
- </i:Interaction.Triggers>
- </Button>
-
- <Button Grid.Row="0" Grid.Column="1" Margin="10,5,0,0">
- <Button.Template>
- <ControlTemplate>
- <Image Width="20"
+ </Image>
+ </ControlTemplate>
+ </Button.Template>
+ <i:Interaction.Triggers>
+ <i:EventTrigger EventName="Click">
+ <cal:ActionMessage MethodName="RetryJob">
+ <cal:Parameter Value="{Binding}" />
+ </cal:ActionMessage>
+ </i:EventTrigger>
+ </i:Interaction.Triggers>
+ </Button>
+
+ <Button Grid.Row="0" Grid.Column="1" Margin="10,5,0,0">
+ <Button.Template>
+ <ControlTemplate>
+ <Image Width="20"
Height="20" VerticalAlignment="Center"
Source="Images/Options24.png"
ToolTip="{x:Static Properties:ResourcesTooltips.QueueView_SendJobBack}">
- </Image>
- </ControlTemplate>
- </Button.Template>
- <i:Interaction.Triggers>
- <i:EventTrigger EventName="Click">
- <cal:ActionMessage MethodName="EditJob">
- <cal:Parameter Value="{Binding}" />
- </cal:ActionMessage>
- </i:EventTrigger>
- </i:Interaction.Triggers>
- </Button>
-
- <Button Grid.Row="0" Grid.Column="2" Margin="10,5,0,0">
- <Button.Template>
- <ControlTemplate>
- <Image Width="20"
+ </Image>
+ </ControlTemplate>
+ </Button.Template>
+ <i:Interaction.Triggers>
+ <i:EventTrigger EventName="Click">
+ <cal:ActionMessage MethodName="EditJob">
+ <cal:Parameter Value="{Binding}" />
+ </cal:ActionMessage>
+ </i:EventTrigger>
+ </i:Interaction.Triggers>
+ </Button>
+
+ <Button Grid.Row="0" Grid.Column="2" Margin="10,5,0,0">
+ <Button.Template>
+ <ControlTemplate>
+ <Image Width="20"
Height="20" VerticalAlignment="Center"
Source="Images/delete.png"
ToolTip="{x:Static Properties:ResourcesTooltips.QueueView_DeleteJob}">
- </Image>
- </ControlTemplate>
- </Button.Template>
- <i:Interaction.Triggers>
- <i:EventTrigger EventName="Click">
- <cal:ActionMessage MethodName="RemoveJob">
- <cal:Parameter Value="{Binding}" />
- </cal:ActionMessage>
- </i:EventTrigger>
- </i:Interaction.Triggers>
- </Button>
+ </Image>
+ </ControlTemplate>
+ </Button.Template>
+ <i:Interaction.Triggers>
+ <i:EventTrigger EventName="Click">
+ <cal:ActionMessage MethodName="RemoveJob">
+ <cal:Parameter Value="{Binding}" />
+ </cal:ActionMessage>
+ </i:EventTrigger>
+ </i:Interaction.Triggers>
+ </Button>
- </Grid>
+ </Grid>
- </Grid>
- </DataTemplate>
- </ListBox.ItemTemplate>
- </ListBox>
+ </Grid>
+ </DataTemplate>
+ </ListBox.ItemTemplate>
+ </ListBox>
+ </Grid>
</Grid>
</Window>
|