Code/UI/Components/Edit.razor
@using Sandbox.UI
@inherits Panel
@implements IEdit
@implements IGraphStyle
@namespace Nodebox.UI
<root>
@if (NumericEdit.IsSupported(Type)) {
<NumericEdit Type=@Type Value=@Value/>
} else if (VectorEdit.IsSupported(Type)) {
<VectorEdit Type=@Type Value=@Value/>
} else if (Type == typeof(bool)) {
<BoolEdit Value=@Value/>
} else if (Type == typeof(string)) {
<StringEdit Value=@Value/>
}
</root>
@code
{
public Panel SubEditRef => Children.FirstOrDefault();
public IEdit SubEdit => (IEdit)SubEditRef;
[Change(nameof(OnValueChanged))]
public object Value { get; set; }
public object ValueImmediate => SubEdit?.ValueImmediate;
public void OnValueChanged(object oldValue, object newValue) {
if (newValue == null) { return; }
if (newValue.GetType() != Type) { return; }
@* Assert.AreEqual(newValue.GetType(), Type); *@
SubEdit?.Value = newValue;
}
public Type Type { get; set; }
public static bool IsSupported(Type type) => type switch {
var x when x == typeof(float) => true,
_ => false,
};
protected override void OnAfterTreeRender(bool firstTime) {
Tooltip = this.ConstructTooltip();
if (!firstTime) { return; }
OnValueChanged(null, Value);
if (!SubEditRef.IsValid()) {
@* Log.Warning(""); *@
return;
}
SubEditRef.AddEventListener("onchange", (ev) => {
ev.StopPropagation();
CreateEvent("onchange", ValueImmediate);
});
SubEditRef.AddEventListener("onsubmit", (ev) => {
ev.StopPropagation();
Value = ValueImmediate;
CreateEvent("onsubmit", Value);
});
@* SubEditRef.AddEventListener("oncancel", (ev) => {
ev.StopPropagation();
OnValueChanged(null, Value);
CreateEvent("oncancel", Value);
}); *@
}
protected override int BuildHash() => System.HashCode.Combine( Type );
}