DataModelTemplateGrid.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Windows.Media.Imaging;
  5. using FastReport.Dialog;
  6. using InABox.Clients;
  7. using InABox.Core;
  8. using InABox.DynamicGrid;
  9. using InABox.WPF;
  10. using static InABox.Core.DataModelTemplate;
  11. using ScriptEditorWindow = InABox.DynamicGrid.ScriptEditorWindow;
  12. namespace PRSDesktop
  13. {
  14. public class DataModelTemplateGrid : DynamicDataGrid<DataModelTemplate>
  15. {
  16. private readonly BitmapImage _edit = PRSDesktop.Resources.pencil.AsBitmapImage();
  17. private DataModelTemplate[] Items;
  18. public DataModelTemplateGrid()
  19. {
  20. HiddenColumns.Add(x => x.Template);
  21. OnCustomiseEditor += DataModelTemplateGrid_OnCustomiseEditor;
  22. }
  23. private void DataModelTemplateGrid_OnCustomiseEditor(IDynamicEditorForm sender, DataModelTemplate[]? items, DynamicGridColumn column, BaseEditor editor)
  24. {
  25. if (editor == null)
  26. return;
  27. if (column.ColumnName.Equals("Template")
  28. || column.ColumnName.Equals("To")
  29. || column.ColumnName.Equals("Subject")
  30. || column.ColumnName.Equals("AttachmentName")
  31. )
  32. {
  33. var edt = editor as TextBoxEditor;
  34. edt.Buttons = new EditorButton[]
  35. {
  36. new EditorButton(items.FirstOrDefault(), "Edit", 60, TemplateEditorClicked, true)
  37. };
  38. }
  39. }
  40. private void TemplateEditorClicked(object editor, object? item)
  41. {
  42. var template = item as DataModelTemplate;
  43. var edtControl = editor as TextBoxEditorControl;
  44. var col = edtControl.ColumnName;
  45. var toEdit = CoreUtils.GetPropertyValue(template, col);
  46. var edt = new ScriptEditorWindow(toEdit as string, SyntaxLanguage.HTML);
  47. var snippets = new Dictionary<string, string[]>();
  48. var tables = Model.AsDictionary;
  49. foreach (var key in tables.Keys)
  50. {
  51. var name = key.Name;
  52. var variable = name.Substring(0, 1).ToLower();
  53. var cursnippets = new List<string>();
  54. cursnippets.Add("{{ for " + variable + " in " + name + " }}\n\n{{ end }}");
  55. var props = DatabaseSchema.Properties(key)
  56. .Where(x => x.Editor != null && x.Editor.GetType() != typeof(NullEditor) && x.Editor.Visible != Visible.Hidden);
  57. foreach (var prop in props)
  58. cursnippets.Add("{{ " + variable + "." + prop.Name + " }}");
  59. snippets[name] = cursnippets.ToArray();
  60. }
  61. edt.Snippets = snippets;
  62. if (edt.ShowDialog() == true)
  63. {
  64. CoreUtils.SetPropertyValue(template, col, edt.Script);
  65. }
  66. }
  67. public DataModel Model { get; set; }
  68. protected override void Reload(Filters<DataModelTemplate> criteria, Columns<DataModelTemplate> columns, ref SortOrder<DataModelTemplate> sort,
  69. Action<CoreTable, Exception> action)
  70. {
  71. criteria.Add(new Filter<DataModelTemplate>(x => x.Model).IsEqualTo(Model.Name));
  72. base.Reload(criteria, columns, ref sort, action);
  73. }
  74. protected override DataModelTemplate CreateItem()
  75. {
  76. var result = base.CreateItem();
  77. result.Visible = true;
  78. result.Model = Model.Name;
  79. return result;
  80. }
  81. }
  82. }