SpreadsheetTemplateGrid.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading;
  5. using System.Windows.Media.Imaging;
  6. using Comal.Classes;
  7. using InABox.Clients;
  8. using InABox.Core;
  9. using InABox.DynamicGrid;
  10. using InABox.DynamicGrid.Spreadsheet;
  11. using InABox.WPF;
  12. using net.sf.mpxj.phoenix.schema.phoenix4;
  13. namespace PRSDesktop.Components.Spreadsheet
  14. {
  15. public class SpreadsheetTemplateGrid : DynamicDataGrid<SpreadsheetTemplate>
  16. {
  17. public Type AppliesTo { get; set; }
  18. protected override void Init()
  19. {
  20. base.Init();
  21. ActionColumns.Add(new DynamicImageColumn(EditImage, EditSpreadsheet) { Position = DynamicActionColumnPosition.Start });
  22. }
  23. protected override void DoReconfigure(DynamicGridOptions options)
  24. {
  25. base.DoReconfigure(options);
  26. options.Clear();
  27. options.AddRows = true;
  28. options.EditRows = true;
  29. options.DeleteRows = true;
  30. options.RecordCount = true;
  31. }
  32. protected override void Reload(
  33. Filters<SpreadsheetTemplate> criteria, Columns<SpreadsheetTemplate> columns, ref SortOrder<SpreadsheetTemplate>? sort,
  34. CancellationToken token, Action<CoreTable?, Exception?> action)
  35. {
  36. criteria.Add(new Filter<SpreadsheetTemplate>(c => c.AppliesTo).IsEqualTo(AppliesTo.EntityName().Split(".").Last()));
  37. base.Reload(criteria, columns, ref sort, token, action);
  38. }
  39. public override SpreadsheetTemplate CreateItem()
  40. {
  41. var result = base.CreateItem();
  42. result.AppliesTo = AppliesTo.EntityName().Split(".").Last();
  43. return result;
  44. }
  45. private BitmapImage EditImage(CoreRow? arg)
  46. {
  47. return PRSDesktop.Resources.pencil.AsBitmapImage();
  48. }
  49. private bool EditSpreadsheet(CoreRow? row)
  50. {
  51. var spreadsheet = LoadItem(row);
  52. var window = new SpreadsheetWindow(spreadsheet);
  53. window.OnSave += SaveSpreadsheet;
  54. window.ShowDialog();
  55. Refresh(false, true);
  56. return false;
  57. }
  58. protected override void DoDoubleClick(object sender, DynamicGridCellClickEventArgs args)
  59. {
  60. if (SelectedRows.Any())
  61. EditSpreadsheet(SelectedRows.First());
  62. else
  63. base.DoDoubleClick(sender, args);
  64. }
  65. private void SaveSpreadsheet(object sender, SpreadsheetSaveArgs args)
  66. {
  67. SpreadsheetTemplate? sheet = args.Spreadsheet as SpreadsheetTemplate;
  68. if (sheet == null)
  69. return;
  70. if (args.SaveAs || Guid.Equals(sheet.ID,Guid.Empty))
  71. {
  72. sheet.ID = Guid.Empty;
  73. sheet.CommitChanges();
  74. sheet.Data = args.Data;
  75. EditItems(new SpreadsheetTemplate[] { sheet });
  76. }
  77. else
  78. {
  79. sheet.Data = args.Data;
  80. new Client<SpreadsheetTemplate>().Save(args.Spreadsheet as SpreadsheetTemplate, "Saved by PRS Spreadsheet");
  81. }
  82. }
  83. public static void ViewSpreadsheetTemplates<TEntity>() where TEntity : Entity
  84. {
  85. SpreadsheetTemplateGrid grid = new SpreadsheetTemplateGrid();
  86. grid.AppliesTo = typeof(TEntity);
  87. grid.Refresh(true, true);
  88. DynamicContentDialog dlg = new DynamicContentDialog(grid, false);
  89. dlg.Title = $"{typeof(TEntity).EntityName().Split(".").Last()} Spreadsheet Templates";
  90. dlg.ShowDialog();
  91. }
  92. }
  93. }