| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- namespace Terminal.Gui.Views;
- internal class FileDialogTableSource (
- FileDialog? dlg,
- FileDialogState? state,
- FileDialogStyle? style,
- int currentSortColumn,
- bool currentSortIsAsc)
- : ITableSource
- {
- public object this [int row, int col]
- {
- get
- {
- if (state is { })
- {
- return GetColumnValue (col, state.Children [row]);
- }
- return string.Empty;
- }
- }
- public int Rows => state is { } ? state.Children.Count () : 0;
- public int Columns => 4;
- public string [] ColumnNames =>
- [
- MaybeAddSortArrows (style!.FilenameColumnName, 0),
- MaybeAddSortArrows (style.SizeColumnName, 1),
- MaybeAddSortArrows (style.ModifiedColumnName, 2),
- MaybeAddSortArrows (style.TypeColumnName, 3)
- ];
- internal static object GetRawColumnValue (int col, FileSystemInfoStats? stats)
- {
- switch (col)
- {
- case 0: return stats!.FileSystemInfo!.Name;
- case 1: return stats!.MachineReadableLength;
- case 2: return stats!.LastWriteTime ?? default (DateTime);
- case 3: return stats!.Type;
- }
- throw new ArgumentOutOfRangeException (nameof (col));
- }
- private object GetColumnValue (int col, FileSystemInfoStats? stats)
- {
- switch (col)
- {
- case 0:
- // do not use icon for ".."
- if (stats?.IsParent ?? false)
- {
- return stats.Name;
- }
- string icon = dlg!.Style.IconProvider.GetIconWithOptionalSpace (stats!.FileSystemInfo);
- return (icon + (stats?.Name ?? string.Empty)).Trim ();
- case 1:
- return stats?.HumanReadableLength ?? string.Empty;
- case 2:
- if (stats is null || stats.IsParent || stats.LastWriteTime is null)
- {
- return string.Empty;
- }
- return stats.LastWriteTime.Value.ToString (style!.DateFormat);
- case 3:
- return stats?.Type ?? string.Empty;
- default:
- throw new ArgumentOutOfRangeException (nameof (col));
- }
- }
- private string MaybeAddSortArrows (string name, int idx)
- {
- if (idx == currentSortColumn)
- {
- return name + (currentSortIsAsc ? " (▲)" : " (▼)");
- }
- return name;
- }
- }
|