| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 | 
							- using InABox.Core;
 
- using InABox.DynamicGrid;
 
- using InABox.Wpf.Grids;
 
- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Text;
 
- using System.Threading.Tasks;
 
- namespace InABox.Wpf;
 
- public class PostableSettingsGrid : DynamicItemsListGrid<PostableSettings>
 
- {
 
-     public PostableSettingsGrid()
 
-     {
 
-         OnCustomiseEditor += PostableSettingsGrid_OnCustomiseEditor;
 
-         OnEditorValueChanged += PostableSettingsGrid_OnEditorValueChanged;
 
-     }
 
-     private Dictionary<string, object?> PostableSettingsGrid_OnEditorValueChanged(object sender, string name, object value)
 
-     {
 
-         var editorForm = (IDynamicEditorForm)sender;
 
-         if (name == nameof(PostableSettings.PosterType))
 
-         {
 
-             var editor = (editorForm.FindEditor(name) as LookupEditorControl)!;
 
-             (editor.EditorDefinition as ComboLookupEditor)!.Buttons![0].SetEnabled(!string.IsNullOrWhiteSpace(value as string));
 
-             (editor.EditorDefinition as ComboLookupEditor)!.Buttons![1].SetVisible(
 
-                 CoreUtils.GetEntityOrNull(value as string)?.IsAssignableTo(typeof(IGlobalSettingsPoster)) == true);
 
-         }
 
-         return new();
 
-     }
 
-     private void PostableSettingsGrid_OnCustomiseEditor(IDynamicEditorForm sender, PostableSettings[]? items, DynamicGridColumn column, BaseEditor editor)
 
-     {
 
-         var settings = items?.FirstOrDefault();
 
-         if (settings is null) return;
 
-         if(column.ColumnName == nameof(PostableSettings.PosterType) && editor is ComboLookupEditor combo)
 
-         {
 
-             var settingsButton = new EditorButton(settings, "Settings", 60, ViewSettings, false);
 
-             settingsButton.SetEnabled(!string.IsNullOrWhiteSpace(settings.PosterType));
 
-             var globalSettingsButton = new EditorButton(settings, "Global Settings", 100, ViewGlobalSettings, false);
 
-             globalSettingsButton.SetVisible(CoreUtils.GetEntityOrNull(settings.PosterType)?.IsAssignableTo(typeof(IGlobalSettingsPoster)) == true);
 
-             combo.Buttons = [settingsButton, globalSettingsButton];
 
-         }
 
-         else if(column.ColumnName == nameof(PostableSettings.ShowPullButton))
 
-         {
 
-             var entityType = CoreUtils.GetEntityOrNull(settings.PostableType);
 
-             var visible = false;
 
-             if (entityType is not null)
 
-             {
 
-                 var engine = PosterUtils.GetEngine(entityType);
 
-                 if(engine.Get(out var eType, out var _error))
 
-                 {
 
-                     visible = eType.HasInterface(typeof(IPullerEngine<>));
 
-                 }
 
-             }
 
-             editor.Editable = visible ? Editable.Enabled : Editable.Hidden;
 
-         }
 
-     }
 
-     private void ViewGlobalSettings(object editor, object? item)
 
-     {
 
-         if (item is not PostableSettings settings) return;
 
-         var posterType = CoreUtils.GetEntityOrNull(settings.PosterType);
 
-         var globalSettingsType = posterType?.GetInterfaceDefinition(typeof(IGlobalSettingsPoster<>))?.GenericTypeArguments[0];
 
-         if (globalSettingsType is null) return;
 
-         ConfigureGlobalPosterSettings(globalSettingsType);
 
-     }
 
-     private void ViewSettings(object editor, object? item)
 
-     {
 
-         if (item is not PostableSettings settings) return;
 
-         var entityType = CoreUtils.GetEntityOrNull(settings.PostableType);
 
-         if (entityType is null) return;
 
-         var posterType = CoreUtils.GetEntityOrNull(settings.PosterType);
 
-         var settingsType = posterType?.GetInterfaceDefinition(typeof(IPoster<,>))!.GenericTypeArguments[1];
 
-         ConfigurePosterSettings(entityType, settingsType);
 
-     }
 
-     public static bool ConfigureGlobalPosterSettings(Type globalSettingsType)
 
-     {
 
-         var globalPosterSettings = PosterUtils.LoadGlobalPosterSettings(globalSettingsType);
 
-         var grid = DynamicGridUtils.CreateDynamicGrid(typeof(DynamicItemsListGrid<>), globalSettingsType);
 
-         if(grid.EditItems(new object[] { globalPosterSettings }))
 
-         {
 
-             PosterUtils.SaveGlobalPosterSettings(globalSettingsType, globalPosterSettings);
 
-             return true;
 
-         }
 
-         return false;
 
-     }
 
-     public static bool ConfigurePosterSettings(Type entityType, Type settingsType)
 
-     {
 
-         var posterSettings = PosterUtils.LoadPosterSettings(entityType, settingsType);
 
-         var grid = DynamicGridUtils.CreateDynamicGrid(typeof(PosterSettingsGrid<>), settingsType);
 
-         if(grid.EditItems(new object[] { posterSettings }))
 
-         {
 
-             PosterUtils.SavePosterSettings(entityType, settingsType, posterSettings);
 
-             return true;
 
-         }
 
-         return false;
 
-     }
 
-     public static bool ConfigurePosterSettings<T>(Type settingsType)
 
-         where T : Entity, IPostable, IRemotable, IPersistent, new() => ConfigurePosterSettings(typeof(T), settingsType);
 
- }
 
 
  |