/// <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(); } }