1
0
mirror of https://github.com/Siccity/xNode.git synced 2026-03-26 22:49:02 +08:00

!WO(Node Editor Window) Multi Open Support

This commit is contained in:
Icarus 2019-11-29 18:19:55 +08:00
parent 2c45dd4d66
commit 25053eaa2c

View File

@ -7,7 +7,29 @@ using Object = UnityEngine.Object;
namespace XNodeEditor { namespace XNodeEditor {
[InitializeOnLoad] [InitializeOnLoad]
public partial class NodeEditorWindow : EditorWindow { public partial class NodeEditorWindow : EditorWindow,IHasCustomMenu {
public bool Lock { get; private set; }
[System.NonSerialized]
GUIStyle lockButtonStyle;
/// <summary>
/// Magic method which Unity detects automatically.
/// </summary>
/// <param name="position">Position of button.</param>
void ShowButton(Rect position) {
if (lockButtonStyle == null)
lockButtonStyle = "IN LockButton";
Lock = GUI.Toggle(position, Lock, GUIContent.none, lockButtonStyle);
}
public void AddItemsToMenu(GenericMenu menu)
{
menu.AddItem(new GUIContent("Lock"), Lock, () => {
Lock = !Lock;
});
}
[MenuItem("Icarus/Node Editor/Close All Editor Window")] [MenuItem("Icarus/Node Editor/Close All Editor Window")]
static void CloseAllNodeEditorWindow() static void CloseAllNodeEditorWindow()
@ -203,7 +225,30 @@ namespace XNodeEditor {
public static void Open(XNode.NodeGraph graph) { public static void Open(XNode.NodeGraph graph) {
if (!graph) return; if (!graph) return;
NodeEditorWindow w = GetWindow(typeof(NodeEditorWindow), false, "xNode", true) as NodeEditorWindow; var windows = Resources.FindObjectsOfTypeAll<NodeEditorWindow>();
NodeEditorWindow w = null;
foreach (var window in windows)
{
if (window.Lock)
{
if (window.graph == graph)
{
w = window;
}
}
else
{
w = window;
}
}
if (!w)
{
w = CreateWindow<NodeEditorWindow>("xNode");
}
w.Show(true);
w.Focus();
w.wantsMouseMove = true; w.wantsMouseMove = true;
w.graph = graph; w.graph = graph;
} }