Beispiel #1
0
        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);
 }