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