コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: GraphText.cs プロジェクト: simonec73/threatsmanager
        public GraphText([NotNull] GraphLink link)
        {
            _link = link;

            Text        = "Flow";
            Alignment   = Middle;
            Selectable  = true;
            Editable    = true;
            EditorStyle = GoTextEditorStyle.TextBox;
        }
コード例 #3
0
        private GraphLink GetLink([NotNull] ILink link)
        {
            GraphLink result = null;

            if (_links.TryGetValue(link.AssociatedId, out var graphLink))
            {
                result = graphLink;
            }

            return(result);
        }
コード例 #4
0
        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();
        }
コード例 #5
0
        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();
            }
        }