using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using InABox.Core; 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); } [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public IBaseEditor EditorDefinition { get => _editordefinition; set { _editordefinition = value; Content = CreateEditor(); SetColor(Color); } } [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 abstract void SetValue(string property, object? value); /// /// /// /// 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