diff --git a/KeyAsio.Gui/Converters/Enum2ListConverter.cs b/KeyAsio.Gui/Converters/Enum2ListConverter.cs new file mode 100644 index 0000000..d7dcfec --- /dev/null +++ b/KeyAsio.Gui/Converters/Enum2ListConverter.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Windows; +using System.Windows.Data; + +namespace KeyAsio.Gui.Converters; + +public class Enum2ListConverter : IValueConverter +{ + private readonly Type _enumBaseType = typeof(Enum); + + private static readonly Dictionary CachedList = new(); + + public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) + { + if (parameter is not Type t || !t.IsSubclassOf(_enumBaseType)) + return DependencyProperty.UnsetValue; + if (CachedList.TryGetValue(t, out var enums)) + return enums; + + var array = Enum.GetValues(t).Cast().ToArray(); + CachedList.Add(t, array); + return array; + } + + public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/KeyAsio.Gui/Converters/IntMillisecond2TimeSpanConverter.cs b/KeyAsio.Gui/Converters/IntMillisecond2TimeSpanConverter.cs index 36288e1..5c2f4b2 100644 --- a/KeyAsio.Gui/Converters/IntMillisecond2TimeSpanConverter.cs +++ b/KeyAsio.Gui/Converters/IntMillisecond2TimeSpanConverter.cs @@ -7,7 +7,7 @@ namespace KeyAsio.Gui.Converters; internal class IntMillisecond2TimeSpanConverter : IValueConverter { - public object Convert(object? value, Type targetType, object parameter, CultureInfo culture) + public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { var i = (int)value!; Span c = stackalloc char[10]; @@ -21,7 +21,7 @@ public object Convert(object? value, Type targetType, object parameter, CultureI return vsb.ToString(); } - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) { throw new NotImplementedException(); } diff --git a/KeyAsio.Gui/Converters/IsNullToVisibilityConverter.cs b/KeyAsio.Gui/Converters/IsNullToVisibilityConverter.cs index 18aa739..73bba26 100644 --- a/KeyAsio.Gui/Converters/IsNullToVisibilityConverter.cs +++ b/KeyAsio.Gui/Converters/IsNullToVisibilityConverter.cs @@ -7,12 +7,12 @@ namespace KeyAsio.Gui.Converters; internal class IsNullToVisibilityConverter : IValueConverter { - public object Convert(object? value, Type targetType, object parameter, CultureInfo culture) + public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { return value is null ? Visibility.Collapsed : Visibility.Visible; } - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) { throw new NotImplementedException(); } diff --git a/KeyAsio.Gui/Converters/IsNullToVisibilityReConverter.cs b/KeyAsio.Gui/Converters/IsNullToVisibilityReConverter.cs index 2818c65..66f35ae 100644 --- a/KeyAsio.Gui/Converters/IsNullToVisibilityReConverter.cs +++ b/KeyAsio.Gui/Converters/IsNullToVisibilityReConverter.cs @@ -7,12 +7,12 @@ namespace KeyAsio.Gui.Converters; internal class IsNullToVisibilityReConverter : IValueConverter { - public object Convert(object? value, Type targetType, object parameter, CultureInfo culture) + public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { return value is null ? Visibility.Visible : Visibility.Collapsed; } - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) { throw new NotImplementedException(); } diff --git a/KeyAsio.Gui/Converters/Multi_LatencySampleRate2LatencyConverter.cs b/KeyAsio.Gui/Converters/Multi_LatencySampleRate2LatencyConverter.cs index a636f82..605baee 100644 --- a/KeyAsio.Gui/Converters/Multi_LatencySampleRate2LatencyConverter.cs +++ b/KeyAsio.Gui/Converters/Multi_LatencySampleRate2LatencyConverter.cs @@ -8,7 +8,7 @@ internal class Multi_LatencySampleRate2LatencyConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { - if (values.Length == 2 && values[0] is int playbackLatency && values[1] is int sampleRate) + if (values is [int playbackLatency, int sampleRate]) { var latency = 1000d / sampleRate * playbackLatency; return latency; diff --git a/KeyAsio.Gui/Converters/UpperCaseConverter.cs b/KeyAsio.Gui/Converters/UpperCaseConverter.cs index 3a1a979..8371999 100644 --- a/KeyAsio.Gui/Converters/UpperCaseConverter.cs +++ b/KeyAsio.Gui/Converters/UpperCaseConverter.cs @@ -1,44 +1,17 @@ using System; -using System.Collections.Generic; using System.Globalization; -using System.Linq; -using System.Windows; using System.Windows.Data; namespace KeyAsio.Gui.Converters; internal class UpperCaseConverter : IValueConverter { - public object? Convert(object? value, Type targetType, object parameter, CultureInfo culture) + public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { return value?.ToString()?.ToUpper(); } - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) - { - throw new NotImplementedException(); - } -} - -public class Enum2ListConverter : IValueConverter -{ - private readonly Type _enumBaseType = typeof(Enum); - - private static readonly Dictionary CachedList = new(); - - public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - { - if (parameter is not Type t || !t.IsSubclassOf(_enumBaseType)) - return DependencyProperty.UnsetValue; - if (CachedList.ContainsKey(t)) - return CachedList[t]; - - var array = Enum.GetValues(t).Cast().ToArray(); - CachedList.Add(t, array); - return array; - } - - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) { throw new NotImplementedException(); } diff --git a/KeyAsio.Gui/UserControls/CustomizableButton.cs b/KeyAsio.Gui/UserControls/CustomizableButton.cs index 63afec1..40dd3a3 100644 --- a/KeyAsio.Gui/UserControls/CustomizableButton.cs +++ b/KeyAsio.Gui/UserControls/CustomizableButton.cs @@ -32,7 +32,7 @@ public ControlTemplate IconTemplate public static readonly DependencyProperty IconTemplateProperty = DependencyProperty.Register( - "IconTemplate", + nameof(IconTemplate), typeof(ControlTemplate), typeof(CustomizableButton), null @@ -46,7 +46,7 @@ public CornerRadius CornerRadius public static readonly DependencyProperty CornerRadiusProperty = DependencyProperty.Register( - "CornerRadius", + nameof(CornerRadius), typeof(CornerRadius), typeof(CustomizableButton), new PropertyMetadata(new CornerRadius(0)) @@ -60,7 +60,7 @@ public Thickness IconMargin public static readonly DependencyProperty IconMarginProperty = DependencyProperty.Register( - "IconMargin", + nameof(IconMargin), typeof(Thickness), typeof(CustomizableButton), new PropertyMetadata(new Thickness(0, 0, 0, 0)) @@ -74,7 +74,7 @@ public Orientation IconOrientation public static readonly DependencyProperty IconOrientationProperty = DependencyProperty.Register( - "IconOrientation", + nameof(IconOrientation), typeof(Orientation), typeof(CustomizableButton), new PropertyMetadata(Orientation.Horizontal) @@ -88,7 +88,7 @@ public double IconSize public static readonly DependencyProperty IconSizeProperty = DependencyProperty.Register( - "IconSize", + nameof(IconSize), typeof(double), typeof(CustomizableButton), new PropertyMetadata(24d) @@ -153,12 +153,12 @@ public Brush CheckedForeground return null; } - public static readonly DependencyProperty MouseOverBackgroundProperty = DependencyProperty.Register("MouseOverBackground", typeof(Brush), typeof(CustomizableButton), new PropertyMetadata(default(Brush))); - public static readonly DependencyProperty MouseOverForegroundProperty = DependencyProperty.Register("MouseOverForeground", typeof(Brush), typeof(CustomizableButton), new PropertyMetadata(default(Brush))); - public static readonly DependencyProperty MouseDownBackgroundProperty = DependencyProperty.Register("MouseDownBackground", typeof(Brush), typeof(CustomizableButton), new PropertyMetadata(default(Brush))); - public static readonly DependencyProperty MouseDownForegroundProperty = DependencyProperty.Register("MouseDownForeground", typeof(Brush), typeof(CustomizableButton), new PropertyMetadata(default(Brush))); - public static readonly DependencyProperty CheckedBackgroundProperty = DependencyProperty.Register("CheckedBackground", typeof(Brush), typeof(CustomizableButton), new PropertyMetadata(default(Brush))); - public static readonly DependencyProperty CheckedForegroundProperty = DependencyProperty.Register("CheckedForeground", typeof(Brush), typeof(CustomizableButton), new PropertyMetadata(default(Brush))); + public static readonly DependencyProperty MouseOverBackgroundProperty = DependencyProperty.Register(nameof(MouseOverBackground), typeof(Brush), typeof(CustomizableButton), new PropertyMetadata(default(Brush))); + public static readonly DependencyProperty MouseOverForegroundProperty = DependencyProperty.Register(nameof(MouseOverForeground), typeof(Brush), typeof(CustomizableButton), new PropertyMetadata(default(Brush))); + public static readonly DependencyProperty MouseDownBackgroundProperty = DependencyProperty.Register(nameof(MouseDownBackground), typeof(Brush), typeof(CustomizableButton), new PropertyMetadata(default(Brush))); + public static readonly DependencyProperty MouseDownForegroundProperty = DependencyProperty.Register(nameof(MouseDownForeground), typeof(Brush), typeof(CustomizableButton), new PropertyMetadata(default(Brush))); + public static readonly DependencyProperty CheckedBackgroundProperty = DependencyProperty.Register(nameof(CheckedBackground), typeof(Brush), typeof(CustomizableButton), new PropertyMetadata(default(Brush))); + public static readonly DependencyProperty CheckedForegroundProperty = DependencyProperty.Register(nameof(CheckedForeground), typeof(Brush), typeof(CustomizableButton), new PropertyMetadata(default(Brush))); static CustomizableButton() { diff --git a/KeyAsio.Gui/UserControls/FrameWindow.cs b/KeyAsio.Gui/UserControls/FrameWindow.cs index de0db5b..cdaf26f 100644 --- a/KeyAsio.Gui/UserControls/FrameWindow.cs +++ b/KeyAsio.Gui/UserControls/FrameWindow.cs @@ -5,7 +5,7 @@ namespace KeyAsio.Gui.UserControls; public class FrameWindow : Window { - public static readonly DependencyProperty CanCloseProperty = DependencyProperty.Register("CanClose", + public static readonly DependencyProperty CanCloseProperty = DependencyProperty.Register(nameof(CanClose), typeof(bool), typeof(FrameWindow), new PropertyMetadata(true, (d, e) => diff --git a/KeyAsio.Gui/UserControls/WindowFrame.cs b/KeyAsio.Gui/UserControls/WindowFrame.cs index 0e28033..cd87404 100644 --- a/KeyAsio.Gui/UserControls/WindowFrame.cs +++ b/KeyAsio.Gui/UserControls/WindowFrame.cs @@ -8,32 +8,32 @@ namespace KeyAsio.Gui.UserControls; public class WindowFrame : UserControl, INotifyPropertyChanged { - public static readonly DependencyProperty ChildProperty = DependencyProperty.Register("Child", + public static readonly DependencyProperty ChildProperty = DependencyProperty.Register(nameof(Child), typeof(object), typeof(WindowFrame), new PropertyMetadata(default(object))); - public static readonly DependencyProperty IsMaxProperty = DependencyProperty.Register("IsMax", + public static readonly DependencyProperty IsMaxProperty = DependencyProperty.Register(nameof(IsMax), typeof(bool), typeof(WindowFrame), new PropertyMetadata(default(bool))); - public static readonly DependencyProperty HasMinProperty = DependencyProperty.Register("HasMin", + public static readonly DependencyProperty HasMinProperty = DependencyProperty.Register(nameof(HasMin), typeof(bool), typeof(WindowFrame), new PropertyMetadata(true)); - public static readonly DependencyProperty HasMaxProperty = DependencyProperty.Register("HasMax", + public static readonly DependencyProperty HasMaxProperty = DependencyProperty.Register(nameof(HasMax), typeof(bool), typeof(WindowFrame), new PropertyMetadata(true)); - public static readonly DependencyProperty CanCloseProperty = DependencyProperty.Register("CanClose", + public static readonly DependencyProperty CanCloseProperty = DependencyProperty.Register(nameof(CanClose), typeof(bool), typeof(WindowFrame), new PropertyMetadata(true)); - public static readonly DependencyProperty HasIconProperty = DependencyProperty.Register("HasIcon", + public static readonly DependencyProperty HasIconProperty = DependencyProperty.Register(nameof(HasIcon), typeof(bool), typeof(WindowFrame), new PropertyMetadata(true));