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); } } }