Exemplo n.º 1
0
        /// <summary>
        /// CLIPBOARD: If contains a NodeGraphClipboard.xml, deserializes and add nodes to current view.
        /// </summary>
        public void PasteSelectionFromClipBoard()
        {
            if (Clipboard.ContainsFileDropList())
            {
                if (Clipboard.GetFileDropList().Contains(Path.GetTempPath() + "NodeGraphClipboard.xml"))
                {
                    XmlTree     v_Contents     = XmlTree.FromFile(Path.GetTempPath() + "NodeGraphClipboard.xml");
                    XmlTreeNode v_ContentsRoot = v_Contents.m_rootNode;
                    XmlTreeNode v_NodesRoot    = v_ContentsRoot.GetFirstChild("Nodes");
                    XmlTreeNode v_LinksRoot    = v_ContentsRoot.GetFirstChild("Links");

                    int PreviousNodeCount = this.m_NodeCollection.Count;

                    NodeGraphNode v_CurrentNode;

                    foreach (XmlTreeNode i_Node in v_NodesRoot.m_childNodes)
                    {
                        v_CurrentNode    = NodeGraphNode.DeserializeFromXML(i_Node, this);
                        v_CurrentNode.X += 10;
                        v_CurrentNode.Y += 10;
                        v_CurrentNode.UpdateHitRectangle();
                        this.NodeCollection.Add(v_CurrentNode);
                    }


                    int v_InId, v_InConnectorIdx, v_OutId, v_OutConnectorIdx;

                    foreach (XmlTreeNode i_Link in v_LinksRoot.m_childNodes)
                    {
                        v_InId            = int.Parse(i_Link.m_attributes["InputNodeId"]);
                        v_InConnectorIdx  = int.Parse(i_Link.m_attributes["InputNodeConnectorIdx"]);
                        v_OutId           = int.Parse(i_Link.m_attributes["OutputNodeId"]);
                        v_OutConnectorIdx = int.Parse(i_Link.m_attributes["OutputNodeConnectorIdx"]);


                        // Relinking
                        this.m_Links.Add(new NodeGraphLink(
                                             // P_INPUT
                                             this.m_NodeCollection[PreviousNodeCount + v_InId].Connectors[v_InConnectorIdx],
                                             // P_OUTPUT
                                             this.m_NodeCollection[PreviousNodeCount + v_OutId].Connectors[v_OutConnectorIdx],
                                             // CONNECTOR TYPE
                                             this.m_NodeCollection[PreviousNodeCount + v_InId].Connectors[v_InConnectorIdx].DataType
                                             ));
                    }
                }
                ParentPanel.Refresh();
            }
        }