using System; namespace Terminal.Gui; /// /// Describes how to render a given column in a including /// and textual representation of cells (e.g. date formats) /// /// See TableView Deep Dive for more information. /// public class ColumnStyle { /// /// Defines the default alignment for all values rendered in this column. For custom alignment based on cell contents use . /// public TextAlignment Alignment { get; set; } /// /// Defines a delegate for returning custom alignment per cell based on cell values. When specified this will override /// public Func AlignmentGetter; /// /// Defines a delegate for returning custom representations of cell values. If not set then is used. Return values from your delegate may be truncated e.g. based on /// public Func RepresentationGetter; /// /// Defines a delegate for returning a custom color scheme per cell based on cell values. /// Return null for the default /// public CellColorGetterDelegate ColorGetter; private bool visible = true; /// /// Defines the format for values e.g. "yyyy-MM-dd" for dates /// public string Format { get; set; } /// /// Set the maximum width of the column in characters. This value will be ignored if more than the tables . Defaults to /// public int MaxWidth { get; set; } = TableView.DefaultMaxCellWidth; /// /// Set the minimum width of the column in characters. Setting this will ensure that /// even when a column has short content/header it still fills a given width of the control. /// /// This value will be ignored if more than the tables /// or the /// /// /// For setting a flexible column width (down to a lower limit) use /// instead /// /// public int MinWidth { get; set; } /// /// Enables flexible sizing of this column based on available screen space to render into. /// public int MinAcceptableWidth { get; set; } = TableView.DefaultMinAcceptableWidth; /// /// Gets or Sets a value indicating whether the column should be visible to the user. /// This affects both whether it is rendered and whether it can be selected. Defaults to /// true. /// /// If is 0 then will always return false. public bool Visible { get => MaxWidth >= 0 && visible; set => visible = value; } /// /// Returns the alignment for the cell based on and / /// /// /// public TextAlignment GetAlignment (object cellValue) { if (AlignmentGetter != null) return AlignmentGetter (cellValue); return Alignment; } /// /// Returns the full string to render (which may be truncated if too long) that the current style says best represents the given /// /// /// public string GetRepresentation (object value) { if (!string.IsNullOrWhiteSpace (Format)) { if (value is IFormattable f) return f.ToString (Format, null); } if (RepresentationGetter != null) return RepresentationGetter (value); return value?.ToString (); } }