using UnityEditor;
using UnityEngine;
namespace Unity.VisualScripting
{
public sealed class GraphInspectorPanel : ISidebarPanelContent
{
public IGraphContext context { get; }
public object sidebarControlHint => typeof(GraphInspectorPanel);
public GUIContent titleContent { get; }
public Vector2 minSize => new Vector2(275, 200);
public GraphInspectorPanel(IGraphContext context)
{
this.context = context;
titleContent = new GUIContent("Graph Inspector", BoltCore.Icons.inspectorWindow?[IconSize.Small]);
}
public void OnGUI(Rect position)
{
var y = position.y;
EditorGUIUtility.hierarchyMode = true; // For the label width to be correct, like in the inspector
if (context != null)
{
context.BeginEdit();
var selectionSize = context.selection.Count;
if (selectionSize == 0)
{
var graphPanelPosition = position.VerticalSection(ref y, GetGraphPanelHeight(position.width));
LudiqGUI.Editor(context.graphMetadata, graphPanelPosition);
}
else if (selectionSize == 1)
{
var selectionPanelPosition = position.VerticalSection(ref y, GetSelectionPanelHeight(position.width));
LudiqGUI.Editor(context.selectionMetadata, selectionPanelPosition);
}
else if (selectionSize > 1)
{
var noMultiEditPosition = new Rect
(
position.x,
y,
position.width,
GetNoMultiEditHeight(position.width)
);
EditorGUI.HelpBox(noMultiEditPosition, NoMultiEditMessage, MessageType.Info);
}
context.EndEdit();
}
else
{
var noGraphSelectedPosition = new Rect
(
position.x,
y,
position.width,
GetNoGraphSelectedHeight(position.width)
);
EditorGUI.HelpBox(noGraphSelectedPosition, NoGraphSelectedMessage, MessageType.Info);
}
}
public float GetHeight(float width)
{
EditorGUIUtility.hierarchyMode = true; // For the label width to be correct, like in the inspector
var height = 0f;
if (context != null)
{
context.BeginEdit();
var selectionSize = context.selection.Count;
if (selectionSize == 0)
{
height += GetGraphPanelHeight(width);
}
else if (selectionSize == 1)
{
height += GetSelectionPanelHeight(width);
}
else if (selectionSize > 1)
{
height += GetNoMultiEditHeight(width);
}
context.EndEdit();
}
else
{
height += GetNoGraphSelectedHeight(width);
}
return height;
}
private float GetGraphPanelHeight(float width)
{
return LudiqGUI.GetEditorHeight(null, context.graphMetadata, width);
}
private float GetSelectionPanelHeight(float width)
{
return LudiqGUI.GetEditorHeight(null, context.selectionMetadata, width);
}
private float GetNoMultiEditHeight(float width)
{
return LudiqGUIUtility.GetHelpBoxHeight(NoMultiEditMessage, MessageType.Info, width);
}
private float GetNoGraphSelectedHeight(float width)
{
return LudiqGUIUtility.GetHelpBoxHeight(NoGraphSelectedMessage, MessageType.Info, width);
}
private const string NoGraphSelectedMessage = "No graph selected.";
private const string NoMultiEditMessage = "Multi-element editing is not supported.";
}
}