From acc52477100589c854cd3410a09949dd86fac754 Mon Sep 17 00:00:00 2001 From: sr55 Date: Tue, 19 Nov 2013 23:18:43 +0000 Subject: [PATCH] WinGui: Putting in place the framework for a static preview window. Initial window created and now displays a static preview. This feature is not enabled in the UI yet. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@5901 b64f7644-9d1e-0410-96f1-a4d463321fa5 --- .../Services/Interfaces/IScan.cs | 15 +++++ .../Services/LibScan.cs | 26 +++++++++ .../Utilities/InteropModelCreator.cs | 20 ++++++- win/CS/HandBrakeWPF/HandBrakeWPF.csproj | 9 +++ .../Startup/CastleBootstrapper.cs | 6 +- .../Interfaces/IStaticPreviewViewModel.cs | 27 +++++++++ .../ViewModels/PictureSettingsViewModel.cs | 36 ++++++++---- .../ViewModels/StaticPreviewViewModel.cs | 58 +++++++++++++++++++ .../Views/PictureSettingsView.xaml | 11 +++- .../HandBrakeWPF/Views/StaticPreviewView.xaml | 10 ++++ .../Views/StaticPreviewView.xaml.cs | 27 +++++++++ 11 files changed, 225 insertions(+), 20 deletions(-) create mode 100644 win/CS/HandBrakeWPF/ViewModels/Interfaces/IStaticPreviewViewModel.cs create mode 100644 win/CS/HandBrakeWPF/ViewModels/StaticPreviewViewModel.cs create mode 100644 win/CS/HandBrakeWPF/Views/StaticPreviewView.xaml create mode 100644 win/CS/HandBrakeWPF/Views/StaticPreviewView.xaml.cs diff --git a/win/CS/HandBrake.ApplicationServices/Services/Interfaces/IScan.cs b/win/CS/HandBrake.ApplicationServices/Services/Interfaces/IScan.cs index f102d0d36..05bc52499 100644 --- a/win/CS/HandBrake.ApplicationServices/Services/Interfaces/IScan.cs +++ b/win/CS/HandBrake.ApplicationServices/Services/Interfaces/IScan.cs @@ -10,6 +10,7 @@ namespace HandBrake.ApplicationServices.Services.Interfaces { using System; + using System.Windows.Media.Imaging; using HandBrake.ApplicationServices.EventArgs; using HandBrake.ApplicationServices.Model; @@ -90,6 +91,20 @@ namespace HandBrake.ApplicationServices.Services.Interfaces /// void Scan(string sourcePath, int title, Action postAction, HBConfiguration configuration); + /// + /// Get a Preview image for the current job and preview number. + /// + /// + /// The task. + /// + /// + /// The preview. + /// + /// + /// The . + /// + BitmapImage GetPreview(EncodeTask task, int preview); + /// /// Kill the scan /// diff --git a/win/CS/HandBrake.ApplicationServices/Services/LibScan.cs b/win/CS/HandBrake.ApplicationServices/Services/LibScan.cs index 167394764..24c364024 100644 --- a/win/CS/HandBrake.ApplicationServices/Services/LibScan.cs +++ b/win/CS/HandBrake.ApplicationServices/Services/LibScan.cs @@ -13,6 +13,7 @@ namespace HandBrake.ApplicationServices.Services using System.Collections.Generic; using System.IO; using System.Text; + using System.Windows.Media.Imaging; using HandBrake.ApplicationServices.EventArgs; using HandBrake.ApplicationServices.Model; @@ -23,6 +24,7 @@ namespace HandBrake.ApplicationServices.Services using HandBrake.Interop; using HandBrake.Interop.EventArgs; using HandBrake.Interop.Interfaces; + using HandBrake.Interop.Model; using AudioTrack = HandBrake.ApplicationServices.Parsing.Audio; using ScanProgressEventArgs = HandBrake.Interop.EventArgs.ScanProgressEventArgs; @@ -239,6 +241,30 @@ namespace HandBrake.ApplicationServices.Services } } + /// + /// Get a Preview image for the current job and preview number. + /// + /// + /// The job. + /// + /// + /// The preview. + /// + /// + /// The . + /// + public BitmapImage GetPreview(EncodeTask job, int preview) + { + if (this.instance == null) + { + return null; + } + + EncodeJob encodeJob = InteropModelCreator.GetEncodeJob(job); + BitmapImage bitmapImage = this.instance.GetPreview(encodeJob, preview); + return bitmapImage; + } + #endregion #region Private Methods diff --git a/win/CS/HandBrake.ApplicationServices/Utilities/InteropModelCreator.cs b/win/CS/HandBrake.ApplicationServices/Utilities/InteropModelCreator.cs index 81b4a63c1..c8095f9c1 100644 --- a/win/CS/HandBrake.ApplicationServices/Utilities/InteropModelCreator.cs +++ b/win/CS/HandBrake.ApplicationServices/Utilities/InteropModelCreator.cs @@ -25,13 +25,13 @@ namespace HandBrake.ApplicationServices.Utilities public class InteropModelCreator { /// - /// Get an EncodeJob model for a LibHB Encode. + /// The get encode job. /// /// /// The task. /// /// - /// An Interop.EncodeJob model. + /// The . /// public static EncodeJob GetEncodeJob(QueueTask task) { @@ -41,8 +41,22 @@ namespace HandBrake.ApplicationServices.Utilities return null; } + return GetEncodeJob(task.Task); + } + + /// + /// Get an EncodeJob model for a LibHB Encode. + /// + /// + /// The task. + /// + /// + /// An Interop.EncodeJob model. + /// + public static EncodeJob GetEncodeJob(EncodeTask task) + { // The current Job Configuration - EncodeTask work = task.Task; + EncodeTask work = task; // Which will be converted to this EncodeJob Model. EncodeJob job = new EncodeJob(); diff --git a/win/CS/HandBrakeWPF/HandBrakeWPF.csproj b/win/CS/HandBrakeWPF/HandBrakeWPF.csproj index 5e8ab59c2..f7b44df16 100644 --- a/win/CS/HandBrakeWPF/HandBrakeWPF.csproj +++ b/win/CS/HandBrakeWPF/HandBrakeWPF.csproj @@ -145,6 +145,8 @@ + + CountdownAlertView.xaml @@ -216,6 +218,9 @@ + + StaticPreviewView.xaml + TitleSpecificView.xaml @@ -395,6 +400,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/win/CS/HandBrakeWPF/Startup/CastleBootstrapper.cs b/win/CS/HandBrakeWPF/Startup/CastleBootstrapper.cs index 45dbde20d..387a950ec 100644 --- a/win/CS/HandBrakeWPF/Startup/CastleBootstrapper.cs +++ b/win/CS/HandBrakeWPF/Startup/CastleBootstrapper.cs @@ -81,9 +81,11 @@ namespace HandBrakeWPF.Startup this.windsorContainer.Register(Component.For().ImplementedBy().LifeStyle.Is(LifestyleType.Singleton)); this.windsorContainer.Register(Component.For().ImplementedBy().LifeStyle.Is(LifestyleType.Singleton)); this.windsorContainer.Register(Component.For().ImplementedBy().LifeStyle.Is(LifestyleType.Singleton)); - + + // Experimental Services and Windows. this.windsorContainer.Register(Component.For().ImplementedBy().LifeStyle.Is(LifestyleType.Singleton)); - + this.windsorContainer.Register(Component.For().ImplementedBy().LifeStyle.Is(LifestyleType.Singleton)); + // Tab Components this.windsorContainer.Register(Component.For().ImplementedBy().LifeStyle.Is(LifestyleType.Singleton)); this.windsorContainer.Register(Component.For().ImplementedBy().LifeStyle.Is(LifestyleType.Singleton)); diff --git a/win/CS/HandBrakeWPF/ViewModels/Interfaces/IStaticPreviewViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/Interfaces/IStaticPreviewViewModel.cs new file mode 100644 index 000000000..91c75fe45 --- /dev/null +++ b/win/CS/HandBrakeWPF/ViewModels/Interfaces/IStaticPreviewViewModel.cs @@ -0,0 +1,27 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License. +// +// +// The Static Preview View Model Interface +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace HandBrakeWPF.ViewModels.Interfaces +{ + using System.Windows.Media.Imaging; + + /// + /// The Static Preview View Model Interface + /// + public interface IStaticPreviewViewModel + { + /// + /// The preview frame. + /// + /// + /// The image. + /// + void PreviewFrame(BitmapImage image); + } +} diff --git a/win/CS/HandBrakeWPF/ViewModels/PictureSettingsViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/PictureSettingsViewModel.cs index 59ce20942..2cde191f5 100644 --- a/win/CS/HandBrakeWPF/ViewModels/PictureSettingsViewModel.cs +++ b/win/CS/HandBrakeWPF/ViewModels/PictureSettingsViewModel.cs @@ -12,6 +12,7 @@ namespace HandBrakeWPF.ViewModels using System; using System.Collections.Generic; using System.Globalization; + using System.Windows.Media.Imaging; using Caliburn.Micro; @@ -109,13 +110,7 @@ namespace HandBrakeWPF.ViewModels /// /// Initializes a new instance of the class. /// - /// - /// The window manager. - /// - /// - /// The user Setting Service. - /// - public PictureSettingsViewModel(IWindowManager windowManager, IUserSettingService userSettingService) + public PictureSettingsViewModel() { this.Task = new EncodeTask(); this.SelectedModulus = 16; @@ -130,6 +125,11 @@ namespace HandBrakeWPF.ViewModels #region Properties + /// + /// Gets or sets the static preview view model. + /// + public IStaticPreviewViewModel StaticPreviewViewModel { get; set; } + /// /// Gets AnamorphicModes. /// @@ -595,9 +595,7 @@ namespace HandBrakeWPF.ViewModels #endregion - #region Implemented Interfaces - - #region ITabInterface + #region Public Methods /// /// Setup this tab for the specified preset. @@ -802,7 +800,21 @@ namespace HandBrakeWPF.ViewModels this.NotifyOfPropertyChange(() => this.Task); } - #endregion + /// + /// The preview image. + /// Experimental Feature => In-Progress + /// + public void PreviewImage() + { + IScan scanService = IoC.Get(); + BitmapImage image = scanService.GetPreview(this.Task, 5); + + if (image != null) + { + this.StaticPreviewViewModel.PreviewFrame(image); + this.WindowManager.ShowDialog(this.StaticPreviewViewModel); + } + } #endregion @@ -1164,6 +1176,6 @@ namespace HandBrakeWPF.ViewModels return job; } - #endregion + #endregion } } \ No newline at end of file diff --git a/win/CS/HandBrakeWPF/ViewModels/StaticPreviewViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/StaticPreviewViewModel.cs new file mode 100644 index 000000000..dc851864a --- /dev/null +++ b/win/CS/HandBrakeWPF/ViewModels/StaticPreviewViewModel.cs @@ -0,0 +1,58 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License. +// +// +// The Static Preview View Model +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace HandBrakeWPF.ViewModels +{ + using System.Windows.Media.Imaging; + + using HandBrakeWPF.ViewModels.Interfaces; + + /// + /// The Static Preview View Model + /// + public class StaticPreviewViewModel : ViewModelBase, IStaticPreviewViewModel + { + /// + /// The preview image. + /// + private BitmapImage previewImage; + + /// + /// Gets or sets the preview image. + /// + public BitmapImage PreviewImage + { + get + { + return this.previewImage; + } + set + { + if (Equals(value, this.previewImage)) + { + return; + } + + this.previewImage = value; + this.NotifyOfPropertyChange(() => this.PreviewImage); + } + } + + /// + /// The preview frame. + /// + /// + /// The image. + /// + public void PreviewFrame(BitmapImage image) + { + this.PreviewImage = image; + } + } +} diff --git a/win/CS/HandBrakeWPF/Views/PictureSettingsView.xaml b/win/CS/HandBrakeWPF/Views/PictureSettingsView.xaml index a808c76b4..12d75bf44 100644 --- a/win/CS/HandBrakeWPF/Views/PictureSettingsView.xaml +++ b/win/CS/HandBrakeWPF/Views/PictureSettingsView.xaml @@ -2,7 +2,8 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Converters="clr-namespace:HandBrakeWPF.Converters" - xmlns:controls="clr-namespace:HandBrakeWPF.Controls"> + xmlns:controls="clr-namespace:HandBrakeWPF.Controls" + xmlns:cal="http://www.caliburnproject.org"> @@ -59,7 +60,7 @@ Visibility="{Binding ShowModulus, Converter={StaticResource boolToVisConverter}}" Grid.Column="1" HorizontalAlignment="Left" Margin="0,0,0,5" /> - + @@ -84,7 +85,7 @@ - + @@ -143,6 +144,10 @@ + +