public GraphEditorView(EditorWindow editorWindow, AbstractMaterialGraph graph, string assetName) { m_Graph = graph; AddStyleSheetPath("Styles/MaterialGraph"); previewManager = new PreviewManager(graph); var content = new VisualElement { name = "content" }; { m_GraphView = new MaterialGraphView(graph) { name = "GraphView", persistenceKey = "MaterialGraphView" }; m_GraphView.SetupZoom(ContentZoomer.DefaultMinScale, ContentZoomer.DefaultMaxScale); m_GraphView.AddManipulator(new ContentDragger()); m_GraphView.AddManipulator(new SelectionDragger()); m_GraphView.AddManipulator(new RectangleSelector()); m_GraphView.AddManipulator(new ClickSelector()); m_GraphView.AddManipulator(new GraphDropTarget(graph)); content.Add(m_GraphView); m_GraphInspectorView = new GraphInspectorView(assetName, previewManager, graph) { name = "inspector" }; m_GraphInspectorView.AddManipulator(new Draggable(OnMouseDrag, true)); m_GraphView.RegisterCallback <PostLayoutEvent>(OnPostLayout); m_GraphInspectorView.RegisterCallback <PostLayoutEvent>(OnPostLayout); m_GraphView.Add(m_GraphInspectorView); m_GraphView.graphViewChanged = GraphViewChanged; } m_SearchWindowProvider = ScriptableObject.CreateInstance <SearchWindowProvider>(); m_SearchWindowProvider.Initialize(editorWindow, m_Graph, m_GraphView); m_GraphView.nodeCreationRequest = (c) => { m_SearchWindowProvider.connectedPort = null; SearchWindow.Open(new SearchWindowContext(c.screenMousePosition), m_SearchWindowProvider); }; m_EdgeConnectorListener = new EdgeConnectorListener(m_Graph, m_SearchWindowProvider); foreach (var node in graph.GetNodes <INode>()) { AddNode(node); } foreach (var edge in graph.edges) { AddEdge(edge); } Add(content); }
public void Dispose() { if (m_GraphView != null) { saveRequested = null; convertToSubgraphRequested = null; showInProjectRequested = null; foreach (var node in m_GraphView.Children().OfType <MaterialNodeView>()) { node.Dispose(); } m_GraphView = null; } if (previewManager != null) { previewManager.Dispose(); previewManager = null; } if (m_SearchWindowProvider != null) { Object.DestroyImmediate(m_SearchWindowProvider); m_SearchWindowProvider = null; } }
public void Initialize(AbstractMaterialNode inNode, PreviewManager previewManager, IEdgeConnectorListener connectorListener, GraphView graphView) { styleSheets.Add(Resources.Load <StyleSheet>("Styles/MaterialNodeView")); styleSheets.Add(Resources.Load <StyleSheet>($"Styles/ColorMode")); AddToClassList("MaterialNode"); if (inNode == null) { return; } var contents = this.Q("contents"); m_GraphView = graphView; m_ConnectorListener = connectorListener; node = inNode; viewDataKey = node.guid.ToString(); UpdateTitle(); // Add controls container var controlsContainer = new VisualElement { name = "controls" }; { m_ControlsDivider = new VisualElement { name = "divider" }; m_ControlsDivider.AddToClassList("horizontal"); controlsContainer.Add(m_ControlsDivider); m_ControlItems = new VisualElement { name = "items" }; controlsContainer.Add(m_ControlItems); // Instantiate control views from node foreach (var propertyInfo in node.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) { foreach (IControlAttribute attribute in propertyInfo.GetCustomAttributes(typeof(IControlAttribute), false)) { m_ControlItems.Add(attribute.InstantiateControl(node, propertyInfo)); } } } if (m_ControlItems.childCount > 0) { contents.Add(controlsContainer); } if (node.hasPreview) { // Add actual preview which floats on top of the node m_PreviewContainer = new VisualElement { name = "previewContainer", cacheAsBitmap = true, style = { overflow = Overflow.Hidden }, pickingMode = PickingMode.Ignore }; m_PreviewImage = new Image { name = "preview", pickingMode = PickingMode.Ignore, image = Texture2D.whiteTexture, }; { // Add preview collapse button on top of preview var collapsePreviewButton = new VisualElement { name = "collapse" }; collapsePreviewButton.Add(new VisualElement { name = "icon" }); collapsePreviewButton.AddManipulator(new Clickable(() => { node.owner.owner.RegisterCompleteObjectUndo("Collapse Preview"); UpdatePreviewExpandedState(false); })); m_PreviewImage.Add(collapsePreviewButton); } m_PreviewContainer.Add(m_PreviewImage); // Hook up preview image to preview manager m_PreviewRenderData = previewManager.GetPreview(inNode); m_PreviewRenderData.onPreviewChanged += UpdatePreviewTexture; UpdatePreviewTexture(); // Add fake preview which pads out the node to provide space for the floating preview m_PreviewFiller = new VisualElement { name = "previewFiller" }; m_PreviewFiller.AddToClassList("expanded"); { var previewDivider = new VisualElement { name = "divider" }; previewDivider.AddToClassList("horizontal"); m_PreviewFiller.Add(previewDivider); var expandPreviewButton = new VisualElement { name = "expand" }; expandPreviewButton.Add(new VisualElement { name = "icon" }); expandPreviewButton.AddManipulator(new Clickable(() => { node.owner.owner.RegisterCompleteObjectUndo("Expand Preview"); UpdatePreviewExpandedState(true); })); m_PreviewFiller.Add(expandPreviewButton); } contents.Add(m_PreviewFiller); UpdatePreviewExpandedState(node.previewExpanded); } // Add port input container, which acts as a pixel cache for all port inputs m_PortInputContainer = new VisualElement { name = "portInputContainer", cacheAsBitmap = true, style = { overflow = Overflow.Hidden }, pickingMode = PickingMode.Ignore }; Add(m_PortInputContainer); AddSlots(node.GetSlots <MaterialSlot>()); UpdatePortInputs(); base.expanded = node.drawState.expanded; RefreshExpandedState(); //This should not be needed. GraphView needs to improve the extension api here UpdatePortInputVisibilities(); SetPosition(new Rect(node.drawState.position.x, node.drawState.position.y, 0, 0)); if (node is SubGraphNode) { RegisterCallback <MouseDownEvent>(OnSubGraphDoubleClick); } m_PortInputContainer.SendToBack(); m_TitleContainer = this.Q("title"); var masterNode = node as IMasterNode; if (masterNode != null) { AddToClassList("master"); if (!masterNode.IsPipelineCompatible(GraphicsSettings.renderPipelineAsset)) { AttachMessage("The current render pipeline is not compatible with this master node.", ShaderCompilerMessageSeverity.Error); } } m_NodeSettingsView = new NodeSettingsView(); m_NodeSettingsView.visible = false; Add(m_NodeSettingsView); m_SettingsButton = new VisualElement { name = "settings-button" }; m_SettingsButton.Add(new VisualElement { name = "icon" }); m_Settings = new VisualElement(); AddDefaultSettings(); // Add Node type specific settings var nodeTypeSettings = node as IHasSettings; if (nodeTypeSettings != null) { m_Settings.Add(nodeTypeSettings.CreateSettingsElement()); } // Add manipulators m_SettingsButton.AddManipulator(new Clickable(() => { UpdateSettingsExpandedState(); })); if (m_Settings.childCount > 0) { m_ButtonContainer = new VisualElement { name = "button-container" }; m_ButtonContainer.style.flexDirection = FlexDirection.Row; m_ButtonContainer.Add(m_SettingsButton); m_ButtonContainer.Add(m_CollapseButton); m_TitleContainer.Add(m_ButtonContainer); } }
public GraphEditorView(EditorWindow editorWindow, AbstractMaterialGraph graph) { m_Graph = graph; AddStyleSheetPath("Styles/GraphEditorView"); previewManager = new PreviewManager(graph); string serializedWindowLayout = EditorUserSettings.GetConfigValue(k_FloatingWindowsLayoutKey); if (!string.IsNullOrEmpty(serializedWindowLayout)) { m_FloatingWindowsLayout = JsonUtility.FromJson <FloatingWindowsLayout>(serializedWindowLayout); if (m_FloatingWindowsLayout.masterPreviewSize.x > 0f && m_FloatingWindowsLayout.masterPreviewSize.y > 0f) { previewManager.ResizeMasterPreview(m_FloatingWindowsLayout.masterPreviewSize); } } previewManager.RenderPreviews(); var toolbar = new IMGUIContainer(() => { GUILayout.BeginHorizontal(EditorStyles.toolbar); if (GUILayout.Button("Save Asset", EditorStyles.toolbarButton)) { if (saveRequested != null) { saveRequested(); } } GUILayout.Space(6); if (GUILayout.Button("Show In Project", EditorStyles.toolbarButton)) { if (showInProjectRequested != null) { showInProjectRequested(); } } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); }); Add(toolbar); var content = new VisualElement { name = "content" }; { m_GraphView = new MaterialGraphView(graph) { name = "GraphView", persistenceKey = "MaterialGraphView" }; m_GraphView.SetupZoom(0.05f, ContentZoomer.DefaultMaxScale); m_GraphView.AddManipulator(new ContentDragger()); m_GraphView.AddManipulator(new SelectionDragger()); m_GraphView.AddManipulator(new RectangleSelector()); m_GraphView.AddManipulator(new ClickSelector()); m_GraphView.RegisterCallback <KeyDownEvent>(OnSpaceDown); content.Add(m_GraphView); m_BlackboardProvider = new BlackboardProvider(graph); m_GraphView.Add(m_BlackboardProvider.blackboard); Rect blackboardLayout = m_BlackboardProvider.blackboard.layout; blackboardLayout.x = 10f; blackboardLayout.y = 10f; m_BlackboardProvider.blackboard.layout = blackboardLayout; m_MasterPreviewView = new MasterPreviewView(previewManager, graph) { name = "masterPreview" }; WindowDraggable masterPreviewViewDraggable = new WindowDraggable(null, this); m_MasterPreviewView.AddManipulator(masterPreviewViewDraggable); m_GraphView.Add(m_MasterPreviewView); //m_BlackboardProvider.onDragFinished += UpdateSerializedWindowLayout; //m_BlackboardProvider.onResizeFinished += UpdateSerializedWindowLayout; masterPreviewViewDraggable.OnDragFinished += UpdateSerializedWindowLayout; m_MasterPreviewView.previewResizeBorderFrame.OnResizeFinished += UpdateSerializedWindowLayout; m_GraphView.graphViewChanged = GraphViewChanged; RegisterCallback <GeometryChangedEvent>(ApplySerializewindowLayouts); } m_SearchWindowProvider = ScriptableObject.CreateInstance <SearchWindowProvider>(); m_SearchWindowProvider.Initialize(editorWindow, m_Graph, m_GraphView); m_GraphView.nodeCreationRequest = (c) => { m_SearchWindowProvider.connectedPort = null; SearchWindow.Open(new SearchWindowContext(c.screenMousePosition), m_SearchWindowProvider); }; m_EdgeConnectorListener = new EdgeConnectorListener(m_Graph, m_SearchWindowProvider); foreach (var node in graph.GetNodes <INode>()) { AddNode(node); } foreach (var edge in graph.edges) { AddEdge(edge); } Add(content); }
public void Initialize(AbstractMaterialNode inNode, PreviewManager previewManager, IEdgeConnectorListener connectorListener) { AddStyleSheetPath("Styles/MaterialNodeView"); AddToClassList("MaterialNode"); if (inNode == null) { return; } var contents = this.Q("contents"); m_ConnectorListener = connectorListener; node = inNode; persistenceKey = node.guid.ToString(); UpdateTitle(); // Add controls container var controlsContainer = new VisualElement { name = "controls" }; { m_ControlsDivider = new VisualElement { name = "divider" }; m_ControlsDivider.AddToClassList("horizontal"); controlsContainer.Add(m_ControlsDivider); m_ControlItems = new VisualElement { name = "items" }; controlsContainer.Add(m_ControlItems); // Instantiate control views from node foreach (var propertyInfo in node.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) { foreach (IControlAttribute attribute in propertyInfo.GetCustomAttributes(typeof(IControlAttribute), false)) { m_ControlItems.Add(attribute.InstantiateControl(node, propertyInfo)); } } } if (m_ControlItems.childCount > 0) { contents.Add(controlsContainer); } if (node.hasPreview) { // Add actual preview which floats on top of the node m_PreviewContainer = new VisualElement { name = "previewContainer", clippingOptions = ClippingOptions.ClipAndCacheContents, pickingMode = PickingMode.Ignore }; m_PreviewImage = new Image { name = "preview", pickingMode = PickingMode.Ignore, image = Texture2D.whiteTexture, }; { // Add preview collapse button on top of preview var collapsePreviewButton = new VisualElement { name = "collapse" }; collapsePreviewButton.Add(new VisualElement { name = "icon" }); collapsePreviewButton.AddManipulator(new Clickable(() => { node.owner.owner.RegisterCompleteObjectUndo("Collapse Preview"); UpdatePreviewExpandedState(false); })); m_PreviewImage.Add(collapsePreviewButton); } m_PreviewContainer.Add(m_PreviewImage); // Hook up preview image to preview manager m_PreviewRenderData = previewManager.GetPreview(inNode); m_PreviewRenderData.onPreviewChanged += UpdatePreviewTexture; UpdatePreviewTexture(); // Add fake preview which pads out the node to provide space for the floating preview m_PreviewFiller = new VisualElement { name = "previewFiller" }; m_PreviewFiller.AddToClassList("expanded"); { var previewDivider = new VisualElement { name = "divider" }; previewDivider.AddToClassList("horizontal"); m_PreviewFiller.Add(previewDivider); var expandPreviewButton = new VisualElement { name = "expand" }; expandPreviewButton.Add(new VisualElement { name = "icon" }); expandPreviewButton.AddManipulator(new Clickable(() => { node.owner.owner.RegisterCompleteObjectUndo("Expand Preview"); UpdatePreviewExpandedState(true); })); m_PreviewFiller.Add(expandPreviewButton); } contents.Add(m_PreviewFiller); UpdatePreviewExpandedState(node.previewExpanded); } // Add port input container, which acts as a pixel cache for all port inputs m_PortInputContainer = new VisualElement { name = "portInputContainer", clippingOptions = ClippingOptions.ClipAndCacheContents, pickingMode = PickingMode.Ignore }; Add(m_PortInputContainer); AddSlots(node.GetSlots <MaterialSlot>()); UpdatePortInputs(); base.expanded = node.drawState.expanded; RefreshExpandedState(); //This should not be needed. GraphView needs to improve the extension api here UpdatePortInputVisibilities(); SetPosition(new Rect(node.drawState.position.x, node.drawState.position.y, 0, 0)); /*if (node is PreviewNode) * { * var resizeHandle = new Label { name = "resize", text = "" }; * resizeHandle.AddManipulator(new Draggable(OnResize)); * Add(resizeHandle); * UpdateSize(); * }*/ if (node is SubGraphNode) { RegisterCallback <MouseDownEvent>(OnSubGraphDoubleClick); } m_PortInputContainer.SendToBack(); if (node.hasPreview) { m_PreviewFiller.BringToFront(); } }
public GraphEditorView(EditorWindow editorWindow, GraphData graph, MessageManager messageManager) { m_Graph = graph; m_MessageManager = messageManager; styleSheets.Add(Resources.Load <StyleSheet>("Styles/GraphEditorView")); previewManager = new PreviewManager(graph, messageManager); string serializedToggle = EditorUserSettings.GetConfigValue(k_ToggleSettings); if (!string.IsNullOrEmpty(serializedToggle)) { m_ToggleSettings = JsonUtility.FromJson <ToggleSettings>(serializedToggle); } string serializedWindowLayout = EditorUserSettings.GetConfigValue(k_FloatingWindowsLayoutKey); if (!string.IsNullOrEmpty(serializedWindowLayout)) { m_FloatingWindowsLayout = JsonUtility.FromJson <FloatingWindowsLayout>(serializedWindowLayout); } else { m_FloatingWindowsLayout = new FloatingWindowsLayout { blackboardLayout = { dockingTop = true, dockingLeft = true, verticalOffset = 16, horizontalOffset = 16, size = new Vector2(200, 400) } }; } if (m_FloatingWindowsLayout.masterPreviewSize.x > 0f && m_FloatingWindowsLayout.masterPreviewSize.y > 0f) { previewManager.ResizeMasterPreview(m_FloatingWindowsLayout.masterPreviewSize); } previewManager.RenderPreviews(); var toolbar = new IMGUIContainer(() => { GUILayout.BeginHorizontal(EditorStyles.toolbar); if (GUILayout.Button("Save Asset", EditorStyles.toolbarButton)) { if (saveRequested != null) { saveRequested(); } } GUILayout.Space(6); if (GUILayout.Button("Show In Project", EditorStyles.toolbarButton)) { if (showInProjectRequested != null) { showInProjectRequested(); } } GUILayout.FlexibleSpace(); EditorGUI.BeginChangeCheck(); m_ToggleSettings.isBlackboardVisible = GUILayout.Toggle(m_ToggleSettings.isBlackboardVisible, "Blackboard", EditorStyles.toolbarButton); GUILayout.Space(6); m_ToggleSettings.isPreviewVisible = GUILayout.Toggle(m_ToggleSettings.isPreviewVisible, "Main Preview", EditorStyles.toolbarButton); if (EditorGUI.EndChangeCheck()) { m_MasterPreviewView.visible = m_ToggleSettings.isPreviewVisible; m_BlackboardProvider.blackboard.visible = m_ToggleSettings.isBlackboardVisible; string serializedToggleables = JsonUtility.ToJson(m_ToggleSettings); EditorUserSettings.SetConfigValue(k_ToggleSettings, serializedToggleables); } GUILayout.EndHorizontal(); }); Add(toolbar); var content = new VisualElement { name = "content" }; { m_GraphView = new MaterialGraphView(graph) { name = "GraphView", viewDataKey = "MaterialGraphView" }; m_GraphView.SetupZoom(0.05f, ContentZoomer.DefaultMaxScale); m_GraphView.AddManipulator(new ContentDragger()); m_GraphView.AddManipulator(new SelectionDragger()); m_GraphView.AddManipulator(new RectangleSelector()); m_GraphView.AddManipulator(new ClickSelector()); m_GraphView.RegisterCallback <KeyDownEvent>(OnSpaceDown); m_GraphView.groupTitleChanged = OnGroupTitleChanged; m_GraphView.elementsAddedToGroup = OnElementsAddedToGroup; m_GraphView.elementsRemovedFromGroup = OnElementsRemovedFromGroup; content.Add(m_GraphView); m_BlackboardProvider = new BlackboardProvider(graph); m_GraphView.Add(m_BlackboardProvider.blackboard); // Initialize toggle settings if it doesnt exist. if (m_ToggleSettings == null) { m_ToggleSettings = new ToggleSettings(); } m_BlackboardProvider.blackboard.visible = m_ToggleSettings.isBlackboardVisible; m_MasterPreviewView = new MasterPreviewView(previewManager, graph) { name = "masterPreview" }; WindowDraggable masterPreviewViewDraggable = new WindowDraggable(null, this); m_MasterPreviewView.AddManipulator(masterPreviewViewDraggable); m_GraphView.Add(m_MasterPreviewView); //m_BlackboardProvider.onDragFinished += UpdateSerializedWindowLayout; //m_BlackboardProvider.onResizeFinished += UpdateSerializedWindowLayout; masterPreviewViewDraggable.OnDragFinished += UpdateSerializedWindowLayout; m_MasterPreviewView.previewResizeBorderFrame.OnResizeFinished += UpdateSerializedWindowLayout; m_MasterPreviewView.visible = m_ToggleSettings.isPreviewVisible; m_GraphView.graphViewChanged = GraphViewChanged; RegisterCallback <GeometryChangedEvent>(ApplySerializewindowLayouts); } m_SearchWindowProvider = ScriptableObject.CreateInstance <SearchWindowProvider>(); m_SearchWindowProvider.Initialize(editorWindow, m_Graph, m_GraphView); m_GraphView.nodeCreationRequest = (c) => { m_SearchWindowProvider.connectedPort = null; SearchWindow.Open(new SearchWindowContext(c.screenMousePosition), m_SearchWindowProvider); }; m_EdgeConnectorListener = new EdgeConnectorListener(m_Graph, m_SearchWindowProvider); foreach (var graphGroup in graph.groups) { AddGroup(graphGroup); } foreach (var node in graph.GetNodes <AbstractMaterialNode>()) { AddNode(node); } foreach (var edge in graph.edges) { AddEdge(edge); } Add(content); }
public void Initialize(AbstractMaterialNode inNode, PreviewManager previewManager, IEdgeConnectorListener connectorListener) { AddStyleSheetPath("Styles/MaterialNodeView"); AddToClassList("MaterialNode"); if (inNode == null) { return; } var contents = this.Q("contents"); m_ConnectorListener = connectorListener; node = inNode; persistenceKey = node.guid.ToString(); UpdateTitle(); // Add controls container var controlsContainer = new VisualElement { name = "controls" }; { m_ControlsDivider = new VisualElement { name = "divider" }; m_ControlsDivider.AddToClassList("horizontal"); controlsContainer.Add(m_ControlsDivider); m_ControlItems = new VisualElement { name = "items" }; controlsContainer.Add(m_ControlItems); // Instantiate control views from node foreach (var propertyInfo in node.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) { foreach (IControlAttribute attribute in propertyInfo.GetCustomAttributes(typeof(IControlAttribute), false)) { m_ControlItems.Add(attribute.InstantiateControl(node, propertyInfo)); } } } if (m_ControlItems.childCount > 0) { contents.Add(controlsContainer); } if (node.hasPreview) { // Add actual preview which floats on top of the node m_PreviewContainer = new VisualElement { name = "previewContainer", clippingOptions = ClippingOptions.ClipAndCacheContents, pickingMode = PickingMode.Ignore }; m_PreviewImage = new Image { name = "preview", pickingMode = PickingMode.Ignore, image = Texture2D.whiteTexture, }; { // Add preview collapse button on top of preview var collapsePreviewButton = new VisualElement { name = "collapse" }; collapsePreviewButton.Add(new VisualElement { name = "icon" }); collapsePreviewButton.AddManipulator(new Clickable(() => { node.owner.owner.RegisterCompleteObjectUndo("Collapse Preview"); UpdatePreviewExpandedState(false); })); m_PreviewImage.Add(collapsePreviewButton); } m_PreviewContainer.Add(m_PreviewImage); // Hook up preview image to preview manager m_PreviewRenderData = previewManager.GetPreview(inNode); m_PreviewRenderData.onPreviewChanged += UpdatePreviewTexture; UpdatePreviewTexture(); // Add fake preview which pads out the node to provide space for the floating preview m_PreviewFiller = new VisualElement { name = "previewFiller" }; m_PreviewFiller.AddToClassList("expanded"); { var previewDivider = new VisualElement { name = "divider" }; previewDivider.AddToClassList("horizontal"); m_PreviewFiller.Add(previewDivider); var expandPreviewButton = new VisualElement { name = "expand" }; expandPreviewButton.Add(new VisualElement { name = "icon" }); expandPreviewButton.AddManipulator(new Clickable(() => { node.owner.owner.RegisterCompleteObjectUndo("Expand Preview"); UpdatePreviewExpandedState(true); })); m_PreviewFiller.Add(expandPreviewButton); } contents.Add(m_PreviewFiller); UpdatePreviewExpandedState(node.previewExpanded); } // Add port input container, which acts as a pixel cache for all port inputs m_PortInputContainer = new VisualElement { name = "portInputContainer", clippingOptions = ClippingOptions.ClipAndCacheContents, pickingMode = PickingMode.Ignore }; Add(m_PortInputContainer); AddSlots(node.GetSlots <MaterialSlot>()); UpdatePortInputs(); base.expanded = node.drawState.expanded; RefreshExpandedState(); //This should not be needed. GraphView needs to improve the extension api here UpdatePortInputVisibilities(); SetPosition(new Rect(node.drawState.position.x, node.drawState.position.y, 0, 0)); if (node is SubGraphNode) { RegisterCallback <MouseDownEvent>(OnSubGraphDoubleClick); } var masterNode = node as IMasterNode; if (masterNode != null) { if (!masterNode.IsPipelineCompatible(RenderPipelineManager.currentPipeline)) { IconBadge wrongPipeline = IconBadge.CreateError("The current render pipeline is not compatible with this node preview."); Add(wrongPipeline); VisualElement title = this.Q("title"); wrongPipeline.AttachTo(title, SpriteAlignment.LeftCenter); } } m_PortInputContainer.SendToBack(); // Remove this after updated to the correct API call has landed in trunk. ------------ VisualElement m_TitleContainer; VisualElement m_ButtonContainer; m_TitleContainer = this.Q("title"); // ----------------------------------------------------------------------------------- var settings = node as IHasSettings; if (settings != null) { m_NodeSettingsView = new NodeSettingsView(); m_NodeSettingsView.visible = false; Add(m_NodeSettingsView); m_SettingsButton = new VisualElement { name = "settings-button" }; m_SettingsButton.Add(new VisualElement { name = "icon" }); m_Settings = settings.CreateSettingsElement(); m_SettingsButton.AddManipulator(new Clickable(() => { UpdateSettingsExpandedState(); })); // Remove this after updated to the correct API call has landed in trunk. ------------ m_ButtonContainer = new VisualElement { name = "button-container" }; m_ButtonContainer.style.flexDirection = StyleValue <FlexDirection> .Create(FlexDirection.Row); m_ButtonContainer.Add(m_SettingsButton); m_ButtonContainer.Add(m_CollapseButton); m_TitleContainer.Add(m_ButtonContainer); // ----------------------------------------------------------------------------------- //titleButtonContainer.Add(m_SettingsButton); //titleButtonContainer.Add(m_CollapseButton); RegisterCallback <GeometryChangedEvent>(OnGeometryChanged); } }
public void Initialize(AbstractMaterialNode inNode, PreviewManager previewManager, IEdgeConnectorListener connectorListener, MaterialGraphView graphView) { styleSheets.Add(Resources.Load <StyleSheet>("Styles/MaterialNodeView")); styleSheets.Add(Resources.Load <StyleSheet>($"Styles/ColorMode")); AddToClassList("MaterialNode"); if (inNode == null) { return; } var contents = this.Q("contents"); m_GraphView = graphView; mainContainer.style.overflow = StyleKeyword.None; // Override explicit style set in base class m_ConnectorListener = connectorListener; node = inNode; viewDataKey = node.objectId; UpdateTitle(); // Add controls container var controlsContainer = new VisualElement { name = "controls" }; { m_ControlsDivider = new VisualElement { name = "divider" }; m_ControlsDivider.AddToClassList("horizontal"); controlsContainer.Add(m_ControlsDivider); m_ControlItems = new VisualElement { name = "items" }; controlsContainer.Add(m_ControlItems); // Instantiate control views from node foreach (var propertyInfo in node.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) { foreach (IControlAttribute attribute in propertyInfo.GetCustomAttributes(typeof(IControlAttribute), false)) { m_ControlItems.Add(attribute.InstantiateControl(node, propertyInfo)); } } } if (m_ControlItems.childCount > 0) { contents.Add(controlsContainer); } if (node.hasPreview) { // Add actual preview which floats on top of the node m_PreviewContainer = new VisualElement { name = "previewContainer", style = { overflow = Overflow.Hidden }, pickingMode = PickingMode.Ignore }; m_PreviewImage = new Image { name = "preview", pickingMode = PickingMode.Ignore, image = Texture2D.whiteTexture, }; { // Add preview collapse button on top of preview var collapsePreviewButton = new VisualElement { name = "collapse" }; collapsePreviewButton.Add(new VisualElement { name = "icon" }); collapsePreviewButton.AddManipulator(new Clickable(() => { SetPreviewExpandedStateOnSelection(false); })); m_PreviewImage.Add(collapsePreviewButton); } m_PreviewContainer.Add(m_PreviewImage); // Hook up preview image to preview manager m_PreviewRenderData = previewManager.GetPreviewRenderData(inNode); m_PreviewRenderData.onPreviewChanged += UpdatePreviewTexture; UpdatePreviewTexture(); // Add fake preview which pads out the node to provide space for the floating preview m_PreviewFiller = new VisualElement { name = "previewFiller" }; m_PreviewFiller.AddToClassList("expanded"); { var previewDivider = new VisualElement { name = "divider" }; previewDivider.AddToClassList("horizontal"); m_PreviewFiller.Add(previewDivider); var expandPreviewButton = new VisualElement { name = "expand" }; expandPreviewButton.Add(new VisualElement { name = "icon" }); expandPreviewButton.AddManipulator(new Clickable(() => { SetPreviewExpandedStateOnSelection(true); })); m_PreviewFiller.Add(expandPreviewButton); } contents.Add(m_PreviewFiller); UpdatePreviewExpandedState(node.previewExpanded); } base.expanded = node.drawState.expanded; AddSlots(node.GetSlots <MaterialSlot>()); SetPosition(new Rect(node.drawState.position.x, node.drawState.position.y, 0, 0)); if (node is SubGraphNode) { RegisterCallback <MouseDownEvent>(OnSubGraphDoubleClick); } m_TitleContainer = this.Q("title"); if (node is IMasterNode) { AddToClassList("master"); bool validTarget = false; foreach (Target activeTarget in node.owner.validTargets) { //if we have a valid active target implementation and render pipeline, don't display the error if (activeTarget.IsPipelineCompatible(GraphicsSettings.currentRenderPipeline)) { validTarget = true; break; } } //if no active target implementations are valid with the current pipeline, display the error m_GraphView.graph.messageManager?.ClearAllFromProvider(this); if (!validTarget) { m_GraphView.graph.messageManager?.AddOrAppendError(this, node.objectId, new ShaderMessage("The active Master Node is not compatible with the current Render Pipeline," + " or no Render Pipeline is assigned." + " Assign a Render Pipeline in the graphics settings that is compatible with this Master Node.", ShaderCompilerMessageSeverity.Error)); } } m_NodeSettingsView = new NodeSettingsView(); m_NodeSettingsView.visible = false; Add(m_NodeSettingsView); m_SettingsButton = new VisualElement { name = "settings-button" }; m_SettingsButton.Add(new VisualElement { name = "icon" }); m_Settings = new VisualElement(); AddDefaultSettings(); // Add Node type specific settings var nodeTypeSettings = node as IHasSettings; if (nodeTypeSettings != null) { m_Settings.Add(nodeTypeSettings.CreateSettingsElement()); } // Add manipulators m_SettingsButton.AddManipulator(new Clickable(() => { UpdateSettingsExpandedState(); })); if (m_Settings.childCount > 0) { m_ButtonContainer = new VisualElement { name = "button-container" }; m_ButtonContainer.style.flexDirection = FlexDirection.Row; m_ButtonContainer.Add(m_SettingsButton); m_ButtonContainer.Add(m_CollapseButton); m_TitleContainer.Add(m_ButtonContainer); } // Register OnMouseHover callbacks for node highlighting RegisterCallback <MouseEnterEvent>(OnMouseHover); RegisterCallback <MouseLeaveEvent>(OnMouseHover); }
public void Initialize(AbstractMaterialNode inNode, PreviewManager previewManager, IEdgeConnectorListener connectorListener) { AddToClassList("MaterialNode"); if (inNode == null) { return; } m_ConnectorListener = connectorListener; node = inNode; persistenceKey = node.guid.ToString(); UpdateTitle(); m_ControlsContainer = new VisualElement { name = "controls" }; extensionContainer.Add(m_ControlsContainer); m_ControlsDivider = new VisualElement { name = "divider" }; m_ControlsDivider.AddToClassList("horizontal"); if (node.hasPreview) { m_PreviewContainer = new VisualElement { name = "previewContainer" }; m_PreviewContainer.AddToClassList("expanded"); { m_PreviewTextureView = new PreviewTextureView { name = "preview", pickingMode = PickingMode.Ignore, image = Texture2D.whiteTexture }; m_PreviewRenderData = previewManager.GetPreview(inNode); m_PreviewRenderData.onPreviewChanged += UpdatePreviewTexture; UpdatePreviewTexture(); var collapsePreviewButton = new VisualElement { name = "collapse" }; collapsePreviewButton.Add(new VisualElement { name = "icon" }); collapsePreviewButton.AddManipulator(new Clickable(() => { node.owner.owner.RegisterCompleteObjectUndo("Collapse Preview"); UpdatePreviewExpandedState(false); })); UpdatePreviewExpandedState(node.previewExpanded); m_PreviewTextureView.Add(collapsePreviewButton); var expandPreviewButton = new VisualElement { name = "expand" }; expandPreviewButton.Add(new VisualElement { name = "icon" }); expandPreviewButton.AddManipulator(new Clickable(() => { node.owner.owner.RegisterCompleteObjectUndo("Expand Preview"); UpdatePreviewExpandedState(true); })); m_PreviewContainer.Add(expandPreviewButton); } extensionContainer.Add(m_PreviewContainer); } m_ControlViews = new List <VisualElement>(); foreach (var propertyInfo in node.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) { foreach (IControlAttribute attribute in propertyInfo.GetCustomAttributes(typeof(IControlAttribute), false)) { m_ControlViews.Add(attribute.InstantiateControl(node, propertyInfo)); } } m_Attachers = new List <Attacher>(node.GetInputSlots <MaterialSlot>().Count()); AddSlots(node.GetSlots <MaterialSlot>()); UpdateSlotAttachers(); base.expanded = node.drawState.expanded; RefreshExpandedState(); //This should not be needed. GraphView needs to improve the extension api here UpdatePortInputVisibilities(); SetPosition(new Rect(node.drawState.position.x, node.drawState.position.y, 0, 0)); UpdateControls(); if (node is PreviewNode) { var resizeHandle = new Label { name = "resize", text = "" }; resizeHandle.AddManipulator(new Draggable(OnResize)); Add(resizeHandle); UpdateSize(); } }
public void Initialize(AbstractMaterialNode inNode, PreviewManager previewManager, IEdgeConnectorListener connectorListener, MaterialGraphView graphView) { styleSheets.Add(Resources.Load <StyleSheet>("Styles/MaterialNodeView")); styleSheets.Add(Resources.Load <StyleSheet>($"Styles/ColorMode")); AddToClassList("MaterialNode"); if (inNode == null) { return; } var contents = this.Q("contents"); m_GraphView = graphView; mainContainer.style.overflow = StyleKeyword.None; // Override explicit style set in base class m_ConnectorListener = connectorListener; node = inNode; viewDataKey = node.objectId; UpdateTitle(); // Add disabled overlay Add(new VisualElement() { name = "disabledOverlay", pickingMode = PickingMode.Ignore }); // Add controls container var controlsContainer = new VisualElement { name = "controls" }; { m_ControlsDivider = new VisualElement { name = "divider" }; m_ControlsDivider.AddToClassList("horizontal"); controlsContainer.Add(m_ControlsDivider); m_ControlItems = new VisualElement { name = "items" }; controlsContainer.Add(m_ControlItems); // Instantiate control views from node foreach (var propertyInfo in node.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) { foreach (IControlAttribute attribute in propertyInfo.GetCustomAttributes(typeof(IControlAttribute), false)) { m_ControlItems.Add(attribute.InstantiateControl(node, propertyInfo)); } } } if (m_ControlItems.childCount > 0) { contents.Add(controlsContainer); } // Add dropdowns container var dropdownContainer = new VisualElement { name = "dropdowns" }; { m_DropdownsDivider = new VisualElement { name = "divider" }; m_DropdownsDivider.AddToClassList("horizontal"); dropdownContainer.Add(m_DropdownsDivider); m_DropdownItems = new VisualElement { name = "items" }; dropdownContainer.Add(m_DropdownItems); UpdateDropdownEntries(); } if (m_DropdownItems.childCount > 0) { contents.Add(dropdownContainer); } if (node.hasPreview) { // Add actual preview which floats on top of the node m_PreviewContainer = new VisualElement { name = "previewContainer", style = { overflow = Overflow.Hidden }, pickingMode = PickingMode.Ignore }; m_PreviewImage = new Image { name = "preview", pickingMode = PickingMode.Ignore, image = Texture2D.whiteTexture, }; { // Add preview collapse button on top of preview var collapsePreviewButton = new VisualElement { name = "collapse" }; collapsePreviewButton.Add(new VisualElement { name = "icon" }); collapsePreviewButton.AddManipulator(new Clickable(() => { SetPreviewExpandedStateOnSelection(false); })); m_PreviewImage.Add(collapsePreviewButton); } m_PreviewContainer.Add(m_PreviewImage); // Hook up preview image to preview manager m_PreviewRenderData = previewManager.GetPreviewRenderData(inNode); m_PreviewRenderData.onPreviewChanged += UpdatePreviewTexture; UpdatePreviewTexture(); // Add fake preview which pads out the node to provide space for the floating preview m_PreviewFiller = new VisualElement { name = "previewFiller" }; m_PreviewFiller.AddToClassList("expanded"); { var previewDivider = new VisualElement { name = "divider" }; previewDivider.AddToClassList("horizontal"); m_PreviewFiller.Add(previewDivider); var expandPreviewButton = new VisualElement { name = "expand" }; expandPreviewButton.Add(new VisualElement { name = "icon" }); expandPreviewButton.AddManipulator(new Clickable(() => { SetPreviewExpandedStateOnSelection(true); })); m_PreviewFiller.Add(expandPreviewButton); } contents.Add(m_PreviewFiller); UpdatePreviewExpandedState(node.previewExpanded); } base.expanded = node.drawState.expanded; AddSlots(node.GetSlots <MaterialSlot>()); if (node is SubGraphNode) { RegisterCallback <MouseDownEvent>(OnSubGraphDoubleClick); } m_TitleContainer = this.Q("title"); if (node is BlockNode blockData) { AddToClassList("blockData"); m_TitleContainer.RemoveFromHierarchy(); } else { SetPosition(new Rect(node.drawState.position.x, node.drawState.position.y, 0, 0)); } // Update active state SetActive(node.isActive); // Register OnMouseHover callbacks for node highlighting RegisterCallback <MouseEnterEvent>(OnMouseHover); RegisterCallback <MouseLeaveEvent>(OnMouseHover); ShaderGraphPreferences.onAllowDeprecatedChanged += UpdateTitle; }
public GraphEditorView(EditorWindow editorWindow, AbstractMaterialGraph graph, string assetName) { m_Graph = graph; AddStyleSheetPath("Styles/MaterialGraph"); m_EditorWindow = editorWindow; previewManager = new PreviewManager(graph); var toolbar = new IMGUIContainer(() => { GUILayout.BeginHorizontal(EditorStyles.toolbar); if (GUILayout.Button("Save Asset", EditorStyles.toolbarButton)) { if (saveRequested != null) { saveRequested(); } } GUILayout.Space(6); if (GUILayout.Button("Show In Project", EditorStyles.toolbarButton)) { if (showInProjectRequested != null) { showInProjectRequested(); } } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); }); Add(toolbar); var content = new VisualElement { name = "content" }; { m_GraphView = new MaterialGraphView(graph) { name = "GraphView", persistenceKey = "MaterialGraphView" }; m_GraphView.SetupZoom(0.05f, ContentZoomer.DefaultMaxScale); m_GraphView.AddManipulator(new ContentDragger()); m_GraphView.AddManipulator(new SelectionDragger()); m_GraphView.AddManipulator(new RectangleSelector()); m_GraphView.AddManipulator(new ClickSelector()); m_GraphView.AddManipulator(new GraphDropTarget(graph)); m_GraphView.RegisterCallback <KeyDownEvent>(OnSpaceDown); content.Add(m_GraphView); m_BlackboardProvider = new BlackboardProvider(assetName, graph); m_GraphView.Add(m_BlackboardProvider.blackboard); m_BlackboardProvider.blackboard.layout = new Rect(new Vector2(10f, 10f), m_BlackboardProvider.blackboard.layout.size); m_MasterPreviewView = new MasterPreviewView(assetName, previewManager, graph) { name = "masterPreview" }; WindowDraggable masterPreviewViewDraggable = new WindowDraggable(); m_MasterPreviewView.AddManipulator(masterPreviewViewDraggable); m_GraphView.Add(m_MasterPreviewView); ResizeBorderFrame masterPreviewResizeBorderFrame = new ResizeBorderFrame(m_MasterPreviewView) { name = "resizeBorderFrame" }; masterPreviewResizeBorderFrame.stayWithinParentBounds = true; masterPreviewResizeBorderFrame.OnResizeFinished += UpdateSerializedWindowLayout; m_MasterPreviewView.Add(masterPreviewResizeBorderFrame); m_BlackboardProvider.onDragFinished += UpdateSerializedWindowLayout; m_BlackboardProvider.onResizeFinished += UpdateSerializedWindowLayout; masterPreviewViewDraggable.OnDragFinished += UpdateSerializedWindowLayout; masterPreviewResizeBorderFrame.OnResizeFinished += UpdateSerializedWindowLayout; m_GraphView.graphViewChanged = GraphViewChanged; m_FloatingWindowsLayoutKey = "UnityEditor.ShaderGraph.FloatingWindowsLayout"; string serializedWindowLayout = EditorUserSettings.GetConfigValue(m_FloatingWindowsLayoutKey); if (!String.IsNullOrEmpty(serializedWindowLayout)) { m_FloatingWindowsLayout = JsonUtility.FromJson <FloatingWindowsLayout>(serializedWindowLayout); m_MasterPreviewView.layout = m_FloatingWindowsLayout.previewLayout; if (m_FloatingWindowsLayout.blackboardLayout.width > 0) { m_BlackboardProvider.blackboard.layout = m_FloatingWindowsLayout.blackboardLayout; } } else { m_FloatingWindowsLayout = new FloatingWindowsLayout(); } } m_SearchWindowProvider = ScriptableObject.CreateInstance <SearchWindowProvider>(); m_SearchWindowProvider.Initialize(editorWindow, m_Graph, m_GraphView); m_GraphView.nodeCreationRequest = (c) => { m_SearchWindowProvider.connectedPort = null; SearchWindow.Open(new SearchWindowContext(c.screenMousePosition), m_SearchWindowProvider); }; m_EdgeConnectorListener = new EdgeConnectorListener(m_Graph, m_SearchWindowProvider); foreach (var node in graph.GetNodes <INode>()) { AddNode(node); } foreach (var edge in graph.edges) { AddEdge(edge); } Add(content); }
public GraphEditorView(EditorWindow editorWindow, AbstractMaterialGraph graph, string assetName) { m_Graph = graph; AddStyleSheetPath("Styles/GraphEditorView"); m_EditorWindow = editorWindow; previewManager = new PreviewManager(graph); var toolbar = new IMGUIContainer(() => { GUILayout.BeginHorizontal(EditorStyles.toolbar); if (GUILayout.Button("Save Asset", EditorStyles.toolbarButton)) { if (saveRequested != null) { saveRequested(); } } GUILayout.Space(6); if (GUILayout.Button("Show In Project", EditorStyles.toolbarButton)) { if (showInProjectRequested != null) { showInProjectRequested(); } } GUILayout.Space(6); if (GUILayout.Button("Reset Layout", EditorStyles.toolbarButton)) { m_MasterPreviewView.layout = m_FloatingWindowsLayout.defaultPreviewLayout.GetLayout(layout); m_BlackboardProvider.blackboard.layout = m_FloatingWindowsLayout.defaultBlackboardLayout.GetLayout(layout); m_MasterPreviewView.UpdateRenderTextureOnNextLayoutChange(); UpdateSerializedWindowLayout(); } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); }); Add(toolbar); var content = new VisualElement { name = "content" }; { m_GraphView = new MaterialGraphView(graph) { name = "GraphView", persistenceKey = "MaterialGraphView" }; m_GraphView.SetupZoom(0.05f, ContentZoomer.DefaultMaxScale); m_GraphView.AddManipulator(new ContentDragger()); m_GraphView.AddManipulator(new SelectionDragger()); m_GraphView.AddManipulator(new RectangleSelector()); m_GraphView.AddManipulator(new ClickSelector()); m_GraphView.AddManipulator(new GraphDropTarget(graph)); m_GraphView.RegisterCallback <KeyDownEvent>(OnSpaceDown); content.Add(m_GraphView); // Uncomment to enable pixel caching profiler // m_ProfilerView = new PixelCacheProfilerView(this); // m_GraphView.Add(m_ProfilerView); m_BlackboardProvider = new BlackboardProvider(assetName, graph); m_GraphView.Add(m_BlackboardProvider.blackboard); m_BlackboardProvider.blackboard.layout = new Rect(new Vector2(10f, 10f), m_BlackboardProvider.blackboard.layout.size); m_MasterPreviewView = new MasterPreviewView(assetName, previewManager, graph) { name = "masterPreview" }; WindowDraggable masterPreviewViewDraggable = new WindowDraggable(); m_MasterPreviewView.AddManipulator(masterPreviewViewDraggable); m_GraphView.Add(m_MasterPreviewView); ResizeBorderFrame masterPreviewResizeBorderFrame = new ResizeBorderFrame(m_MasterPreviewView) { name = "resizeBorderFrame" }; masterPreviewResizeBorderFrame.stayWithinParentBounds = true; masterPreviewResizeBorderFrame.maintainAspectRatio = true; masterPreviewResizeBorderFrame.OnResizeFinished += UpdateSerializedWindowLayout; m_MasterPreviewView.Add(masterPreviewResizeBorderFrame); m_BlackboardProvider.onDragFinished += UpdateSerializedWindowLayout; m_BlackboardProvider.onResizeFinished += UpdateSerializedWindowLayout; masterPreviewViewDraggable.OnDragFinished += UpdateSerializedWindowLayout; masterPreviewResizeBorderFrame.OnResizeFinished += UpdateSerializedWindowLayout; m_GraphView.graphViewChanged = GraphViewChanged; RegisterCallback <PostLayoutEvent>(ApplySerializewindowLayouts); } m_SearchWindowProvider = ScriptableObject.CreateInstance <SearchWindowProvider>(); m_SearchWindowProvider.Initialize(editorWindow, m_Graph, m_GraphView); m_GraphView.nodeCreationRequest = (c) => { m_SearchWindowProvider.connectedPort = null; SearchWindow.Open(new SearchWindowContext(c.screenMousePosition), m_SearchWindowProvider); }; m_EdgeConnectorListener = new EdgeConnectorListener(m_Graph, m_SearchWindowProvider); foreach (var node in graph.GetNodes <INode>()) { AddNode(node); } foreach (var edge in graph.edges) { AddEdge(edge); } Add(content); }
public GraphEditorView(EditorWindow editorWindow, AbstractMaterialGraph graph, string assetName) { m_Graph = graph; AddStyleSheetPath("Styles/MaterialGraph"); m_EditorWindow = editorWindow; previewManager = new PreviewManager(graph); var content = new VisualElement { name = "content" }; { m_GraphView = new MaterialGraphView(graph) { name = "GraphView", persistenceKey = "MaterialGraphView" }; m_GraphView.SetupZoom(ContentZoomer.DefaultMinScale, ContentZoomer.DefaultMaxScale); m_GraphView.AddManipulator(new ContentDragger()); m_GraphView.AddManipulator(new SelectionDragger()); m_GraphView.AddManipulator(new RectangleSelector()); m_GraphView.AddManipulator(new ClickSelector()); m_GraphView.AddManipulator(new GraphDropTarget(graph)); content.Add(m_GraphView); m_GraphInspectorView = new GraphInspectorView(assetName, previewManager, graph) { name = "inspector" }; m_GraphView.RegisterCallback <KeyDownEvent>(OnSpaceDown); m_GraphView.Add(m_GraphInspectorView); m_MasterPreviewView = new MasterPreviewView(assetName, previewManager, graph) { name = "masterPreview" }; WindowDraggable masterPreviewViewDraggable = new WindowDraggable(); masterPreviewViewDraggable.OnDragFinished += UpdateSerializedWindowLayout; m_MasterPreviewView.AddManipulator(masterPreviewViewDraggable); m_GraphView.Add(m_MasterPreviewView); ResizeBorderFrame masterPreviewResizeBorderFrame = new ResizeBorderFrame(m_MasterPreviewView) { name = "resizeBorderFrame" }; masterPreviewResizeBorderFrame.OnResizeFinished += UpdateSerializedWindowLayout; m_MasterPreviewView.Add(masterPreviewResizeBorderFrame); m_GraphView.graphViewChanged = GraphViewChanged; m_FloatingWindowsLayoutKey = "UnityEditor.ShaderGraph.FloatingWindowsLayout"; string serializedWindowLayout = EditorUserSettings.GetConfigValue(m_FloatingWindowsLayoutKey); if (!String.IsNullOrEmpty(serializedWindowLayout)) { m_FLoatingWindowsLayout = JsonUtility.FromJson <FloatingWindowsLayout>(serializedWindowLayout); m_GraphInspectorView.layout = m_FLoatingWindowsLayout.inspectorLayout; m_MasterPreviewView.layout = m_FLoatingWindowsLayout.previewLayout; } else { m_FLoatingWindowsLayout = new FloatingWindowsLayout(); } } m_SearchWindowProvider = ScriptableObject.CreateInstance <SearchWindowProvider>(); m_SearchWindowProvider.Initialize(editorWindow, m_Graph, m_GraphView); m_GraphView.nodeCreationRequest = (c) => { m_SearchWindowProvider.connectedPort = null; SearchWindow.Open(new SearchWindowContext(c.screenMousePosition), m_SearchWindowProvider); }; m_EdgeConnectorListener = new EdgeConnectorListener(m_Graph, m_SearchWindowProvider); foreach (var node in graph.GetNodes <INode>()) { AddNode(node); } foreach (var edge in graph.edges) { AddEdge(edge); } Add(content); }