public UIRelationGraphView() { styleSheets.Add(Resources.Load <StyleSheet>("NarrativeGraph")); SetupZoom(ContentZoomer.DefaultMinScale, ContentZoomer.DefaultMaxScale); this.AddManipulator(new ContentDragger()); this.AddManipulator(new SelectionDragger()); this.AddManipulator(new RectangleSelector()); this.AddManipulator(new FreehandSelector()); var grid = new GridBackground(); Insert(0, grid); grid.StretchToParentSize(); var provider = ScriptableObject.CreateInstance <UIViewMenuWindowProvider>(); provider.CreateNodeEvent += configuration => { foreach (var existNode in m_nodes) { if (existNode.Configuration == configuration) { return(false); } } var node = new UINextLinkNode(configuration); AddNewNode(node); return(true); }; nodeCreationRequest += context => { if (m_sourceNode == null) { return; } SearchWindow.Open(new SearchWindowContext(context.screenMousePosition), provider); }; graphViewChanged += change => { if (change.elementsToRemove == null) { return(change); } foreach (var element in change.elementsToRemove) { if (element is UINextLinkNode linkNode) { m_nodes.RemoveSwap(linkNode); RefreshPosition(); } else if (element is Edge edge) { m_edges.RemoveSwap(edge); } } return(change); }; }
public void ChangeSourceNode(UIViewConfiguration.Configuration configuration) { foreach (var existNode in m_nodes) { existNode.Clear(); RemoveElement(existNode); } foreach (var edge in m_edges) { RemoveElement(edge); } m_edges.Clear(); m_nodes.Clear(); if (configuration == null) { return; } var node = new UISourceNode(configuration); m_sourceNode = node; AddNewNode(node); if (configuration.Relations == null || configuration.Relations.Length == 0) { return; } foreach (var relation in configuration.Relations) { var relateConfiguration = UIViewConfiguration.GlobalInstance.FindWithGuid(relation.RelationViewGuid); var relationNode = new UINextLinkNode(relateConfiguration); AddNewNode(relationNode); var edge = new Edge { input = relationNode.InputPort, output = m_sourceNode.OutputPort }; edge.input.Connect(edge); edge.output.Connect(edge); m_edges.Add(edge); AddElement(edge); } }