123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- using com.sun.tools.corba.se.idl.toJavaPortable;
- using InABox.Core;
- using InABox.DynamicGrid;
- using InABox.Wpf;
- 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;
- using System.Windows.Media.Imaging;
- namespace PRS.Shared.Grids.EventEditor;
- public class PropertyInitializerEditItem : BaseObject
- {
- public PropertyInitializer PropertyInitializer { get; set; }
- }
- public class PropertyInitializerGrid : DynamicItemsListGrid<PropertyInitializerEditItem>
- {
- private string[] ColumnNames = null!;
- private Type? _entityType;
- public Type? EntityType
- {
- get => _entityType;
- set
- {
- if(value != _entityType)
- {
- Items.Clear();
- _entityType = value;
- if(value is null)
- {
- ColumnNames = [];
- }
- else
- {
- var properties = DatabaseSchema.Properties(value)
- .Where(x => x.IsSerializable)
- .Select(x => x.Name)
- .ToArray();
- Array.Sort(properties);
- ColumnNames = properties;
- }
- Reconfigure();
- Refresh(true, true);
- }
- }
- }
- public IEventDataModelDefinition DataModelDefinition { get; set; } = null!;
- private BitmapImage _delete = InABox.Wpf.Resources.delete.AsBitmapImage();
- protected override void Init()
- {
- base.Init();
- ActionColumns.Add(new DynamicTemplateColumn(row =>
- {
- var item = LoadItem(row);
- var button = new Button
- {
- Content = item.PropertyInitializer.Property.Name,
- VerticalAlignment = System.Windows.VerticalAlignment.Stretch,
- VerticalContentAlignment = System.Windows.VerticalAlignment.Center,
- HorizontalContentAlignment = System.Windows.HorizontalAlignment.Left,
- MinWidth = 100,
- Padding = new System.Windows.Thickness(5, 0, 5, 0),
- Background = new LinearGradientBrush(new GradientStopCollection()
- {
- new(Color.FromRgb(0xF0, 0xF0, 0xF0), 0.0),
- new(Color.FromRgb(0xE5, 0xE5, 0xE5), 1.0),
- })
- {
- StartPoint = new(0, 0),
- EndPoint = new(0, 1),
- },
- BorderBrush = Color.FromRgb(0xAC, 0xAC, 0xAC).ToBrush(),
- BorderThickness = new(0),
- Tag = row
- };
- button.Click += PropertyNode_Click;
- return button;
- })
- {
- HeaderText = "Property"
- });
- ActionColumns.Add(new DynamicTemplateColumn(row =>
- {
- var item = LoadItem(row);
- var panel = new DockPanel();
- var textBox = new TextBox
- {
- Background = Colors.LightYellow.ToBrush(),
- IsEnabled = false,
- BorderThickness = new(0),
- VerticalContentAlignment = VerticalAlignment.Center,
- HorizontalContentAlignment = HorizontalAlignment.Left,
- Padding = new(2, 0, 0, 0),
- Text = item.PropertyInitializer.Value
- };
- var button = new Button
- {
- Content = "Edit",
- Padding = new(5.0),
- MinWidth = 30,
- Tag = row
- };
- button.BorderBrush = Colors.Silver.ToBrush();
- button.BorderThickness = new Thickness(0.75, 0.0, 0.0, 0.0);
- button.Click += Value_Click;
- DockPanel.SetDock(button, Dock.Right);
- panel.Children.Add(button);
- DockPanel.SetDock(textBox, Dock.Left);
- panel.Children.Add(textBox);
- return panel;
- })
- {
- HeaderText = "Value"
- });
- ActionColumns.Add(new DynamicImageColumn(_delete, DeleteButton_Click));
- }
- private bool DeleteButton_Click(CoreRow? row)
- {
- if (row is null) return false;
- if (CanDeleteItems([row]))
- if (MessageWindow.ShowYesNo("Are you sure you wish to delete the selected records?", "Confirm Delete"))
- {
- DeleteItems([row]);
- SelectedRows = Array.Empty<CoreRow>();
- DoChanged();
- return true;
- }
- return false;
- }
- #region UI Component
- private class UIComponent : DynamicGridGridUIComponent<PropertyInitializerEditItem>
- {
- protected override Brush? GetCellSelectionBackgroundBrush()
- {
- return null;
- }
- }
- protected override IDynamicGridUIComponent<PropertyInitializerEditItem> CreateUIComponent()
- {
- return new UIComponent { Parent = this };
- }
- #endregion
- protected override void DoReconfigure(DynamicGridOptions options)
- {
- base.DoReconfigure(options);
- options.Clear();
- options.ReadOnly = EntityType is null;
- options.AddRows = true;
- }
- protected override void DoAdd(bool openEditorOnDirectEdit = false)
- {
- if (EntityType is null) return;
- if(DynamicGridColumnNameSelectorGrid.SelectColumnName(EntityType, ColumnNames, out var value))
- {
- var property = DatabaseSchema.PropertyStrict(EntityType, value);
- CreateItems(() =>
- {
- return [new()
- {
- PropertyInitializer = new(property, "")
- }];
- });
- }
- }
- private void Value_Click(object sender, RoutedEventArgs e)
- {
- if (sender is not FrameworkElement el || el.Tag is not CoreRow row) return;
- if (EntityType is null) return;
- var item = LoadItem(row);
- var window = new ExpressionEditorWindow(DataModelDefinition.GetVariables().Select(x => x.Name).ToArray())
- {
- Expression = item.PropertyInitializer.Value
- };
- if(window.ShowDialog() == true && item.PropertyInitializer.Value != window.Expression)
- {
- item.PropertyInitializer.Value = window.Expression;
- UpdateRow(row, item);
- DoChanged();
- }
- }
- private void PropertyNode_Click(object sender, RoutedEventArgs e)
- {
- if (sender is not FrameworkElement el || el.Tag is not CoreRow row) return;
- if (EntityType is null) return;
- var item = LoadItem(row);
- if(DynamicGridColumnNameSelectorGrid.SelectColumnName(EntityType, ColumnNames, out var value) && value != item.PropertyInitializer.Property.Name)
- {
- item.PropertyInitializer.Property = DatabaseSchema.PropertyStrict(EntityType, value);
- UpdateRow(row, item);
- DoChanged();
- }
- }
- }
|