PosterSettingsGrid.cs 1.7 KB

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