SpreadsheetTemplateGrid.cs 3.6 KB

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