From 20cda6ce966d09726d6c00536f3e2705835f8e63 Mon Sep 17 00:00:00 2001 From: sr55 Date: Thu, 2 Nov 2017 20:21:33 +0000 Subject: [PATCH] WinGui: Adding Preset Category support into the Windows UI. Single layer support only. #833 --- .../Properties/ResourcesUI.Designer.cs | 18 ++++ .../HandBrakeWPF/Properties/ResourcesUI.resx | 6 ++ .../Presets/Interfaces/IPresetService.cs | 9 ++ .../Presets/Model/PresetDisplayCategory.cs | 5 +- .../Services/Presets/PresetService.cs | 24 +++++- .../ViewModels/AddPresetViewModel.cs | 84 +++++++++++++------ win/CS/HandBrakeWPF/Views/AddPresetView.xaml | 25 ++++-- 7 files changed, 137 insertions(+), 34 deletions(-) diff --git a/win/CS/HandBrakeWPF/Properties/ResourcesUI.Designer.cs b/win/CS/HandBrakeWPF/Properties/ResourcesUI.Designer.cs index 58f88cf3b..9a09c8cc1 100644 --- a/win/CS/HandBrakeWPF/Properties/ResourcesUI.Designer.cs +++ b/win/CS/HandBrakeWPF/Properties/ResourcesUI.Designer.cs @@ -78,6 +78,15 @@ namespace HandBrakeWPF.Properties { } } + /// + /// Looks up a localized string similar to -- Add New Category --. + /// + public static string AddPresetView_AddNewCategory { + get { + return ResourceManager.GetString("AddPresetView_AddNewCategory", resourceCulture); + } + } + /// /// Looks up a localized string similar to Add Preset. /// @@ -87,6 +96,15 @@ namespace HandBrakeWPF.Properties { } } + /// + /// Looks up a localized string similar to Category. + /// + public static string AddPresetView_Category { + get { + return ResourceManager.GetString("AddPresetView_Category", resourceCulture); + } + } + /// /// Looks up a localized string similar to Description:. /// diff --git a/win/CS/HandBrakeWPF/Properties/ResourcesUI.resx b/win/CS/HandBrakeWPF/Properties/ResourcesUI.resx index 8efdc2de5..3546ddbf5 100644 --- a/win/CS/HandBrakeWPF/Properties/ResourcesUI.resx +++ b/win/CS/HandBrakeWPF/Properties/ResourcesUI.resx @@ -983,4 +983,10 @@ This will not affect your current settings in the Subtitle tab. Official + + Category + + + -- Add New Category -- + \ No newline at end of file diff --git a/win/CS/HandBrakeWPF/Services/Presets/Interfaces/IPresetService.cs b/win/CS/HandBrakeWPF/Services/Presets/Interfaces/IPresetService.cs index f75c054c5..079d9424a 100644 --- a/win/CS/HandBrakeWPF/Services/Presets/Interfaces/IPresetService.cs +++ b/win/CS/HandBrakeWPF/Services/Presets/Interfaces/IPresetService.cs @@ -9,6 +9,7 @@ namespace HandBrakeWPF.Services.Presets.Interfaces { + using System.Collections.Generic; using System.Collections.ObjectModel; using HandBrake.ApplicationServices.Model; @@ -45,6 +46,14 @@ namespace HandBrakeWPF.Services.Presets.Interfaces /// void LoadCategoryStates(); + /// + /// Get a list of preset categories. + /// + /// + /// String list. + /// + IList GetPresetCategories(bool userCategoriesOnly); + /// /// Add a new preset to the system /// diff --git a/win/CS/HandBrakeWPF/Services/Presets/Model/PresetDisplayCategory.cs b/win/CS/HandBrakeWPF/Services/Presets/Model/PresetDisplayCategory.cs index f70fd4680..1712f4756 100644 --- a/win/CS/HandBrakeWPF/Services/Presets/Model/PresetDisplayCategory.cs +++ b/win/CS/HandBrakeWPF/Services/Presets/Model/PresetDisplayCategory.cs @@ -18,16 +18,17 @@ namespace HandBrakeWPF.Services.Presets.Model private bool isSelected; private bool isExpanded; - public PresetDisplayCategory(string category, BindingList presets) + public PresetDisplayCategory(string category, bool isBuildIn, BindingList presets) { + this.IsBuiltIn = isBuildIn; this.Category = category; this.Presets = presets; } public string Category { get; private set; } public BindingList Presets { get; private set; } - public string Description => this.Category; + public bool IsBuiltIn { get; } public bool IsExpanded { diff --git a/win/CS/HandBrakeWPF/Services/Presets/PresetService.cs b/win/CS/HandBrakeWPF/Services/Presets/PresetService.cs index f4057dbc3..c021c12ac 100644 --- a/win/CS/HandBrakeWPF/Services/Presets/PresetService.cs +++ b/win/CS/HandBrakeWPF/Services/Presets/PresetService.cs @@ -144,7 +144,7 @@ namespace HandBrakeWPF.Services.Presets else if (!string.IsNullOrEmpty(preset.Category)) { // Otherwise, if we have category but it doesn't exist, create it. - this.presets.Add(new PresetDisplayCategory(preset.Category, new BindingList { preset })); + this.presets.Add(new PresetDisplayCategory(preset.Category, preset.IsBuildIn, new BindingList { preset })); } else { @@ -576,6 +576,28 @@ namespace HandBrakeWPF.Services.Presets } } + public IList GetPresetCategories(bool userCategoriesOnly) + { + List categoriesList = new List(); + + foreach (var item in this.Presets) + { + PresetDisplayCategory category = item as PresetDisplayCategory; + if (category != null) + { + if (userCategoriesOnly && category.IsBuiltIn) + { + continue; + } + + categoriesList.Add(category); + + } + } + + return categoriesList; + } + #endregion #region Private Helpers diff --git a/win/CS/HandBrakeWPF/ViewModels/AddPresetViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/AddPresetViewModel.cs index f8974a0c4..398fff3c8 100644 --- a/win/CS/HandBrakeWPF/ViewModels/AddPresetViewModel.cs +++ b/win/CS/HandBrakeWPF/ViewModels/AddPresetViewModel.cs @@ -10,6 +10,7 @@ namespace HandBrakeWPF.ViewModels { using System.Collections.Generic; + using System.Linq; using System.Windows; using Caliburn.Micro; @@ -35,39 +36,20 @@ namespace HandBrakeWPF.ViewModels /// public class AddPresetViewModel : ViewModelBase, IAddPresetViewModel { - /// - /// Backing field for the Preset Service - /// private readonly IPresetService presetService; - - /// - /// Backing field for the error service - /// private readonly IErrorService errorService; - - /// - /// The window manager. - /// private readonly IWindowManager windowManager; - - /// - /// Backing fields for Selected Picture settings mode. - /// private PresetPictureSettingsMode selectedPictureSettingMode; - - /// - /// Backging field for show custom inputs - /// private bool showCustomInputs; - - /// - /// The source. - /// private Title selectedTitle; private IAudioDefaultsViewModel audioDefaultsViewModel; private ISubtitlesDefaultsViewModel subtitlesDefaultsViewModel; + private PresetDisplayCategory selectedPresetCategory; + private readonly PresetDisplayCategory addNewCategory = new PresetDisplayCategory(ResourcesUI.AddPresetView_AddNewCategory, true, null); + private bool canAddNewPresetCategory; + /// /// Initializes a new instance of the class. /// @@ -85,9 +67,11 @@ namespace HandBrakeWPF.ViewModels this.presetService = presetService; this.errorService = errorService; this.windowManager = windowManager; - this.Title = "Add Preset"; + this.Title = ResourcesUI.AddPresetView_AddPreset; this.Preset = new Preset { IsBuildIn = false, IsDefault = false, Category = PresetService.UserPresetCatgoryName }; this.PictureSettingsModes = EnumHelper.GetEnumList(); + this.PresetCategories = presetService.GetPresetCategories(true).Union(new List { addNewCategory }).ToList(); + this.SelectedPresetCategory = this.PresetCategories.FirstOrDefault(n => n.Category == PresetService.UserPresetCatgoryName); } /// @@ -126,6 +110,58 @@ namespace HandBrakeWPF.ViewModels } } + public List PresetCategories { get; set; } + + public PresetDisplayCategory SelectedPresetCategory + { + get + { + return this.selectedPresetCategory; + } + set + { + this.selectedPresetCategory = value; + this.CanAddNewPresetCategory = Equals(value, this.addNewCategory); + + if (this.selectedPresetCategory != null + && !object.Equals(this.selectedPresetCategory, this.addNewCategory)) + { + this.PresetCategory = this.selectedPresetCategory.Category; + } + else + { + this.PresetCategory = PresetService.UserPresetCatgoryName; + } + } + } + + public string PresetCategory + { + get + { + return this.Preset.Category; + } + set + { + this.Preset.Category = value; + this.NotifyOfPropertyChange(() => this.PresetCategory); + } + } + + public bool CanAddNewPresetCategory + { + get + { + return this.canAddNewPresetCategory; + } + set + { + if (value == this.canAddNewPresetCategory) return; + this.canAddNewPresetCategory = value; + this.NotifyOfPropertyChange(); + } + } + /// /// Gets or sets SelectedPictureSettingMode. /// diff --git a/win/CS/HandBrakeWPF/Views/AddPresetView.xaml b/win/CS/HandBrakeWPF/Views/AddPresetView.xaml index f47beb6cf..8f956d35a 100644 --- a/win/CS/HandBrakeWPF/Views/AddPresetView.xaml +++ b/win/CS/HandBrakeWPF/Views/AddPresetView.xaml @@ -50,6 +50,7 @@ + @@ -72,14 +73,24 @@ Text="{Binding Preset.Description, UpdateSourceTrigger=PropertyChanged}" /> + + + + + + + + - - - - -