private void OnDiagramChanged(DiagramEventBase diagramEvent) { switch (diagramEvent) { case DiagramNodeAddedEvent diagramNodeAddedEvent: var addedDiagramNode = diagramNodeAddedEvent.DiagramNode; var addDiagramNodeAction = new AddDiagramNodeAction(addedDiagramNode); if (addedDiagramNode is IContainerDiagramNode containerDiagramNode) { var incrementalLayoutEngine = CreateLayoutEngine(DiagramService); _layoutEnginesPerNodes.Add(containerDiagramNode.Id, incrementalLayoutEngine); } var layoutEngineForAddedDiagramNode = GetLayoutEngine(addedDiagramNode); layoutEngineForAddedDiagramNode.EnqueueDiagramAction(addDiagramNodeAction); _modelNodeToContainingLayoutEngine.Add(addedDiagramNode.Id, layoutEngineForAddedDiagramNode); break; case DiagramConnectorAddedEvent diagramConnectorAddedEvent: var addedDiagramConnector = diagramConnectorAddedEvent.DiagramConnector; var addDiagramConnectorAction = new AddDiagramConnectorAction(addedDiagramConnector); var layoutEngineForAddedDiagramConnector = GetLayoutEngine(addedDiagramConnector); if (layoutEngineForAddedDiagramConnector != null) { layoutEngineForAddedDiagramConnector.EnqueueDiagramAction(addDiagramConnectorAction); _modelRelationshipToContainingLayoutEngine.Add(addedDiagramConnector.Id, layoutEngineForAddedDiagramConnector); } break; case DiagramNodeSizeChangedEvent diagramNodeSizeChangedEvent: var resizedDiagramNode = diagramNodeSizeChangedEvent.DiagramNode; var resizeDiagramNodeAction = new ResizeDiagramNodeAction(resizedDiagramNode, resizedDiagramNode.Size); _modelNodeToContainingLayoutEngine[resizedDiagramNode.Id].EnqueueDiagramAction(resizeDiagramNodeAction); break; case DiagramNodeRemovedEvent diagramNodeRemovedEvent: var removedDiagramNode = diagramNodeRemovedEvent.DiagramNode; var removeDiagramNodeAction = new RemoveDiagramNodeAction(removedDiagramNode); _modelNodeToContainingLayoutEngine[removedDiagramNode.Id].EnqueueDiagramAction(removeDiagramNodeAction); break; case DiagramConnectorRemovedEvent diagramConnectorRemovedEvent: var removedDiagramConnector = diagramConnectorRemovedEvent.DiagramConnector; var removeDiagramConnectorAction = new RemoveDiagramConnectorAction(removedDiagramConnector); _modelRelationshipToContainingLayoutEngine[removedDiagramConnector.Id].EnqueueDiagramAction(removeDiagramConnectorAction); break; case DiagramClearedEvent _: foreach (var incrementalLayoutEngine in _layoutEnginesPerNodes.Values) { incrementalLayoutEngine.Dispose(); } _layoutEnginesPerNodes.Clear(); _rootLayoutEngine.EnqueueDiagramAction(new ClearDiagramAction()); break; } }
public void Visit(ResizeDiagramNodeAction action) { _consumer.ResizeDiagramNode(action.DiagramNode, action.NewSize); }