1 | import RRElement from './rrelement';
|
2 | import LayoutInfo from './layoutinfo';
|
3 |
|
4 | export default class RRSequence extends RRElement {
|
5 |
|
6 |
|
7 | |
8 |
|
9 |
|
10 | constructor(rrElements) {
|
11 | super();
|
12 | if(arguments.length == 0) {
|
13 | rrElements = [];
|
14 | } else if(rrElements.constructor !== Array) {
|
15 | rrElements = arguments;
|
16 | }
|
17 | this.rrElements = rrElements;
|
18 | }
|
19 |
|
20 | getRRElements() {
|
21 | return this.rrElements;
|
22 | }
|
23 |
|
24 | computeLayoutInfo(rrDiagramToSVG) {
|
25 | let width = 0;
|
26 | let aboveConnector = 0;
|
27 | let belowConnector = 0;
|
28 | for (let i = 0; i < this.rrElements.length; i++) {
|
29 | const rrElement = this.rrElements[i];
|
30 | rrElement.computeLayoutInfo(rrDiagramToSVG);
|
31 | if (i > 0) {
|
32 | width += 10;
|
33 | }
|
34 | const layoutInfo = rrElement.getLayoutInfo();
|
35 | width += layoutInfo.getWidth();
|
36 | const height = layoutInfo.getHeight();
|
37 | const connectorOffset = layoutInfo.getConnectorOffset();
|
38 | aboveConnector = Math.max(aboveConnector, connectorOffset);
|
39 | belowConnector = Math.max(belowConnector, height - connectorOffset);
|
40 | }
|
41 | this.setLayoutInfo(new LayoutInfo(width, aboveConnector + belowConnector, aboveConnector));
|
42 | }
|
43 |
|
44 | toSVG(rrDiagramToSVG, xOffset, yOffset, svgContent) {
|
45 | const layoutInfo = this.getLayoutInfo();
|
46 | const connectorOffset = layoutInfo.getConnectorOffset();
|
47 | let widthOffset = 0;
|
48 | for (let i = 0; i < this.rrElements.length; i++) {
|
49 | const rrElement = this.rrElements[i];
|
50 | const layoutInfo2 = rrElement.getLayoutInfo();
|
51 | const width2 = layoutInfo2.getWidth();
|
52 | const connectorOffset2 = layoutInfo2.getConnectorOffset();
|
53 | const xOffset2 = widthOffset + xOffset;
|
54 | const yOffset2 = yOffset + connectorOffset - connectorOffset2;
|
55 | if (i > 0) {
|
56 | svgContent.addLineConnector(xOffset2 - 10, yOffset + connectorOffset, xOffset2, yOffset + connectorOffset);
|
57 | }
|
58 | rrElement.toSVG(rrDiagramToSVG, xOffset2, yOffset2, svgContent);
|
59 | widthOffset += 10;
|
60 | widthOffset += width2;
|
61 | }
|
62 | }
|
63 |
|
64 | }
|