using System; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Media.Imaging; using InABox.Core; using Image = System.Windows.Controls.Image; using Label = System.Windows.Controls.Label; namespace InABox.DynamicGrid { public abstract class DynamicActionColumn : DynamicColumnBase { public DynamicActionColumnPosition Position { get; set; } public delegate bool ActionDelegate(CoreRow? row); public delegate FrameworkElement? ActionColumnToolTip(DynamicActionColumn column, CoreRow? row); public ActionDelegate? Action { get; set; } public ActionColumnToolTip? ToolTip { get; set; } public string[]? SelectedFilters { get; set; } public string[]? Filters { get; set; } public Func? FilterRecord { get; set; } public Func? ContextMenu { get; set; } public object? Tag { get; set; } public string HeaderText { get; set; } public bool VerticalHeader { get; set; } public int Width { get; set; } protected override void Init() { base.Init(); Width = 0; HeaderText = " "; Filters = null; FilterRecord = null; Position = DynamicActionColumnPosition.End; } public FrameworkElement? TextToolTip(string? text) { if (string.IsNullOrWhiteSpace(text)) return null; var border = new Border { BorderBrush = new SolidColorBrush(Colors.Gray), BorderThickness = new Thickness(0.75), CornerRadius = new CornerRadius(5), Background = new SolidColorBrush(Colors.LightYellow), Padding = new Thickness(5), Child = new Label { Content = text } }; return border; } public FrameworkElement? ImageToolTip(BitmapImage? image) { if (image == null) return null; var result = new Border { Background = new SolidColorBrush(Colors.LightYellow), BorderBrush = new SolidColorBrush(Colors.Gray), BorderThickness = new Thickness(0.75) }; result.Child = new Image { Source = image }; return result; } public abstract object? Data(CoreRow? row); } public class DynamicTextColumn : DynamicActionColumn { public delegate string GetTextDelegate(CoreRow? row); public GetTextDelegate Text { get; private set; } public Alignment Alignment { get; set; } public DynamicTextColumn(GetTextDelegate text, ActionDelegate? action = null) { Alignment = Alignment.MiddleCenter; Text = text; Action = action; VerticalHeader = false; } public override object? Data(CoreRow? row) => Text?.Invoke(row); } public class DynamicImageColumn : DynamicActionColumn { public delegate BitmapImage? GetImageDelegate(CoreRow? row); public DynamicImageColumn(GetImageDelegate image, ActionDelegate? action = null) { Image = image; Action = action; VerticalHeader = true; } public DynamicImageColumn(BitmapImage image, ActionDelegate? action = null) { Image = r => image; Action = action; } public GetImageDelegate Image { get; protected set; } public bool AllowHeaderClick { get; set; } protected override void Init() { base.Init(); AllowHeaderClick = false; } public override object? Data(CoreRow? row) => Image?.Invoke(row); } }