diff options
author | sr55 <[email protected]> | 2016-06-16 20:41:00 +0100 |
---|---|---|
committer | sr55 <[email protected]> | 2016-06-16 20:41:00 +0100 |
commit | dab0d2e18d835006e90dbc6dbbffd1c7d2aa0b9d (patch) | |
tree | 6e99322a83337d829320d800f7c1d67f735cf7b4 /win/CS | |
parent | 44a359d7d68a9c716df2927781ba144c22d0d285 (diff) |
WinGui: Make the "Presets" menu grouped by category.
Diffstat (limited to 'win/CS')
-rw-r--r-- | win/CS/HandBrakeWPF/Commands/PresetMenuSelectCommand.cs | 48 | ||||
-rw-r--r-- | win/CS/HandBrakeWPF/Converters/PresetsMenuConverter.cs | 83 | ||||
-rw-r--r-- | win/CS/HandBrakeWPF/HandBrakeWPF.csproj | 2 | ||||
-rw-r--r-- | win/CS/HandBrakeWPF/ViewModels/Interfaces/IMainViewModel.cs | 2 | ||||
-rw-r--r-- | win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs | 2 | ||||
-rw-r--r-- | win/CS/HandBrakeWPF/Views/MainView.xaml | 18 |
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]" />
|