using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using InABox.Core; using RoslynPad.Editor; namespace InABox.DynamicGrid { public abstract class BaseDynamicEditorControl : ContentControl, IDynamicEditorControl { public static readonly DependencyProperty ColumnNameProperty = DependencyProperty.Register(nameof(ColumnName), typeof(string), typeof(BaseDynamicEditorControl)); public static readonly DependencyProperty ColorProperty = DependencyProperty.Register("Color", typeof(Color), typeof(BaseDynamicEditorControl)); public new static readonly DependencyProperty IsEnabledProperty = DependencyProperty.Register(nameof(IsEnabled), typeof(bool), typeof(BaseDynamicEditorControl)); private IBaseEditor _editordefinition; public BaseDynamicEditorControl() { Color = Colors.LightYellow; } public Color Color { get => (Color)GetValue(ColorProperty); set { SetValue(ColorProperty, value); if (EditorDefinition != null) SetColor(Color); } } public string ColumnName { get => (string)GetValue(ColumnNameProperty); set => SetValue(ColumnNameProperty, value); } protected TextBox? Information { get; private set; } [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public IBaseEditor EditorDefinition { get => _editordefinition; set { _editordefinition = value; if (_editordefinition.Information != null) { DockPanel _dock = new DockPanel(); var _editor = CreateEditor(); _editor.SetValue(DockPanel.DockProperty, Dock.Left); _dock.Children.Add(_editor); Information = new TextBox() { VerticalAlignment = VerticalAlignment.Stretch, VerticalContentAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Stretch, Margin = new Thickness(5, 0, 0, 0), IsReadOnly = true, Focusable = false, Background = new SolidColorBrush(Colors.WhiteSmoke), BorderBrush = new SolidColorBrush(Colors.Silver) }; Information.SetValue(DockPanel.DockProperty, Dock.Left); _dock.Children.Add(Information); Content = _dock; } else Content = CreateEditor(); SetColor(Color); } } protected void UpdateInformation() { if (EditorDefinition?.Information != null && Information != null) { var _info = Activator.CreateInstance(EditorDefinition.Information) as IEditorInformation; Information.Text = _info?.Display(Host.GetItems()) ?? ""; } } [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public bool Loaded { get; set; } public abstract bool Changed { get; set; } public virtual event EditorControlValueChangedHandler OnEditorValueChanged; public abstract int DesiredHeight(); public abstract void SetFocus(); public abstract void Configure(); public abstract void SetEnabled(bool enabled); public abstract void SetVisible(bool visible); public virtual void SetValue(string property, object? value) { UpdateInformation(); } /// /// /// /// The full property name of the entity being edited. /// public abstract object? GetValue(string property); public abstract Dictionary GetValues(); public new bool IsEnabled { get => (bool)GetValue(IsEnabledProperty); set { SetValue(IsEnabledProperty, value); SetEnabled(value); } } protected abstract FrameworkElement CreateEditor(); public abstract int DesiredWidth(); public abstract void SetColor(Color color); public IDynamicEditorHost Host { get; set; } protected List