}
}
+ /// <summary>
+ /// Looks up a localized string similar to Delete Selected.
+ /// </summary>
+ public static string QueueView_DeleteSelected {
+ get {
+ return ResourceManager.GetString("QueueView_DeleteSelected", resourceCulture);
+ }
+ }
+
/// <summary>
/// Looks up a localized string similar to Destination: .
/// </summary>
}
}
+ /// <summary>
+ /// Looks up a localized string similar to Encoding: Pass {0} of {1}, {2:00.00}%, FPS: {3:000.0}, Avg FPS: {4:000.0}
+ ///Time Remaining: {5}, Elapsed: {6:d\:hh\:mm\:ss} {7}.
+ /// </summary>
+ public static string QueueViewModel_EncodeStatusChanged_StatusLabel {
+ get {
+ return ResourceManager.GetString("QueueViewModel_EncodeStatusChanged_StatusLabel", resourceCulture);
+ }
+ }
+
/// <summary>
/// Looks up a localized string similar to This encode is currently in progress. If you delete it, the encode will be stopped. Are you sure you wish to proceed?.
/// </summary>
<data name="QueueView_Import" xml:space="preserve">\r
<value>Import</value>\r
</data>\r
+ <data name="QueueViewModel_EncodeStatusChanged_StatusLabel" xml:space="preserve">\r
+ <value>Encoding: Pass {0} of {1}, {2:00.00}%, FPS: {3:000.0}, Avg FPS: {4:000.0}\r
+Time Remaining: {5}, Elapsed: {6:d\:hh\:mm\:ss} {7}</value>\r
+ </data>\r
+ <data name="QueueView_DeleteSelected" xml:space="preserve">\r
+ <value>Delete Selected</value>\r
+ </data>\r
</root>
\ No newline at end of file
}\r
}\r
\r
- public bool IsJobStatusVisible => !string.IsNullOrEmpty(this.JobStatus);\r
+ public bool IsJobStatusVisible => !string.IsNullOrEmpty(this.JobStatus) && this.SelectedTask?.Status == QueueItemStatus.InProgress;\r
\r
/// <summary>\r
/// Gets or sets JobsPending.\r
else\r
{\r
this.JobStatus =\r
- string.Format(Resources.MainViewModel_EncodeStatusChanged_StatusLabel,\r
+ string.Format(Resources.QueueViewModel_EncodeStatusChanged_StatusLabel,\r
e.Task,\r
e.TaskCount,\r
e.PercentComplete,\r
\r
<ListBox.ContextMenu>\r
<ContextMenu cal:Action.TargetWithoutContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}" Opened="ContextMenu_OnOpened">\r
- <MenuItem cal:Message.Attach="[Event Click] = [Action StartQueue]" Header="{x:Static Properties:Resources.QueueView_Start}" />\r
- <MenuItem cal:Message.Attach="[Event Click] = [Action PauseQueue]" Header="{x:Static Properties:Resources.QueueView_Pause}" />\r
+ <MenuItem Header="{x:Static Properties:Resources.QueueView_PlayMediaFile}" cal:Message.Attach="[Event Click] = [Action PlayFile]" />\r
<Separator />\r
- <MenuItem cal:Message.Attach="[Event Click] = [Action ResetFailed]" Header="{x:Static Properties:Resources.QueueView_ResetFailed}" />\r
- <MenuItem cal:Message.Attach="[Event Click] = [Action ResetSelectedJobs]" Header="{x:Static Properties:Resources.QueueView_ResetSelectedJobs}" />\r
- <MenuItem cal:Message.Attach="[Event Click] = [Action ResetAllJobs]" Header="{x:Static Properties:Resources.QueueView_ResetAllJobs}" />\r
+ <MenuItem x:Name="RetryMenuItem" Header="{x:Static Properties:Resources.QueueView_Retry}" Click="QueueItem_Retry" />\r
+ <MenuItem x:Name="DeleteMenuItem" Header="{x:Static Properties:Resources.QueueView_Delete}" Click="QueueItem_Delete" />\r
<Separator />\r
- <MenuItem cal:Message.Attach="[Event Click] = [Action ClearCompleted]" Header="{x:Static Properties:Resources.QueueView_ClearCompleted}" />\r
- <MenuItem cal:Message.Attach="[Event Click] = [Action Clear]" Header="{x:Static Properties:Resources.QueueView_ClearAll}" />\r
- <MenuItem cal:Message.Attach="[Event Click] = [Action RemoveSelectedJobs]" Header="{x:Static Properties:Resources.QueueView_ClearSelected}" />\r
+ <MenuItem x:Name="EditMenuItem" Header="{x:Static Properties:Resources.QueueView_Edit}" Click="QueueItem_Edit" />\r
<Separator />\r
<MenuItem Header="{x:Static Properties:Resources.QueueView_OpenSourceDir}" x:Name="openSourceDir" Click="OpenSourceDir_OnClick" />\r
<MenuItem Header="{x:Static Properties:Resources.QueueView_OpenDestDir}" x:Name="openDestDir" Click="OpenDestDir_OnClick" />\r
- <Separator />\r
- <MenuItem cal:Message.Attach="[Event Click] = [Action Export]" Header="{x:Static Properties:Resources.QueueView_Export}" />\r
+\r
</ContextMenu>\r
</ListBox.ContextMenu>\r
\r
</i:Interaction.Triggers>\r
</Button>\r
\r
-\r
<Button x:Name="queueOptionsDropButton" Margin="10,0,0,0" Click="QueueOptionsDropButton_OnClick"\r
AutomationProperties.Name="{x:Static Properties:Resources.QueueView_Actions}" IsEnabled="{Binding CanPerformActionOnSource}">\r
<Button.Content>\r
</Button>\r
</StackPanel>\r
\r
+\r
+ <TextBlock FontWeight="Bold" Text="Status:" VerticalAlignment="Top" Grid.Row="0" Grid.Column="0" Margin="0,15,10,5" Visibility="{Binding IsJobStatusVisible, Converter={StaticResource boolToVisConverter}}" />\r
<TextBlock Text="{Binding JobStatus}" Visibility="{Binding IsJobStatusVisible, Converter={StaticResource boolToVisConverter}}" \r
- Margin="0,15,10,5" TextWrapping="WrapWithOverflow" TextTrimming="CharacterEllipsis" />\r
+ TextWrapping="WrapWithOverflow" TextTrimming="CharacterEllipsis" Margin="0,0,0,5" />\r
\r
<Grid Style="{StaticResource LongToolTipHolder}" Margin="0,10,0,0" >\r
<Grid.Resources>\r
<TextBlock FontWeight="Bold" Text="{x:Static Properties:Resources.QueueView_Video}" Grid.Row="3" Grid.Column="0" />\r
<TextBlock Text="{Binding SelectedTask.Task, Converter={StaticResource videoOptionsTooltipConverter}}" Grid.Row="3" Grid.Column="1" TextWrapping="Wrap" />\r
\r
- <TextBlock FontWeight="Bold" Text="{x:Static Properties:Resources.QueueView_Audio}" Grid.Row="4" Grid.Column="0"/>\r
+ <TextBlock FontWeight="Bold" Text="{x:Static Properties:Resources.QueueView_Audio}" Grid.Row="4" Grid.Column="0" VerticalAlignment="Top"/>\r
<TextBlock Text="{Binding SelectedTask.Task.AudioTracks, Converter={StaticResource audioTrackDisplayConverter}}"\r
- Grid.Row="4" Grid.Column="1"/>\r
+ Grid.Row="4" Grid.Column="1" />\r
\r
- <TextBlock FontWeight="Bold" VerticalAlignment="Top" Text="{x:Static Properties:Resources.QueueView_Subtitles}" Grid.Row="5" Grid.Column="0" />\r
+ <TextBlock FontWeight="Bold" VerticalAlignment="Top" Text="{x:Static Properties:Resources.QueueView_Subtitles}" Grid.Row="5" Grid.Column="0" />\r
<TextBlock Text="{Binding SelectedTask.Task.SubtitleTracks, Converter={StaticResource subtitleTrackDisplayConverter}}"\r
Grid.Row="5" Grid.Column="1" />\r
\r
<ContextMenu>\r
<MenuItem Header="{x:Static Properties:Resources.LogView_CopyClipboard}" cal:Message.Attach="[Event Click] = [Action CopyLog]" >\r
<MenuItem.Icon>\r
- <Image Width="16" Source="../Images/copy.png" />\r
+ <Image Width="16" Source="Images/copy.png" />\r
</MenuItem.Icon>\r
</MenuItem>\r
<MenuItem Header="{x:Static Properties:Resources.LogView_OpenLogDir}" cal:Message.Attach="[Event Click] = [Action OpenLogDirectory]">\r
<MenuItem.Icon>\r
- <Image Width="16" Source="../Images/folder.png" />\r
+ <Image Width="16" Source="Images/folder.png" />\r
</MenuItem.Icon>\r
</MenuItem>\r
</ContextMenu>\r
\r
namespace HandBrakeWPF.Views\r
{\r
+ using System.Linq;\r
using System.Windows;\r
using System.Windows.Controls;\r
using System.Windows.Input;\r
private QueueTask mouseActiveQueueTask;\r
\r
/// <summary>\r
- /// Initializes a new instance of the <see cref="QueueTwoContent"/> class.\r
+ /// Initializes a new instance of the <see cref="QueueView"/> class.\r
/// </summary>\r
public QueueView()\r
{\r
this.InitializeComponent();\r
- this.SizeChanged += this.Queue2View_SizeChanged;\r
+ this.SizeChanged += this.QueueView_SizeChanged;\r
}\r
\r
- private void Queue2View_SizeChanged(object sender, SizeChangedEventArgs e)\r
+ private void QueueView_SizeChanged(object sender, SizeChangedEventArgs e)\r
{\r
// Make the view adaptive. \r
if (e.WidthChanged)\r
}\r
}\r
\r
- this.openSourceDir.IsEnabled = this.mouseActiveQueueTask != null;\r
- this.openDestDir.IsEnabled = this.mouseActiveQueueTask != null;\r
+ // Handle menu state\r
+ this.RetryMenuItem.Header = this.queueJobs.SelectedItems.Count > 1 ? Properties.Resources.QueueView_ResetSelectedJobs : Properties.Resources.QueueView_Retry;\r
+ if (this.queueJobs.SelectedItems.Count > 1)\r
+ {\r
+ this.RetryMenuItem.IsEnabled = false;\r
+\r
+ foreach (QueueTask task in this.queueJobs.SelectedItems)\r
+ {\r
+ if (task.Status == QueueItemStatus.Error || task.Status == QueueItemStatus.Completed)\r
+ {\r
+ this.RetryMenuItem.IsEnabled = true;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ var activeQueueTask = this.mouseActiveQueueTask;\r
+ if (activeQueueTask != null && (activeQueueTask.Status == QueueItemStatus.Error || activeQueueTask.Status == QueueItemStatus.Completed))\r
+ {\r
+ this.RetryMenuItem.IsEnabled = true;\r
+ }\r
+ }\r
+\r
+ this.DeleteMenuItem.Header = this.queueJobs.SelectedItems.Count > 1 ? Properties.Resources.QueueView_DeleteSelected : Properties.Resources.QueueView_Delete;\r
+ this.DeleteMenuItem.IsEnabled = this.mouseActiveQueueTask != null || this.queueJobs.SelectedItems.Count >= 1;\r
+\r
+ this.EditMenuItem.IsEnabled = this.mouseActiveQueueTask != null && this.queueJobs.SelectedItems.Count == 1;\r
+ this.openSourceDir.IsEnabled = this.mouseActiveQueueTask != null && this.queueJobs.SelectedItems.Count == 1;\r
+ this.openDestDir.IsEnabled = this.mouseActiveQueueTask != null && this.queueJobs.SelectedItems.Count == 1;\r
}\r
\r
private static T FindParent<T>(DependencyObject from) where T : class\r
button.ContextMenu.IsOpen = true;\r
}\r
}\r
+\r
+ private void QueueItem_Delete(object sender, RoutedEventArgs e)\r
+ {\r
+ if (this.queueJobs.SelectedItems.Count > 1)\r
+ {\r
+ ((QueueViewModel)this.DataContext).RemoveSelectedJobs();\r
+ }\r
+ else\r
+ {\r
+ ((QueueViewModel)this.DataContext).RemoveJob(this.mouseActiveQueueTask);\r
+ }\r
+ }\r
+\r
+ private void QueueItem_Retry(object sender, RoutedEventArgs e)\r
+ {\r
+ if (this.queueJobs.SelectedItems.Count > 1)\r
+ {\r
+ ((QueueViewModel)this.DataContext).ResetSelectedJobs();\r
+ }\r
+ else\r
+ {\r
+ ((QueueViewModel)this.DataContext).RetryJob(this.mouseActiveQueueTask);\r
+ }\r
+ }\r
+\r
+ private void QueueItem_Edit(object sender, RoutedEventArgs e)\r
+ {\r
+ ((QueueViewModel)this.DataContext).EditJob(this.mouseActiveQueueTask);\r
+ }\r
+ \r
}\r
}\r