protected override unsafe int OnCreateProcess(CorDebugProcess pProcess)
 {
     CreateProcess?.Invoke(this, pProcess);
     return(Continue());
 }
Esempio n. 2
0
        protected override void OnExternalObjectsDropped(GoInputEventArgs evt)
        {
            PointF point;

            switch (_dpiState)
            {
            case DpiState.TooSmall:
                point = new PointF(evt.DocPoint.X / 2, evt.DocPoint.Y / 2);
                break;

            case DpiState.TooBig:
                point = new PointF(evt.DocPoint.X * 2, evt.DocPoint.Y * 2);
                break;

            default:
                point = evt.DocPoint;
                break;
            }

            if (Selection.Primary is GoSimpleNode simpleNode)
            {
                var parent = GetParentGroup(point);
                simpleNode.Remove();
                switch (simpleNode.Text)
                {
                case "ExternalInteractor":
                    CreateExternalInteractor?.Invoke(point, parent);
                    break;

                case "Process":
                    CreateProcess?.Invoke(point, parent);
                    break;

                case "DataStore":
                    CreateDataStore?.Invoke(point, parent);
                    break;

                case "TrustBoundary":
                    CreateTrustBoundary?.Invoke(point, parent);
                    break;

                default:
                    if (Guid.TryParse(simpleNode.Text, out Guid id))
                    {
                        CreateIdentity?.Invoke(id, point, parent);
                    }
                    break;
                }
            }
            else if (Selection.Primary is GraphThreatTypeNode threatTypeNode)
            {
                var threatType = threatTypeNode.ThreatType;
                threatTypeNode.Remove();

                var nodes = Document.PickObjects(point, false, null, 100);
                foreach (var node in nodes)
                {
                    var parent = node?.ParentNode;
                    if (parent is GraphEntity gnode)
                    {
                        var entity = _diagram.Model?.GetEntity(gnode.EntityShape.AssociatedId);
                        if (entity != null)
                        {
                            entity.AddThreatEvent(threatType);
                            gnode.ShowThreats(this);
                        }
                    }
                    else if (parent is GraphLink glink)
                    {
                        var dataFlow = _diagram.Model?.GetDataFlow(glink.Link.AssociatedId);
                        if (dataFlow != null)
                        {
                            dataFlow.AddThreatEvent(threatType);
                            glink.ShowThreats(this, point);
                        }
                    }
                }
            }
        }