using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Windows.Media.Imaging; using Comal.Classes; using InABox.Clients; using InABox.Core; using InABox.DynamicGrid; using InABox.DynamicGrid.Spreadsheet; using InABox.WPF; using net.sf.mpxj.phoenix.schema.phoenix4; namespace PRSDesktop.Components.Spreadsheet { public class SpreadsheetTemplateGrid : DynamicDataGrid { public Type AppliesTo { get; set; } protected override void Init() { base.Init(); ActionColumns.Add(new DynamicImageColumn(EditImage, EditSpreadsheet) { Position = DynamicActionColumnPosition.Start }); } protected override void DoReconfigure(DynamicGridOptions options) { base.DoReconfigure(options); options.Clear(); options.AddRows = true; options.EditRows = true; options.DeleteRows = true; options.RecordCount = true; } protected override void Reload( Filters criteria, Columns columns, ref SortOrder? sort, CancellationToken token, Action action) { criteria.Add(new Filter(c => c.AppliesTo).IsEqualTo(AppliesTo.EntityName().Split(".").Last())); base.Reload(criteria, columns, ref sort, token, action); } public override SpreadsheetTemplate CreateItem() { var result = base.CreateItem(); result.AppliesTo = AppliesTo.EntityName().Split(".").Last(); return result; } private BitmapImage EditImage(CoreRow? arg) { return PRSDesktop.Resources.pencil.AsBitmapImage(); } private bool EditSpreadsheet(CoreRow? row) { var spreadsheet = LoadItem(row); var window = new SpreadsheetWindow(spreadsheet); window.OnSave += SaveSpreadsheet; window.ShowDialog(); Refresh(false, true); return false; } protected override void DoDoubleClick(object sender, DynamicGridCellClickEventArgs args) { if (SelectedRows.Any()) EditSpreadsheet(SelectedRows.First()); else base.DoDoubleClick(sender, args); } private void SaveSpreadsheet(object sender, SpreadsheetSaveArgs args) { SpreadsheetTemplate? sheet = args.Spreadsheet as SpreadsheetTemplate; if (sheet == null) return; if (args.SaveAs || Guid.Equals(sheet.ID,Guid.Empty)) { sheet.ID = Guid.Empty; sheet.CommitChanges(); sheet.Data = args.Data; EditItems(new SpreadsheetTemplate[] { sheet }); } else { sheet.Data = args.Data; new Client().Save(args.Spreadsheet as SpreadsheetTemplate, "Saved by PRS Spreadsheet"); } } public static void ViewSpreadsheetTemplates() where TEntity : Entity { SpreadsheetTemplateGrid grid = new SpreadsheetTemplateGrid(); grid.AppliesTo = typeof(TEntity); grid.Refresh(true, true); DynamicContentDialog dlg = new DynamicContentDialog(grid, false); dlg.Title = $"{typeof(TEntity).EntityName().Split(".").Last()} Spreadsheet Templates"; dlg.ShowDialog(); } } }