// -------------------------------------------------------------------------------------------------------------------- // // This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License. // // // The Queue Selection View Model // // -------------------------------------------------------------------------------------------------------------------- namespace HandBrakeWPF.ViewModels { using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using HandBrakeWPF.Model; using HandBrakeWPF.Model.Queue; using HandBrakeWPF.Properties; using HandBrakeWPF.Services.Encode.Model.Models; using HandBrakeWPF.Services.Interfaces; using HandBrakeWPF.Services.Presets.Model; using HandBrakeWPF.Services.Scan.Model; using HandBrakeWPF.ViewModels.Interfaces; /// /// The Queue Selection View Model /// public class QueueSelectionViewModel : ViewModelBase, IQueueSelectionViewModel { private readonly IErrorService errorService; private readonly IUserSettingService userSettingService; private Action, QueueAddRangeLimit> addToQueue; private BindingList startEndRangeItems1; private string currentPreset; public bool titleDesc = true; public bool durationDesc = true; public bool nameDesc = true; /// /// Initializes a new instance of the class. /// /// /// The Error Service /// /// /// The user Setting Service. /// public QueueSelectionViewModel(IErrorService errorService, IUserSettingService userSettingService) { this.errorService = errorService; this.userSettingService = userSettingService; this.Title = Resources.QueueSelectionViewModel_AddToQueue; this.TitleList = new BindingList(); this.RangeLimits = new QueueAddRangeLimit(); List startEndRangeItems = new List(); for (int i = 1; i <= 99; i++) { startEndRangeItems.Add(i); } this.StartEndRangeItems = new BindingList(startEndRangeItems); } /// /// Gets or sets the source. /// public string Source { get; set; } /// /// Gets or sets the selected titles. /// public BindingList TitleList { get; set; } /// /// Gets or sets the current preset. /// public string CurrentPreset { get { return this.currentPreset; } set { if (value == this.currentPreset) { return; } this.currentPreset = value; this.NotifyOfPropertyChange(() => this.CurrentPreset); } } /// /// Gets a value indicating whether is auto naming enabled. /// public bool IsAutoNamingEnabled { get { return this.userSettingService.GetUserSetting(UserSettingConstants.AutoNaming); } } public QueueAddRangeLimit RangeLimits { get; set; } public BindingList RangeMode { get; } = new BindingList { PointToPointMode.Chapters, PointToPointMode.Seconds, PointToPointMode.Frames }; public BindingList StartEndRangeItems { get => this.startEndRangeItems1; private set { if (Equals(value, this.startEndRangeItems1)) { return; } this.startEndRangeItems1 = value; this.NotifyOfPropertyChange(() => this.StartEndRangeItems); } } public void OrderByTitle() { if (this.titleDesc) { TitleList = new BindingList(TitleList.OrderByDescending(o => o.Title.TitleNumber).ToList()); } else { TitleList = new BindingList(TitleList.OrderBy(o => o.Title.TitleNumber).ToList()); } this.NotifyOfPropertyChange(() => TitleList); this.titleDesc = !this.titleDesc; } public void OrderByDuration() { if (this.durationDesc) { TitleList = new BindingList(TitleList.OrderByDescending(o => o.Title.Duration).ToList()); } else { TitleList = new BindingList(TitleList.OrderBy(o => o.Title.Duration).ToList()); } this.NotifyOfPropertyChange(() => TitleList); this.durationDesc = !this.durationDesc; } public void OrderByName() { if (this.nameDesc) { TitleList = new BindingList(TitleList.OrderByDescending(o => o.Title.SourcePath).ToList()); } else { TitleList = new BindingList(TitleList.OrderBy(o => o.Title.SourcePath).ToList()); } this.NotifyOfPropertyChange(() => TitleList); this.nameDesc = !this.nameDesc; } /// /// The select all. /// public void SelectAll() { foreach (var item in TitleList) { item.IsSelected = true; } } /// /// The unselect all. /// public void UnSelectAll() { foreach (var item in TitleList) { item.IsSelected = false; } } /// /// Invert selection /// public void InvertSelection() { foreach (var item in TitleList) { item.IsSelected = !item.IsSelected; } } /// /// Add a Preset /// public void Add() { this.addToQueue(this.TitleList.Where(c => c.IsSelected), this.RangeLimits); this.Close(); } /// /// Cancel adding a preset /// public void Cancel() { this.TitleList.Clear(); this.Close(); } /// /// Close this window. /// public void Close() { this.TryClose(); } /// /// The setup. /// /// /// The scanned source. /// /// /// The add Action. /// /// /// The preset. /// public void Setup(Source scannedSource, Action, QueueAddRangeLimit> addAction, Preset preset) { this.TitleList.Clear(); this.addToQueue = addAction; if (scannedSource != null) { IEnumerable titles = scannedSource.Titles; foreach (Title item in titles) { string srcName = item.DisplaySourceName ?? item.SourcePath; SelectionTitle title = new SelectionTitle(item, srcName) { IsSelected = true }; TitleList.Add(title); } } if (preset != null) { this.CurrentPreset = string.Format(Resources.QueueSelection_UsingPreset, preset.Name); } this.NotifyOfPropertyChange(() => this.IsAutoNamingEnabled); } } }