// -------------------------------------------------------------------------------------------------------------------- // // This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License. // // // The Shell View Model // // -------------------------------------------------------------------------------------------------------------------- namespace HandBrakeWPF.ViewModels { using System.Windows; using Caliburn.Micro; using HandBrakeWPF.Model; using HandBrakeWPF.Properties; using HandBrakeWPF.Services.Interfaces; using HandBrakeWPF.ViewModels.Interfaces; using IQueueProcessor = HandBrakeWPF.Services.Queue.Interfaces.IQueueProcessor; /// /// The Shell View Model /// public class ShellViewModel : ViewModelBase, IShellViewModel { /// /// Backing field for the error service. /// private readonly IErrorService errorService; #region Constants and Fields /// /// The show main window. /// private bool showMainWindow; /// /// The show options. /// private bool showOptions; private bool showOverlayPanel; private bool isMainPanelEnabled; #endregion /// /// Initializes a new instance of the class. /// /// /// The error Service. /// public ShellViewModel(IErrorService errorService) { this.errorService = errorService; this.showMainWindow = true; this.showOptions = false; this.IsMainPanelEnabled = true; } /// /// The show overlay. /// /// /// The panel. /// public void ShowOverlay(IOverlayPanel panel) { this.OverlayPanelViewModel = panel; this.NotifyOfPropertyChange(() => this.OverlayPanelViewModel); this.ShowOverlayPanel = true; } /// /// The hide overlay. /// public void HideOverlay() { this.ShowOverlayPanel = false; this.OverlayPanelViewModel = null; } /// /// Change the page displayed on this window. /// /// /// The window. /// public void DisplayWindow(ShellWindow window) { if (window == ShellWindow.MainWindow) { this.ShowMainWindow = true; this.ShowOptions = false; } else if (window == ShellWindow.OptionsWindow) { this.ShowOptions = true; this.ShowMainWindow = false; } else { this.ShowMainWindow = true; this.ShowOptions = false; } } #region Properties /// /// Gets or sets MainViewModel. /// public IMainViewModel MainViewModel { get; set; } /// /// Gets or sets OptionsViewModel. /// public IOptionsViewModel OptionsViewModel { get; set; } /// /// Gets or sets the overlay panel view model. /// public IOverlayPanel OverlayPanelViewModel { get; set; } /// /// Gets or sets a value indicating whether ShowMainWindow. /// public bool ShowMainWindow { get { return this.showMainWindow; } set { this.showMainWindow = value; this.NotifyOfPropertyChange(() => this.ShowMainWindow); } } /// /// Gets or sets a value indicating whether ShowOptions. /// public bool ShowOptions { get { return this.showOptions; } set { this.showOptions = value; this.NotifyOfPropertyChange(() => this.ShowOptions); } } /// /// Gets or sets a value indicating whether is main panel enabled. /// public bool IsMainPanelEnabled { get { return this.isMainPanelEnabled; } set { if (value.Equals(this.isMainPanelEnabled)) { return; } this.isMainPanelEnabled = value; this.NotifyOfPropertyChange(() => this.IsMainPanelEnabled); } } /// /// Gets or sets a value indicating whether show overlay panel. /// public bool ShowOverlayPanel { get { return this.showOverlayPanel; } set { if (value.Equals(this.showOverlayPanel)) { return; } this.showOverlayPanel = value; this.IsMainPanelEnabled = !value; this.NotifyOfPropertyChange(() => this.ShowOverlayPanel); } } /// /// Gets WindowTitle. /// public string WindowTitle { get { return "HandBrake"; } } #endregion /// /// The files dropped on window. Pass this through to the active view model. /// /// /// The DragEventArgs. /// public void FilesDroppedOnWindow(DragEventArgs e) { this.MainViewModel.FilesDroppedOnWindow(e); } /// /// Checks with the use if this window can be closed. /// /// /// Returns true if the window can be closed. /// public bool CanClose() { IQueueProcessor processor = IoC.Get(); if (processor != null && processor.EncodeService.IsEncoding) { MessageBoxResult result = errorService.ShowMessageBox( "An Encode is currently running. Exiting HandBrake will stop this encode.\nAre you sure you wish to exit HandBrake?", Resources.Warning, MessageBoxButton.YesNo, MessageBoxImage.Warning); if (result == MessageBoxResult.Yes) { processor.Pause(); processor.EncodeService.Stop(); if (this.MainViewModel != null) { this.MainViewModel.Shutdown(); } return true; } return false; } if (this.MainViewModel != null) { this.MainViewModel.Shutdown(); } return true; } } }