summaryrefslogtreecommitdiffstats
path: root/win/CS
diff options
context:
space:
mode:
authorsr55 <[email protected]>2016-06-16 20:41:00 +0100
committersr55 <[email protected]>2016-06-16 20:41:00 +0100
commitdab0d2e18d835006e90dbc6dbbffd1c7d2aa0b9d (patch)
tree6e99322a83337d829320d800f7c1d67f735cf7b4 /win/CS
parent44a359d7d68a9c716df2927781ba144c22d0d285 (diff)
WinGui: Make the "Presets" menu grouped by category.
Diffstat (limited to 'win/CS')
-rw-r--r--win/CS/HandBrakeWPF/Commands/PresetMenuSelectCommand.cs48
-rw-r--r--win/CS/HandBrakeWPF/Converters/PresetsMenuConverter.cs83
-rw-r--r--win/CS/HandBrakeWPF/HandBrakeWPF.csproj2
-rw-r--r--win/CS/HandBrakeWPF/ViewModels/Interfaces/IMainViewModel.cs2
-rw-r--r--win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs2
-rw-r--r--win/CS/HandBrakeWPF/Views/MainView.xaml18
6 files changed, 141 insertions, 14 deletions
diff --git a/win/CS/HandBrakeWPF/Commands/PresetMenuSelectCommand.cs b/win/CS/HandBrakeWPF/Commands/PresetMenuSelectCommand.cs
new file mode 100644
index 000000000..ec64c2820
--- /dev/null
+++ b/win/CS/HandBrakeWPF/Commands/PresetMenuSelectCommand.cs
@@ -0,0 +1,48 @@
+// --------------------------------------------------------------------------------------------------------------------
+// <copyright file="PresetsMenuConverter.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>
+// A Command to handle the Preset Menu Clicks.
+// </summary>
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrakeWPF.Commands
+{
+ using System;
+ using System.Windows.Input;
+
+ using Caliburn.Micro;
+
+ using HandBrakeWPF.Services.Presets.Model;
+ using HandBrakeWPF.ViewModels.Interfaces;
+
+ public class PresetMenuSelectCommand : ICommand
+ {
+ private readonly Preset preset;
+
+ /// <summary>Initializes a new instance of the <see cref="T:System.Object" /> class.</summary>
+ public PresetMenuSelectCommand(Preset preset)
+ {
+ this.preset = preset;
+ }
+
+ /// <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)
+ {
+ IMainViewModel mvm = IoC.Get<IMainViewModel>();
+ mvm.PresetSelect(this.preset);
+ }
+
+ public event EventHandler CanExecuteChanged;
+ }
+}
diff --git a/win/CS/HandBrakeWPF/Converters/PresetsMenuConverter.cs b/win/CS/HandBrakeWPF/Converters/PresetsMenuConverter.cs
new file mode 100644
index 000000000..9edce57d4
--- /dev/null
+++ b/win/CS/HandBrakeWPF/Converters/PresetsMenuConverter.cs
@@ -0,0 +1,83 @@
+// --------------------------------------------------------------------------------------------------------------------
+// <copyright file="PresetsMenuConverter.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>
+// A Converter to manage the Presets list and turn it into a grouped set of MenuItems
+// </summary>
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrakeWPF.Converters
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Linq;
+ using System.Globalization;
+ using System.Windows;
+ using System.Windows.Controls;
+ using System.Windows.Data;
+
+ using HandBrakeWPF.Commands;
+ using HandBrakeWPF.Services.Presets.Model;
+
+ public class PresetsMenuConverter : IValueConverter
+ {
+ /// <summary>Converts a value. </summary>
+ /// <returns>A converted value. If the method returns null, the valid null value is used.</returns>
+ /// <param name="value">The value produced by the binding source.</param>
+ /// <param name="targetType">The type of the binding target property.</param>
+ /// <param name="parameter">The converter parameter to use.</param>
+ /// <param name="culture">The culture to use in the converter.</param>
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ IEnumerable<Preset> presets = value as IEnumerable<Preset>;
+
+ if (presets ==null)
+ {
+ return null;
+ }
+
+ Dictionary<string, MenuItem> groupedMenu = new Dictionary<string, MenuItem>();
+ foreach (Preset item in presets)
+ {
+ if (groupedMenu.ContainsKey(item.Category))
+ {
+ MenuItem newMeuItem = new MenuItem { Header = item.Name, Tag = item, Command = new PresetMenuSelectCommand(item)};
+ if (item.IsDefault)
+ {
+ newMeuItem.FontStyle = FontStyles.Italic;
+ }
+
+ groupedMenu[item.Category].Items.Add(newMeuItem);
+ }
+ else
+ {
+ MenuItem group = new MenuItem();
+ group.Header = item.Category;
+
+ MenuItem newMeuItem = new MenuItem { Header = item.Name, Tag = item, Command = new PresetMenuSelectCommand(item) };
+ if (item.IsDefault)
+ {
+ newMeuItem.FontStyle = FontStyles.Italic;
+ }
+
+ group.Items.Add(newMeuItem);
+ groupedMenu[item.Category] = group;
+ }
+ }
+
+ return groupedMenu.Values.ToList();
+ }
+
+ /// <summary>Converts a value. </summary>
+ /// <returns>A converted value. If the method returns null, the valid null value is used.</returns>
+ /// <param name="value">The value that is produced by the binding target.</param>
+ /// <param name="targetType">The type to convert to.</param>
+ /// <param name="parameter">The converter parameter to use.</param>
+ /// <param name="culture">The culture to use in the converter.</param>
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/win/CS/HandBrakeWPF/HandBrakeWPF.csproj b/win/CS/HandBrakeWPF/HandBrakeWPF.csproj
index 08ae3899a..e09e69679 100644
--- a/win/CS/HandBrakeWPF/HandBrakeWPF.csproj
+++ b/win/CS/HandBrakeWPF/HandBrakeWPF.csproj
@@ -138,6 +138,7 @@
<Compile Include="Commands\Menu\QueueCommandParams.cs" />
<Compile Include="Commands\Menu\QueueCommands.cs" />
<Compile Include="Commands\OpenOptionsScreenCommand.cs" />
+ <Compile Include="Commands\PresetMenuSelectCommand.cs" />
<Compile Include="Commands\ProcessShortcutCommand.cs" />
<Compile Include="Commands\SourceMenuCommand.cs" />
<Compile Include="Commands\AdvancedEncoderOptionsCommand.cs" />
@@ -154,6 +155,7 @@
<Compile Include="Converters\EnumToDescConverter.cs" />
<Compile Include="Converters\Filters\DenoisePresetConverter.cs" />
<Compile Include="Converters\Options\LogLevelConverter.cs" />
+ <Compile Include="Converters\PresetsMenuConverter.cs" />
<Compile Include="Converters\Queue\PictureSettingsDescConveter.cs" />
<Compile Include="Converters\Subtitles\SubtitleBurnInBehaviourConverter.cs" />
<Compile Include="Converters\Subtitles\SubtitleBehaviourConverter.cs" />
diff --git a/win/CS/HandBrakeWPF/ViewModels/Interfaces/IMainViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/Interfaces/IMainViewModel.cs
index c886e70ba..539e239a5 100644
--- a/win/CS/HandBrakeWPF/ViewModels/Interfaces/IMainViewModel.cs
+++ b/win/CS/HandBrakeWPF/ViewModels/Interfaces/IMainViewModel.cs
@@ -25,6 +25,8 @@ namespace HandBrakeWPF.ViewModels.Interfaces
/// </summary>
Preset SelectedPreset { set; }
+ void PresetSelect(object tag);
+
/// <summary>
/// Shutdown the Application
/// </summary>
diff --git a/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs
index e2d15b2ab..eefe8fd50 100644
--- a/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs
+++ b/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs
@@ -1204,6 +1204,7 @@ namespace HandBrakeWPF.ViewModels
// Setup the presets.
this.presetService.Load();
+ this.NotifyOfPropertyChange(() => this.Presets);
// Queue Recovery
bool queueRecovered = QueueRecoveryHelper.RecoverQueue(this.queueProcessor, this.errorService, StartupOptions.AutoRestartQueue);
@@ -1874,6 +1875,7 @@ namespace HandBrakeWPF.ViewModels
if (this.selectedPreset != null)
{
this.presetService.SetDefault(this.selectedPreset);
+ this.NotifyOfPropertyChange(() => this.Presets);
MessageBox.Show(string.Format(Resources.Main_NewDefaultPreset, this.selectedPreset.Name), Resources.Main_Presets, MessageBoxButton.OK, MessageBoxImage.Information);
}
else
diff --git a/win/CS/HandBrakeWPF/Views/MainView.xaml b/win/CS/HandBrakeWPF/Views/MainView.xaml
index 12ef0cf96..ab812e7a3 100644
--- a/win/CS/HandBrakeWPF/Views/MainView.xaml
+++ b/win/CS/HandBrakeWPF/Views/MainView.xaml
@@ -19,6 +19,8 @@
<UserControl.Resources>
<Converters:BooleanConverter x:Key="booleanConverter" />
<Converters:EnumComboConverter x:Key="enumComboConverter" />
+ <Converters:PresetsMenuConverter x:Key="presetsMenuConverter"/>
+
<Style TargetType="Button">
@@ -100,20 +102,8 @@
<MenuItem Header="_Presets" x:Name="presetMenu" IsEnabled="{Binding HasSource, Converter={StaticResource booleanConverter}, ConverterParameter=false}">
- <MenuItem Header="_Presets" ItemsSource="{Binding Presets}">
- <MenuItem.ItemContainerStyle>
- <Style TargetType="MenuItem">
- <Setter Property="Tag" Value="{Binding}" />
- <Setter Property="cal:Action.TargetWithoutContext" Value="{Binding DataContext, ElementName=presetMenu}"/>
- <Setter Property="cal:Message.Attach" Value="[Event Click] = [Action PresetSelect($this.Tag)]"/>
- <Style.Triggers>
- <DataTrigger Binding="{Binding IsDefault}" Value="True">
- <Setter Property="FontStyle" Value="Italic" />
- </DataTrigger>
- </Style.Triggers>
- </Style>
- </MenuItem.ItemContainerStyle>
- </MenuItem>
+
+ <MenuItem Header="_Presets" ItemsSource="{Binding Presets, Converter={StaticResource presetsMenuConverter}}" />
<Separator />
<MenuItem Header="_Import from file" cal:Message.Attach="[Event Click] = [Action PresetImport]" />
<MenuItem Header="_Export to file" cal:Message.Attach="[Event Click] = [Action PresetExport]" />