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