Пример #1
0
        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);
            };
        }
Пример #2
0
        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);
            }
        }