/// <summary>
        ///     Draws toolbar of inspector.
        /// </summary>
        protected virtual void DrawToolbar()
        {
            var nodeTargetName = NodeTarget.Name;
            var nodeTargetRect = NodeTarget.Rect;

            EditorGUI.BeginChangeCheck();

            EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);
            {
                nodeTargetName = EditorGUILayout.TextField(nodeTargetName);
                if (GUILayout.Button("Delete", EditorStyles.toolbarButton, GUILayout.Width(50)))
                {
                    var @continue =
                        EditorUtility.DisplayDialog("Delete?", "Do you want to delete this node?", "Yes", "No..");
                    if (!@continue)
                    {
                        return;
                    }

                    UnloadInspectorTarget(NodeTarget);
                    NodeTarget.Destroy();
                }

                if (GUILayout.Button("Duplicate", EditorStyles.toolbarButton, GUILayout.Width(60)))
                {
                    NodeTarget.Graph.DuplicateMode(NodeTarget);
                }
            }
            EditorGUILayout.EndHorizontal();

            GUI.enabled = false;
            GUI.color   = NodeTarget.BackgroundColor;
            GUILayout.Button("", GUILayout.Height(30));
            GUI.color   = Color.white;
            GUI.enabled = true;

            EditorGUILayout.BeginVertical(EditorStyles.helpBox);
            {
                var boxStyle = new GUIStyle(EditorStyles.boldLabel)
                {
                    stretchWidth  = true,
                    stretchHeight = false,
                    alignment     = TextAnchor.MiddleCenter
                };
                GUILayout.Box("Node Settings", boxStyle);
            }
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginVertical(EditorStyles.helpBox);
            {
                nodeTargetRect.position = EditorGUILayout.Vector2Field("Position", nodeTargetRect.position);
            }
            EditorGUILayout.EndHorizontal();

            if (EditorGUI.EndChangeCheck())
            {
                Undo.RegisterCompleteObjectUndo(this, "NodeGraphInspector toolbar change.");

                NodeTarget.Name = nodeTargetName;
                NodeTarget.Rect = nodeTargetRect;
                NodeTarget.Graph.Repaint();
            }
        }
        /// <summary>
        ///     Draws list of node connections.
        /// </summary>
        protected virtual void DrawNodeConnections()
        {
            GUILayout.FlexibleSpace();
            EditorGUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.Height(300));
            {
                EditorGUILayout.BeginVertical(EditorStyles.helpBox);
                {
                    var boxStyle = new GUIStyle(EditorStyles.boldLabel)
                    {
                        stretchWidth  = true,
                        stretchHeight = false,
                        alignment     = TextAnchor.MiddleCenter
                    };
                    GUILayout.Box("Node Connections", boxStyle);
                }
                EditorGUILayout.EndVertical();

                ConnectionScrollPosition = EditorGUILayout.BeginScrollView(ConnectionScrollPosition);
                {
                    if (NodeTarget.OutgoingNodes.Count != 0)
                    {
                        EditorGUILayout.BeginVertical(EditorStyles.helpBox);
                        {
                            var boxStyle = new GUIStyle(EditorStyles.miniBoldLabel)
                            {
                                stretchWidth  = true,
                                stretchHeight = false,
                                alignment     = TextAnchor.MiddleCenter
                            };
                            GUILayout.Box("Outgoing Nodes", boxStyle);
                        }
                        EditorGUILayout.EndVertical();

                        EditorGUI.indentLevel++;
                        for (var index1 = 0; index1 < NodeTarget.OutgoingNodes.Count; index1++)
                        {
                            var outgoingNode = NodeTarget.OutgoingNodes[index1];
                            EditorGUILayout.BeginHorizontal(EditorStyles.helpBox);
                            {
                                GUILayout.Label($"(Out.) this -> {outgoingNode.Name}", EditorStyles.miniLabel);
                                GUI.color = Color.red;
                                if (GUILayout.Button("X", GUILayout.Width(20)))
                                {
                                    outgoingNode.Disconnect(NodeTarget);
                                }

                                GUI.color = Color.white;
                            }
                            EditorGUILayout.EndHorizontal();
                        }

                        EditorGUI.indentLevel--;
                    }

                    if (NodeTarget.IncomingNodes.Count != 0)
                    {
                        EditorGUILayout.BeginVertical(EditorStyles.helpBox);
                        {
                            var boxStyle = new GUIStyle(EditorStyles.miniBoldLabel)
                            {
                                stretchWidth  = true,
                                stretchHeight = false,
                                alignment     = TextAnchor.MiddleCenter
                            };
                            GUILayout.Box("Incoming Nodes", boxStyle);
                        }
                        EditorGUILayout.EndVertical();

                        EditorGUI.indentLevel++;
                        for (var index1 = 0; index1 < NodeTarget.IncomingNodes.Count; index1++)
                        {
                            var incomingNode = NodeTarget.IncomingNodes[index1];
                            EditorGUILayout.BeginHorizontal(EditorStyles.helpBox);
                            {
                                GUILayout.Label($"(In.) {incomingNode.Name} -> this", EditorStyles.miniLabel);
                                GUI.color = Color.red;
                                if (GUILayout.Button("X", GUILayout.Width(20)))
                                {
                                    NodeTarget.Disconnect(incomingNode);
                                }

                                GUI.color = Color.white;
                            }
                            EditorGUILayout.EndHorizontal();
                        }

                        EditorGUI.indentLevel--;
                    }

                    if (NodeTarget.OutgoingNodes.Count == 0 && NodeTarget.IncomingNodes.Count == 0)
                    {
                        EditorGUILayout.BeginVertical(EditorStyles.helpBox);
                        {
                            var boxStyle = new GUIStyle(EditorStyles.miniBoldLabel)
                            {
                                stretchWidth  = true,
                                stretchHeight = false,
                                alignment     = TextAnchor.MiddleCenter
                            };
                            GUILayout.Box("No nodes connected", boxStyle);
                        }
                        EditorGUILayout.EndVertical();
                    }
                }
                EditorGUILayout.EndScrollView();
            }
            EditorGUILayout.EndVertical();
        }