using InABox.Core; using InABox.DynamicGrid; using InABox.WPF; using PRS.Shared.Events; using PRS.Shared.Grids.EventEditor; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Controls; using System.Windows.Media; namespace PRS.Shared; public class EventTriggerContainer : BaseObject where TEvent : IEvent where TDataModel : IEventDataModel { public IEventTrigger Trigger { get; set; } public string TriggerType => Trigger.GetType().GetCaption(); public string Description => Trigger.GetDescription(); } public class EventTriggerGrid : DynamicItemsListGrid> where TEvent : IEvent where TDataModel : IEventDataModel { public IEnumerable> EventTriggers => Items.Select(x => x.Trigger); public EventTriggerGrid(IEnumerable> items) { Items.AddRange(items.Select(x => new EventTriggerContainer { Trigger = x })); } protected override void DoReconfigure(DynamicGridOptions options) { base.DoReconfigure(options); options.AddRows = true; options.EditRows = true; options.DeleteRows = true; } public override DynamicGridColumns GenerateColumns() { var cols = new DynamicGridColumns>(); cols.Add(x => x.Description); return cols; } protected override void DoAdd(bool openEditorOnDirectEdit = false) { var types = EventUtils.GetEventTriggerTypes(typeof(TEvent)); var menu = new ContextMenu(); foreach(var type in types) { menu.AddItem(type.GetCaption(), null, type, MenuAdd_Click); } menu.IsOpen = true; } private void MenuAdd_Click(Type type) { if (type.IsGenericType) { type = type.MakeGenericType(typeof(TEvent).GenericTypeArguments); } var trigger = (Activator.CreateInstance(type) as IEventTrigger)!; EditTrigger(trigger); Items.Add(new() { Trigger = trigger }); Refresh(false, true); } private void EditTrigger(IEventTrigger trigger) { EventTriggerEditors.EditTrigger(trigger); } }