private ILink CreateLink([NotNull] GraphLink glink, [NotNull] GraphEntity source, [NotNull] GraphEntity target) { ILink result = null; var dataFlow = _diagram.Model?.AddDataFlow(glink.Text, source.EntityShape.AssociatedId, target.EntityShape.AssociatedId); if (dataFlow == null) { dataFlow = _diagram.Model?.GetDataFlow(source.EntityShape.AssociatedId, target.EntityShape.AssociatedId); if (dataFlow != null) { result = _diagram.GetLink(dataFlow.Id); if (result == null) { result = _diagram.AddLink(dataFlow); } } else { ShowWarning?.Invoke("The Flow in the Diagram is in an inconsistent status. Please close the Diagram and try again."); } } else { result = _diagram.AddLink(dataFlow); } return(result); }
public GraphText([NotNull] GraphLink link) { _link = link; Text = "Flow"; Alignment = Middle; Selectable = true; Editable = true; EditorStyle = GoTextEditorStyle.TextBox; }
private GraphLink GetLink([NotNull] ILink link) { GraphLink result = null; if (_links.TryGetValue(link.AssociatedId, out var graphLink)) { result = graphLink; } return(result); }
private void RemoveRegisteredEvents(GraphLink link) { link.SelectedLink -= OnSelectedLink; link.SelectedThreatEvent -= OnSelectedThreatEvent; if (link.Link.DataFlow is IThreatEventsContainer container) { container.ThreatEventAdded -= OnThreatEventAddedToShape; container.ThreatEventRemoved -= OnThreatEventRemovedFromShape; } link.Dispose(); }
private void AddLink([NotNull] ILink link) { var from = GetEntity(link.DataFlow.Source); var to = GetEntity(link.DataFlow.Target); if (from != null && to != null) { var newLink = new GraphLink(link, _dpiState) { Loading = true, FromPort = from.Port, ToPort = to.Port }; if (_actions != null) { newLink.SetContextAwareActions(_actions); } _graph.Doc.Add(newLink); _links.Add(link.AssociatedId, newLink); newLink.SelectedLink += OnSelectedLink; newLink.SelectedThreatEvent += OnSelectedThreatEvent; var schemaManager = new DiagramPropertySchemaManager(link.DataFlow.Model); var pointsPropertyType = schemaManager.GetLinksSchema()?.GetPropertyType("Points"); var property = link.GetProperty(pointsPropertyType); if (property is IPropertyArray propertyArray) { var array = propertyArray.Value?.ToArray(); var count = array?.Length ?? 0; if (count > 0) { newLink.RealLink.ClearPoints(); for (int i = 0; i < count / 2; i++) { float x; float y; switch (_dpiState) { case DpiState.TooSmall: x = float.Parse(array[i * 2], NumberFormatInfo.InvariantInfo) * 2; y = float.Parse(array[i * 2 + 1], NumberFormatInfo.InvariantInfo) * 2; break; case DpiState.TooBig: x = float.Parse(array[i * 2], NumberFormatInfo.InvariantInfo) / 2; y = float.Parse(array[i * 2 + 1], NumberFormatInfo.InvariantInfo) / 2; break; default: x = float.Parse(array[i * 2], NumberFormatInfo.InvariantInfo); y = float.Parse(array[i * 2 + 1], NumberFormatInfo.InvariantInfo); break; } newLink.RealLink.AddPoint(new PointF(x, y)); } } } newLink.Loading = false; newLink.UpdateRoute(); } }