using System.Globalization; using System.Windows; using System.Windows.Data; namespace SharepointToolbox.Views.Converters; /// Converts IndentLevel (int) to WPF Thickness for DataGrid indent. [ValueConversion(typeof(int), typeof(Thickness))] public class IndentConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { int level = value is int i ? i : 0; return new Thickness(level * 16, 0, 0, 0); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException(); } /// Converts byte count (long) to human-readable size string. [ValueConversion(typeof(long), typeof(string))] public class BytesConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { long bytes = value is long l ? l : 0L; if (bytes >= 1_073_741_824L) return $"{bytes / 1_073_741_824.0:F2} GB"; if (bytes >= 1_048_576L) return $"{bytes / 1_048_576.0:F2} MB"; if (bytes >= 1024L) return $"{bytes / 1024.0:F2} KB"; return $"{bytes} B"; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException(); } /// Inverts a bool binding — used to disable controls while an operation is running. [ValueConversion(typeof(bool), typeof(bool))] public class InverseBoolConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) => value is bool b && !b; public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => value is bool b && !b; }