| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 | using InABox.WPF;using PRS.Shared.Events;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windows.Controls;using System.Windows.Media;namespace PRS.Shared;public interface IEventEditorControl{    event Action? OnChanged;    IEventData Data { get; }}public class EventEditorControl<TEvent, TDataModel> : Grid, IEventEditorControl    where TEvent : IEvent<TDataModel>    where TDataModel : IEventDataModel{    private EventData<TEvent, TDataModel> _data;    public EventData<TEvent, TDataModel> Data    {        get        {            _data.Triggers = TriggerGrid.EventTriggers.ToList();            _data.Actions = ActionGrid.EventActions.ToList();            return _data;        }        set        {            _data = value;        }    }    IEventData IEventEditorControl.Data => Data;    private EventTriggerGrid<TEvent, TDataModel> TriggerGrid;    private EventActionGrid<TEvent, TDataModel> ActionGrid;    public event Action? OnChanged;    public EventEditorControl(EventData<TEvent, TDataModel> evData)    {        Data = evData;        var triggerLabelBorder = new Border        {            BorderBrush = Colors.Gray.ToBrush(),            BorderThickness = new(0.75),            Background = Colors.WhiteSmoke.ToBrush(),            Child = new Label            {                Content = "Triggers",                VerticalAlignment = System.Windows.VerticalAlignment.Center,                HorizontalAlignment = System.Windows.HorizontalAlignment.Center            }        };        var actionsLabelBorder = new Border        {            BorderBrush = Colors.Gray.ToBrush(),            BorderThickness = new(0.75),            Background = Colors.WhiteSmoke.ToBrush(),            Child = new Label            {                Content = "Actions",                VerticalAlignment = System.Windows.VerticalAlignment.Center,                HorizontalAlignment = System.Windows.HorizontalAlignment.Center            }        };        var separator = new StackPanel        {            Orientation = Orientation.Horizontal,        };        separator.Children.Add(new Separator        {            Style = (Style)Application.Current.TryFindResource(ToolBar.SeparatorStyleKey),            Margin = new(3, 0, 3, 0)        });        TriggerGrid = new EventTriggerGrid<TEvent, TDataModel>(evData.Triggers)        {            Margin = new(0, 5, 0, 0)        };        ActionGrid = new EventActionGrid<TEvent, TDataModel>(evData.Actions, evData.Event.DataModelDefinition())        {            Margin = new(0, 5, 0, 0)        };        this.AddRow(GridUnitType.Auto);        this.AddRow(GridUnitType.Star);        var hasTriggers = evData.Event is not ScheduledEvent;        if(!hasTriggers)        {            this.AddColumn(0);            this.AddColumn(0);        }        else        {            this.AddColumn(GridUnitType.Star);            this.AddColumn(GridUnitType.Auto);        }        this.AddColumn(GridUnitType.Star);        if (hasTriggers)        {            this.AddChild(triggerLabelBorder, 0, 0);            this.AddChild(separator, 0, 1, rowSpan: 2);            this.AddChild(TriggerGrid, 1, 0);        }        this.AddChild(actionsLabelBorder, 0, 2);        this.AddChild(ActionGrid, 1, 2);        if (hasTriggers)        {            TriggerGrid.Refresh(true, true);            TriggerGrid.OnChanged += Grid_OnChanged;        }        ActionGrid.Refresh(true, true);        ActionGrid.OnChanged += Grid_OnChanged;    }    private void Grid_OnChanged(object? sender, EventArgs e)    {        OnChanged?.Invoke();    }}
 |