]> granicus.if.org Git - handbrake/commitdiff
WinGui: Adding Queue Start/Pause Context Menu options to the In-line queue and queue...
authorsr55 <sr55.hb@outlook.com>
Sat, 7 Jan 2017 18:50:57 +0000 (18:50 +0000)
committersr55 <sr55.hb@outlook.com>
Sat, 7 Jan 2017 18:50:57 +0000 (18:50 +0000)
win/CS/HandBrakeWPF/Properties/ResourcesUI.Designer.cs
win/CS/HandBrakeWPF/Properties/ResourcesUI.resx
win/CS/HandBrakeWPF/ViewModels/Interfaces/IQueueViewModel.cs
win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs
win/CS/HandBrakeWPF/ViewModels/QueueViewModel.cs
win/CS/HandBrakeWPF/Views/Queue/Embedded.xaml
win/CS/HandBrakeWPF/Views/QueueView.xaml

index 28dd1e6b0c774126dbdec779f5b5d8806700b3d2..c822e1e004e274e624a8ddf6e9ec753774b50d8b 100644 (file)
@@ -1845,7 +1845,7 @@ namespace HandBrakeWPF.Properties {
         }\r
         \r
         /// <summary>\r
-        ///   Looks up a localized string similar to Pause.\r
+        ///   Looks up a localized string similar to Pause Queue.\r
         /// </summary>\r
         public static string QueueView_Pause {\r
             get {\r
@@ -1890,7 +1890,7 @@ namespace HandBrakeWPF.Properties {
         }\r
         \r
         /// <summary>\r
-        ///   Looks up a localized string similar to Start.\r
+        ///   Looks up a localized string similar to Start Queue.\r
         /// </summary>\r
         public static string QueueView_Start {\r
             get {\r
index fa92316257f1fc14481afd6350b21b6d241c12a4..30e783a93d304471a1c5413449e9a24553eb3a1a 100644 (file)
     <value>Options</value>\r
   </data>\r
   <data name="QueueView_Pause" xml:space="preserve">\r
-    <value>Pause</value>\r
+    <value>Pause Queue</value>\r
   </data>\r
   <data name="QueueView_PictureSettings" xml:space="preserve">\r
     <value>Picture Settings:</value>\r
     <value>Source: </value>\r
   </data>\r
   <data name="QueueView_Start" xml:space="preserve">\r
-    <value>Start</value>\r
+    <value>Start Queue</value>\r
   </data>\r
   <data name="QueueView_Subtitles" xml:space="preserve">\r
     <value>Subtitles:</value>\r
index 44d5d0f985f646a6281ef7c6b7039dc6969703e6..51c8e462efb03f7d22bb4bee7978a6ab1b28e0f6 100644 (file)
@@ -46,5 +46,15 @@ namespace HandBrakeWPF.ViewModels.Interfaces
         /// The remove selected jobs.\r
         /// </summary>\r
         void RemoveSelectedJobs();\r
+\r
+        /// <summary>\r
+        /// Activate this panel\r
+        /// </summary>\r
+        void Activate();\r
+\r
+        /// <summary>\r
+        /// Deactivate this panel\r
+        /// </summary>\r
+        void Deactivate();\r
     }\r
 }
\ No newline at end of file
index 36e65d2e524113a7ef2d33e5133c8d86cf6cf9ea..15b95986790379709bd48cb1591c75c7576190a9 100644 (file)
@@ -1330,6 +1330,14 @@ namespace HandBrakeWPF.ViewModels
             if (this.userSettingService.GetUserSetting<bool>(UserSettingConstants.ShowQueueInline))\r
             {\r
                 this.IsQueueShowingInLine = !this.IsQueueShowingInLine;\r
+                if (this.IsQueueShowingInLine)\r
+                {\r
+                    this.QueueViewModel.Activate();\r
+                }\r
+                else\r
+                {\r
+                    this.QueueViewModel.Deactivate();\r
+                }\r
                 this.NotifyOfPropertyChange(() => this.IsQueueShowingInLine);\r
             }\r
             else\r
index eed3a1a791618a27b7baf75a9dbb9417e090b19b..f56e6f4fc6692ae96831680e67c429fedc8dc4db 100644 (file)
@@ -46,6 +46,8 @@ namespace HandBrakeWPF.ViewModels
         private string jobsPending;\r
         private string whenDoneAction;\r
 \r
+        private bool isQueueRunning;\r
+\r
         #endregion\r
 \r
         #region Constructors and Destructors\r
@@ -72,7 +74,8 @@ namespace HandBrakeWPF.ViewModels
             this.JobStatus = Resources.QueueViewModel_NoJobsPending;\r
             this.SelectedItems = new BindingList<QueueTask>();\r
             this.DisplayName = "Queue";\r
-\r
+            this.IsQueueRunning = false;\r
+            \r
             this.WhenDoneAction = this.userSettingService.GetUserSetting<string>(UserSettingConstants.WhenCompleteAction);\r
         }\r
 \r
@@ -81,19 +84,19 @@ namespace HandBrakeWPF.ViewModels
         #region Properties\r
 \r
         /// <summary>\r
-        /// Gets or sets a value indicating whether IsEncoding.\r
+        /// Gets or sets a value indicating whether the Queue is paused or not..\r
         /// </summary>\r
-        public bool IsEncoding\r
+        public bool IsQueueRunning\r
         {\r
             get\r
             {\r
-                return this.isEncoding;\r
+                return this.isQueueRunning;\r
             }\r
-\r
             set\r
             {\r
-                this.isEncoding = value;\r
-                this.NotifyOfPropertyChange(() => IsEncoding);\r
+                if (value == this.isQueueRunning) return;\r
+                this.isQueueRunning = value;\r
+                this.NotifyOfPropertyChange(() => this.IsQueueRunning);\r
             }\r
         }\r
 \r
@@ -214,27 +217,50 @@ namespace HandBrakeWPF.ViewModels
         public override void OnLoad()\r
         {\r
             // Setup the window to the correct state.\r
-            this.IsEncoding = this.queueProcessor.EncodeService.IsEncoding;\r
+            this.IsQueueRunning = this.queueProcessor.EncodeService.IsEncoding;\r
             this.JobsPending = string.Format(Resources.QueueViewModel_JobsPending, this.queueProcessor.Count);\r
 \r
             base.OnLoad();\r
         }\r
 \r
         /// <summary>\r
-        /// Pause Encode\r
+        /// Can Pause the Queue.\r
+        /// Used by Caliburn Micro to enable/disable the context menu item.\r
+        /// </summary>\r
+        /// <returns>\r
+        /// True when we can pause the queue.\r
+        /// </returns>\r
+        public bool CanPauseQueue()\r
+        {\r
+            return this.IsQueueRunning;\r
+        }\r
+\r
+        /// <summary>\r
+        /// Pause the Queue\r
         /// </summary>\r
-        public void PauseEncode()\r
+        public void PauseQueue()\r
         {\r
             this.queueProcessor.Pause();\r
 \r
             this.JobStatus = Resources.QueueViewModel_QueuePending;\r
             this.JobsPending = string.Format(Resources.QueueViewModel_JobsPending, this.queueProcessor.Count);\r
-            this.IsEncoding = false;\r
+            this.IsQueueRunning = false;\r
 \r
             MessageBox.Show(Resources.QueueViewModel_QueuePauseNotice, Resources.QueueViewModel_Queue, \r
                 MessageBoxButton.OK, MessageBoxImage.Information);\r
         }\r
 \r
+        /// <summary>\r
+        /// Pause the Queue\r
+        /// </summary>\r
+        /// <remarks>\r
+        /// Prevents evaluation of CanPauseQueue\r
+        /// </remarks>\r
+        public void PauseQueueToolbar()\r
+        {\r
+            this.PauseQueue();\r
+        }\r
+\r
         /// <summary>\r
         /// The remove selected jobs.\r
         /// </summary>\r
@@ -307,10 +333,22 @@ namespace HandBrakeWPF.ViewModels
             this.JobsPending = string.Format(Resources.QueueViewModel_JobsPending, this.queueProcessor.Count);\r
         }\r
 \r
+        /// <summary>\r
+        /// Can Start Encoding.\r
+        /// Used by Caliburn Micro to enable/disable the context menu item.\r
+        /// </summary>\r
+        /// <returns>\r
+        /// True when we can start encoding.\r
+        /// </returns>\r
+        public bool CanStartQueue()\r
+        {\r
+            return !this.IsQueueRunning;\r
+        }\r
+\r
         /// <summary>\r
         /// Start Encode\r
         /// </summary>\r
-        public void StartEncode()\r
+        public void StartQueue()\r
         {\r
             if (this.queueProcessor.Count == 0)\r
             {\r
@@ -321,7 +359,7 @@ namespace HandBrakeWPF.ViewModels
 \r
             this.JobStatus = Resources.QueueViewModel_QueueStarted;\r
             this.JobsPending = string.Format(Resources.QueueViewModel_JobsPending, this.queueProcessor.Count);\r
-            this.IsEncoding = true;\r
+            this.IsQueueRunning = true;\r
 \r
             this.queueProcessor.Start(userSettingService.GetUserSetting<bool>(UserSettingConstants.ClearCompletedFromQueue));\r
         }\r
@@ -395,6 +433,21 @@ namespace HandBrakeWPF.ViewModels
 \r
         #region Methods\r
 \r
+        public void Activate()\r
+        {\r
+            this.queueProcessor.QueueCompleted += this.queueProcessor_QueueCompleted;\r
+            this.queueProcessor.QueueChanged += this.QueueManager_QueueChanged;\r
+            this.queueProcessor.JobProcessingStarted += this.QueueProcessorJobProcessingStarted;\r
+\r
+        }\r
+\r
+        public void Deactivate()\r
+        {\r
+            this.queueProcessor.QueueCompleted -= this.queueProcessor_QueueCompleted;\r
+            this.queueProcessor.QueueChanged -= this.QueueManager_QueueChanged;\r
+            this.queueProcessor.JobProcessingStarted -= this.QueueProcessorJobProcessingStarted;\r
+        }\r
+\r
         /// <summary>\r
         /// Override the OnActive to run the Screen Loading code in the view model base.\r
         /// </summary>\r
@@ -472,7 +525,7 @@ namespace HandBrakeWPF.ViewModels
                     this.queueProcessor.Pause();\r
                     this.JobStatus = Resources.QueueViewModel_QueuePending;\r
                     this.JobsPending = string.Format(Resources.QueueViewModel_JobsPending, this.queueProcessor.Count);\r
-                    this.IsEncoding = false;\r
+                    this.IsQueueRunning = false;\r
 \r
                     this.errorService.ShowMessageBox(\r
                         Resources.MainViewModel_LowDiskSpaceWarning,\r
@@ -498,6 +551,7 @@ namespace HandBrakeWPF.ViewModels
             if (!queueProcessor.IsProcessing)\r
             {\r
                 this.JobStatus = Resources.QueueViewModel_QueueNotRunning;\r
+                this.IsQueueRunning = false;\r
             }\r
         }\r
 \r
@@ -514,7 +568,7 @@ namespace HandBrakeWPF.ViewModels
         {\r
             this.JobStatus = Resources.QueueViewModel_QueueCompleted;\r
             this.JobsPending = string.Format(Resources.QueueViewModel_JobsPending, this.queueProcessor.Count);\r
-            this.IsEncoding = false;\r
+            this.IsQueueRunning = false;\r
         }\r
 \r
         /// <summary>\r
@@ -547,7 +601,7 @@ namespace HandBrakeWPF.ViewModels
         {\r
             this.JobStatus = Resources.QueueViewModel_QueueStarted;\r
             this.JobsPending = string.Format(Resources.QueueViewModel_JobsPending, this.queueProcessor.Count);\r
-            this.IsEncoding = true;\r
+            this.IsQueueRunning = true; \r
         }\r
 \r
         #endregion\r
index 6d86bd7c85d8bb976b45078087224e80bcc4578e..114556c4360593d73f910417b53ae58249e68a90 100644 (file)
@@ -44,8 +44,8 @@
             <RowDefinition Height="Auto" />
             <RowDefinition Height="*" />
         </Grid.RowDefinitions>
-        
-        <ListBox Grid.Row="2"
+
+        <ListBox Grid.Row="2" Tag="{Binding}"
                  Margin="10,5,0,1"
                  dd:DragDrop.DropHandler="{Binding}"
                  dd:DragDrop.IsDragSource="True"
             </i:Interaction.Triggers>
 
             <ListBox.ContextMenu>
-                <ContextMenu>
+                <ContextMenu cal:Action.TargetWithoutContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}">
+                    <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}" />                 
index c1c00bb39e2854b97d4d63d784c6988b916ae399..414c29e30611bd2ca57c8f1c63286fdee33d5347 100644 (file)
@@ -66,8 +66,8 @@
             <DockPanel Background="Transparent" HorizontalAlignment="Stretch">\r
 \r
                 <Button Name="Start" DockPanel.Dock="Left" AutomationProperties.Name="Start Queue"\r
-                        cal:Message.Attach="[Event Click] = [Action StartEncode]"\r
-                        Visibility="{Binding IsEncoding,\r
+                        cal:Message.Attach="[Event Click] = [Action StartQueue]"\r
+                        Visibility="{Binding IsQueueRunning,\r
                                              Converter={StaticResource boolToVisConverter},\r
                                              ConverterParameter=true}">\r
                     <StackPanel Orientation="Horizontal">\r
@@ -81,8 +81,8 @@
                 </Button>\r
 \r
                 <Button Name="Pause" DockPanel.Dock="Left" AutomationProperties.Name="Pause Queue"\r
-                        cal:Message.Attach="[Event Click] = [Action PauseEncode]"\r
-                        Visibility="{Binding IsEncoding,\r
+                        cal:Message.Attach="[Event Click] = [Action PauseQueueToolbar]"\r
+                        Visibility="{Binding IsQueueRunning,\r
                                              Converter={StaticResource boolToVisConverter},\r
                                              ConverterParameter=false}">\r
                     <StackPanel Orientation="Horizontal">\r
             <TextBlock Text="{Binding JobStatus}" TextWrapping="WrapWithOverflow" TextTrimming="CharacterEllipsis"/>\r
         </StackPanel>\r
 \r
-        <ListBox Grid.Row="2"\r
+        <ListBox Grid.Row="2" Tag="{Binding}"\r
                  Margin="10,20,10,10"\r
                  dd:DragDrop.DropHandler="{Binding}"\r
                  dd:DragDrop.IsDragSource="True"\r
             </i:Interaction.Triggers>\r
 \r
             <ListBox.ContextMenu>\r
-                <ContextMenu>\r
+                <ContextMenu cal:Action.TargetWithoutContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}">\r
+                    <MenuItem cal:Message.Attach="[Event Click] = [Action StartQueue]" Header="{x:Static Properties:ResourcesUI.QueueView_Start}" />\r
+                    <MenuItem cal:Message.Attach="[Event Click] = [Action PauseQueue]" Header="{x:Static Properties:ResourcesUI.QueueView_Pause}" />\r
+                    <Separator />\r
                     <MenuItem cal:Message.Attach="[Event Click] = [Action ClearCompleted]" Header="{x:Static Properties:ResourcesUI.QueueView_ClearCompleted}" />\r
                     <MenuItem cal:Message.Attach="[Event Click] = [Action Clear]" Header="{x:Static Properties:ResourcesUI.QueueView_ClearAll}" />\r
                     <MenuItem cal:Message.Attach="[Event Click] = [Action RemoveSelectedJobs]" Header="{x:Static Properties:ResourcesUI.QueueView_ClearSelected}" />                 \r