-
Notifications
You must be signed in to change notification settings - Fork 628
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote-tracking branch 'refs/remotes/origin/development'
- Loading branch information
Showing
66 changed files
with
3,278 additions
and
767 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
26 changes: 26 additions & 0 deletions
26
Application/FileConverter/Controls/EncodingQualitySliderControl.xaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
<UserControl | ||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | ||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | ||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | ||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | ||
xmlns:valueConverters="clr-namespace:FileConverter.ValueConverters" x:Name="userControl" | ||
x:Class="FileConverter.Controls.EncodingQualitySliderControl" | ||
mc:Ignorable="d" d:DesignWidth="300" Height="50"> | ||
<UserControl.Resources> | ||
<valueConverters:BitrateToString x:Key="BitrateToString"/> | ||
</UserControl.Resources> | ||
<Grid> | ||
<Grid.RowDefinitions> | ||
<RowDefinition Height="Auto" /> | ||
<RowDefinition Height="Auto" /> | ||
</Grid.RowDefinitions> | ||
<Grid.ColumnDefinitions> | ||
<ColumnDefinition Width="*"/> | ||
<ColumnDefinition Width="65"/> | ||
</Grid.ColumnDefinitions> | ||
|
||
<Slider Grid.Column="0" x:Name="slider" Margin="0,2,0,0" VerticalAlignment="Top" Maximum="245" AutoToolTipPlacement="TopLeft" SmallChange="8" IsSnapToTickEnabled="True" IsSelectionRangeEnabled="True" SelectionStart="115" SelectionEnd="245" Minimum="65" TickPlacement="BottomRight" LargeChange="32" TickFrequency="8" Ticks="65 85 100 115 130 165 175 190 225 245" Foreground="#004B82" /> | ||
<Label Grid.Column="1" Content="{Binding Value, Converter={StaticResource BitrateToString}, ElementName=slider, Mode=OneWay}" Width="65" /> | ||
<Label Grid.Column="0" Grid.Row="1" Content="Recommended bitrate range in blue" Foreground="#E5004B82" FontSize="11" /> | ||
</Grid> | ||
</UserControl> |
181 changes: 181 additions & 0 deletions
181
Application/FileConverter/Controls/EncodingQualitySliderControl.xaml.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,181 @@ | ||
// <copyright file="EncodingQualitySliderControl.xaml.cs" company="AAllard">License: http://www.gnu.org/licenses/gpl.html GPL version 3.</copyright> | ||
|
||
namespace FileConverter.Controls | ||
{ | ||
using System.Diagnostics; | ||
using System.Windows; | ||
using System.Windows.Controls; | ||
|
||
/// <summary> | ||
/// Interaction logic for EncodingQualitySliderControl. | ||
/// </summary> | ||
public partial class EncodingQualitySliderControl : UserControl | ||
{ | ||
public static readonly DependencyProperty BitrateProperty = DependencyProperty.Register( | ||
"Bitrate", | ||
typeof(double), | ||
typeof(EncodingQualitySliderControl), | ||
new FrameworkPropertyMetadata(new PropertyChangedCallback(EncodingQualitySliderControl.OnBitrateValueChanged), new CoerceValueCallback(EncodingQualitySliderControl.CoerceBitrateValue))); | ||
|
||
public static readonly DependencyProperty EncodingModeProperty = DependencyProperty.Register( | ||
"EncodingMode", | ||
typeof(EncodingMode), | ||
typeof(EncodingQualitySliderControl), | ||
new PropertyMetadata(new PropertyChangedCallback(EncodingQualitySliderControl.OnEncodingModeValueChanged))); | ||
|
||
public EncodingQualitySliderControl() | ||
{ | ||
this.InitializeComponent(); | ||
|
||
this.CoerceValue(EncodingQualitySliderControl.BitrateProperty); | ||
|
||
this.slider.ValueChanged += this.Slider_ValueChanged; | ||
} | ||
|
||
public EncodingMode EncodingMode | ||
{ | ||
get | ||
{ | ||
return (EncodingMode)this.GetValue(EncodingQualitySliderControl.EncodingModeProperty); | ||
} | ||
|
||
set | ||
{ | ||
this.SetCurrentValue(EncodingQualitySliderControl.EncodingModeProperty, value); | ||
} | ||
} | ||
|
||
public double Bitrate | ||
{ | ||
get | ||
{ | ||
return (double)this.GetValue(EncodingQualitySliderControl.BitrateProperty); | ||
} | ||
|
||
set | ||
{ | ||
this.SetCurrentValue(EncodingQualitySliderControl.BitrateProperty, this.GetNearestTickValue(value)); | ||
} | ||
} | ||
|
||
private static void OnBitrateValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs eventArgs) | ||
{ | ||
EncodingQualitySliderControl encodingQualitySliderControl = sender as EncodingQualitySliderControl; | ||
encodingQualitySliderControl.slider.Value = (double)eventArgs.NewValue; | ||
} | ||
|
||
private static object CoerceBitrateValue(DependencyObject sender, object basevalue) | ||
{ | ||
EncodingQualitySliderControl encodingQualitySliderControl = sender as EncodingQualitySliderControl; | ||
return encodingQualitySliderControl.GetNearestTickValue((double)basevalue); | ||
} | ||
|
||
private static void OnEncodingModeValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs eventArgs) | ||
{ | ||
EncodingQualitySliderControl encodingQualitySliderControl = sender as EncodingQualitySliderControl; | ||
Slider sliderControl = encodingQualitySliderControl.slider; | ||
|
||
switch (encodingQualitySliderControl.EncodingMode) | ||
{ | ||
case EncodingMode.Mp3VBR: | ||
{ | ||
sliderControl.Minimum = 65; | ||
sliderControl.Maximum = 245; | ||
sliderControl.SelectionStart = 115; | ||
sliderControl.SelectionEnd = 245; | ||
sliderControl.Ticks.Clear(); | ||
sliderControl.Ticks.Add(65); | ||
sliderControl.Ticks.Add(85); | ||
sliderControl.Ticks.Add(100); | ||
sliderControl.Ticks.Add(115); | ||
sliderControl.Ticks.Add(130); | ||
sliderControl.Ticks.Add(165); | ||
sliderControl.Ticks.Add(175); | ||
sliderControl.Ticks.Add(190); | ||
sliderControl.Ticks.Add(225); | ||
sliderControl.Ticks.Add(245); | ||
break; | ||
} | ||
|
||
case EncodingMode.Mp3CBR: | ||
{ | ||
sliderControl.Minimum = 8; | ||
sliderControl.Maximum = 320; | ||
sliderControl.SelectionStart = 128; | ||
sliderControl.SelectionEnd = 256; | ||
sliderControl.Ticks.Clear(); | ||
sliderControl.Ticks.Add(8); | ||
sliderControl.Ticks.Add(16); | ||
sliderControl.Ticks.Add(24); | ||
sliderControl.Ticks.Add(32); | ||
sliderControl.Ticks.Add(40); | ||
sliderControl.Ticks.Add(48); | ||
sliderControl.Ticks.Add(64); | ||
sliderControl.Ticks.Add(80); | ||
sliderControl.Ticks.Add(96); | ||
sliderControl.Ticks.Add(112); | ||
sliderControl.Ticks.Add(128); | ||
sliderControl.Ticks.Add(160); | ||
sliderControl.Ticks.Add(192); | ||
sliderControl.Ticks.Add(224); | ||
sliderControl.Ticks.Add(256); | ||
sliderControl.Ticks.Add(320); | ||
break; | ||
} | ||
|
||
case EncodingMode.OggVBR: | ||
{ | ||
sliderControl.Minimum = 32; | ||
sliderControl.Maximum = 500; | ||
sliderControl.SelectionStart = 80; | ||
sliderControl.SelectionEnd = 192; | ||
sliderControl.Ticks.Clear(); | ||
sliderControl.Ticks.Add(32); | ||
sliderControl.Ticks.Add(48); | ||
sliderControl.Ticks.Add(64); | ||
sliderControl.Ticks.Add(80); | ||
sliderControl.Ticks.Add(96); | ||
sliderControl.Ticks.Add(112); | ||
sliderControl.Ticks.Add(128); | ||
sliderControl.Ticks.Add(160); | ||
sliderControl.Ticks.Add(192); | ||
sliderControl.Ticks.Add(224); | ||
sliderControl.Ticks.Add(256); | ||
sliderControl.Ticks.Add(320); | ||
sliderControl.Ticks.Add(500); | ||
break; | ||
} | ||
} | ||
|
||
encodingQualitySliderControl.CoerceValue(EncodingQualitySliderControl.BitrateProperty); | ||
} | ||
|
||
private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) | ||
{ | ||
if (this.Bitrate == e.NewValue) | ||
{ | ||
return; | ||
} | ||
|
||
this.SetCurrentValue(EncodingQualitySliderControl.BitrateProperty, e.NewValue); | ||
} | ||
|
||
private double GetNearestTickValue(double value) | ||
{ | ||
double minimumDifference = float.PositiveInfinity; | ||
double nearestTick = value; | ||
for (int index = 0; index < this.slider.Ticks.Count; index++) | ||
{ | ||
double tick = this.slider.Ticks[index]; | ||
double difference = System.Math.Abs(value - tick); | ||
if (difference < minimumDifference) | ||
{ | ||
minimumDifference = difference; | ||
nearestTick = tick; | ||
} | ||
} | ||
|
||
return nearestTick; | ||
} | ||
} | ||
} |
Oops, something went wrong.