using System;
using UnityEditor;
using UnityEngine;
namespace Unity.VisualScripting
{
[Inspector(typeof(ValueInputDefinition))]
public sealed class ValueInputDefinitionInspector : ValuePortDefinitionInspector
{
public ValueInputDefinitionInspector(Metadata metadata) : base(metadata) { }
private Metadata hasDefaultValueMetadata => metadata[nameof(ValueInputDefinition.hasDefaultValue)];
private Metadata defaultValueMetadata => metadata[nameof(ValueInputDefinition.defaultValue)];
private Metadata typedDefaultValueMetadata => defaultValueMetadata.Cast((Type)typeMetadata.value);
private float GetHasDefaultValueHeight(float width)
{
return LudiqGUI.GetInspectorHeight(this, hasDefaultValueMetadata, width);
}
private float GetDefaultValueHeight(float width)
{
return LudiqGUI.GetInspectorHeight(this, typedDefaultValueMetadata, width);
}
private void OnHasDefaultValueGUI(Rect position)
{
LudiqGUI.Inspector(hasDefaultValueMetadata, position);
}
private void OnDefaultValueGUI(Rect position)
{
LudiqGUI.Inspector(typedDefaultValueMetadata, position);
}
protected override float GetHeight(float width, GUIContent label)
{
var height = base.GetHeight(width, label);
if (typeMetadata.value != null && ValueInput.SupportsDefaultValue((Type)typeMetadata.value))
{
height += EditorGUIUtility.standardVerticalSpacing;
height += GetHasDefaultValueHeight(width);
if ((bool)hasDefaultValueMetadata.value)
{
height += EditorGUIUtility.standardVerticalSpacing;
height += GetDefaultValueHeight(width);
}
}
return height;
}
protected override void OnFieldsGUI(Rect position)
{
base.OnFieldsGUI(position);
if (typeMetadata.value != null && ValueInput.SupportsDefaultValue((Type)typeMetadata.value))
{
y += EditorGUIUtility.standardVerticalSpacing;
OnHasDefaultValueGUI(position.VerticalSection(ref y, GetHasDefaultValueHeight(position.width)));
if ((bool)hasDefaultValueMetadata.value)
{
y += EditorGUIUtility.standardVerticalSpacing;
OnDefaultValueGUI(position.VerticalSection(ref y, GetDefaultValueHeight(position.width)));
}
}
}
}
}