using System.Globalization; using System.Windows; using System.Windows.Data; using System.Windows.Media; namespace CursorLang.Views; /// /// Shows an element when the value matches one of those listed in the parameter, /// separated by commas. Needed so that the anchor point settings and the screen /// settings are not shown at the same time. /// public sealed class EnumToVisibilityConverter : IValueConverter { public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { string? current = value?.ToString(); bool matches = parameter?.ToString()? .Split(',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries) .Any(expected => expected == current) ?? false; return matches ? Visibility.Visible : Visibility.Collapsed; } public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) => Binding.DoNothing; } /// /// A colour into a "#RRGGBB" notation: the alpha is not shown, because /// transparency is a separate setting. /// public sealed class ColorToHexConverter : IValueConverter { public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) => value is Color color ? $"#{color.R:X2}{color.G:X2}{color.B:X2}" : string.Empty; public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) => Binding.DoNothing; } /// /// A colour into a brush — for the palette swatches in the list. /// public sealed class ColorToBrushConverter : IValueConverter { public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) => value is Color color ? new SolidColorBrush(color) : Brushes.Transparent; public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) => value is SolidColorBrush brush ? brush.Color : Binding.DoNothing; }