namespace RosettaUI
{
///
/// 値を持ち外部と同期するElement
///
public abstract class FieldBaseElement : ReadOnlyFieldElement
{
public FieldOption Option { get; }
private readonly IBinder _binder;
protected FieldBaseElement(LabelElement label, IBinder binder, in FieldOption option = default) : base(label, binder)
{
_binder = binder;
Option = option;
Interactable = !binder.IsReadOnly;
}
protected override ElementViewBridge CreateViewBridge() => new FieldViewBridgeBase(this);
public class FieldViewBridgeBase : ReadOnlyValueViewBridgeBase
{
private FieldBaseElement Element => (FieldBaseElement)element;
public FieldViewBridgeBase(FieldBaseElement element) : base(element)
{
}
public void SetValueFromView(T t)
{
Element._binder?.Set(t);
Element.NotifyViewValueChanged();
}
}
}
public static partial class ElementViewBridgeExtensions
{
public static FieldBaseElement.FieldViewBridgeBase GetViewBridge(this FieldBaseElement element) => (FieldBaseElement.FieldViewBridgeBase)element.ViewBridge;
}
}