PosterSettingsGrid.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using InABox.Core;
  2. using InABox.DynamicGrid;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace InABox.Wpf.Grids
  9. {
  10. public class PosterSettingsGrid<TPosterSettings> : DynamicItemsListGrid<TPosterSettings>
  11. where TPosterSettings : PosterSettings, new()
  12. {
  13. public PosterSettingsGrid()
  14. {
  15. OnCustomiseEditor += PosterSettingsGrid_OnCustomiseEditor;
  16. }
  17. private void PosterSettingsGrid_OnCustomiseEditor(IDynamicEditorForm sender, TPosterSettings[]? items, DynamicGridColumn column, BaseEditor editor)
  18. {
  19. if (items?.FirstOrDefault() is not TPosterSettings settings) return;
  20. if(column.ColumnName == nameof(PosterSettings.Script) && editor is ScriptEditor scriptEditor)
  21. {
  22. var tPostable = CoreUtils.GetEntity(settings.PostableType);
  23. scriptEditor.Type = ScriptEditorType.TemplateEditor;
  24. scriptEditor.OnEditorClicked += () =>
  25. {
  26. var script = settings.Script.NotWhiteSpaceOr()
  27. ?? settings.DefaultScript(tPostable);
  28. var editor = new ScriptEditorWindow(script, SyntaxLanguage.CSharp);
  29. if (editor.ShowDialog() == true)
  30. {
  31. sender.SetEditorValue(column.ColumnName, editor.Script);
  32. settings.Script = editor.Script;
  33. settings.ScriptEnabled = !settings.Script.IsNullOrWhiteSpace();
  34. sender.SetEditorValue(nameof(PosterSettings.ScriptEnabled), settings.ScriptEnabled);
  35. }
  36. };
  37. }
  38. }
  39. }
  40. }