using System; using UnityEngine; namespace Unity.VisualScripting { public abstract class EditorWindowWrapper { protected EditorWindowWrapper() { } public WrappedEditorWindow window { get; private set; } public bool isOpen => window != null; private void CreateWindow() { if (isOpen) { Close(); } window = ScriptableObject.CreateInstance(); window.wrapper = this; ConfigureWindow(); OnShow(); // HACK: Can't use WrappedEditorWindow.Awake/OnEnable, because it's called before we set the wrapper. } protected virtual void ConfigureWindow() { } public void Close() { try { window?.Close(); } catch (NullReferenceException) { // EditorWindow.Close throws an NRE when it's // closed before the first frame it was opened. } window = null; } public virtual void OnShow() { } public virtual void Update() { } public virtual void OnGUI() { } public virtual void OnClose() { } public virtual void OnFocus() { } public virtual void OnLostFocus() { } protected void Show() { CreateWindow(); window?.Show(); } protected void Show(bool immediateDisplay) { CreateWindow(); window?.Show(immediateDisplay); } protected void ShowAsDropDown(Rect buttonRect, Vector2 windowSize) { CreateWindow(); window?.ShowAsDropDown(buttonRect, windowSize); } protected void ShowAuxWindow() { CreateWindow(); window?.ShowAuxWindow(); } protected void ShowPopup() { CreateWindow(); window?.ShowPopup(); } protected void ShowUtility() { CreateWindow(); window?.ShowUtility(); } } }