using System.Collections.Generic; using System.ComponentModel; using System.Windows; using System.Windows.Media; using InABox.Core; namespace InABox.DynamicGrid { public abstract class DynamicEnclosedEditorControl : BaseDynamicEditorControl where T : IEnclosedEntity where TEditor : BaseEditor { protected bool Updating; [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool Changed { get; set; } public override event EditorControlValueChangedHandler? OnEditorValueChanged; [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] protected virtual Dictionary OtherValues { get; } public DynamicEnclosedEditorControl() { Loaded = false; OtherValues = new(); MinHeight = 25; Focusable = false; } protected virtual bool CheckChanged() { //Logger.Send(LogType.Information, "", string.Format("{0}({1}).CheckChanged()", GetType().EntityName().Split('.').Last(), ColumnName)); if (Loaded && !Updating) { Updating = true; try { var values = new Dictionary(); var sColumn = string.IsNullOrEmpty(ColumnName) ? "" : ColumnName; foreach(var (k, v) in GetValues()) { values[k] = v; } foreach (var key in OtherValues.Keys) values[key] = OtherValues[key]; OnEditorValueChanged?.Invoke(this, values); } finally { Changed = true; Updating = false; } } return Changed; } public override void SetEnabled(bool enabled) { if(Content is FrameworkElement element) element.IsEnabled = enabled; SetColor(enabled ? Color : Colors.WhiteSmoke); } public override void SetVisible(bool visible) { Visibility = visible ? Visibility.Visible : Visibility.Collapsed; } } }