| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | 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];            }        }        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;            var globalPosterSettings = PosterUtils.LoadGlobalPosterSettings(globalSettingsType);            var grid = DynamicGridUtils.CreateDynamicGrid(typeof(DynamicItemsListGrid<>), globalSettingsType);            if(grid.EditItems(new object[] { globalPosterSettings }))            {                PosterUtils.SaveGlobalPosterSettings(globalSettingsType, globalPosterSettings);            }        }        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];            var posterSettings = PosterUtils.LoadPosterSettings(entityType, settingsType);            var grid = DynamicGridUtils.CreateDynamicGrid(typeof(PosterSettingsGrid<>), settingsType);            if(grid.EditItems(new object[] { posterSettings }))            {                PosterUtils.SavePosterSettings(entityType, settingsType, posterSettings);            }        }    }}
 |