// --------------------------------------------------------------------------------------------------------------------
//
// 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.Properties;
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 bool orderedByDuration;
private bool orderedByTitle;
private bool orderedByName;
private Action> addToQueue;
private string currentPreset;
///
/// 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.OrderedByTitle = true;
}
///
/// 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 or sets a value indicating whether ordered by title.
///
public bool OrderedByTitle
{
get
{
return this.orderedByTitle;
}
set
{
this.orderedByTitle = value;
this.NotifyOfPropertyChange(() => OrderedByTitle);
}
}
///
/// Gets or sets a value indicating whether ordered by duration.
///
public bool OrderedByDuration
{
get
{
return this.orderedByDuration;
}
set
{
this.orderedByDuration = value;
this.NotifyOfPropertyChange(() => OrderedByDuration);
}
}
///
/// Gets or sets a value indicating whether ordered by name.
///
public bool OrderedByName
{
get
{
return this.orderedByName;
}
set
{
this.orderedByName = value;
this.NotifyOfPropertyChange(() => OrderedByName);
}
}
///
/// Gets a value indicating whether is auto naming enabled.
///
public bool IsAutoNamingEnabled
{
get
{
return this.userSettingService.GetUserSetting(UserSettingConstants.AutoNaming);
}
}
///
/// The order by title.
///
public void OrderByTitle()
{
TitleList = new BindingList(TitleList.OrderBy(o => o.Title.TitleNumber).ToList());
this.NotifyOfPropertyChange(() => TitleList);
this.OrderedByTitle = true;
this.OrderedByDuration = false;
this.OrderedByName = false;
}
///
/// The order by duration.
///
public void OrderByDuration()
{
TitleList = new BindingList(TitleList.OrderByDescending(o => o.Title.Duration).ToList());
this.NotifyOfPropertyChange(() => TitleList);
this.OrderedByTitle = false;
this.OrderedByDuration = true;
this.OrderedByName = false;
}
///
/// The order by name.
///
public void OrderByName()
{
TitleList = new BindingList(TitleList.OrderBy(o => o.Title.SourceName).ToList());
this.NotifyOfPropertyChange(() => TitleList);
this.OrderedByTitle = false;
this.OrderedByDuration = false;
this.OrderedByName = true;
}
///
/// The select all.
///
public void SelectAll()
{
foreach (var item in TitleList)
{
item.IsSelected = true;
}
}
///
/// The select all.
///
public void UnSelectAll()
{
foreach (var item in TitleList)
{
item.IsSelected = false;
}
}
///
/// Add a Preset
///
public void Add()
{
this.addToQueue(this.TitleList.Where(c => c.IsSelected));
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 src Name.
///
///
/// The add Action.
///
///
/// The preset.
///
public void Setup(Source scannedSource, string srcName, Action> addAction, Preset preset)
{
this.TitleList.Clear();
this.addToQueue = addAction;
if (scannedSource != null)
{
IEnumerable titles = orderedByTitle
? scannedSource.Titles
: scannedSource.Titles.OrderByDescending(o => o.Duration).ToList();
foreach (Title item in titles)
{
SelectionTitle title = new SelectionTitle(item, srcName) { IsSelected = true };
TitleList.Add(title);
}
}
if (preset != null)
{
this.CurrentPreset = string.Format(ResourcesUI.QueueSelection_UsingPreset, preset.Name);
}
this.NotifyOfPropertyChange(() => this.IsAutoNamingEnabled);
}
}
}