private void ProcessDiagramChange(DiagramShapeEventBase diagramShapeEvent, IModel model, IDiagram diagram)
        {
            switch (diagramShapeEvent)
            {
            case DiagramNodeAddedEvent diagramNodeAddedEvent:
                var modelNode = diagramNodeAddedEvent.NewNode.ModelNode;
                ShowModelRelationshipsIfBothEndsAreVisible(modelNode, model, diagram);
                break;

            case DiagramNodeRemovedEvent _:
                // TODO: optimize: should check only surrounding nodes of the deleted one (not all in diagram)
                foreach (var diagramNode in diagram.Nodes)
                {
                    ShowModelRelationshipsIfBothEndsAreVisible(diagramNode.ModelNode, model, diagram);
                }
                break;

            case DiagramConnectorAddedEvent _:
                HideRedundantConnectors(diagram);
                break;

                // DiagramConnectorRemovedEvent is not handled
                // because that would put back removed connectors immediately
                // (because nodes are removed after connectors)
            }
        }
Ejemplo n.º 2
0
        private void DispatchDiagramChangeEvent(DiagramShapeEventBase diagramShapeEvent)
        {
            switch (diagramShapeEvent)
            {
            case DiagramNodeAddedEvent nodeAddedEvent:
                AddNode(nodeAddedEvent.NewNode);
                break;

            case DiagramNodeRemovedEvent nodeRemovedEvent:
                RemoveNode(nodeRemovedEvent.OldNode);
                break;

            case DiagramConnectorAddedEvent connectorAddedEvent:
                AddConnector(connectorAddedEvent.NewConnector);
                break;

            case DiagramConnectorRemovedEvent connectorRemovedEvent:
                RemoveConnector(connectorRemovedEvent.OldConnector);
                break;

            case DiagramConnectorRouteChangedEvent diagramConnectorRouteChangedEvent:
                UpdateConnectorRoute(diagramConnectorRouteChangedEvent.NewConnector);
                break;

            case DiagramNodeChangedEvent diagramNodeChangedEvent:
                UpdateNode(diagramNodeChangedEvent.NewNode);
                break;
            }
        }
 private void ProcessDiagramChange(DiagramShapeEventBase diagramShapeEvent)
 {
     if (diagramShapeEvent is DiagramNodeAddedEvent diagramNodeAddedEvent)
     {
         RemoveModelNode(diagramNodeAddedEvent.NewNode.Id);
     }
 }
Ejemplo n.º 4
0
        public static DiagramEvent Create([NotNull] IDiagram diagram, DiagramShapeEventBase shapeEvent = null)
        {
            var shapeEvents = shapeEvent == null
                ? Enumerable.Empty <DiagramShapeEventBase>()
                : new[] { shapeEvent };

            return(new DiagramEvent(diagram, shapeEvents));
        }
Ejemplo n.º 5
0
 private void ProcessDiagramChange(DiagramShapeEventBase diagramShapeEvent)
 {
     if (diagramShapeEvent is DiagramNodeChangedEvent diagramNodeChangedEvent &&
         DiagramNodeIdEqualityComparer.Instance.Equals(diagramNodeChangedEvent.NewNode, DiagramNode))
     {
         DiagramShape = diagramNodeChangedEvent.NewNode;
         PopulateFromDiagramNode(diagramNodeChangedEvent.NewNode);
     }
 }
 private void ProcessDiagramChange(DiagramShapeEventBase diagramShapeEvent)
 {
     if (diagramShapeEvent is DiagramConnectorRouteChangedEvent diagramConnectorRouteChangedEvent &&
         DiagramConnectorIdEqualityComparer.Instance.Equals(diagramConnectorRouteChangedEvent.NewConnector, DiagramConnector))
     {
         DiagramShape = diagramConnectorRouteChangedEvent.NewConnector;
         RoutePoints  = diagramConnectorRouteChangedEvent.NewConnector.Route.ToWpf();
     }
 }
Ejemplo n.º 7
0
 private void DispatchDiagramEvent(DiagramShapeEventBase diagramShapeEvent)
 {
     switch (diagramShapeEvent)
     {
     case DiagramNodeChangedEvent @event when @event.ChangedMember == DiagramNodeMember.Position:
         FollowDiagramNode(@event.OldNode.Id);
         break;
     }
 }
 private void ProcessShapeEvent([NotNull] DiagramShapeEventBase shapeEvent)
 {
     switch (shapeEvent)
     {
     case DiagramNodeAddedEvent diagramNodeAddedEvent:
         ShowParentNode(diagramNodeAddedEvent.NewNode);
         break;
     }
 }
        private static bool IsLayoutTriggeringChange(DiagramShapeEventBase diagramShapeEvent)
        {
            switch (diagramShapeEvent)
            {
            case DiagramNodeChangedEvent nodeChangedEvent when nodeChangedEvent.ChangedMember.In(DiagramMembersAffectedByLayout):
            case DiagramConnectorRouteChangedEvent _:
                return(false);

            default:
                return(true);
            }
        }
Ejemplo n.º 10
0
 private static ModelNodeId?GetParentId(
     [NotNull] IDiagram oldDiagram,
     [NotNull] IDiagram newDiagram,
     [NotNull] DiagramShapeEventBase diagramShapeEvent)
 {
     return(diagramShapeEvent switch
     {
         DiagramNodeAddedEvent i => GetParentId(i.NewNode),
         DiagramNodeChangedEvent i => GetParentId(i.NewNode),
         DiagramNodeRemovedEvent i => GetParentId(i.OldNode),
         DiagramConnectorAddedEvent i => GetParentId(i.NewConnector, newDiagram),
         DiagramConnectorRouteChangedEvent i => GetParentId(i.NewConnector, newDiagram),
         DiagramConnectorRemovedEvent i => GetParentId(i.OldConnector, oldDiagram),
         _ => throw new Exception($"Unexpected DiagramShapeEvent: {diagramShapeEvent}")
     });
Ejemplo n.º 11
0
 public DiagramOperationResult Add(DiagramShapeEventBase @event)
 {
     return(new DiagramOperationResult(Nodes, Connectors, Events.Add(@event)));
 }