| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 | 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);        /// <summary>        ///         /// </summary>        /// <param name="property">The full property name of the entity being edited.</param>        /// <returns></returns>        public abstract object? GetValue(string property);        public abstract Dictionary<string, object?> 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<Button> CreateButtons(out bool bDisableEditor)        {            var buttons = new List<Button>();            bDisableEditor = false;            if (EditorDefinition != null && EditorDefinition is IButtonEditor)            {                var ce = (IButtonEditor)EditorDefinition;                if (ce.Buttons != null)                    foreach (var ceb in ce.Buttons.Reverse())                    {                        if (ceb.DisableEditor)                            bDisableEditor = true;                        var button = new Button                        {                            HorizontalAlignment = HorizontalAlignment.Left,                            VerticalAlignment = VerticalAlignment.Stretch,                            VerticalContentAlignment = VerticalAlignment.Center,                            HorizontalContentAlignment = HorizontalAlignment.Center,                            Content = ceb.Caption,                            Width = ceb.Width,                            Margin = new Thickness(5, 0, 0, 0),                            Padding = new Thickness(5, 0, 5, 0),                            Tag = ceb,                            IsEnabled = ceb.IsEnabled                        };                        button.Click += (o, e) =>                        {                            var b = (Button)o;                            var eb = b.Tag as EditorButton;                            eb.Click(this);                        };                        ceb.OnEnabled += (enabled) =>                        {                            button.IsEnabled = enabled;                        };                        buttons.Add(button);                    }            }            return buttons;        }    }    public abstract class BaseDynamicEditorControl<TEditor> : BaseDynamicEditorControl        where TEditor : IBaseEditor    {        public new TEditor EditorDefinition        {            get => (TEditor)base.EditorDefinition;            set            {                base.EditorDefinition = value;            }        }    }}
 |