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 : Grid, IEventEditorControl where TEvent : IEvent where TDataModel : IEventDataModel { private EventData _data; public EventData Data { get { _data.Triggers = TriggerGrid.EventTriggers.ToList(); _data.Actions = ActionGrid.EventActions.ToList(); return _data; } set { _data = value; } } IEventData IEventEditorControl.Data => Data; private EventTriggerGrid TriggerGrid; private EventActionGrid ActionGrid; public event Action? OnChanged; public EventEditorControl(EventData 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(evData.Triggers) { Margin = new(0, 5, 0, 0) }; ActionGrid = new EventActionGrid(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(); } }