DataModelTemplateGrid.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Windows.Media.Imaging;
  5. using InABox.Clients;
  6. using InABox.Core;
  7. using InABox.DynamicGrid;
  8. using InABox.WPF;
  9. using ScriptEditor = InABox.DynamicGrid.ScriptEditor;
  10. namespace PRSDesktop
  11. {
  12. public class DataModelTemplateGrid : DynamicDataGrid<DataModelTemplate>
  13. {
  14. private readonly BitmapImage _edit = PRSDesktop.Resources.pencil.AsBitmapImage();
  15. public DataModelTemplateGrid()
  16. {
  17. ActionColumns.Add(new DynamicImageColumn(EditImage, EditAction));
  18. HiddenColumns.Add(x => x.Template);
  19. }
  20. public DataModel Model { get; set; }
  21. private BitmapImage EditImage(CoreRow row)
  22. {
  23. return _edit;
  24. }
  25. private bool EditAction(CoreRow row)
  26. {
  27. var template = row.ToObject<DataModelTemplate>();
  28. var editor = new ScriptEditor(template.Template, SyntaxLanguage.HTML);
  29. var snippets = new Dictionary<string, string[]>();
  30. var tables = Model.AsDictionary;
  31. foreach (var key in tables.Keys)
  32. {
  33. var name = key.Name;
  34. var variable = name.Substring(0, 1).ToLower();
  35. var cursnippets = new List<string>();
  36. cursnippets.Add("{{ for " + variable + " in " + name + " }}\n\n{{ end }}");
  37. var props = DatabaseSchema.Properties(key)
  38. .Where(x => x.Editor != null && x.Editor.GetType() != typeof(NullEditor) && x.Editor.Visible != Visible.Hidden);
  39. foreach (var prop in props)
  40. cursnippets.Add("{{ " + variable + "." + prop.Name + " }}");
  41. snippets[name] = cursnippets.ToArray();
  42. }
  43. editor.Snippets = snippets;
  44. if (editor.ShowDialog() == true)
  45. {
  46. template.Template = editor.Script;
  47. new Client<DataModelTemplate>().Save(template, "Updated by User");
  48. return true;
  49. }
  50. return false;
  51. }
  52. protected override void Reload(Filters<DataModelTemplate> criteria, Columns<DataModelTemplate> columns, ref SortOrder<DataModelTemplate> sort,
  53. Action<CoreTable, Exception> action)
  54. {
  55. criteria.Add(new Filter<DataModelTemplate>(x => x.Model).IsEqualTo(Model.Name));
  56. base.Reload(criteria, columns, ref sort, action);
  57. }
  58. protected override DataModelTemplate CreateItem()
  59. {
  60. var result = base.CreateItem();
  61. result.Model = Model.Name;
  62. return result;
  63. }
  64. }
  65. }