private void CreateLink(XPathNavigator childNav, int linkID, Dictionary<int, DiagramNode> docNodes, int fromID, int toID) { DiagramLink newLink; DiagramNode toNode, fromNode; String firstParam; newLink = new DiagramLink(linkID); newLink.ToArrow = true; newLink.PenWidth = 2; // mw sample xpath //("LinkParameters/Parameter/Parameter[@displayedName='LinkName'][@category='Link'] //("LinkParameters/Parameter/Parameter[@displayedName='RelationshipType'][@category='Link'] //XPathNavigator pnav = childNav.SelectSingleNode("LinkParameters/Parameter/Parameter"); XPathNavigator pnav = childNav.SelectSingleNode("LinkParameters/Parameter/Parameter[@displayedName='LinkName'][@category='Link']"); if (pnav != null) { firstParam = pnav.GetAttribute("value", pnav.NamespaceURI); newLink.Text = firstParam; newLink.Label.Visible = true; } if (docNodes.ContainsKey(toID) && docNodes.ContainsKey(fromID)) { toNode = docNodes[toID]; fromNode = docNodes[fromID]; newLink.ToPort = toNode.Port; newLink.FromPort = fromNode.Port; this.Document.Add(newLink); } }
private void Diagram_LinkRelinked(object sender, GoSelectionEventArgs e) { myController.TurnViewUpdateOff(); DiagramLink link = (DiagramLink)e.GoObject; this.Document.Remove(link); DiagramNode to = (DiagramNode)link.ToNode; DiagramNode from = (DiagramNode)link.FromNode; if (this.Tool is GoToolRelinking) { GoToolRelinking castTool = (GoToolRelinking)this.Tool; GoPort start, end; if (castTool.Forwards) { start = (GoPort)castTool.OriginalStartPort; end = (GoPort)castTool.OriginalEndPort; } else { //swap start = (GoPort)castTool.OriginalEndPort; end = (GoPort)castTool.OriginalStartPort; } DiagramNode startNode = (DiagramNode)start.Node; DiagramNode endNode = (DiagramNode)end.Node; try { // record the relink in the database this.myController.Connect(this.RootID, from.NodeID, to.NodeID, DiagramName); // and remove the old link this.Controller.DeleteLink(link.LinkID); } catch (Exception ex) { MessageBox.Show(ex.Message, "Unable to create link", MessageBoxButtons.OK, MessageBoxIcon.Warning); // the old link was removed from the display on the unsuccessful relink // recreate it (it's still in the db, but this is more efficient) DiagramLink newLink = new DiagramLink(); newLink.ToArrow = true; newLink.FromPort = startNode.Port; newLink.ToPort = endNode.Port; this.Document.Add(newLink); } } myController.TurnViewUpdateOn(); }