From: sr55 <sr55.hb@outlook.com>
Date: Sat, 20 Feb 2016 17:28:42 +0000 (+0000)
Subject: WinGui: Adding a "Queue" Menu
X-Git-Tag: 1.0.0~637
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=eff231c2375c4056925c538332db44445de027e1;p=handbrake

WinGui: Adding a "Queue" Menu
---

diff --git a/win/CS/HandBrakeWPF/Commands/Menu/QueueCommandParams.cs b/win/CS/HandBrakeWPF/Commands/Menu/QueueCommandParams.cs
new file mode 100644
index 000000000..e68b17d09
--- /dev/null
+++ b/win/CS/HandBrakeWPF/Commands/Menu/QueueCommandParams.cs
@@ -0,0 +1,23 @@
+// --------------------------------------------------------------------------------------------------------------------
+// <copyright file="QueueCommandParams.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>
+//   Defines the QueueCommandParams type.
+// </summary>
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrakeWPF.Commands.Menu
+{
+    /// <summary>
+    /// The queue command params.
+    /// </summary>
+    public enum QueueCommandParams
+    {
+        ClearCompleted,
+        ClearAll,
+        ClearSelected,
+        Import,
+        Export
+    }
+}
diff --git a/win/CS/HandBrakeWPF/Commands/Menu/QueueCommands.cs b/win/CS/HandBrakeWPF/Commands/Menu/QueueCommands.cs
new file mode 100644
index 000000000..2f0bb009d
--- /dev/null
+++ b/win/CS/HandBrakeWPF/Commands/Menu/QueueCommands.cs
@@ -0,0 +1,81 @@
+// --------------------------------------------------------------------------------------------------------------------
+// <copyright file="QueueCommands.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>
+//   The queue commands.
+// </summary>
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrakeWPF.Commands.Menu
+{
+    using System;
+    using System.Windows.Input;
+
+    using HandBrakeWPF.ViewModels.Interfaces;
+
+    /// <summary>
+    /// The queue commands.
+    /// </summary>
+    public class QueueCommands : ICommand
+    {
+        /// <summary>
+        /// Gets or sets the queue view model.
+        /// </summary>
+        public IQueueViewModel QueueViewModel { get; set; }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="QueueCommands"/> class. 
+        /// </summary>
+        /// <param name="queueViewModel">
+        /// The queue View Model.
+        /// </param>
+        public QueueCommands(IQueueViewModel queueViewModel)
+        {
+            this.QueueViewModel = queueViewModel;
+        }
+
+        /// <summary>
+        /// Defines the method that determines whether the command can execute in its current state.
+        /// </summary>
+        /// <returns>
+        /// true if this command can be executed; otherwise, false.
+        /// </returns>
+        /// <param name="parameter">Data used by the command.  If the command does not require data to be passed, this object can be set to null.</param>
+        public bool CanExecute(object parameter)
+        {
+            return true;
+        }
+
+        /// <summary>
+        /// Defines the method to be called when the command is invoked.
+        /// </summary>
+        /// <param name="parameter">Data used by the command.  If the command does not require data to be passed, this object can be set to null.</param>
+        public void Execute(object parameter)
+        {
+            switch ((QueueCommandParams)parameter)
+            {
+                case QueueCommandParams.ClearAll:
+                    this.QueueViewModel.Clear();
+                    break;
+                case QueueCommandParams.ClearCompleted:
+                    this.QueueViewModel.ClearCompleted();
+                    break;
+                case QueueCommandParams.ClearSelected:
+                    this.QueueViewModel.RemoveSelectedJobs();
+                    break;
+                case QueueCommandParams.Import:
+                    this.QueueViewModel.Import();
+                    break;
+                case QueueCommandParams.Export:
+                    this.QueueViewModel.Export();
+                    break;
+            }
+        }
+
+        /// <summary>
+        /// The can execute changed.
+        /// </summary>
+        public event EventHandler CanExecuteChanged;
+    }
+}
diff --git a/win/CS/HandBrakeWPF/HandBrakeWPF.csproj b/win/CS/HandBrakeWPF/HandBrakeWPF.csproj
index 21b92b13e..4b4dd7b81 100644
--- a/win/CS/HandBrakeWPF/HandBrakeWPF.csproj
+++ b/win/CS/HandBrakeWPF/HandBrakeWPF.csproj
@@ -128,6 +128,8 @@
     <Compile Include="Collections\SerializableDictionary.cs" />
     <Compile Include="Commands\InputBindingTrigger.cs" />
     <Compile Include="Commands\Interfaces\IAdvancedEncoderOptionsCommand.cs" />
+    <Compile Include="Commands\Menu\QueueCommandParams.cs" />
+    <Compile Include="Commands\Menu\QueueCommands.cs" />
     <Compile Include="Commands\OpenOptionsScreenCommand.cs" />
     <Compile Include="Commands\CloseOverlayPanelCommand.cs" />
     <Compile Include="Commands\OpenOverlayPanelCommand.cs" />
diff --git a/win/CS/HandBrakeWPF/ViewModels/Interfaces/IQueueViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/Interfaces/IQueueViewModel.cs
index 770869122..44d5d0f98 100644
--- a/win/CS/HandBrakeWPF/ViewModels/Interfaces/IQueueViewModel.cs
+++ b/win/CS/HandBrakeWPF/ViewModels/Interfaces/IQueueViewModel.cs
@@ -21,5 +21,30 @@ namespace HandBrakeWPF.ViewModels.Interfaces
         /// The action.
         /// </param>
         void WhenDone(string action);
+
+        /// <summary>
+        /// The import.
+        /// </summary>
+        void Import();
+
+        /// <summary>
+        /// The export.
+        /// </summary>
+        void Export();
+
+        /// <summary>
+        /// The clear completed.
+        /// </summary>
+        void ClearCompleted();
+
+        /// <summary>
+        /// The clear.
+        /// </summary>
+        void Clear();
+
+        /// <summary>
+        /// The remove selected jobs.
+        /// </summary>
+        void RemoveSelectedJobs();
     }
 }
\ No newline at end of file
diff --git a/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs
index 5eb792abb..0065bef6a 100644
--- a/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs
+++ b/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs
@@ -18,6 +18,7 @@ namespace HandBrakeWPF.ViewModels
     using System.Linq;
     using System.Threading;
     using System.Windows;
+    using System.Windows.Input;
 
     using Caliburn.Micro;
 
@@ -25,6 +26,7 @@ namespace HandBrakeWPF.ViewModels
     using HandBrake.ApplicationServices.Utilities;
 
     using HandBrakeWPF.Commands;
+    using HandBrakeWPF.Commands.Menu;
     using HandBrakeWPF.EventArgs;
     using HandBrakeWPF.Factories;
     using HandBrakeWPF.Helpers;
@@ -221,6 +223,9 @@ namespace HandBrakeWPF.ViewModels
                     break;
             }
 
+            // Setup Commands
+            this.QueueCommand = new QueueCommands(this.QueueViewModel);
+
             HandBrakeInstanceManager.Init();
         }
 
@@ -1176,6 +1181,12 @@ namespace HandBrakeWPF.ViewModels
 
         #endregion
 
+        #region Commands 
+
+        public ICommand QueueCommand { get; set; }
+
+        #endregion
+
         #region Load and Shutdown Handling
 
         /// <summary>
diff --git a/win/CS/HandBrakeWPF/Views/MainView.xaml b/win/CS/HandBrakeWPF/Views/MainView.xaml
index ae24fb286..3b86fdcb3 100644
--- a/win/CS/HandBrakeWPF/Views/MainView.xaml
+++ b/win/CS/HandBrakeWPF/Views/MainView.xaml
@@ -8,6 +8,7 @@
              xmlns:Properties="clr-namespace:HandBrakeWPF.Properties"
              xmlns:cal="http://www.caliburnproject.org"
              xmlns:attachedProperties="clr-namespace:HandBrakeWPF.AttachedProperties"
+             xmlns:menu="clr-namespace:HandBrakeWPF.Commands.Menu"
              AllowDrop="True"
         FontSize="11"
         cal:Message.Attach="[Event Loaded] = [Action Load]"
@@ -125,6 +126,18 @@
                     </MenuItem>
                 </MenuItem>
 
+                <MenuItem Header="_Queue" x:Name="queueMenu" Visibility="{Binding HasSource, Converter={StaticResource booleanConverter}, ConverterParameter=false}">
+                    <MenuItem Header="Add to Queue" cal:Message.Attach="[Event Click] = [Action AddAllToQueue]"  InputGestureText="Ctrl + A" />
+                    <MenuItem Header="All Selection to Queue" cal:Message.Attach="[Event Click] = [Action AddSelectionToQueue]" />
+                    <Separator Visibility="{Binding IsQueueShowingInLine, Converter={StaticResource boolToVisConverter}, ConverterParameter=false}" />
+                    <MenuItem Command="{Binding QueueCommand}" CommandParameter="{x:Static menu:QueueCommandParams.ClearCompleted}" Header="{x:Static Properties:ResourcesUI.QueueView_ClearCompleted}" Visibility="{Binding IsQueueShowingInLine, Converter={StaticResource boolToVisConverter}, ConverterParameter=false}" />
+                    <MenuItem Command="{Binding QueueCommand}" CommandParameter="{x:Static menu:QueueCommandParams.ClearAll}" Header="{x:Static Properties:ResourcesUI.QueueView_ClearAll}" Visibility="{Binding IsQueueShowingInLine, Converter={StaticResource boolToVisConverter}, ConverterParameter=false}" />
+                    <MenuItem Command="{Binding QueueCommand}" CommandParameter="{x:Static menu:QueueCommandParams.ClearSelected}" Header="{x:Static Properties:ResourcesUI.QueueView_ClearSelected}" Visibility="{Binding IsQueueShowingInLine, Converter={StaticResource boolToVisConverter}, ConverterParameter=false}" />
+                    <Separator Visibility="{Binding IsQueueShowingInLine, Converter={StaticResource boolToVisConverter}, ConverterParameter=false}" />
+                    <MenuItem Command="{Binding QueueCommand}" CommandParameter="{x:Static menu:QueueCommandParams.Import}" Header="{x:Static Properties:ResourcesUI.QueueView_Import}" Visibility="{Binding IsQueueShowingInLine, Converter={StaticResource boolToVisConverter}, ConverterParameter=false}" />
+                    <MenuItem Command="{Binding QueueCommand}" CommandParameter="{x:Static menu:QueueCommandParams.Export}" Header="{x:Static Properties:ResourcesUI.QueueView_Export}" Visibility="{Binding IsQueueShowingInLine, Converter={StaticResource boolToVisConverter}, ConverterParameter=false}" />
+                </MenuItem>
+
                 <MenuItem Header="_Help">
                     <MenuItem Header="_HandBrake User Guide (HTTP)" cal:Message.Attach="[Event Click] = [Action LaunchHelp]" InputGestureText="F1">
                         <MenuItem.Icon>