public LibraryTabElement(Action <string> onObjectFieldDoubleClick, CustomMenuController customMenuController, GraphTypeMetadata graphTypeMetadata)
        {
            OnObjectFieldDoubleClick = onObjectFieldDoubleClick;

            var uxmlAsset = Resources.Load <VisualTreeAsset>(ResourceAssetPaths.LibraryTabElement_UXML);

            uxmlAsset.CloneTree(this);

            m_currentGraphDisplay               = this.Q <ObjectDisplayField>(OPENED_GRAPH_FIELD);
            m_createGraphInstanceButton         = this.Q <Button>(CREATE_GRAPH_INSTANCE_BUTTON);
            m_generateGraphClassButton          = this.Q <Button>(GENERATE_GRAPH_CLASS_BUTTON);
            m_generateNodeClassButton           = this.Q <Button>(GENERATE_NODE_CLASS_BUTTON);
            m_generateNodeViewDrawerClassButton = this.Q <Button>(GENERATE_NODEVIEWDRAWER_CLASS_BUTTON);

            m_graphTypeMetadata    = graphTypeMetadata;
            m_recentsController    = new RecentsController(this);
            m_favoritesController  = new FavoritesController(this);
            m_allGraphsController  = new AllGraphsController(this);
            m_customMenuController = customMenuController;

            m_customMenuController.AddCustomMenu("CreateGraphInstance", new CreateGraphInstanceCustomMenu(m_graphTypeMetadata));
            m_customMenuController.AddCustomMenu("GenerateGraphClass", new GenerateGraphClassCustomMenu());
            m_customMenuController.AddCustomMenu("GenerateNodeClass", new GenerateNodeClassCustomMenu(m_graphTypeMetadata));
            m_customMenuController.AddCustomMenu("GenerateNodeViewDrawerClass", new GenerateNodeViewDrawerClassCustomMenu(m_graphTypeMetadata));


            m_createGraphInstanceButton.clicked         += () => { m_customMenuController.ShowCustomMenu("CreateGraphInstance"); };
            m_generateGraphClassButton.clicked          += () => { m_customMenuController.ShowCustomMenu("GenerateGraphClass"); };
            m_generateNodeClassButton.clicked           += () => { m_customMenuController.ShowCustomMenu("GenerateNodeClass"); };
            m_generateNodeViewDrawerClassButton.clicked += () => { m_customMenuController.ShowCustomMenu("GenerateNodeViewDrawerClass"); };
        }
        public GraphInspector(NodeGraphView nodeGraphView)
        {
            var uxmlAsset = Resources.Load <VisualTreeAsset>(ResourceAssetPaths.GraphInspector_UXML);

            uxmlAsset.CloneTree(this);

            m_graphNameLabel   = this.Q <Label>(GRAPH_NAME_LABEL);
            m_graphObjectField = this.Q <ObjectDisplayField>(GRAPH_OBJECT_FIELD);

            m_graphPropertiesArea          = this.Q <VisualElement>(GRAPH_PROPERTIES_AREA);
            m_propertyField                = new PropertyField();
            m_imguiContainer               = new IMGUIContainer();
            m_imguiContainer.onGUIHandler += OnIMGUIDraw;

            m_blackboardArea = this.Q <VisualElement>(BLACKBOARD_AREA);
            m_blackboardView = new BlackboardView(nodeGraphView);
            m_blackboardArea.Add(m_blackboardView);
        }