Six files of three lines each. NotNullToBool is gone entirely — Avalonia ships ObjectConverters.IsNotNull, so TaskRowView binds that directly.
54 lines
2.2 KiB
C#
54 lines
2.2 KiB
C#
using System.Globalization;
|
|
using Avalonia.Data.Converters;
|
|
using Avalonia.Media;
|
|
using ClaudeDo.Ui.ViewModels.Islands;
|
|
|
|
namespace ClaudeDo.Ui.Converters;
|
|
|
|
// One-expression converters. Each is only worth a class because Avalonia XAML can't
|
|
// instantiate a generic FuncValueConverter as a resource; they stay one per type so the
|
|
// x:Key names in App.axaml keep resolving. Anything with real logic gets its own file.
|
|
|
|
public sealed class UpperCaseConverter : OneWayConverter
|
|
{
|
|
public static UpperCaseConverter Instance { get; } = new();
|
|
public override object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
|
=> value?.ToString()?.ToUpperInvariant();
|
|
}
|
|
|
|
public sealed class StrikeIfTrueConverter : OneWayConverter
|
|
{
|
|
public static StrikeIfTrueConverter Instance { get; } = new();
|
|
public override object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
|
=> value is true ? TextDecorations.Strikethrough : null;
|
|
}
|
|
|
|
public sealed class BoolToItalicConverter : OneWayConverter
|
|
{
|
|
public override object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
|
=> value is true ? FontStyle.Italic : FontStyle.Normal;
|
|
}
|
|
|
|
public sealed class BoolToDraftOpacityConverter : OneWayConverter
|
|
{
|
|
public override object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
|
=> value is true ? 0.7 : 1.0;
|
|
}
|
|
|
|
// Drives ListBoxItem.Focusable for TasksIslandView's flat Rows list: a HeaderRow container must
|
|
// not be a tab stop, a TaskRowViewModel container must behave like any other row.
|
|
public sealed class NotHeaderRowConverter : OneWayConverter
|
|
{
|
|
public static NotHeaderRowConverter Instance { get; } = new();
|
|
public override object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
|
=> value is not HeaderRow;
|
|
}
|
|
|
|
public abstract class OneWayConverter : IValueConverter
|
|
{
|
|
public abstract object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture);
|
|
|
|
public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
|
|
=> throw new NotSupportedException();
|
|
}
|