/*************************************************************************************************************************/ // NODE create public Node CreateNode(Position position, bool SelectAfterCreate = true) { var rec = this.diagram.createNode( position.clone().scale(this.scale).subtract(this.shift), "", this.currentLayer.id ); if (rec != null) { if (SelectAfterCreate) this.SelectOnlyOneNode(rec); } return rec; }
// NODE paste public bool paste(Position position) { DataObject retrievedData = (DataObject)Clipboard.GetDataObject(); if (retrievedData.GetDataPresent("DiagramXml")) // [PASTE] [DIAGRAM] [CLIPBOARD OBJECT] insert diagram { DiagramBlock newBlock = this.diagram.AddDiagramPart( retrievedData.GetData("DiagramXml") as string, position.clone().scale(this.scale).subtract(this.shift), this.currentLayer.id ); this.diagram.unsave("create", newBlock.nodes, newBlock.lines); // filter only top nodes fromm all new created nodes. NewNodes containing sublayer nodes. Nodes topNodes = new Nodes(); foreach (Node node in newBlock.nodes) { if (node.layer == this.currentLayer.id) { topNodes.Add(node); } } this.SelectNodes(topNodes); this.diagram.InvalidateDiagram(); } else if (retrievedData.GetDataPresent(DataFormats.StringFormat)) // [PASTE] [TEXT] insert text { Node newrec = this.CreateNode(position); string ClipText = retrievedData.GetData(DataFormats.StringFormat) as string; if (Patterns.isColor(ClipText)) { newrec.setName(ClipText); newrec.color.set(Media.getColor(ClipText)); this.diagram.unsave("create", newrec, this.shift, this.currentLayer.id); } else if (Patterns.isURL(ClipText)) // [PASTE] [URL] [LINK] paste link from clipboard { newrec.link = ClipText; newrec.setName(ClipText); this.setNodeNameByLink(newrec, ClipText); this.diagram.unsave("create", newrec, this.shift, this.currentLayer.id); } else { newrec.setName(ClipText); // set link to node as path to file if (Os.FileExists(ClipText)) { newrec.setName(Os.getFileName(ClipText)); newrec.link = Os.makeRelative(ClipText, this.diagram.FileName); newrec.color.set(Media.getColor(diagram.options.colorFile)); } // set link to node as path to directory if (Os.DirectoryExists(ClipText)) { newrec.setName(Os.getFileName(ClipText)); newrec.link = Os.makeRelative(ClipText, this.diagram.FileName); newrec.color.set(Media.getColor(diagram.options.colorDirectory)); } this.diagram.unsave("create", newrec, this.shift, this.currentLayer.id); } this.diagram.InvalidateDiagram(); } else if (Clipboard.ContainsFileDropList()) // [FILES] [PASTE] insert files from clipboard { StringCollection returnList = Clipboard.GetFileDropList(); Nodes nodes = new Nodes(); foreach (string file in returnList) { Node newrec = this.CreateNode(position); nodes.Add(newrec); newrec.setName(Os.getFileNameWithoutExtension(file)); string ext = Os.getExtension(file); if (ext == ".jpg" || ext == ".png" || ext == ".ico" || ext == ".bmp") // paste image file direct to diagram as image instead of link { this.diagram.setImage(newrec, file); } else if ( this.diagram.FileName != "" && Os.FileExists(this.diagram.FileName) && file.IndexOf(Os.getDirectoryName(this.diagram.FileName)) == 0 ) // [PASTE] [FILE] { // make path relative to saved diagram path int start = Os.getDirectoryName(this.diagram.FileName).Length; int finish = file.Length - start; newrec.link = "." + file.Substring(start, finish); } else if (this.diagram.FileName != "" && Os.DirectoryExists(this.diagram.FileName)) // [PASTE] [DIRECTORY] { // make path relative to saved diagram path int start = Os.getDirectoryName(this.diagram.FileName).Length; int finish = file.Length - start; newrec.link = "." + file.Substring(start, finish); } else { newrec.link = file; } } if (nodes.Count() > 0) { this.diagram.unsave("create", nodes, null, this.shift, this.currentLayer.id); this.diagram.InvalidateDiagram(); } } else if (Clipboard.GetDataObject() != null) // [PASTE] [IMAGE] [CLIPBOARD OBJECT] paste image { IDataObject data = Clipboard.GetDataObject(); if (data.GetDataPresent(DataFormats.Bitmap)) { // paste image as embedded data direct inside diagram try { Node newrec = this.CreateNode(position); newrec.image = (Bitmap)data.GetData(DataFormats.Bitmap, true); newrec.height = newrec.image.Height; newrec.width = newrec.image.Width; newrec.isimage = true; newrec.embeddedimage = true; this.diagram.unsave("create", newrec, this.shift, this.currentLayer.id); this.diagram.InvalidateDiagram(); } catch (Exception e) { Program.log.write("paste immage error: " + e.Message); } } } return true; }