| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 | 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<TEvent, TDataModel> : BaseObject    where TEvent : IEvent<TDataModel>    where TDataModel : IEventDataModel{    public IEventTrigger<TEvent, TDataModel> Trigger { get; set; }    public string TriggerType => Trigger.GetType().GetCaption();    public string Description => Trigger.GetDescription();}public class EventTriggerGrid<TEvent, TDataModel> : DynamicItemsListGrid<EventTriggerContainer<TEvent, TDataModel>>    where TEvent : IEvent<TDataModel>    where TDataModel : IEventDataModel{    public IEnumerable<IEventTrigger<TEvent, TDataModel>> EventTriggers => Items.Select(x => x.Trigger);    public EventTriggerGrid(IEnumerable<IEventTrigger<TEvent, TDataModel>> items)    {        Items.AddRange(items.Select(x => new EventTriggerContainer<TEvent, TDataModel> { 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<EventTriggerContainer<TEvent, TDataModel>>();        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;    }    protected override void DoEdit()    {        var item = LoadItem(SelectedRows.First());        EditTrigger(item.Trigger);    }    private void MenuAdd_Click(Type type)    {        if (type.IsGenericType)        {            type = type.MakeGenericType(typeof(TEvent).GenericTypeArguments);        }        var trigger = (Activator.CreateInstance(type) as IEventTrigger<TEvent, TDataModel>)!;        EditTrigger(trigger);        Items.Add(new() { Trigger = trigger });        Refresh(false, true);    }    private void EditTrigger(IEventTrigger<TEvent, TDataModel> trigger)    {        EventTriggerEditors.EditTrigger(trigger);    }}
 |