using UnityEditor;
using UnityEngine;
namespace Unity.VisualScripting
{
[Inspector(typeof(IUnitPortDefinition))]
public class UnitPortDefinitionInspector : Inspector
{
public UnitPortDefinitionInspector(Metadata metadata) : base(metadata) { }
public override void Initialize()
{
metadata.instantiate = true;
base.Initialize();
}
private Metadata keyMetadata => metadata[nameof(IUnitPortDefinition.key)];
private Metadata labelMetadata => metadata[nameof(IUnitPortDefinition.label)];
private Metadata descriptionMetadata => metadata[nameof(IUnitPortDefinition.summary)];
private Metadata hideLabelMetadata => metadata[nameof(IUnitPortDefinition.hideLabel)];
protected float GetKeyHeight(float width)
{
return LudiqGUI.GetInspectorHeight(this, keyMetadata, width);
}
protected float GetLabelHeight(float width)
{
return LudiqGUI.GetInspectorHeight(this, labelMetadata, width);
}
protected float GetDescriptionHeight(float width)
{
return LudiqGUI.GetInspectorHeight(this, descriptionMetadata, width);
}
protected float GetHideLabelHeight(float width)
{
return LudiqGUI.GetInspectorHeight(this, hideLabelMetadata, width);
}
protected void OnKeyGUI(Rect position)
{
LudiqGUI.Inspector(keyMetadata, position);
}
protected void OnLabelGUI(Rect position)
{
LudiqGUI.Inspector(labelMetadata, position);
}
protected void OnDescriptionGUI(Rect position)
{
LudiqGUI.Inspector(descriptionMetadata, position);
}
protected void OnHideLabelGUI(Rect position)
{
LudiqGUI.Inspector(hideLabelMetadata, position);
}
protected override float GetHeight(float width, GUIContent label)
{
var height = 0f;
height += GetKeyHeight(width);
height += EditorGUIUtility.standardVerticalSpacing;
height += GetLabelHeight(width);
height += EditorGUIUtility.standardVerticalSpacing;
height += GetDescriptionHeight(width);
height += EditorGUIUtility.standardVerticalSpacing;
height += GetHideLabelHeight(width);
return height;
}
protected virtual void OnFieldsGUI(Rect position)
{
OnKeyGUI(position.VerticalSection(ref y, GetKeyHeight(position.width)));
y += EditorGUIUtility.standardVerticalSpacing;
OnLabelGUI(position.VerticalSection(ref y, GetLabelHeight(position.width)));
y += EditorGUIUtility.standardVerticalSpacing;
OnDescriptionGUI(position.VerticalSection(ref y, GetDescriptionHeight(position.width)));
y += EditorGUIUtility.standardVerticalSpacing;
OnHideLabelGUI(position.VerticalSection(ref y, GetHideLabelHeight(position.width)));
}
protected sealed override void OnGUI(Rect position, GUIContent label)
{
BeginLabeledBlock(metadata, position, label);
OnFieldsGUI(position);
EndBlock(metadata);
}
}
}