--- /dev/null
+// --------------------------------------------------------------------------------------------------------------------
+// <copyright file="TabStatusEventArgs.cs" company="HandBrake Project (http://handbrake.fr)">
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
+// </copyright>
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrakeWPF.EventArgs
+{
+ using System;
+
+ public class TabStatusEventArgs : EventArgs
+ {
+ public TabStatusEventArgs(string tabKey)
+ {
+ this.TabKey = tabKey;
+ }
+
+ public string TabKey { get; private set; }
+ }
+}
<Compile Include="EventArgs\QueueCompletedEventArgs.cs" />\r
<Compile Include="EventArgs\QueueProgressEventArgs.cs" />\r
<Compile Include="EventArgs\SettingChangedEventArgs.cs" />\r
+ <Compile Include="EventArgs\TabStatusEventArgs.cs" />\r
<Compile Include="Exceptions\GeneralApplicationException.cs" />\r
<Compile Include="Extensions\StringExtensions.cs" />\r
<Compile Include="Helpers\TreeViewHelper.cs" />\r
\r
namespace HandBrakeWPF.ViewModels\r
{\r
+ using System;\r
using System.Collections.Generic;\r
using System.Collections.ObjectModel;\r
using System.ComponentModel;\r
using HandBrake.ApplicationServices.Interop.Model.Encoding;\r
using HandBrake.ApplicationServices.Utilities;\r
\r
+ using HandBrakeWPF.EventArgs;\r
using HandBrakeWPF.Model.Audio;\r
using HandBrakeWPF.Properties;\r
using HandBrakeWPF.Services.Interfaces;\r
\r
#endregion\r
\r
+ public event EventHandler<TabStatusEventArgs> TabStatusChanged;\r
+\r
#region Properties\r
\r
/// <summary>\r
this.NotifyOfPropertyChange(() => this.Task);\r
}\r
\r
+ public bool MatchesPreset(Preset preset)\r
+ {\r
+ // Check the default behaviours still match the preset.\r
+ if (preset.AudioTrackBehaviours.SelectedBehaviour != this.AudioBehaviours.SelectedBehaviour)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.AudioTrackBehaviours.SelectedTrackDefaultBehaviour\r
+ != this.AudioBehaviours.SelectedTrackDefaultBehaviour)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ foreach (var item in this.AudioBehaviours.SelectedLangauges)\r
+ {\r
+ if (!preset.AudioTrackBehaviours.SelectedLangauges.Contains(item))\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+\r
+ if (preset.Task.AllowedPassthruOptions.AudioAllowMP3Pass != this.Task.AllowedPassthruOptions.AudioAllowMP3Pass)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.AllowedPassthruOptions.AudioAllowAACPass != this.Task.AllowedPassthruOptions.AudioAllowAACPass)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.AllowedPassthruOptions.AudioAllowAC3Pass != this.Task.AllowedPassthruOptions.AudioAllowAC3Pass)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.AllowedPassthruOptions.AudioAllowEAC3Pass != this.Task.AllowedPassthruOptions.AudioAllowEAC3Pass)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.AllowedPassthruOptions.AudioAllowDTSPass != this.Task.AllowedPassthruOptions.AudioAllowDTSPass)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.AllowedPassthruOptions.AudioAllowDTSHDPass != this.Task.AllowedPassthruOptions.AudioAllowDTSHDPass)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.AllowedPassthruOptions.AudioAllowTrueHDPass != this.Task.AllowedPassthruOptions.AudioAllowTrueHDPass)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.AllowedPassthruOptions.AudioAllowFlacPass != this.Task.AllowedPassthruOptions.AudioAllowFlacPass)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.AllowedPassthruOptions.AudioEncoderFallback != this.Task.AllowedPassthruOptions.AudioEncoderFallback)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.AudioTrackBehaviours.SelectedLangauges != this.AudioBehaviours.SelectedLangauges)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ return true;\r
+ }\r
+\r
/// <summary>\r
/// Set the Source Title\r
/// </summary>\r
#endregion\r
\r
#region Methods\r
+ protected virtual void OnTabStatusChanged(TabStatusEventArgs e)\r
+ {\r
+ this.TabStatusChanged?.Invoke(this, e);\r
+ }\r
\r
/// <summary>\r
/// Add the specified source track, or the first track in the SourceTracks collection if available.\r
\r
using Caliburn.Micro;\r
\r
+ using HandBrakeWPF.EventArgs;\r
using HandBrakeWPF.Properties;\r
using HandBrakeWPF.Services.Interfaces;\r
using HandBrakeWPF.Services.Presets.Model;\r
this.errorService = errorService;\r
}\r
\r
+ public event EventHandler<TabStatusEventArgs> TabStatusChanged;\r
+\r
#endregion\r
\r
#region Public Properties\r
this.NotifyOfPropertyChange(() => this.Chapters);\r
}\r
\r
+ public bool MatchesPreset(Preset preset)\r
+ {\r
+ if (preset.Task.IncludeChapterMarkers != this.IncludeChapterMarkers)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ return true;\r
+ }\r
+\r
/// <summary>\r
/// Reset Chapter Names\r
/// </summary>\r
\r
#region Private Methods\r
\r
+ protected virtual void OnTabStatusChanged(TabStatusEventArgs e)\r
+ {\r
+ this.TabStatusChanged?.Invoke(this, e);\r
+ }\r
+\r
/// <summary>\r
/// Validates any imported chapter information against the currently detected chapter information in the \r
/// source media. If validation fails then an error message is returned via the out parameter <see cref="validationErrorMessage"/>\r
\r
namespace HandBrakeWPF.ViewModels\r
{\r
+ using System;\r
using System.Collections.Generic;\r
using System.ComponentModel;\r
using System.Globalization;\r
using HandBrake.ApplicationServices.Interop.HbLib;\r
using HandBrake.ApplicationServices.Interop.Model.Encoding;\r
\r
+ using HandBrakeWPF.EventArgs;\r
using HandBrakeWPF.Model.Filters;\r
using HandBrakeWPF.Services.Interfaces;\r
using HandBrakeWPF.Services.Presets.Model;\r
\r
#endregion\r
\r
+ public event EventHandler<TabStatusEventArgs> TabStatusChanged;\r
+\r
#region Properties\r
\r
/// <summary>\r
this.NotifyOfPropertyChange(() => this.SelectedRotation);\r
}\r
\r
+ public bool MatchesPreset(Preset preset)\r
+ {\r
+ if (preset.Task.Detelecine != this.SelectedDetelecine)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.CustomDetelecine != this.CustomDetelecine)\r
+ {\r
+ return false;\r
+ }\r
+ \r
+ if (preset.Task.DeinterlaceFilter != this.SelectedDeinterlaceFilter)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.Deinterlace != this.SelectedDeInterlace)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.Decomb != this.SelectedDecomb)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.CombDetect != this.SelectedCombDetectPreset)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.CustomDecomb != this.CustomDecomb)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.CustomDeinterlace != this.CustomDeinterlace)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.CustomCombDetect != this.CustomCombDetect)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.Denoise != this.SelectedDenoise)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.DenoisePreset != this.SelectedDenoisePreset)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.DenoiseTune != this.SelectedDenoiseTune)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.Sharpen != this.SelectedSharpen)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (!Equals(preset.Task.SharpenPreset, this.SelectedSharpenPreset))\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (!Equals(preset.Task.SharpenTune, this.SelectedSharpenTune))\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.Deblock != this.DeblockValue)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.Grayscale != this.Grayscale)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.Rotation != this.SelectedRotation)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.FlipVideo != this.FlipVideo)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ return true;\r
+ }\r
+\r
/// <summary>\r
/// Setup this window for a new source\r
/// </summary>\r
}\r
\r
#endregion\r
+\r
+ #region Private Methods\r
+ protected virtual void OnTabStatusChanged(TabStatusEventArgs e)\r
+ {\r
+ this.TabStatusChanged?.Invoke(this, e);\r
+ }\r
+ #endregion\r
}\r
}
\ No newline at end of file
\r
namespace HandBrakeWPF.ViewModels.Interfaces\r
{\r
+ using System;\r
+\r
+ using HandBrakeWPF.EventArgs;\r
using HandBrakeWPF.Services.Presets.Model;\r
using HandBrakeWPF.Services.Scan.Model;\r
\r
/// </summary>\r
public interface ITabInterface\r
{\r
+ event EventHandler<TabStatusEventArgs> TabStatusChanged;\r
+\r
/// <summary>\r
/// Setup the window after a scan.\r
/// </summary>\r
/// The task.\r
/// </param>\r
void UpdateTask(EncodeTask task);\r
+\r
+ bool MatchesPreset(Preset preset);\r
}\r
}\r
private string alertWindowHeader;\r
private string alertWindowText;\r
private bool hasSource;\r
-\r
+ private bool isSettingPreset;\r
private IPresetObject selectedPresetCategory;\r
+ private bool isModifiedPreset;\r
\r
#endregion\r
\r
}\r
}\r
\r
+ public bool IsModifiedPreset\r
+ {\r
+ get\r
+ {\r
+ return this.isModifiedPreset;\r
+ }\r
+ set\r
+ {\r
+ if (value == this.isModifiedPreset) return;\r
+ this.isModifiedPreset = value;\r
+ this.NotifyOfPropertyChange();\r
+ }\r
+ }\r
+\r
public void TrickPresetDisplayUpdate()\r
{\r
this.NotifyOfPropertyChange(() => this.SelectedPreset);\r
Thread clearLog = new Thread(() => GeneralUtilities.ClearLogFiles(30));\r
clearLog.Start();\r
}\r
+\r
+ this.PictureSettingsViewModel.TabStatusChanged += this.TabStatusChanged;\r
+ this.VideoViewModel.TabStatusChanged += this.TabStatusChanged;\r
+ this.FiltersViewModel.TabStatusChanged += this.TabStatusChanged;\r
+ this.AudioViewModel.TabStatusChanged += this.TabStatusChanged;\r
+ this.SubtitleViewModel.TabStatusChanged += this.TabStatusChanged;\r
+ this.ChaptersViewModel.TabStatusChanged += this.TabStatusChanged;\r
+ this.AdvancedViewModel.TabStatusChanged += this.TabStatusChanged;\r
+ this.MetaDataViewModel.TabStatusChanged += this.TabStatusChanged;\r
+ this.SummaryViewModel.TabStatusChanged += this.TabStatusChanged;\r
}\r
\r
private void SummaryViewModel_OutputFormatChanged(object sender, OutputFormatChangedEventArgs e)\r
this.userSettingService.SettingChanged -= this.UserSettingServiceSettingChanged;\r
\r
this.SummaryViewModel.OutputFormatChanged -= this.SummaryViewModel_OutputFormatChanged;\r
+\r
+ // Tab status events\r
+ this.PictureSettingsViewModel.TabStatusChanged -= this.TabStatusChanged;\r
+ this.VideoViewModel.TabStatusChanged -= this.TabStatusChanged;\r
+ this.FiltersViewModel.TabStatusChanged -= this.TabStatusChanged;\r
+ this.AudioViewModel.TabStatusChanged -= this.TabStatusChanged;\r
+ this.SubtitleViewModel.TabStatusChanged -= this.TabStatusChanged;\r
+ this.ChaptersViewModel.TabStatusChanged -= this.TabStatusChanged;\r
+ this.AdvancedViewModel.TabStatusChanged -= this.TabStatusChanged;\r
+ this.MetaDataViewModel.TabStatusChanged -= this.TabStatusChanged;\r
+ this.SummaryViewModel.TabStatusChanged -= this.TabStatusChanged;\r
}\r
\r
#endregion\r
if (this.selectedPreset != null)\r
{\r
// Tab Settings\r
+ this.isSettingPreset = true;\r
this.PictureSettingsViewModel.SetPreset(this.selectedPreset, this.CurrentTask);\r
this.VideoViewModel.SetPreset(this.selectedPreset, this.CurrentTask);\r
this.FiltersViewModel.SetPreset(this.selectedPreset, this.CurrentTask);\r
this.AdvancedViewModel.SetPreset(this.selectedPreset, this.CurrentTask);\r
this.MetaDataViewModel.SetPreset(this.selectedPreset, this.CurrentTask);\r
this.SummaryViewModel.SetPreset(this.selectedPreset, this.CurrentTask);\r
+ this.isSettingPreset = false;\r
}\r
}\r
}\r
// Setup the Tabs\r
if (this.selectedTitle != null)\r
{\r
+ this.isSettingPreset = true;\r
this.PictureSettingsViewModel.SetSource(this.ScannedSource, this.SelectedTitle, this.selectedPreset, this.CurrentTask);\r
this.VideoViewModel.SetSource(this.ScannedSource, this.SelectedTitle, this.selectedPreset, this.CurrentTask);\r
this.FiltersViewModel.SetSource(this.ScannedSource, this.SelectedTitle, this.selectedPreset, this.CurrentTask);\r
this.AdvancedViewModel.SetSource(this.ScannedSource, this.SelectedTitle, this.selectedPreset, this.CurrentTask);\r
this.MetaDataViewModel.SetSource(this.ScannedSource, this.SelectedTitle, this.selectedPreset, this.CurrentTask);\r
this.SummaryViewModel.SetSource(this.ScannedSource, this.SelectedTitle, this.selectedPreset, this.CurrentTask);\r
+ this.isSettingPreset = false;\r
+ }\r
+ }\r
+\r
+ private void TabStatusChanged(object sender, TabStatusEventArgs e)\r
+ {\r
+ if (this.isSettingPreset)\r
+ {\r
+ return; // Don't process this when we are setting up.\r
}\r
+\r
+ bool matchesPreset = this.PictureSettingsViewModel.MatchesPreset(this.selectedPreset);\r
+\r
+ if (!this.VideoViewModel.MatchesPreset(this.selectedPreset))\r
+ {\r
+ matchesPreset = false;\r
+ }\r
+\r
+ if (!this.FiltersViewModel.MatchesPreset(this.selectedPreset))\r
+ {\r
+ matchesPreset = false;\r
+ }\r
+\r
+ if (!this.AudioViewModel.MatchesPreset(this.selectedPreset))\r
+ {\r
+ matchesPreset = false;\r
+ }\r
+\r
+ if (!this.SubtitleViewModel.MatchesPreset(this.selectedPreset))\r
+ {\r
+ matchesPreset = false;\r
+ }\r
+\r
+ if (!this.ChaptersViewModel.MatchesPreset(this.selectedPreset))\r
+ {\r
+ matchesPreset = false;\r
+ }\r
+\r
+ if (!this.AdvancedViewModel.MatchesPreset(this.selectedPreset))\r
+ {\r
+ matchesPreset = false;\r
+ }\r
+\r
+ if (!this.MetaDataViewModel.MatchesPreset(this.selectedPreset))\r
+ {\r
+ matchesPreset = false;\r
+ }\r
+\r
+ if (!this.SummaryViewModel.MatchesPreset(this.selectedPreset))\r
+ {\r
+ matchesPreset = false;\r
+ }\r
+\r
+ this.IsModifiedPreset = matchesPreset;\r
}\r
\r
/// <summary>\r
namespace HandBrakeWPF.ViewModels
{
+ using System;
+
using Caliburn.Micro;
+ using HandBrakeWPF.EventArgs;
using HandBrakeWPF.Services.Encode.Model;
using HandBrakeWPF.Services.Encode.Model.Models;
using HandBrakeWPF.Services.Interfaces;
this.Task = new EncodeTask();
}
+ public event EventHandler<TabStatusEventArgs> TabStatusChanged;
+
/// <summary>
/// The Current Job
/// </summary>
{
this.Task = encodeTask;
}
+
+ public bool MatchesPreset(Preset preset)
+ {
+ return true;
+ }
}
}
using HandBrake.ApplicationServices.Interop.Model;\r
using HandBrake.ApplicationServices.Interop.Model.Encoding;\r
\r
+ using HandBrakeWPF.EventArgs;\r
using HandBrakeWPF.Helpers;\r
using HandBrakeWPF.Properties;\r
using HandBrakeWPF.Services.Presets.Model;\r
\r
#endregion\r
\r
+ public event EventHandler<TabStatusEventArgs> TabStatusChanged;\r
+\r
#region Properties\r
\r
/// <summary>\r
this.NotifyOfPropertyChange(() => this.Task);\r
}\r
\r
+ public bool MatchesPreset(Preset preset)\r
+ {\r
+ if (preset.Task.Anamorphic != this.SelectedAnamorphicMode)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.Modulus != this.SelectedModulus)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ return true;\r
+ }\r
+\r
#endregion\r
\r
#region Methods\r
\r
+ protected virtual void OnTabStatusChanged(TabStatusEventArgs e)\r
+ {\r
+ this.TabStatusChanged?.Invoke(this, e);\r
+ }\r
+\r
/// <summary>\r
/// The init.\r
/// </summary>\r
\r
namespace HandBrakeWPF.ViewModels\r
{\r
+ using System;\r
using System.Collections.Generic;\r
- using System.ComponentModel;\r
using System.IO;\r
using System.Linq;\r
\r
\r
using HandBrake.ApplicationServices.Utilities;\r
\r
+ using HandBrakeWPF.EventArgs;\r
using HandBrakeWPF.Model.Subtitles;\r
using HandBrakeWPF.Properties;\r
using HandBrakeWPF.Services.Presets.Model;\r
using HandBrakeWPF.Services.Scan.Model;\r
- using HandBrakeWPF.Utilities;\r
using HandBrakeWPF.ViewModels.Interfaces;\r
\r
using Microsoft.Win32;\r
\r
#endregion\r
\r
+ public event EventHandler<TabStatusEventArgs> TabStatusChanged;\r
+\r
#region Properties\r
\r
/// <summary>\r
this.NotifyOfPropertyChange(() => this.Task);\r
}\r
\r
+ public bool MatchesPreset(Preset preset)\r
+ {\r
+ // Check the default behaviours.\r
+ if (preset.SubtitleTrackBehaviours.AddClosedCaptions != this.SubtitleBehaviours.AddClosedCaptions)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.SubtitleTrackBehaviours.AddForeignAudioScanTrack != this.SubtitleBehaviours.AddForeignAudioScanTrack)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.SubtitleTrackBehaviours.SelectedBehaviour != this.SubtitleBehaviours.SelectedBehaviour)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.SubtitleTrackBehaviours.SelectedBurnInBehaviour != this.SubtitleBehaviours.SelectedBurnInBehaviour)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ foreach (var item in this.SubtitleBehaviours.SelectedLangauges)\r
+ {\r
+ if (!preset.SubtitleTrackBehaviours.SelectedLangauges.Contains(item))\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+\r
+ return true;\r
+ }\r
+\r
/// <summary>\r
/// Setup this window for a new source\r
/// </summary>\r
\r
#region Methods\r
\r
+ protected virtual void OnTabStatusChanged(TabStatusEventArgs e)\r
+ {\r
+ this.TabStatusChanged?.Invoke(this, e);\r
+ }\r
+\r
/// <summary>\r
/// Add a subtitle track.\r
/// The Source track is set based on the following order. If null, it will skip to the next option.\r
this.userSettingService = userSettingService;
}
+ public event EventHandler<TabStatusEventArgs> TabStatusChanged;
public event EventHandler<OutputFormatChangedEventArgs> OutputFormatChanged;
public Preset Preset
this.NotifyOfPropertyChange(() => this.AlignAVStart);
}
+ public bool MatchesPreset(Preset preset)
+ {
+ if (preset.Task.OutputFormat != this.SelectedOutputFormat)
+ {
+ return false;
+ }
+
+ if (preset.Task.OptimizeMP4 != this.OptimizeMP4)
+ {
+ return false;
+ }
+
+ if (preset.Task.AlignAVStart != this.AlignAVStart)
+ {
+ return false;
+ }
+
+ if (preset.Task.IPod5GSupport != this.IPod5GSupport)
+ {
+ return false;
+ }
+
+ return true;
+ }
+
public void UpdateDisplayedInfo()
{
if (this.CurrentTitle == null)
#region Private Methods
+ protected virtual void OnTabStatusChanged(TabStatusEventArgs e)
+ {
+ this.TabStatusChanged?.Invoke(this, e);
+ }
+
private void UpdateSettings(Preset selectedPreset)
{
// Main Window Settings
using HandBrake.ApplicationServices.Interop;\r
using HandBrake.ApplicationServices.Interop.Model.Encoding;\r
\r
+ using HandBrakeWPF.EventArgs;\r
using HandBrakeWPF.Properties;\r
using HandBrakeWPF.Services.Interfaces;\r
using HandBrakeWPF.Services.Presets.Model;\r
/// <param name="userSettingService">\r
/// The user Setting Service.\r
/// </param>\r
- /// <param name="advancedEncoderOptionsCommand">\r
- /// The advanced Encoder Options Command.\r
- /// </param>\r
public VideoViewModel(IUserSettingService userSettingService)\r
{\r
this.Task = new EncodeTask { VideoEncoder = VideoEncoder.X264 };\r
\r
#endregion\r
\r
+ public event EventHandler<TabStatusEventArgs> TabStatusChanged;\r
+\r
#region Public Properties\r
\r
/// <summary>\r
} \r
}\r
\r
+ public bool MatchesPreset(Preset preset)\r
+ {\r
+ if (preset.Task.VideoEncoder != this.Task.VideoEncoder)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.Framerate != this.Task.Framerate)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.FramerateMode != this.Task.FramerateMode)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.VideoEncodeRateType != this.Task.VideoEncodeRateType)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.VideoEncodeRateType == VideoEncodeRateType.AverageBitrate)\r
+ {\r
+ if (preset.Task.VideoBitrate != this.Task.VideoBitrate)\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if (preset.Task.Quality != this.Task.Quality)\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+\r
+ if (preset.Task.TwoPass != this.Task.TwoPass)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (preset.Task.TurboFirstPass != this.Task.TurboFirstPass)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (this.Task.VideoEncoder == VideoEncoder.X264 || this.Task.VideoEncoder == VideoEncoder.X264_10\r
+ || this.Task.VideoEncoder == VideoEncoder.X265 || this.Task.VideoEncoder == VideoEncoder.X265_10\r
+ || this.Task.VideoEncoder == VideoEncoder.X265_12 || this.Task.VideoEncoder == VideoEncoder.QuickSync\r
+ || this.Task.VideoEncoder == VideoEncoder.QuickSyncH265\r
+ || this.Task.VideoEncoder == VideoEncoder.QuickSyncH26510b)\r
+ {\r
+ if (!Equals(preset.Task.VideoPreset, this.Task.VideoPreset))\r
+ {\r
+ return false;\r
+ }\r
+\r
+ foreach (VideoTune taskVideoTune in preset.Task.VideoTunes)\r
+ {\r
+ if (!this.Task.VideoTunes.Contains(taskVideoTune))\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+\r
+ if (preset.Task.VideoTunes != this.Task.VideoTunes)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (!Equals(preset.Task.VideoProfile, this.Task.VideoProfile))\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (!Equals(preset.Task.VideoLevel, this.Task.VideoLevel))\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+\r
+ if (!Equals(preset.Task.ExtraAdvancedArguments, this.Task.ExtraAdvancedArguments))\r
+ {\r
+ return false;\r
+ }\r
+\r
+ return true;\r
+ }\r
+\r
/// <summary>\r
/// Trigger a Notify Property Changed on the Task to force various UI elements to update.\r
/// </summary>\r
\r
#endregion\r
\r
+ protected virtual void OnTabStatusChanged(TabStatusEventArgs e)\r
+ {\r
+ this.TabStatusChanged?.Invoke(this, e);\r
+ }\r
+\r
/// <summary>\r
/// Set the bounds of the Constant Quality Slider\r
/// </summary>\r
\r
using HandBrake.ApplicationServices.Interop.Model.Encoding;\r
\r
+ using HandBrakeWPF.EventArgs;\r
using HandBrakeWPF.Helpers;\r
using HandBrakeWPF.Model;\r
using HandBrakeWPF.Services.Presets.Model;\r
\r
#endregion\r
\r
+ public event EventHandler<TabStatusEventArgs> TabStatusChanged;\r
+\r
#region Properties\r
\r
/// <summary>\r
this.AdvancedOptionsString = task.AdvancedEncoderOptions;\r
}\r
\r
+ public bool MatchesPreset(Preset preset)\r
+ {\r
+ return false;\r
+ }\r
+\r
/// <summary>\r
/// Setup this window for a new source\r
/// </summary>\r
\r
#region Methods\r
\r
+ protected virtual void OnTabStatusChanged(TabStatusEventArgs e)\r
+ {\r
+ this.TabStatusChanged?.Invoke(this, e);\r
+ }\r
+\r
/// <summary>\r
/// The set advanced to defaults.\r
/// </summary>\r