using System; using System.Collections.Generic; using System.Linq; 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(FluentList options) { base.DoReconfigure(options); options.BeginUpdate().Clear().Add(DynamicGridOption.AddRows) .Add(DynamicGridOption.EditRows) .Add(DynamicGridOption.DeleteRows) .Add(DynamicGridOption.RecordCount) .EndUpdate(); } protected override void Reload(Filters criteria, Columns columns, ref SortOrder? sort, Action action) { criteria.Add(new Filter(c => c.AppliesTo).IsEqualTo(AppliesTo.EntityName().Split(".").Last())); base.Reload(criteria, columns, ref sort, action); } protected 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) { if (SelectedRows.Any()) EditSpreadsheet(SelectedRows.First()); else base.DoDoubleClick(sender); } 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"); } } } }