public DiagramEvent ApplyLayout(GroupLayoutInfo diagramLayout) { var events = new List <DiagramShapeEventBase>(); var updatedNodes = new Dictionary <ModelNodeId, IDiagramNode>(); var updatedConnectors = new Dictionary <ModelRelationshipId, IDiagramConnector>(); ApplyLayoutRecursive(diagramLayout, events, updatedNodes, updatedConnectors); var newDiagram = CreateInstance(Model, _nodes.SetItems(updatedNodes), _connectors.SetItems(updatedConnectors)); return(DiagramEvent.Create(newDiagram, events)); }
public DiagramEvent UpdateConnectorRoute(ModelRelationshipId relationshipId, Route newRoute) { var maybeDiagramConnector = TryGetConnector(relationshipId); if (!maybeDiagramConnector.HasValue) { throw new InvalidOperationException($"Connector {relationshipId} does not exist."); } var oldConnector = maybeDiagramConnector.Value; var newConnector = oldConnector.WithRoute(newRoute); var newDiagram = CreateInstance(Model, _nodes, _connectors.SetItem(relationshipId, newConnector)); return(DiagramEvent.Create(newDiagram, new DiagramConnectorRouteChangedEvent(oldConnector, newConnector))); }
private DiagramEvent UpdateNode( ModelNodeId nodeId, [NotNull] Func <IDiagramNode, IDiagramNode> nodeMutatorFunc, [NotNull] Func <IDiagramNode, IDiagramNode, DiagramNodeChangedEvent> nodeChangedEventFunc) { var maybeDiagramNode = TryGetNode(nodeId); if (!maybeDiagramNode.HasValue) { throw new InvalidOperationException($"Trying to update {nodeId} but it does not exist."); } var oldNode = maybeDiagramNode.Value; var newNode = nodeMutatorFunc(oldNode); var newDiagram = CreateInstance(Model, _nodes.SetItem(newNode.Id, newNode), _connectors); var diagramNodeChangedEvent = nodeChangedEventFunc(oldNode, newNode); return(DiagramEvent.Create(newDiagram, diagramNodeChangedEvent)); }
private DiagramEvent UpdateNodeCore( ModelNodeId nodeId, [NotNull] Func <IDiagramNode, IDiagramNode> nodeMutatorFunc, [NotNull] Func <IDiagramNode, IDiagramNode, DiagramNodeChangedEvent> nodeChangedEventFunc) { var maybeDiagramNode = TryGetNode(nodeId); if (!maybeDiagramNode.HasValue) { return(DiagramEvent.None(this)); } var oldNode = maybeDiagramNode.Value; var newNode = nodeMutatorFunc(oldNode); var newDiagram = CreateInstance(Model, _nodes.SetItem(newNode.Id, newNode), _connectors); var diagramNodeChangedEvent = nodeChangedEventFunc(oldNode, newNode); return(DiagramEvent.Create(newDiagram, diagramNodeChangedEvent)); }
public DiagramEvent AddConnector(ModelRelationshipId relationshipId) { var maybeConnector = TryGetConnector(relationshipId); if (maybeConnector.HasValue) { return(DiagramEvent.None(this)); } var maybeRelationship = Model.TryGetRelationship(relationshipId); if (!maybeRelationship.HasValue) { throw new InvalidOperationException($"Relationship {relationshipId} does not exist."); } var newConnector = CreateConnector(maybeRelationship.Value); var newDiagram = CreateInstance(Model, _nodes, _connectors.Add(newConnector.Id, newConnector)); return(DiagramEvent.Create(newDiagram, new DiagramConnectorAddedEvent(newConnector))); }
//public IEnumerable<IDiagramNode> GetAdjacentNodes(ModelNodeId id, DirectedModelRelationshipType? directedModelRelationshipType = null) //{ // IEnumerable<IDiagramNode> result; // if (directedModelRelationshipType != null) // { // result = _allShapesGraph.GetAdjacentVertices( // id, // directedModelRelationshipType.Value.Direction, // e => e.ModelRelationship.Stereotype == directedModelRelationshipType.Value.Stereotype); // } // else // { // result = _allShapesGraph.GetAdjacentVertices(id, EdgeDirection.In) // .Union(_allShapesGraph.GetAdjacentVertices(id, EdgeDirection.Out)); // } // return result; //} public DiagramEvent AddNode(ModelNodeId nodeId, ModelNodeId?parentNodeId = null) { var maybeDiagramNode = TryGetNode(nodeId); if (maybeDiagramNode.HasValue) { return(DiagramEvent.None(this)); } var maybeModelNode = Model.TryGetNode(nodeId); if (!maybeModelNode.HasValue) { throw new Exception($"Node {nodeId} not found in model."); } var newNode = CreateNode(maybeModelNode.Value).WithParentNodeId(parentNodeId); var newDiagram = CreateInstance(Model, _nodes.Add(newNode.Id, newNode), _connectors); return(DiagramEvent.Create(newDiagram, new DiagramNodeAddedEvent(newNode))); }
/// <remarks> /// When the model (backing the diagram) is updated there can be an interim time /// when there are diagram shapes that does not exist in the model any more. /// This is fine because those model events will eventually arrive that remove such shapes. /// </remarks> public DiagramEvent UpdateModel(IModel newModel) { var newDiagram = CreateInstance(newModel, _nodes, _connectors); return(DiagramEvent.Create(newDiagram)); }