using System; using System.Collections.Generic; using System.Linq; using System.Threading; using InABox.Configuration; using InABox.Core; using InABox.DynamicGrid; namespace PRSDesktop.Forms.Export; internal class ExportColumns : IGlobalConfigurationSettings { public List Columns { get; set; } } internal class ExportGrid : DynamicGrid { private ExportColumns _columns = new(); private readonly Dictionary _properties; private readonly Type _Type; public ExportGrid(Type type) { _Type = type; _properties = CoreUtils.PropertyList(_Type, x => true, true); } protected override void Init() { base.Init(); ActionColumns.Add(new DynamicRowMovementColumn(DynamicRowMovement.Up, SwapRows)); ActionColumns.Add(new DynamicRowMovementColumn(DynamicRowMovement.Down, SwapRows)); } protected override void DoReconfigure(DynamicGridOptions options) { base.DoReconfigure(options); options.RecordCount = true; } private bool SwapRows(int arg1, int arg2) { var item = _columns.Columns[arg1]; _columns.Columns.Remove(item); _columns.Columns.Insert(arg2, item); return true; } private DynamicGridColumns ExportGrid_OnLoadColumns(object sender, DynamicGridColumns master) { var columns = new DynamicGridColumns(); columns.Add(x => x.Name, width: 0); columns.Add(x => x.Property, width: 0); columns.Add(x => x.Format, width: 50); return columns; } protected override void Reload( Filters criteria, Columns columns, ref SortOrder? sort, CancellationToken token, Action action) { _columns = new GlobalConfiguration(_Type.Name).Load(); if (_columns.Columns == null || _columns.Columns.Count == 0) { if (_columns.Columns == null) _columns.Columns = new List(); foreach (var prop in _properties.Keys) _columns.Columns.Add(new ExportColumn { Property = prop, Name = prop, Format = "" }); new GlobalConfiguration(_Type.Name).Save(_columns); } var result = new CoreTable(); result.LoadColumns(typeof(ExportColumn)); result.LoadRows(_columns.Columns); action.Invoke(result, null); } //protected override DataTable Reload(Dictionary criteria, List columns, string sort) //{ // _columns = new GlobalConfiguration(_Type.Name).Load(); // if ((_columns.Columns == null) || (_columns.Columns.Count == 0)) // { // if (_columns.Columns == null) // _columns.Columns = new List(); // foreach (String prop in _properties.Keys) // _columns.Columns.Add(new ExportColumn() { Property = prop, Name = prop, Format = "" }); // new GlobalConfiguration(_Type.Name).Save(_columns); // } // DataTable result = new DataTable(); // result.LoadColumns(typeof(ExportColumn)); // result.LoadRows(_columns.Columns); // return result; //} public override ExportColumn LoadItem(CoreRow row) { var index = Data.Rows.IndexOf(row); return _columns.Columns[index]; } public override void SaveItem(ExportColumn item) { new GlobalConfiguration(_Type.Name).Save(_columns); } public override void DeleteItems(params CoreRow[] rows) { foreach (var row in rows.OrderByDescending(x => x.Index)) _columns.Columns.RemoveAt(row.Index); new GlobalConfiguration(_Type.Name).Save(_columns); } }