PostableSettingsGrid.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using InABox.Core;
  2. using InABox.DynamicGrid;
  3. using InABox.Wpf.Grids;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace InABox.Wpf
  10. {
  11. public class PostableSettingsGrid : DynamicItemsListGrid<PostableSettings>
  12. {
  13. public PostableSettingsGrid()
  14. {
  15. OnCustomiseEditor += PostableSettingsGrid_OnCustomiseEditor;
  16. OnEditorValueChanged += PostableSettingsGrid_OnEditorValueChanged;
  17. }
  18. private Dictionary<string, object?> PostableSettingsGrid_OnEditorValueChanged(object sender, string name, object value)
  19. {
  20. var editorForm = (IDynamicEditorForm)sender;
  21. if (name == nameof(PostableSettings.PosterType))
  22. {
  23. var editor = (editorForm.FindEditor(name) as LookupEditorControl)!;
  24. (editor.EditorDefinition as ComboLookupEditor)!.Buttons![0].SetEnabled(!string.IsNullOrWhiteSpace(value as string));
  25. }
  26. return new();
  27. }
  28. private void PostableSettingsGrid_OnCustomiseEditor(IDynamicEditorForm sender, PostableSettings[]? items, DynamicGridColumn column, BaseEditor editor)
  29. {
  30. var settings = items?.FirstOrDefault();
  31. if (settings is null) return;
  32. if(column.ColumnName == nameof(PostableSettings.PosterType) && editor is ComboLookupEditor combo)
  33. {
  34. var settingsButton = new EditorButton(settings, "Settings", 60, ViewSettings, false);
  35. settingsButton.SetEnabled(!string.IsNullOrWhiteSpace(settings.PosterType));
  36. combo.Buttons = new EditorButton[] { settingsButton };
  37. }
  38. }
  39. private void ViewSettings(object editor, object? item)
  40. {
  41. if (item is not PostableSettings settings) return;
  42. var entityType = CoreUtils.GetEntity(settings.PostableType);
  43. var posterType = CoreUtils.GetEntity(settings.PosterType!);
  44. var settingsType = posterType.GetInterfaceDefinition(typeof(IPoster<,>))!.GenericTypeArguments[1];
  45. var posterSettings = PosterUtils.LoadPosterSettings(entityType, settingsType);
  46. var grid = DynamicGridUtils.CreateDynamicGrid(typeof(PosterSettingsGrid<>), settingsType);
  47. if(grid.EditItems(new object[] { posterSettings }))
  48. {
  49. PosterUtils.SavePosterSettings(entityType, settingsType, posterSettings);
  50. }
  51. }
  52. }
  53. }