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);
- }
|