mirror of
https://github.com/octoleo/plantuml.git
synced 2024-12-22 19:09:03 +00:00
Import version 1.2021.11
This commit is contained in:
parent
57953f4e5b
commit
11de152d92
@ -131,9 +131,9 @@ public class InstructionRepeat implements Instruction {
|
||||
if (Display.isNull(backward)) {
|
||||
return null;
|
||||
}
|
||||
Ftile result = factory.activity(backward, swimlane, boxStyle, Colors.empty(), null);
|
||||
Ftile result = factory.activity(backward, swimlaneOut, boxStyle, Colors.empty(), null);
|
||||
if (backwardNotes.size() > 0) {
|
||||
result = factory.addNote(result, swimlane, backwardNotes);
|
||||
result = factory.addNote(result, swimlaneOut, backwardNotes);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -76,16 +76,15 @@ public class ConnectionVerticalDown extends AbstractConnection implements Connec
|
||||
}
|
||||
|
||||
private Snake getSimpleSnake() {
|
||||
final Snake snake = Snake.create(color, Arrows.asToDown()).withLabel(textBlock,
|
||||
arrowHorizontalAlignment());
|
||||
final Snake snake = Snake.create(color, Arrows.asToDown()).withLabel(textBlock, arrowHorizontalAlignment());
|
||||
snake.addPoint(p1);
|
||||
snake.addPoint(p2);
|
||||
return snake;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||
final Snake snake = Snake.create(color, Arrows.asToDown()).withLabel(textBlock,
|
||||
arrowHorizontalAlignment());
|
||||
final Snake snake = Snake.create(color, Arrows.asToDown()).withLabel(textBlock, arrowHorizontalAlignment());
|
||||
final Point2D mp1a = translate1.getTranslated(p1);
|
||||
final Point2D mp2b = translate2.getTranslated(p2);
|
||||
final double middle = (mp1a.getY() + mp2b.getY()) / 2.0;
|
||||
|
@ -114,7 +114,7 @@ public class FtileFactoryDelegatorRepeat extends FtileFactoryDelegator {
|
||||
final LinkRendering endRepeatLinkRendering = repeat.getOutLinkRendering();
|
||||
final Rainbow endRepeatLinkColor = endRepeatLinkRendering == null ? null : endRepeatLinkRendering.getRainbow();
|
||||
|
||||
final Ftile entry = getEntry(swimlane, startLabel, colors, boxStyleIn);
|
||||
final Ftile entry = getEntry(repeat.getSwimlaneIn(), startLabel, colors, boxStyleIn);
|
||||
|
||||
Ftile result = FtileRepeat.create(swimlane, swimlaneOut, entry, repeat, test, yes, out, borderColor,
|
||||
diamondColor, arrowColor, endRepeatLinkColor, conditionStyle, this.skinParam(), fcDiamond, fcArrow,
|
||||
|
@ -205,6 +205,7 @@ public class FtileIfDown extends AbstractFtile {
|
||||
ug.draw(snake);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||
final StringBounder stringBounder = ug.getStringBounder();
|
||||
final Point2D p1 = getP1(stringBounder);
|
||||
@ -266,6 +267,7 @@ public class FtileIfDown extends AbstractFtile {
|
||||
ug.draw(snake);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||
|
||||
if (getFtile1().calculateDimension(ug.getStringBounder()).hasPointOut() == false) {
|
||||
@ -329,8 +331,7 @@ public class FtileIfDown extends AbstractFtile {
|
||||
final double xmax = Math.max(x1 + Diamond.diamondHalfSize,
|
||||
getTranslateForThen(stringBounder).getDx() + thenGeom.getWidth());
|
||||
|
||||
final Snake snake = Snake.create(endInlinkColor, Arrows.asToLeft())
|
||||
.emphasizeDirection(Direction.DOWN);
|
||||
final Snake snake = Snake.create(endInlinkColor, Arrows.asToLeft()).emphasizeDirection(Direction.DOWN);
|
||||
snake.addPoint(x1, y1);
|
||||
snake.addPoint(xmax, y1);
|
||||
snake.addPoint(xmax, y2);
|
||||
|
@ -402,6 +402,7 @@ class FtileIfLongHorizontal extends AbstractFtile {
|
||||
return getTranslate1(getFtile2(), stringBounder).getTranslated(p);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||
final Point2D p1 = getP1(ug.getStringBounder());
|
||||
final Point2D p2 = getP2(ug.getStringBounder());
|
||||
|
@ -121,7 +121,8 @@ class FtileRepeat extends AbstractFtile {
|
||||
FontConfiguration fcDiamond, FontConfiguration fcArrow, Ftile backward, boolean noOut,
|
||||
LinkRendering incoming1, LinkRendering incoming2) {
|
||||
|
||||
final FontConfiguration fontConfiguration1 = conditionStyle == ConditionStyle.INSIDE_HEXAGON ? fcDiamond : fcArrow;
|
||||
final FontConfiguration fontConfiguration1 = conditionStyle == ConditionStyle.INSIDE_HEXAGON ? fcDiamond
|
||||
: fcArrow;
|
||||
|
||||
final TextBlock tbTest = (Display.isNull(test) || test.isWhite()) ? TextBlockUtils.empty(0, 0)
|
||||
: test.create(fontConfiguration1, repeat.skinParam().getDefaultTextAlignment(HorizontalAlignment.LEFT),
|
||||
@ -168,22 +169,17 @@ class FtileRepeat extends AbstractFtile {
|
||||
: incoming1.getDisplay().create7(fcArrow, HorizontalAlignment.LEFT, spriteContainer,
|
||||
CreoleMode.SIMPLE_LINE);
|
||||
|
||||
if (repeat.getSwimlaneIn() == null || repeat.getSwimlaneIn() == swimlaneOut) {
|
||||
if (backward == null) {
|
||||
conns.add(result.new ConnectionBackSimple(incoming1.getRainbow(arrowColor), incomingText));
|
||||
} else {
|
||||
final Rainbow rainbow1 = incoming1.getRainbow(arrowColor);
|
||||
conns.add(result.new ConnectionBackBackward1(rainbow1, incomingText));
|
||||
final TextBlock backArrowLabel = incoming2 == null || incoming2.getDisplay() == null ? null
|
||||
: incoming2.getDisplay().create(fcArrow, HorizontalAlignment.LEFT, spriteContainer);
|
||||
final Rainbow rainbow2 = incoming2.getRainbow(arrowColor);
|
||||
conns.add(result.new ConnectionBackBackward2(rainbow2, backArrowLabel));
|
||||
}
|
||||
if (backward != null) {
|
||||
final Rainbow rainbow1 = incoming1.getRainbow(arrowColor);
|
||||
conns.add(result.new ConnectionBackBackward1(rainbow1, incomingText));
|
||||
final TextBlock backArrowLabel = incoming2 == null || incoming2.getDisplay() == null ? null
|
||||
: incoming2.getDisplay().create(fcArrow, HorizontalAlignment.LEFT, spriteContainer);
|
||||
final Rainbow rainbow2 = incoming2.getRainbow(arrowColor);
|
||||
conns.add(result.new ConnectionBackBackward2(rainbow2, backArrowLabel));
|
||||
} else if (repeat.getSwimlaneIn() == null || repeat.getSwimlaneIn() == swimlaneOut) {
|
||||
conns.add(result.new ConnectionBackSimple(incoming1.getRainbow(arrowColor), incomingText));
|
||||
} else {
|
||||
conns.add(result.new ConnectionBackComplex1(incoming1.getRainbow(arrowColor)));
|
||||
// conns.add(result.new
|
||||
// ConnectionBackComplexHorizontalOnly(incoming1.getRainbow(arrowColor),
|
||||
// incomingText));
|
||||
}
|
||||
|
||||
final Display out1 = repeat.getOutLinkRendering().getDisplay();
|
||||
@ -260,6 +256,7 @@ class FtileRepeat extends AbstractFtile {
|
||||
ug.draw(snake);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||
final StringBounder stringBounder = ug.getStringBounder();
|
||||
if (getFtile1().calculateDimension(stringBounder).hasPointOut() == false) {
|
||||
@ -304,6 +301,7 @@ class FtileRepeat extends AbstractFtile {
|
||||
// throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||
final StringBounder stringBounder = ug.getStringBounder();
|
||||
final Dimension2D dimRepeat = repeat.calculateDimension(stringBounder);
|
||||
@ -345,39 +343,6 @@ class FtileRepeat extends AbstractFtile {
|
||||
|
||||
}
|
||||
|
||||
// class ConnectionBackComplexHorizontalOnly extends AbstractConnection {
|
||||
// private final Rainbow arrowColor;
|
||||
// private final TextBlock tbback;
|
||||
//
|
||||
// public ConnectionBackComplexHorizontalOnly(Rainbow arrowColor, TextBlock tbback) {
|
||||
// super(diamond2, diamond2);
|
||||
// this.arrowColor = arrowColor;
|
||||
// this.tbback = tbback;
|
||||
// }
|
||||
//
|
||||
// private Point2D getP1(final StringBounder stringBounder) {
|
||||
// return getTranslateDiamond2(stringBounder).getTranslated(new Point2D.Double(0, 0));
|
||||
// }
|
||||
//
|
||||
// public void drawU(UGraphic ug) {
|
||||
// final StringBounder stringBounder = ug.getStringBounder();
|
||||
//
|
||||
// final Snake snake = Snake.create(arrowColor, null).withLabel(tbback, arrowHorizontalAlignment());
|
||||
// final Dimension2D dimRepeat = repeat.calculateDimension(stringBounder);
|
||||
// final Point2D p1 = getP1(stringBounder);
|
||||
// final Dimension2D dimDiamond2 = diamond2.calculateDimension(stringBounder);
|
||||
// final double x1 = p1.getX() + dimDiamond2.getWidth();
|
||||
// final double y1 = p1.getY() + dimDiamond2.getHeight() / 2;
|
||||
//
|
||||
// snake.addPoint(x1, y1);
|
||||
// final double xmax = p1.getX() + dimDiamond2.getWidth() / 2 + dimRepeat.getWidth() / 2
|
||||
// + Diamond.diamondHalfSize;
|
||||
// snake.addPoint(xmax, y1);
|
||||
// ug.draw(snake);
|
||||
// }
|
||||
//
|
||||
// }
|
||||
|
||||
class ConnectionBackBackward1 extends AbstractConnection {
|
||||
private final Rainbow arrowColor;
|
||||
private final TextBlock tbback;
|
||||
@ -400,7 +365,6 @@ class FtileRepeat extends AbstractFtile {
|
||||
public void drawU(UGraphic ug) {
|
||||
final StringBounder stringBounder = ug.getStringBounder();
|
||||
|
||||
final Snake snake = Snake.create(arrowColor, Arrows.asToUp()).withLabel(tbback, arrowHorizontalAlignment());
|
||||
final Point2D p1 = getP1(stringBounder);
|
||||
final Point2D p2 = getP2(stringBounder);
|
||||
final Dimension2D dimDiamond2 = diamond2.calculateDimension(stringBounder);
|
||||
@ -409,6 +373,8 @@ class FtileRepeat extends AbstractFtile {
|
||||
final double x2 = p2.getX();
|
||||
final double y2 = p2.getY();
|
||||
|
||||
final Snake snake = Snake.create(arrowColor, Arrows.asToUp()).withLabel(tbback, arrowHorizontalAlignment());
|
||||
|
||||
snake.addPoint(x1, y1);
|
||||
snake.addPoint(x2, y1);
|
||||
snake.addPoint(x2, y2);
|
||||
@ -418,7 +384,7 @@ class FtileRepeat extends AbstractFtile {
|
||||
|
||||
}
|
||||
|
||||
class ConnectionBackBackward2 extends AbstractConnection {
|
||||
class ConnectionBackBackward2 extends AbstractConnection implements ConnectionTranslatable {
|
||||
private final Rainbow arrowColor;
|
||||
private final TextBlock label;
|
||||
|
||||
@ -437,11 +403,41 @@ class FtileRepeat extends AbstractFtile {
|
||||
return getTranslateDiamond1(stringBounder).getTranslated(new Point2D.Double(0, 0));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||
final StringBounder stringBounder = ug.getStringBounder();
|
||||
|
||||
Point2D p1 = getP1(stringBounder);
|
||||
Point2D p2 = getP2(stringBounder);
|
||||
p1 = translate1.getTranslated(p1);
|
||||
p2 = translate2.getTranslated(p2);
|
||||
|
||||
final Dimension2D dimDiamond1 = diamond1.calculateDimension(stringBounder);
|
||||
|
||||
final double x1 = p1.getX();
|
||||
final double y1 = p1.getY();
|
||||
double x2 = p2.getX();
|
||||
if (x2 < x1)
|
||||
x2 += dimDiamond1.getWidth();
|
||||
final double y2 = p2.getY() + dimDiamond1.getHeight() / 2;
|
||||
|
||||
Snake snake = Snake.create(arrowColor, x2 < x1 ? Arrows.asToLeft() : Arrows.asToRight());
|
||||
if (label != null) {
|
||||
snake = snake.withLabel(label, arrowHorizontalAlignment());
|
||||
}
|
||||
|
||||
snake.addPoint(x1, y1);
|
||||
snake.addPoint(x1, y2);
|
||||
snake.addPoint(x2, y2);
|
||||
|
||||
ug.draw(snake);
|
||||
|
||||
}
|
||||
|
||||
public void drawU(UGraphic ug) {
|
||||
final StringBounder stringBounder = ug.getStringBounder();
|
||||
|
||||
Snake snake = Snake.create(arrowColor, Arrows.asToLeft());
|
||||
// .emphasizeDirection(Direction.UP);
|
||||
if (label != null) {
|
||||
snake = snake.withLabel(label, arrowHorizontalAlignment());
|
||||
}
|
||||
@ -504,6 +500,7 @@ class FtileRepeat extends AbstractFtile {
|
||||
ug.draw(snake);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||
final StringBounder stringBounder = ug.getStringBounder();
|
||||
final Snake snake = Snake.create(arrowColor, Arrows.asToLeft()).emphasizeDirection(Direction.UP)
|
||||
|
@ -196,6 +196,7 @@ class FtileWhile extends AbstractFtile {
|
||||
ug.draw(snake);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||
final StringBounder stringBounder = ug.getStringBounder();
|
||||
final Point2D p1 = getP1(stringBounder);
|
||||
@ -271,6 +272,7 @@ class FtileWhile extends AbstractFtile {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||
final StringBounder stringBounder = ug.getStringBounder();
|
||||
final Snake snake = Snake.create(endInlinkColor, Arrows.asToLeft()).withMerge(MergeStrategy.LIMITED);
|
||||
|
@ -244,6 +244,7 @@ public class ParallelBuilderFork extends AbstractParallelFtilesBuilder {
|
||||
ug.draw(snake);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||
ug = ug.apply(UTranslate.dx(x));
|
||||
final FtileGeometry geo2 = getFtile2().calculateDimension(getStringBounder());
|
||||
@ -297,6 +298,7 @@ public class ParallelBuilderFork extends AbstractParallelFtilesBuilder {
|
||||
ug.draw(snake);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||
ug = ug.apply(UTranslate.dx(x));
|
||||
final FtileGeometry geo = getFtile1().calculateDimension(getStringBounder());
|
||||
|
@ -225,6 +225,7 @@ public class ParallelBuilderMerge extends AbstractParallelFtilesBuilder {
|
||||
ug.draw(snake);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||
ug = ug.apply(UTranslate.dx(x));
|
||||
final FtileGeometry geo = getFtile2().calculateDimension(getStringBounder());
|
||||
|
@ -236,6 +236,7 @@ public class ParallelBuilderSplit extends AbstractParallelFtilesBuilder {
|
||||
ug.draw(snake);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||
ug = ug.apply(UTranslate.dx(x));
|
||||
final FtileGeometry geo = getFtile2().calculateDimension(getStringBounder());
|
||||
@ -292,6 +293,7 @@ public class ParallelBuilderSplit extends AbstractParallelFtilesBuilder {
|
||||
ug.draw(snake);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||
ug = ug.apply(UTranslate.dx(x));
|
||||
final FtileGeometry geo = getFtile1().calculateDimension(getStringBounder());
|
||||
|
@ -135,6 +135,7 @@ public class FtileIfWithLinks extends FtileIfWithDiamonds {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||
final StringBounder stringBounder = ug.getStringBounder();
|
||||
Point2D p1 = getP1(stringBounder);
|
||||
@ -223,6 +224,7 @@ public class FtileIfWithLinks extends FtileIfWithDiamonds {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||
final StringBounder stringBounder = ug.getStringBounder();
|
||||
final FtileGeometry geo = getFtile1().calculateDimension(stringBounder);
|
||||
@ -313,6 +315,7 @@ public class FtileIfWithLinks extends FtileIfWithDiamonds {
|
||||
ug.draw(snake);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||
final StringBounder stringBounder = ug.getStringBounder();
|
||||
final FtileGeometry dimTotal = calculateDimensionInternal(stringBounder);
|
||||
@ -416,7 +419,7 @@ public class FtileIfWithLinks extends FtileIfWithDiamonds {
|
||||
super(null, null);
|
||||
this.arrowColor = arrowColor;
|
||||
}
|
||||
|
||||
|
||||
public void drawU(UGraphic ug) {
|
||||
final StringBounder stringBounder = ug.getStringBounder();
|
||||
final Dimension2D totalDim = calculateDimensionInternal(stringBounder);
|
||||
@ -446,7 +449,7 @@ public class FtileIfWithLinks extends FtileIfWithDiamonds {
|
||||
s.addPoint(maxX, totalDim.getHeight());
|
||||
ug.draw(s);
|
||||
}
|
||||
|
||||
|
||||
private double[] getMinmax(StringBounder stringBounder, double width, List<Ftile> allTiles, Swimlane intoSw,
|
||||
List<Swimlane> allSwimlanes) {
|
||||
final int current = allSwimlanes.indexOf(intoSw);
|
||||
@ -499,7 +502,7 @@ public class FtileIfWithLinks extends FtileIfWithDiamonds {
|
||||
}
|
||||
return new double[] { minX, maxX };
|
||||
}
|
||||
|
||||
|
||||
private int getFirstSwimlane(StringBounder stringBounder, List<Ftile> allTiles, List<Swimlane> allSwimlanes) {
|
||||
for (int i = 0; i < allSwimlanes.size(); i++) {
|
||||
if (atLeastOne(stringBounder, allSwimlanes.get(i), allTiles)) {
|
||||
@ -529,7 +532,6 @@ public class FtileIfWithLinks extends FtileIfWithDiamonds {
|
||||
return ftile.getSwimlaneOut() == swimlane && ftile.getSwimlanes().contains(swimlane);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public Ftile addLinks(Branch branch1, Branch branch2, StringBounder stringBounder) {
|
||||
|
@ -70,29 +70,29 @@ public class PSystemDonors extends PlainDiagram {
|
||||
private static final int COLS = 6;
|
||||
private static final int FREE_LINES = 6;
|
||||
|
||||
public static final String DONORS = "6zeD0AmFjCllA6nYeh4EstErPvQF9MScYM1vdb2SMCJfBY3-0FTEZ_kDz1VHbUvzqunHwxL9EOEeFWXw"
|
||||
+ "mBlRGljG-byVX3bBNWHtfWGNa0AYEBf4VgGRsKwVL1bIWcUfwEzlcRYztJekL2Q9lX7AWU9-EMJWRVfi"
|
||||
+ "dft6XqOlK0t-zf1sN_tVfRDrULKLfWNThS08Z3gDSAJiDVwFQb575Em4DUpqOpgLgreErQh4PjkR8bf9"
|
||||
+ "SyUiqD3EHvqc5yLaf4ZnraOANZ6OeIadiq-HN_f5uu-w2HrQgsk8vGuWpfdIe-kstgx7WrX-iSG7mHLy"
|
||||
+ "GHQ1EP1o95v4otFJZOQB1muDkwZ6bfNSyyGAGIgqa3V_A9AItaCykmnk6curGE3rDWf8ng0cJJZRTpUW"
|
||||
+ "qXviqQM1gwxr5-RMTLYUoisauGd4mis2Ma0DGUA3Nj0PVUMMoJqFXIqXJqayfwr6_Pbu9srpGT_uKX8m"
|
||||
+ "NpjFpSp-Y56s7j8uSf_phyuEUDUGbQlVZ3d2EOEwlCm5CTzQe7u4UcnEM1BVK-uif23KH-gc3vrhJseL"
|
||||
+ "uPHSKYhMwKjiUItt3rrfams9vEbWoNotV5rhYWTRw2ga6dX3gpJDEb_0f8Rw-qiUBPtlWcjAnUuDYpOY"
|
||||
+ "kuRelvzRcXcA0tHeYjdGJG26iKghpc834UmMEZRW9e4SXF9fSicVbb-Yj_m4m5jA15rXGz8CVlzIyf23"
|
||||
+ "2p6GgUjIN00idbBgHSFZ0GkLEWJTZYgXz3Pt_GoJbctBni8oQHVFEmt6o8_fbEB2V9bBU8HXgLeqvpwi"
|
||||
+ "7S0kmRFvECshxZFDLO1BXVUOZMl_ae4ymvmHaQBJ5Oz7sXRpK8TX5cFEIrrqJxUJWuTkFN0sY-OneqmU"
|
||||
+ "iXmO74v6JRr5w4E3uMyAsHnxhKNr2RQ7w_JWPaOUl9wQt5AJ8neksrcEdIq2aip5AtPHuVo2jImZcQDh"
|
||||
+ "2P4ZLaz2XlnEzKbOgiI5fWaxbxi6psHw5EJXl2TMFUh757GkeAgO9WX92sRE49I7hGKoi5RHCzS6iVkb"
|
||||
+ "7GlwDZyvSPP3yMKJxJHkoC8Kc1uYlU4W4ZC7iXAzr2GHm7T_tArUPgr37D_TqufnaBIGn40LcTFfFoWp"
|
||||
+ "zTOZD8tr5ltVrjhBilFdNsjaarEplVOUWcWT90KWmWjqb0j214-1hpSR9WDEM255Jp9SkMxfUI1XmLRw"
|
||||
+ "u2RgT9jHl-F5SXDoqThpGvN-DBKeEEiRKbo4WlBPboXfxQKULDJshMySRd8m_5rKcPJ9lRsCfib8-0Ig"
|
||||
+ "E7V7RZCLzTYi0IAO0vK9ZDtzMPd6KyRShr2g3Cy4ylqM6PAC7bfOKzFAk11OAvtRUolR4C_e_u8H_QZM"
|
||||
+ "kUTUFJITvEe6YeZ2jod8k22Ik5oa7GYmcsjEFEZc6p_oGRLG1fPspR1p1YlaD_GZl95mp3O-KEGn5ytJ"
|
||||
+ "NiXXMyZUDGly2S1x20zaOR5Aho8MIZaUI94Kp5ajarcadRG5f_GEe5CKZF_VEn0kDz7yYimky-gDP2xJ"
|
||||
+ "t8yhY7ouFul4fYLR8t9WFoDpsVOLkLrpaGuxzJ_m7UUx7r6tBoB82iIC97Zj9gIx6tjKczZCU6xGu3Wk"
|
||||
+ "y-DWyelO5Uq2oS3ML6n1Lh8PAF4a1BL39XLclP9VtHzSSowHV-_TIs6W2Sypjz2Dv_fW5TbQYwUa0JKt"
|
||||
+ "MNpNlZzm9uiJ2YSU2rnO9cxqCALRotogNJTjDf169NALYl4UPdRJ4YK_qVMakXmokVM2cYMXTTsPeZCu"
|
||||
+ "jWLpwTgvvuKPNEetKtqcfCT0m_Mb1W00";
|
||||
public static final String DONORS = "6mOE03mSRygAqa-2sUB1zgHs3y67oAViE8BbUK9nOX6dku3u0zmxFUutqbz4LtRlcsP4hTScvGoY-Y3e"
|
||||
+ "0Uzk2-r3wNzz4EOiUH7ScH9SG0g8ukWI-P5kP3jzKcL82RxyZVJFg8c_kaepeSDd0_UtWMiJ21dDARPx"
|
||||
+ "cJAlLqYb59-_yX7w138rLbrJbICmjvO2rb-oUYLzo_zDdQtBGo7CqjqAZC2eQ8JBFFOO_vygg70ATWur"
|
||||
+ "xFHZEfLKBOTgLMApxKqHhQIvOrQeR_9Hg-QY62r5YdyqKl2BP8R6dCm-ILxqcyOVTHCwN9yAoN9FG6TR"
|
||||
+ "FJgVz7QkAx7y8j67W2VuWcm6Hi1of2wY-RdfHiF30mxrkwZ6bfRSyoG9Wane8H_-KPYINf9dLy1Dmwi6"
|
||||
+ "8FpUXWAI7DIeXhELkm6LbDYYqy9L5_k5kMKTbgTod3GyXLXucQW5L0aI7tH1PzGyRqtkxWPRfAT4Ozeg"
|
||||
+ "bCy2EsYR2_h6bXB1V6qVcYNuAqQvbDGupdlltxKNWDtIygg7CKSuPw0kMoZ4U6k1-X7eiJbXYRwct5d8"
|
||||
+ "WgYFqvi-TAuvgLM4Kt9BMQpJbx3bjPmVkgJ91YLv2YpwU-ANOWjui4bNKwe1NsYLf5dd2vYqpD-N7Yt_"
|
||||
+ "VI-ufaJith1e8rmXwQ_V4PiP2W4wE8NPq4q136MLLXt51YBOBNHiW7O4qWdbo779H_oIFl8J06yk8Rh2"
|
||||
+ "HaWJ-FFBaeSEBc8WKzUcS06m-PIYBXe-3x1GeIdeLbG9fRVny9qvMlOvRMnQ9ktcURl16FandQLOcAzG"
|
||||
+ "uH669Nf6SyxRsaVO9NWM7wTvrNkMSnNWKk4zQkFQBpBWvmmP4IawNV5UpsoPXmd3BFQSbodTyyZWuA5R"
|
||||
+ "3jpDeZdCA9E7B1i6XnDHhO-4_hOO_fOXcvtN6bIVOEjqdH7SpCY2rrkJMwevek6noI9EDWb8CnUlE2KB"
|
||||
+ "5n2iPTd971Kb8j-nUX8ov7UgJy9IfIuqZTXOxYeyetiKvE6y9rOzvayVw5n0bMeJXAG5Crj2-SpyW0oi"
|
||||
+ "LVJCjYHs__U51MFhsnCJX-BB9jf-SWF159WUmddW81B9G5gYbpKn0lZkZxlLqsiTvl6tBwSO1qaBIGHK"
|
||||
+ "GQOptb1cwgazmiPwY_wVj6MB2t_-jKURd9hisdi8edKG5u08Bz1HBWWXdW9V7pPC1vnWYOiECbovPkbP"
|
||||
+ "8B9W2trm4tLvcz6uunVBZSj5QyyFLVBTt0uNyy4tfBW85ULzJIcPjfb1DT8ltdMuoK7nTr5bM2INlJcP"
|
||||
+ "Z8HDe8fpT-pMDjHZoG0pc0EL2UpT_LbPQ6ZC_Ggaod02vFijaaf6XHPMQreH2u4rSk7stfQJyepwJ4Rq"
|
||||
+ "axNE6Nlrq3Z8rVKN8GhV3WbvGPYuNIHE1EZDDISMTFDD0FcYMYY9fHqTTkvWXVmF_WZUI3Xc6nzOv0cb"
|
||||
+ "UPODENIJx8EpG7qWxo4ia8d5Ibr5B9HoF90YAPYpMiQpIDjf2yxe7K2dA1Z_tziGBYVH_8fcbrxLIEPo"
|
||||
+ "pBsuWiY6-xj8R56oDI0T-rhcigqpSZld8Xrswd_WEyvtFg9kNKH00b5BWjUMWtHtOvzQ6ZQrvteLnt6P"
|
||||
+ "fuF9BsHNjFELWQtnOWkodCr0YIS1X1q85P9NuLVx1wuvvyYlzwbI6AZXUUOMTEEvDp0MAvR4KzA0waqM"
|
||||
+ "vTht1-xanGc54ui5BYmLRlGmgLihd6h7JPlrf569NALYl8Snkxcav9yg1fNIDRcze6P9Q5rtbj4Pd6nX"
|
||||
+ "Bi_xl7jX1fNw9UfJmHu33TU7RvmXlRAiOXyX50RLk31POW00";
|
||||
|
||||
/*
|
||||
* Special thanks to our sponsors and donors:
|
||||
|
@ -304,8 +304,8 @@ public class QuoteUtils {
|
||||
"Lbh jnag gb tb ubzr naq erguvax lbhe yvsr", "V'z trggva gbb byq sbe guvf fuvg",
|
||||
"Vg'f n jryy xabja snpg gung n tybony pbafcvenpl jbhyq or ng gur bevtva bs znal snxr pbafcvenpl gurbevrf",
|
||||
"Gh nhenvf ienvzrag qh pubvfve ha nhger zrgvre.",
|
||||
"...rg qrf srfgvaf qr ebv fhe yr mvap q'ha ohssrg qr tner",
|
||||
"Obevf, V guvax lbh'er tbaan arrq n ovttre ohf");
|
||||
"...rg qrf srfgvaf qr ebv fhe yr mvap q'ha ohssrg qr tner", "Obevf, V guvax lbh'er tbaan arrq n ovttre ohf",
|
||||
"Cebtenzzvat vf na neg sbez gung svtugf onpx", "Jr ernyyl fubhyq trg fbzr cncrejrvtugf");
|
||||
|
||||
private QuoteUtils() {
|
||||
}
|
||||
|
@ -58,7 +58,7 @@ public class CommandEndSomething extends SingleLineCommand2<NwDiagram> {
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(NwDiagram diagram, LineLocation location, RegexResult arg) {
|
||||
return diagram.endSomething();
|
||||
return diagram.closeSomething();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -63,6 +63,7 @@ import net.sourceforge.plantuml.graphic.TextBlock;
|
||||
import net.sourceforge.plantuml.graphic.TextBlockUtils;
|
||||
import net.sourceforge.plantuml.graphic.UDrawable;
|
||||
import net.sourceforge.plantuml.nwdiag.core.NServer;
|
||||
import net.sourceforge.plantuml.nwdiag.core.NStackable;
|
||||
import net.sourceforge.plantuml.nwdiag.core.Network;
|
||||
import net.sourceforge.plantuml.nwdiag.core.NwGroup;
|
||||
import net.sourceforge.plantuml.nwdiag.next.GridTextBlockDecorated;
|
||||
@ -103,19 +104,41 @@ public class NwDiagram extends UmlDiagram {
|
||||
initDone = true;
|
||||
}
|
||||
|
||||
private Network currentNetwork() {
|
||||
private Network lastNetwork() {
|
||||
if (networks.size() == 0) {
|
||||
return null;
|
||||
}
|
||||
return networks.get(networks.size() - 1);
|
||||
}
|
||||
|
||||
private Network stackedNetwork() {
|
||||
for (NStackable element : stack)
|
||||
if (element instanceof Network)
|
||||
return (Network) element;
|
||||
return null;
|
||||
}
|
||||
|
||||
private NwGroup stakedGroup() {
|
||||
for (NStackable element : stack)
|
||||
if (element instanceof NwGroup)
|
||||
return (NwGroup) element;
|
||||
return null;
|
||||
}
|
||||
|
||||
private final List<NStackable> stack = new ArrayList<NStackable>();
|
||||
|
||||
public CommandExecutionResult openGroup(String name) {
|
||||
if (initDone == false) {
|
||||
return errorNoInit();
|
||||
}
|
||||
currentGroup = new NwGroup(name, currentNetwork());
|
||||
groups.add(currentGroup);
|
||||
for (NStackable element : stack)
|
||||
if (element instanceof NwGroup)
|
||||
return CommandExecutionResult.error("Cannot nest group");
|
||||
|
||||
final NwGroup newGroup = new NwGroup(name);
|
||||
stack.add(0, newGroup);
|
||||
groups.add(newGroup);
|
||||
currentGroup = newGroup;
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
@ -123,7 +146,21 @@ public class NwDiagram extends UmlDiagram {
|
||||
if (initDone == false) {
|
||||
return errorNoInit();
|
||||
}
|
||||
createNetwork(name);
|
||||
for (NStackable element : stack)
|
||||
if (element instanceof Network)
|
||||
return CommandExecutionResult.error("Cannot nest network");
|
||||
final Network network = createNetwork(name);
|
||||
stack.add(0, network);
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
public CommandExecutionResult closeSomething() {
|
||||
if (initDone == false) {
|
||||
return errorNoInit();
|
||||
}
|
||||
if (stack.size() > 0)
|
||||
stack.remove(0);
|
||||
this.currentGroup = null;
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
@ -137,41 +174,25 @@ public class NwDiagram extends UmlDiagram {
|
||||
if (initDone == false) {
|
||||
return errorNoInit();
|
||||
}
|
||||
final NServer element;
|
||||
if (currentNetwork() == null) {
|
||||
final NServer server2;
|
||||
if (lastNetwork() == null) {
|
||||
createNetwork(name1);
|
||||
element = new NServer(name2);
|
||||
server2 = new NServer(name2);
|
||||
} else {
|
||||
final NServer already = servers.get(name1);
|
||||
final NServer server1 = servers.get(name1);
|
||||
final Network network1 = createNetwork("");
|
||||
network1.goInvisible();
|
||||
if (already != null) {
|
||||
connect(already, toSet(null));
|
||||
if (server1 != null) {
|
||||
server1.connectTo(lastNetwork());
|
||||
}
|
||||
element = new NServer(name2, already.getBar());
|
||||
server2 = new NServer(name2, server1.getBar());
|
||||
}
|
||||
servers.put(name2, element);
|
||||
addInternal(element, toSet(null));
|
||||
servers.put(name2, server2);
|
||||
server2.connectTo(lastNetwork());
|
||||
playField.addInPlayfield(server2.getBar());
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
private void addInternal(NServer server, Map<String, String> props) {
|
||||
connect(server, props);
|
||||
final String description = props.get("description");
|
||||
if (description != null) {
|
||||
server.setDescription(description);
|
||||
}
|
||||
final String shape = props.get("shape");
|
||||
if (shape != null) {
|
||||
server.setShape(shape);
|
||||
}
|
||||
playField.addInPlayfield(server.getBar());
|
||||
}
|
||||
|
||||
private void connect(NServer server, final Map<String, String> props) {
|
||||
server.connect(currentNetwork(), props);
|
||||
}
|
||||
|
||||
public CommandExecutionResult addElement(String name, String definition) {
|
||||
if (initDone == false) {
|
||||
return errorNoInit();
|
||||
@ -180,7 +201,7 @@ public class NwDiagram extends UmlDiagram {
|
||||
currentGroup.addName(name);
|
||||
}
|
||||
NServer server = null;
|
||||
if (currentNetwork() == null) {
|
||||
if (lastNetwork() == null) {
|
||||
if (currentGroup != null) {
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
@ -197,15 +218,10 @@ public class NwDiagram extends UmlDiagram {
|
||||
servers.put(name, server);
|
||||
}
|
||||
}
|
||||
addInternal(server, toSet(definition));
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
public CommandExecutionResult endSomething() {
|
||||
if (initDone == false) {
|
||||
return errorNoInit();
|
||||
}
|
||||
this.currentGroup = null;
|
||||
final Map<String, String> props = toSet(definition);
|
||||
server.connectTo(lastNetwork(), props.get("address"));
|
||||
server.updateProperties(props);
|
||||
playField.addInPlayfield(server.getBar());
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
@ -357,7 +373,7 @@ public class NwDiagram extends UmlDiagram {
|
||||
NwGroup group = getGroupOf(server);
|
||||
if (group != null)
|
||||
topMargin += group.getTopHeaderHeight(stringBounder, getSkinParam());
|
||||
grid.add(i, col, server.asTextBlock(topMargin, conns, networks, getSkinParam()));
|
||||
grid.add(i, col, server.getLinkedElement(topMargin, conns, networks, getSkinParam()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -378,24 +394,24 @@ public class NwDiagram extends UmlDiagram {
|
||||
if (initDone == false) {
|
||||
return errorNoInit();
|
||||
}
|
||||
if ("address".equalsIgnoreCase(property) && currentNetwork() != null) {
|
||||
currentNetwork().setOwnAdress(value);
|
||||
if ("address".equalsIgnoreCase(property) && lastNetwork() != null) {
|
||||
lastNetwork().setOwnAdress(value);
|
||||
}
|
||||
if ("width".equalsIgnoreCase(property) && currentNetwork() != null) {
|
||||
currentNetwork().setFullWidth("full".equalsIgnoreCase(value));
|
||||
if ("width".equalsIgnoreCase(property) && lastNetwork() != null) {
|
||||
lastNetwork().setFullWidth("full".equalsIgnoreCase(value));
|
||||
}
|
||||
if ("color".equalsIgnoreCase(property)) {
|
||||
final HColor color = value == null ? null
|
||||
: getSkinParam().getIHtmlColorSet().getColorOrWhite(getSkinParam().getThemeStyle(), value);
|
||||
if (currentGroup != null) {
|
||||
currentGroup.setColor(color);
|
||||
} else if (currentNetwork() != null) {
|
||||
currentNetwork().setColor(color);
|
||||
} else if (lastNetwork() != null) {
|
||||
lastNetwork().setColor(color);
|
||||
}
|
||||
}
|
||||
if ("description".equalsIgnoreCase(property)) {
|
||||
if (currentGroup == null) {
|
||||
currentNetwork().setDescription(value);
|
||||
lastNetwork().setDescription(value);
|
||||
} else {
|
||||
currentGroup.setDescription(value);
|
||||
}
|
||||
|
@ -106,7 +106,7 @@ public class NServer {
|
||||
return style.getFontConfiguration(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
|
||||
}
|
||||
|
||||
public LinkedElement asTextBlock(double topMargin, Map<Network, String> conns, List<Network> networks,
|
||||
public LinkedElement getLinkedElement(double topMargin, Map<Network, String> conns, List<Network> networks,
|
||||
ISkinParam skinParam) {
|
||||
final StyleBuilder styleBuilder = skinParam.getCurrentStyleBuilder();
|
||||
final SymbolContext symbolContext = getStyleDefinition(SName.server).getMergedStyle(styleBuilder)
|
||||
@ -123,11 +123,13 @@ public class NServer {
|
||||
return new LinkedElement(topMargin, this, box, conns2, networks);
|
||||
}
|
||||
|
||||
public void connect(Network network, Map<String, String> props) {
|
||||
String address = props.get("address");
|
||||
if (address == null) {
|
||||
public void connectTo(Network network) {
|
||||
connectTo(network, "");
|
||||
}
|
||||
|
||||
public void connectTo(Network network, String address) {
|
||||
if (address == null)
|
||||
address = "";
|
||||
}
|
||||
if (address.length() == 0 && connections.containsKey(network)) {
|
||||
return;
|
||||
}
|
||||
@ -138,6 +140,17 @@ public class NServer {
|
||||
bar.addStage(network.getUp());
|
||||
}
|
||||
|
||||
public void updateProperties(Map<String, String> props) {
|
||||
final String description = props.get("description");
|
||||
if (description != null) {
|
||||
this.setDescription(description);
|
||||
}
|
||||
final String shape = props.get("shape");
|
||||
if (shape != null) {
|
||||
this.setShape(shape);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public final String toString() {
|
||||
return name;
|
||||
|
45
src/net/sourceforge/plantuml/nwdiag/core/NStackable.java
Normal file
45
src/net/sourceforge/plantuml/nwdiag/core/NStackable.java
Normal file
@ -0,0 +1,45 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009-2020, Arnaud Roques
|
||||
*
|
||||
* Project Info: http://plantuml.com
|
||||
*
|
||||
* If you like this project or if you find it useful, you can support us at:
|
||||
*
|
||||
* http://plantuml.com/patreon (only 1$ per month!)
|
||||
* http://plantuml.com/paypal
|
||||
*
|
||||
* This file is part of PlantUML.
|
||||
*
|
||||
* PlantUML is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* PlantUML distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
* USA.
|
||||
*
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.nwdiag.core;
|
||||
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
|
||||
public interface NStackable {
|
||||
|
||||
public void setDescription(String description);
|
||||
|
||||
public void setColor(HColor color);
|
||||
|
||||
}
|
@ -37,7 +37,7 @@ package net.sourceforge.plantuml.nwdiag.core;
|
||||
import net.sourceforge.plantuml.nwdiag.next.NStage;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
|
||||
public class Network {
|
||||
public class Network implements NStackable {
|
||||
|
||||
private final String name;
|
||||
private String description;
|
||||
@ -93,6 +93,7 @@ public class Network {
|
||||
return this.description;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
@ -101,6 +102,7 @@ public class Network {
|
||||
return color;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void setColor(HColor color) {
|
||||
this.color = color;
|
||||
}
|
||||
|
@ -57,7 +57,7 @@ import net.sourceforge.plantuml.ugraphic.UGraphic;
|
||||
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
|
||||
public class NwGroup {
|
||||
public class NwGroup implements NStackable {
|
||||
|
||||
private final Set<String> names = new HashSet<>();
|
||||
|
||||
@ -94,7 +94,7 @@ public class NwGroup {
|
||||
return "NwGroup:" + name + " " + names + " " + nbox;
|
||||
}
|
||||
|
||||
public NwGroup(String name, Object... unused) {
|
||||
public NwGroup(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@ -106,10 +106,12 @@ public class NwGroup {
|
||||
return color;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void setColor(HColor color) {
|
||||
this.color = color;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void setDescription(String value) {
|
||||
this.description = value;
|
||||
}
|
||||
|
@ -98,9 +98,6 @@ public class PlayerAnalog extends Player {
|
||||
return suggestedHeight;
|
||||
}
|
||||
|
||||
public void drawFrameTitle(UGraphic ug) {
|
||||
}
|
||||
|
||||
private SymbolContext getContext() {
|
||||
return new SymbolContext(HColorUtils.COL_D7E0F2, HColorUtils.COL_038048).withStroke(new UStroke(1.5));
|
||||
}
|
||||
|
@ -78,9 +78,6 @@ public class PlayerBinary extends Player {
|
||||
return getHeightForConstraints(stringBounder) + suggestedHeight;
|
||||
}
|
||||
|
||||
public void drawFrameTitle(UGraphic ug) {
|
||||
}
|
||||
|
||||
private SymbolContext getContext() {
|
||||
return new SymbolContext(HColorUtils.COL_D7E0F2, HColorUtils.COL_038048).withStroke(new UStroke(1.5));
|
||||
}
|
||||
|
@ -34,11 +34,13 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.timingdiagram;
|
||||
|
||||
import java.awt.geom.Dimension2D;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import net.sourceforge.plantuml.ISkinParam;
|
||||
import net.sourceforge.plantuml.command.Position;
|
||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||
import net.sourceforge.plantuml.graphic.AbstractTextBlock;
|
||||
import net.sourceforge.plantuml.graphic.StringBounder;
|
||||
import net.sourceforge.plantuml.graphic.SymbolContext;
|
||||
import net.sourceforge.plantuml.graphic.TextBlock;
|
||||
@ -46,6 +48,7 @@ import net.sourceforge.plantuml.graphic.TextBlockUtils;
|
||||
import net.sourceforge.plantuml.graphic.UDrawable;
|
||||
import net.sourceforge.plantuml.graphic.color.Colors;
|
||||
import net.sourceforge.plantuml.timingdiagram.graphic.IntricatedPoint;
|
||||
import net.sourceforge.plantuml.timingdiagram.graphic.PlayerFrame;
|
||||
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
||||
import net.sourceforge.plantuml.ugraphic.ULine;
|
||||
import net.sourceforge.plantuml.ugraphic.UStroke;
|
||||
@ -56,20 +59,32 @@ public class PlayerClock extends Player {
|
||||
|
||||
private final int period;
|
||||
private final int pulse;
|
||||
private final int offset;
|
||||
private final double ymargin = 8;
|
||||
private final boolean displayTitle;
|
||||
|
||||
public PlayerClock(ISkinParam skinParam, TimingRuler ruler, int period, int pulse, boolean compact) {
|
||||
super("", skinParam, ruler, compact);
|
||||
public PlayerClock(String title, ISkinParam skinParam, TimingRuler ruler, int period, int pulse, int offset,
|
||||
boolean compact) {
|
||||
super(title, skinParam, ruler, compact);
|
||||
this.displayTitle = title.length() > 0;
|
||||
this.period = period;
|
||||
this.pulse = pulse;
|
||||
this.offset = offset;
|
||||
this.suggestedHeight = 30;
|
||||
}
|
||||
|
||||
public double getFullHeight(StringBounder striWngBounder) {
|
||||
return suggestedHeight;
|
||||
public double getFullHeight(StringBounder stringBounder) {
|
||||
return suggestedHeight + getTitleHeight(stringBounder);
|
||||
}
|
||||
|
||||
public void drawFrameTitle(UGraphic ug) {
|
||||
private double getLineHeight(StringBounder stringBounder) {
|
||||
return suggestedHeight - 2 * ymargin;
|
||||
}
|
||||
|
||||
private double getTitleHeight(StringBounder stringBounder) {
|
||||
if (displayTitle)
|
||||
return getTitle().calculateDimension(stringBounder).getHeight();
|
||||
return 0;
|
||||
}
|
||||
|
||||
private SymbolContext getContext() {
|
||||
@ -103,11 +118,26 @@ public class PlayerClock extends Player {
|
||||
return 1.0 * pulse / period;
|
||||
}
|
||||
|
||||
private double getOffsetCoef() {
|
||||
return 1.0 * offset / period;
|
||||
}
|
||||
|
||||
public final int getPeriod() {
|
||||
return period;
|
||||
}
|
||||
|
||||
public TextBlock getPart1(double fullAvailableWidth, double specialVSpace) {
|
||||
if (displayTitle)
|
||||
return new AbstractTextBlock() {
|
||||
|
||||
public void drawU(UGraphic ug) {
|
||||
new PlayerFrame(getTitle()).drawFrameTitle(ug);
|
||||
}
|
||||
|
||||
public Dimension2D calculateDimension(StringBounder stringBounder) {
|
||||
return getTitle().calculateDimension(stringBounder);
|
||||
}
|
||||
};
|
||||
return TextBlockUtils.empty(0, 0);
|
||||
}
|
||||
|
||||
@ -115,7 +145,8 @@ public class PlayerClock extends Player {
|
||||
return new UDrawable() {
|
||||
public void drawU(UGraphic ug) {
|
||||
ug = getContext().apply(ug);
|
||||
final ULine vline = ULine.vline(getFullHeight(ug.getStringBounder()) - 2 * ymargin);
|
||||
ug = ug.apply(UTranslate.dy(getTitleHeight(ug.getStringBounder())));
|
||||
final ULine vline = ULine.vline(getLineHeight(ug.getStringBounder()));
|
||||
int i = 0;
|
||||
double lastx = -Double.MAX_VALUE;
|
||||
while (i < 1000) {
|
||||
@ -127,13 +158,22 @@ public class PlayerClock extends Player {
|
||||
i++;
|
||||
if (x > lastx) {
|
||||
final double dx = x - lastx;
|
||||
final ULine hline1 = ULine.hline(dx * getPulseCoef());
|
||||
final ULine hline2 = ULine.hline(dx * (1 - getPulseCoef()));
|
||||
ug.apply(new UTranslate(lastx, ymargin)).draw(vline);
|
||||
ug.apply(new UTranslate(lastx, ymargin)).draw(hline1);
|
||||
final double x2 = lastx + dx * getPulseCoef();
|
||||
|
||||
final ULine hline1 = ULine.hline(dx * getOffsetCoef());
|
||||
final ULine hline2 = ULine.hline(dx * getPulseCoef());
|
||||
final ULine hline3 = ULine.hline(dx * (1 - getPulseCoef() - getOffsetCoef()));
|
||||
|
||||
final double x2 = lastx + dx * getOffsetCoef();
|
||||
final double x3 = lastx + dx * (getOffsetCoef() + getPulseCoef());
|
||||
|
||||
if (offset > 0)
|
||||
ug.apply(new UTranslate(lastx, ymargin + vline.getDY())).draw(hline1);
|
||||
ug.apply(new UTranslate(x2, ymargin)).draw(hline2);
|
||||
ug.apply(new UTranslate(x3, ymargin + vline.getDY())).draw(hline3);
|
||||
|
||||
ug.apply(new UTranslate(x2, ymargin)).draw(vline);
|
||||
ug.apply(new UTranslate(x2, ymargin + vline.getDY())).draw(hline2);
|
||||
ug.apply(new UTranslate(x3, ymargin)).draw(vline);
|
||||
|
||||
}
|
||||
lastx = x;
|
||||
}
|
||||
|
@ -286,8 +286,10 @@ public class TimingDiagram extends UmlDiagram implements Clocks {
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
public CommandExecutionResult createClock(String code, String full, int period, int pulse, boolean compact) {
|
||||
final PlayerClock player = new PlayerClock(getSkinParam(), ruler, period, pulse, compactByDefault);
|
||||
public CommandExecutionResult createClock(String code, String full, int period, int pulse, int offset,
|
||||
boolean compact) {
|
||||
final PlayerClock player = new PlayerClock(full, getSkinParam(), ruler, period, pulse, offset,
|
||||
compactByDefault);
|
||||
players.put(code, player);
|
||||
clocks.put(code, player);
|
||||
final TimeTick tick = new TimeTick(new BigDecimal(period), TimingFormat.DECIMAL);
|
||||
|
@ -59,6 +59,11 @@ public class CommandClock extends SingleLineCommand2<TimingDiagram> {
|
||||
RegexLeaf.spaceOneOrMore())), //
|
||||
new RegexLeaf("TYPE", "clock"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexOptional(new RegexConcat( //
|
||||
new RegexLeaf("FULL", "[%g]([^%g]+)[%g]"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("as"), //
|
||||
RegexLeaf.spaceOneOrMore())), //
|
||||
new RegexLeaf("CODE", "([%pLN_.@]+)"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("with"), //
|
||||
@ -71,7 +76,14 @@ public class CommandClock extends SingleLineCommand2<TimingDiagram> {
|
||||
new RegexLeaf("pulse"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("PULSE", "([0-9]+)") //
|
||||
)), RegexLeaf.end());
|
||||
)), //
|
||||
new RegexOptional(new RegexConcat( //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("offset"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("OFFSET", "([0-9]+)") //
|
||||
)), //
|
||||
RegexLeaf.end());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -79,12 +91,18 @@ public class CommandClock extends SingleLineCommand2<TimingDiagram> {
|
||||
final String compact = arg.get("COMPACT", 0);
|
||||
final String code = arg.get("CODE", 0);
|
||||
final int period = Integer.parseInt(arg.get("PERIOD", 0));
|
||||
final String pulseString = arg.get("PULSE", 0);
|
||||
int pulse = 0;
|
||||
if (pulseString != null) {
|
||||
pulse = Integer.parseInt(pulseString);
|
||||
}
|
||||
return diagram.createClock(code, code, period, pulse, compact != null);
|
||||
final int pulse = getInt(arg.get("PULSE", 0));
|
||||
final int offset = getInt(arg.get("OFFSET", 0));
|
||||
String full = arg.get("FULL", 0);
|
||||
if (full == null)
|
||||
full = "";
|
||||
return diagram.createClock(code, full, period, pulse, offset, compact != null);
|
||||
}
|
||||
|
||||
private int getInt(String value) {
|
||||
if (value == null)
|
||||
return 0;
|
||||
return Integer.parseInt(value);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ public class Version {
|
||||
private static final int MAJOR_SEPARATOR = 1000000;
|
||||
|
||||
public static int version() {
|
||||
return 1202110;
|
||||
return 1202111;
|
||||
}
|
||||
|
||||
public static int versionPatched() {
|
||||
@ -80,7 +80,7 @@ public class Version {
|
||||
}
|
||||
|
||||
public static int beta() {
|
||||
final int beta = 6;
|
||||
final int beta = 0;
|
||||
return beta;
|
||||
}
|
||||
|
||||
@ -93,7 +93,7 @@ public class Version {
|
||||
}
|
||||
|
||||
public static long compileTime() {
|
||||
return 1630331028954L;
|
||||
return 1633181171844L;
|
||||
}
|
||||
|
||||
public static String compileTimeString() {
|
||||
|
Loading…
Reference in New Issue
Block a user