Files
cursor-lang/CursorLang/Views/Converters.cs
T
2026-08-09 20:02:23 +05:00

53 lines
2.0 KiB
C#

using System.Globalization;
using System.Windows;
using System.Windows.Data;
using System.Windows.Media;
namespace CursorLang.Views;
/// <summary>
/// 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.
/// </summary>
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;
}
/// <summary>
/// A colour into a "#RRGGBB" notation: the alpha is not shown, because
/// transparency is a separate setting.
/// </summary>
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;
}
/// <summary>
/// A colour into a brush — for the palette swatches in the list.
/// </summary>
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;
}