From 536b4f8aeb8cc399dbd01601bdca4add87b0e45a Mon Sep 17 00:00:00 2001 From: sr55 Date: Sun, 3 Mar 2019 17:54:41 +0000 Subject: [PATCH] WinGui: Queue -> Overhaul the context menu on the queue to offer context aware tasks for the selected tasks. --- .../Properties/Resources.Designer.cs | 19 +++++ win/CS/HandBrakeWPF/Properties/Resources.resx | 7 ++ .../HandBrakeWPF/ViewModels/QueueViewModel.cs | 4 +- win/CS/HandBrakeWPF/Views/QueueView.xaml | 30 ++++---- win/CS/HandBrakeWPF/Views/QueueView.xaml.cs | 69 +++++++++++++++++-- 5 files changed, 105 insertions(+), 24 deletions(-) diff --git a/win/CS/HandBrakeWPF/Properties/Resources.Designer.cs b/win/CS/HandBrakeWPF/Properties/Resources.Designer.cs index ead05b8b7..afb24dd5f 100644 --- a/win/CS/HandBrakeWPF/Properties/Resources.Designer.cs +++ b/win/CS/HandBrakeWPF/Properties/Resources.Designer.cs @@ -3801,6 +3801,15 @@ namespace HandBrakeWPF.Properties { } } + /// + /// Looks up a localized string similar to Delete Selected. + /// + public static string QueueView_DeleteSelected { + get { + return ResourceManager.GetString("QueueView_DeleteSelected", resourceCulture); + } + } + /// /// Looks up a localized string similar to Destination: . /// @@ -4143,6 +4152,16 @@ namespace HandBrakeWPF.Properties { } } + /// + /// 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}. + /// + public static string QueueViewModel_EncodeStatusChanged_StatusLabel { + get { + return ResourceManager.GetString("QueueViewModel_EncodeStatusChanged_StatusLabel", resourceCulture); + } + } + /// /// 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?. /// diff --git a/win/CS/HandBrakeWPF/Properties/Resources.resx b/win/CS/HandBrakeWPF/Properties/Resources.resx index 7cc191852..21de9c96c 100644 --- a/win/CS/HandBrakeWPF/Properties/Resources.resx +++ b/win/CS/HandBrakeWPF/Properties/Resources.resx @@ -1918,4 +1918,11 @@ This will not impact any of the software encoders. Import + + 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} + + + Delete Selected + \ No newline at end of file diff --git a/win/CS/HandBrakeWPF/ViewModels/QueueViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/QueueViewModel.cs index 20cc0bbbe..b250c1456 100644 --- a/win/CS/HandBrakeWPF/ViewModels/QueueViewModel.cs +++ b/win/CS/HandBrakeWPF/ViewModels/QueueViewModel.cs @@ -125,7 +125,7 @@ namespace HandBrakeWPF.ViewModels } } - public bool IsJobStatusVisible => !string.IsNullOrEmpty(this.JobStatus); + public bool IsJobStatusVisible => !string.IsNullOrEmpty(this.JobStatus) && this.SelectedTask?.Status == QueueItemStatus.InProgress; /// /// Gets or sets JobsPending. @@ -819,7 +819,7 @@ namespace HandBrakeWPF.ViewModels else { this.JobStatus = - string.Format(Resources.MainViewModel_EncodeStatusChanged_StatusLabel, + string.Format(Resources.QueueViewModel_EncodeStatusChanged_StatusLabel, e.Task, e.TaskCount, e.PercentComplete, diff --git a/win/CS/HandBrakeWPF/Views/QueueView.xaml b/win/CS/HandBrakeWPF/Views/QueueView.xaml index 75c324536..b44312832 100644 --- a/win/CS/HandBrakeWPF/Views/QueueView.xaml +++ b/win/CS/HandBrakeWPF/Views/QueueView.xaml @@ -160,21 +160,16 @@ - - + - - - + + - - - + - - + @@ -390,7 +385,6 @@ - + + + TextWrapping="WrapWithOverflow" TextTrimming="CharacterEllipsis" Margin="0,0,0,5" /> @@ -457,11 +453,11 @@ - + + Grid.Row="4" Grid.Column="1" /> - + @@ -530,12 +526,12 @@ - + - + diff --git a/win/CS/HandBrakeWPF/Views/QueueView.xaml.cs b/win/CS/HandBrakeWPF/Views/QueueView.xaml.cs index 53b4256aa..95915e828 100644 --- a/win/CS/HandBrakeWPF/Views/QueueView.xaml.cs +++ b/win/CS/HandBrakeWPF/Views/QueueView.xaml.cs @@ -9,6 +9,7 @@ namespace HandBrakeWPF.Views { + using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Input; @@ -25,15 +26,15 @@ namespace HandBrakeWPF.Views private QueueTask mouseActiveQueueTask; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// public QueueView() { this.InitializeComponent(); - this.SizeChanged += this.Queue2View_SizeChanged; + this.SizeChanged += this.QueueView_SizeChanged; } - private void Queue2View_SizeChanged(object sender, SizeChangedEventArgs e) + private void QueueView_SizeChanged(object sender, SizeChangedEventArgs e) { // Make the view adaptive. if (e.WidthChanged) @@ -63,8 +64,36 @@ namespace HandBrakeWPF.Views } } - this.openSourceDir.IsEnabled = this.mouseActiveQueueTask != null; - this.openDestDir.IsEnabled = this.mouseActiveQueueTask != null; + // Handle menu state + this.RetryMenuItem.Header = this.queueJobs.SelectedItems.Count > 1 ? Properties.Resources.QueueView_ResetSelectedJobs : Properties.Resources.QueueView_Retry; + if (this.queueJobs.SelectedItems.Count > 1) + { + this.RetryMenuItem.IsEnabled = false; + + foreach (QueueTask task in this.queueJobs.SelectedItems) + { + if (task.Status == QueueItemStatus.Error || task.Status == QueueItemStatus.Completed) + { + this.RetryMenuItem.IsEnabled = true; + break; + } + } + } + else + { + var activeQueueTask = this.mouseActiveQueueTask; + if (activeQueueTask != null && (activeQueueTask.Status == QueueItemStatus.Error || activeQueueTask.Status == QueueItemStatus.Completed)) + { + this.RetryMenuItem.IsEnabled = true; + } + } + + this.DeleteMenuItem.Header = this.queueJobs.SelectedItems.Count > 1 ? Properties.Resources.QueueView_DeleteSelected : Properties.Resources.QueueView_Delete; + this.DeleteMenuItem.IsEnabled = this.mouseActiveQueueTask != null || this.queueJobs.SelectedItems.Count >= 1; + + this.EditMenuItem.IsEnabled = this.mouseActiveQueueTask != null && this.queueJobs.SelectedItems.Count == 1; + this.openSourceDir.IsEnabled = this.mouseActiveQueueTask != null && this.queueJobs.SelectedItems.Count == 1; + this.openDestDir.IsEnabled = this.mouseActiveQueueTask != null && this.queueJobs.SelectedItems.Count == 1; } private static T FindParent(DependencyObject from) where T : class @@ -104,5 +133,35 @@ namespace HandBrakeWPF.Views button.ContextMenu.IsOpen = true; } } + + private void QueueItem_Delete(object sender, RoutedEventArgs e) + { + if (this.queueJobs.SelectedItems.Count > 1) + { + ((QueueViewModel)this.DataContext).RemoveSelectedJobs(); + } + else + { + ((QueueViewModel)this.DataContext).RemoveJob(this.mouseActiveQueueTask); + } + } + + private void QueueItem_Retry(object sender, RoutedEventArgs e) + { + if (this.queueJobs.SelectedItems.Count > 1) + { + ((QueueViewModel)this.DataContext).ResetSelectedJobs(); + } + else + { + ((QueueViewModel)this.DataContext).RetryJob(this.mouseActiveQueueTask); + } + } + + private void QueueItem_Edit(object sender, RoutedEventArgs e) + { + ((QueueViewModel)this.DataContext).EditJob(this.mouseActiveQueueTask); + } + } } -- 2.40.0