PostableSettingsGrid.cs 2.4 KB

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