using System;
using UnityEditor;
using UnityEngine;
namespace Unity.VisualScripting
{
public abstract class SidebarPanelWindow<TPanelContent> : LudiqEditorWindow
where TPanelContent : ISidebarPanelContent
{
protected abstract GUIContent defaultTitleContent { get; }
protected Event e => Event.current;
[DoNotSerialize]
private TPanelContent _panel;
[DoNotSerialize]
public TPanelContent panel
{
get => _panel;
set
{
_panel = value;
titleContent = panel?.titleContent ?? defaultTitleContent;
}
}
private Vector2 scroll;
protected virtual void OnEnable()
{
titleContent = defaultTitleContent;
autoRepaintOnSceneChange = true;
}
protected virtual void OnDisable()
{
}
protected override void Update()
{
base.Update();
Repaint();
}
protected virtual void BeforeGUI()
{
}
protected override void OnGUI()
{
base.OnGUI();
if (EditorApplication.isCompiling)
{
LudiqGUI.CenterLoader();
return;
}
if (PluginContainer.anyVersionMismatch)
{
LudiqGUI.VersionMismatchShieldLayout();
return;
}
if (e.type == EventType.Layout)
{
return;
}
BeforeGUI();
if (panel == null)
{
return;
}
LudiqGUIUtility.BeginScrollableWindow(position, panel.GetHeight, out var innerPosition, ref scroll);
EditorGUI.BeginChangeCheck();
panel.OnGUI(innerPosition);
if (EditorGUI.EndChangeCheck())
{
Repaint();
}
LudiqGUIUtility.EndScrollableWindow();
}
}
}