/// </param>\r
private void autoPassthru_CheckedChanged(object sender, EventArgs e)\r
{\r
+ this.PassthruSettings.IsEnabled = true;\r
if (sender == this.check_mp3)\r
{\r
this.PassthruSettings.AudioAllowMP3Pass = this.check_mp3.Checked;\r
/// </param>\r
private void drp_passthruFallback_SelectedIndexChanged(object sender, EventArgs e)\r
{\r
+ this.PassthruSettings.IsEnabled = true;\r
this.PassthruSettings.AudioEncoderFallback =\r
EnumHelper<AudioEncoder>.GetValue(drp_passthruFallback.SelectedItem.ToString());\r
}\r
this.AudioEncoderFallback = initialValue.AudioEncoderFallback;\r
}\r
\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether IsEnabled.\r
+ /// Temp Measure until forms gui is retired.\r
+ /// </summary>\r
+ public bool IsEnabled { get; set; }\r
+\r
/// <summary>\r
/// Gets or sets a value indicating whether AudioAllowAACPass.\r
/// </summary>\r
using System;\r
using System.Windows.Forms;\r
\r
+ using Caliburn.Micro;\r
+\r
using HandBrake.ApplicationServices.Parsing;\r
\r
/// <summary>\r
/// Subtitle Information\r
/// </summary>\r
- public class SubtitleTrack : ModelBase\r
+ public class SubtitleTrack : PropertyChangedBase\r
{\r
#region Constants and Fields\r
\r
+ /// <summary>\r
+ /// The burned in backing field.\r
+ /// </summary>\r
+ private bool burned;\r
+\r
+ /// <summary>\r
+ /// The is default backing field.\r
+ /// </summary>\r
+ private bool isDefault;\r
+\r
/// <summary>\r
/// The source track.\r
/// </summary>\r
\r
#endregion\r
\r
+ #region Constructors and Destructors\r
+\r
/// <summary>\r
/// Initializes a new instance of the <see cref="SubtitleTrack"/> class.\r
/// </summary>\r
this.SourceTrack = subtitle.SourceTrack;\r
}\r
\r
- #region Public Properties\r
+ #endregion\r
\r
+ #region Properties\r
\r
/// <summary>\r
/// Gets or sets a value indicating whether Burned.\r
/// </summary>\r
- public bool Burned { get; set; }\r
+ public bool Burned\r
+ {\r
+ get\r
+ {\r
+ return this.burned;\r
+ }\r
+\r
+ set\r
+ {\r
+ this.burned = value;\r
+ this.NotifyOfPropertyChange(() => this.Burned);\r
+ }\r
+ }\r
\r
/// <summary>\r
/// Gets or sets a value indicating whether Default.\r
/// </summary>\r
- public bool Default { get; set; }\r
+ public bool Default\r
+ {\r
+ get\r
+ {\r
+ return this.isDefault;\r
+ }\r
+\r
+ set\r
+ {\r
+ this.isDefault = value;\r
+ this.NotifyOfPropertyChange(() => this.Default);\r
+ }\r
+ }\r
\r
/// <summary>\r
/// Gets or sets a value indicating whether Forced.\r
}\r
\r
/// <summary>\r
- /// Gets or sets Track.\r
+ /// Gets A ListViewItem Containing information about this subitlte\r
/// </summary>\r
- [Obsolete("Use SourceTrack Instead")]\r
- public string Track { get; set; }\r
-\r
+ [Obsolete("Used only for the old forms gui. Will be removed.")]\r
+ public ListViewItem ListView\r
+ {\r
+ get\r
+ {\r
+ var listTrack = new ListViewItem(this.Track);\r
+ listTrack.SubItems.Add(this.Forced ? "Yes" : "No");\r
+ listTrack.SubItems.Add(this.Burned ? "Yes" : "No");\r
+ listTrack.SubItems.Add(this.Default ? "Yes" : "No");\r
+ listTrack.SubItems.Add(this.SrtLang);\r
+ listTrack.SubItems.Add(this.SrtCharCode);\r
+ listTrack.SubItems.Add(this.SrtOffset.ToString());\r
+ return listTrack;\r
+ }\r
+ }\r
\r
/// <summary>\r
/// Gets or sets SourceTrack.\r
set\r
{\r
this.sourceTrack = value;\r
- this.OnPropertyChanged("SourceTrack");\r
+ this.NotifyOfPropertyChange(() => this.SourceTrack);\r
if (this.sourceTrack != null)\r
{\r
this.Track = this.sourceTrack.ToString();\r
public SubtitleType SubtitleType { get; set; }\r
\r
/// <summary>\r
- /// Gets A ListViewItem Containing information about this subitlte\r
+ /// Gets or sets Track.\r
/// </summary>\r
- [Obsolete("Used only for the old forms gui. Will be removed.")]\r
- public ListViewItem ListView\r
- {\r
- get\r
- {\r
- var listTrack = new ListViewItem(this.Track);\r
- listTrack.SubItems.Add(this.Forced ? "Yes" : "No");\r
- listTrack.SubItems.Add(this.Burned ? "Yes" : "No");\r
- listTrack.SubItems.Add(this.Default ? "Yes" : "No");\r
- listTrack.SubItems.Add(this.SrtLang);\r
- listTrack.SubItems.Add(this.SrtCharCode);\r
- listTrack.SubItems.Add(this.SrtOffset.ToString());\r
- return listTrack;\r
- }\r
- }\r
+ [Obsolete("Use SourceTrack Instead")]\r
+ public string Track { get; set; }\r
\r
#endregion\r
}\r
{\r
try\r
{\r
+ string directory = Path.GetDirectoryName(this.userPresetFile);\r
+ if (!Directory.Exists(directory))\r
+ {\r
+ Directory.CreateDirectory(directory);\r
+ }\r
+\r
using (FileStream strm = new FileStream(this.builtInPresetFile, FileMode.Create, FileAccess.Write))\r
{\r
Ser.Serialize(strm, this.presets.Where(p => p.IsBuildIn).ToList());\r
List<double> samplerates = new List<double>();\r
List<int> bitrates = new List<int>();\r
List<double> drcs = new List<double>();\r
+ List<double> gains = new List<double>();\r
\r
// No Audio\r
if (audioTracks.Count == 0)\r
\r
// DRC (-D)\r
drcs.Add(track.DRC);\r
+\r
+ // Gain (--gain)\r
+ gains.Add(track.Gain);\r
}\r
\r
// Audio Track (-a)\r
if (audioItems.Trim() != String.Empty)\r
query += " -D " + audioItems;\r
\r
+ audioItems = string.Empty; // Reset for another pass.\r
+ firstLoop = true;\r
+\r
+ // Gain (--gain)\r
+ foreach (var itm in gains)\r
+ {\r
+ string item = itm.ToString(new CultureInfo("en-US"));\r
+ if (firstLoop)\r
+ {\r
+ audioItems = item;\r
+ firstLoop = false;\r
+ }\r
+ else\r
+ audioItems += "," + item;\r
+ }\r
+ if (audioItems.Trim() != String.Empty)\r
+ query += " --gain " + audioItems;\r
+\r
// Passthru Settings\r
- if (task.AllowedPassthruOptions != null)\r
+ if (task.AllowedPassthruOptions != null && task.AllowedPassthruOptions.IsEnabled)\r
{\r
string fallbackEncoders = string.Empty;\r
\r
File "*.dll"\r
File "*.config"\r
File "*.xml"\r
+ File "*.pdb"\r
\r
; Copy the standard doc set into the doc folder\r
SetOutPath "$INSTDIR\doc"\r
{\r
this.AddTracksFromPreset(preset);\r
}\r
+\r
+ this.Task.AllowedPassthruOptions.IsEnabled =\r
+ this.UserSettingService.GetUserSetting<bool>(UserSettingConstants.ShowAdvancedAudioPassthruOpts);\r
}\r
\r
/// <summary>\r
public void SetPreset(Preset preset, EncodeTask task)\r
{\r
this.Task = task;\r
-\r
-\r
+ \r
// TODO: These all need to be handled correctly.\r
this.SelectedAnamorphicMode = preset.Task.Anamorphic;\r
\r
this.Task.SubtitleTracks.Remove(track);\r
}\r
\r
+ /// <summary>\r
+ /// Select the default subtitle track.\r
+ /// </summary>\r
+ /// <param name="subtitle">\r
+ /// The subtitle.\r
+ /// </param>\r
+ public void SelectDefaultTrack(SubtitleTrack subtitle)\r
+ {\r
+ foreach (SubtitleTrack track in this.Task.SubtitleTracks)\r
+ {\r
+ track.Default = false;\r
+ }\r
+ subtitle.Default = true;\r
+\r
+ this.NotifyOfPropertyChange(() => this.Task);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Select the burned in track.\r
+ /// </summary>\r
+ /// <param name="subtitle">\r
+ /// The subtitle.\r
+ /// </param>\r
+ public void SelectBurnedInTrack(SubtitleTrack subtitle)\r
+ {\r
+ foreach (SubtitleTrack track in this.Task.SubtitleTracks)\r
+ {\r
+ track.Burned = false;\r
+ }\r
+ subtitle.Burned = true;\r
+ this.NotifyOfPropertyChange(() => this.Task);\r
+ }\r
+\r
#endregion\r
\r
#region Implemented Interfaces\r
<ComboBox Width="100" Grid.Column="1" Margin="5,0,5,0" Height="22"\r
ItemsSource="{Binding DataContext.SourceTracks, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" \r
SelectedItem="{Binding ScannedTrack}"/>\r
+ \r
<TextBlock Text="Codec" FontWeight="Bold" Grid.Column="2" VerticalAlignment="Center" />\r
<ComboBox Width="100" Grid.Column="3" Margin="5,0,5,0" Height="22"\r
ItemsSource="{Binding DataContext.AudioEncoders, Converter={StaticResource enumComboConverter}, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" \r
SelectedItem="{Binding Encoder, Converter={StaticResource enumComboConverter}}"/>\r
+ \r
<TextBlock Text="Bitrate" FontWeight="Bold" Grid.Column="4" VerticalAlignment="Center" />\r
<ComboBox Width="70" Grid.Column="5" Margin="5,0,5,0" Height="22" \r
ItemsSource="{Binding DataContext.AudioBitrates, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"\r
SelectedItem="{Binding Bitrate}"/>\r
+ \r
<TextBlock Text="Samplerate" FontWeight="Bold" Grid.Column="6" VerticalAlignment="Center" />\r
<ComboBox Width="70" Grid.Column="7" Margin="5,0,5,0" Height="22" \r
ItemsSource="{Binding DataContext.SampleRates, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"\r
<ComboBox Width="100" Grid.Column="1" Margin="5,0,5,0" Grid.Row="1" Height="22"\r
ItemsSource="{Binding DataContext.AudioMixdowns, Converter={StaticResource enumComboConverter}, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"\r
SelectedItem="{Binding MixDown, Converter={StaticResource enumComboConverter}}"/>\r
+ \r
<TextBlock Text="DRC" FontWeight="Bold" Grid.Column="2" Grid.Row="1" VerticalAlignment="Center"/>\r
- <NumericUpDown:NumericUpDown Width="45" Value="{Binding DRC}" Grid.Row="1" Grid.Column="3" HorizontalAlignment="Left" Margin="5,0,5,0" />\r
+ <NumericUpDown:NumericUpDown Width="45" Value="{Binding DRC, Mode=TwoWay}" Grid.Row="1" Grid.Column="3" HorizontalAlignment="Left" Margin="5,0,5,0"\r
+ Minimum="0" Maximum="4" DecimalPlace="1" LargeChange="0.1" SmallChange="0.1"/>\r
+ \r
<TextBlock Text="Gain" FontWeight="Bold" Grid.Column="4" Grid.Row="1" VerticalAlignment="Center"/>\r
- <NumericUpDown:NumericUpDown Width="45" Value="{Binding Gain}" Grid.Row="1" Grid.Column="5" HorizontalAlignment="Left" Margin="5,0,5,0" />\r
+ <NumericUpDown:NumericUpDown Width="45" Value="{Binding Gain, Mode=TwoWay}" Grid.Row="1" Grid.Column="5" HorizontalAlignment="Left" Margin="5,0,5,0"\r
+ Minimum="-20" Maximum="20" DecimalPlace="0" SmallChange="1" LargeChange="1" />\r
\r
</Grid>\r
\r
<TextBlock Text="Forced Only" FontWeight="Bold" Grid.Column="2" VerticalAlignment="Center" />\r
<CheckBox Grid.Column="3" IsChecked="{Binding Forced}" VerticalAlignment="Center" Margin="5,0,5,0"/>\r
<TextBlock Text="Burn In" FontWeight="Bold" Grid.Column="4" VerticalAlignment="Center" />\r
- <CheckBox Grid.Column="5" IsChecked="{Binding Burned}" VerticalAlignment="Center" Margin="5,0,5,0"/>\r
+ <CheckBox Grid.Column="5" IsChecked="{Binding Burned}" VerticalAlignment="Center" Margin="5,0,5,0">\r
+ <i:Interaction.Triggers>\r
+ <i:EventTrigger EventName="Click">\r
+ <cal:ActionMessage MethodName="SelectBurnedInTrack">\r
+ <cal:Parameter Value="{Binding}" />\r
+ </cal:ActionMessage>\r
+ </i:EventTrigger>\r
+ </i:Interaction.Triggers>\r
+ </CheckBox>\r
<TextBlock Text="Default" FontWeight="Bold" Grid.Column="6" VerticalAlignment="Center" />\r
- <CheckBox Grid.Column="7" IsChecked="{Binding Default}" VerticalAlignment="Center" Margin="5,0,5,0"/>\r
+ <CheckBox Grid.Column="7" IsChecked="{Binding Default}" VerticalAlignment="Center" Margin="5,0,5,0">\r
+ <i:Interaction.Triggers>\r
+ <i:EventTrigger EventName="Click">\r
+ <cal:ActionMessage MethodName="SelectDefaultTrack">\r
+ <cal:Parameter Value="{Binding}" />\r
+ </cal:ActionMessage>\r
+ </i:EventTrigger>\r
+ </i:Interaction.Triggers>\r
+ </CheckBox>\r
\r
<!-- Row 2-->\r
<TextBlock Text="Language" FontWeight="Bold" Grid.Column="0" Grid.Row="1" VerticalAlignment="Center"/>\r