]> granicus.if.org Git - handbrake/commitdiff
WinGui: Queue -> Overhaul the context menu on the queue to offer context aware tasks...
authorsr55 <sr55.hb@outlook.com>
Sun, 3 Mar 2019 17:54:41 +0000 (17:54 +0000)
committersr55 <sr55.hb@outlook.com>
Sun, 3 Mar 2019 17:54:41 +0000 (17:54 +0000)
win/CS/HandBrakeWPF/Properties/Resources.Designer.cs
win/CS/HandBrakeWPF/Properties/Resources.resx
win/CS/HandBrakeWPF/ViewModels/QueueViewModel.cs
win/CS/HandBrakeWPF/Views/QueueView.xaml
win/CS/HandBrakeWPF/Views/QueueView.xaml.cs

index ead05b8b751da2d748af6ba741f12a392aea1aef..afb24dd5f0ae61d58da6c90ead54261f2a149b0d 100644 (file)
@@ -3801,6 +3801,15 @@ namespace HandBrakeWPF.Properties {
             }
         }
         
+        /// <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>
@@ -4143,6 +4152,16 @@ namespace HandBrakeWPF.Properties {
             }
         }
         
+        /// <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>
index 7cc191852b1514a3782b63fc3813fdb8e56dd445..21de9c96c9486f2ed8a8a70ca927da916208e83e 100644 (file)
@@ -1918,4 +1918,11 @@ This will not impact any of the software encoders.</value>
   <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
index 20cc0bbbefa379ccbf4de1a6715e0f2cee234545..b250c14566d82741fc64091679b053cccb6d7548 100644 (file)
@@ -125,7 +125,7 @@ namespace HandBrakeWPF.ViewModels
             }\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
@@ -819,7 +819,7 @@ namespace HandBrakeWPF.ViewModels
                 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
index 75c3245360a5954d6754044f9b0822eda035eaa5..b4431283266197291f454cb65679504c0792e55f 100644 (file)
 \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
index 53b4256aa118a24dfe20b425a41689df39cc35b2..95915e828cbaea046e696f79aee474f8c3076149 100644 (file)
@@ -9,6 +9,7 @@
 \r
 namespace HandBrakeWPF.Views\r
 {\r
+    using System.Linq;\r
     using System.Windows;\r
     using System.Windows.Controls;\r
     using System.Windows.Input;\r
@@ -25,15 +26,15 @@ namespace HandBrakeWPF.Views
         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
@@ -63,8 +64,36 @@ namespace HandBrakeWPF.Views
                 }\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
@@ -104,5 +133,35 @@ namespace HandBrakeWPF.Views
                 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