private void OnGUI()
        {
            var nodes = Selection.GetFiltered <XNode.Node>(SelectionMode.Unfiltered);

            if (nodes.Length == 1)
            {
                var nodeEditor = NodeEditor.GetEditor(nodes[0], _nodeEditorWindow);

                EditorGUI.BeginChangeCheck();

                //draw editor via IInspectableNodeEditor:
                if (nodeEditor is IInspectableNodeEditor inspectable)
                {
                    inspectable.InspectableNodeGUI();
                }

                //draw default NodeEditor:
                else
                {
                    nodeEditor.OnHeaderGUI();
                    nodeEditor.OnBodyGUI();
                }

                //If user changed a value, notify other scripts through onUpdateNode
                if (EditorGUI.EndChangeCheck())
                {
                    if (NodeEditor.onUpdateNode != null)
                    {
                        NodeEditor.onUpdateNode(nodes[0]);
                    }

                    EditorUtility.SetDirty(nodes[0]);
                    nodeEditor.serializedObject.ApplyModifiedProperties();
                }
            }

            else if (nodes.Length > 0)
            {
                EditorGUILayout.LabelField("Editing multiple Nodes not supported.");
            }

            else
            {
                EditorGUILayout.LabelField("No Node selected.");
            }

            //make sure to update GraphEditorWindow even if this window is used
            _nodeEditorWindow.Repaint();
        }