mirror of
https://github.com/octoleo/plantuml.git
synced 2024-06-09 19:52:25 +00:00
fix: minor issues about multiples stereotype and improve new shapes action and process
https://github.com/plantuml/plantuml/issues/1538 https://github.com/plantuml/plantuml/issues/1631
This commit is contained in:
parent
d07cda5f5f
commit
6c73caa943
|
@ -108,11 +108,11 @@ public class ActivityDiagram3 extends UmlDiagram {
|
||||||
return swinlanes.nextLinkRenderer();
|
return swinlanes.nextLinkRenderer();
|
||||||
}
|
}
|
||||||
|
|
||||||
public CommandExecutionResult addActivity(Display activity, BoxStyle style, Url url, Colors colors,
|
public CommandExecutionResult addActivity(Display activity, BoxStyle boxStyle, Url url, Colors colors,
|
||||||
Stereotype stereotype) {
|
Stereotype stereotype) {
|
||||||
manageSwimlaneStrategy();
|
manageSwimlaneStrategy();
|
||||||
final InstructionSimple ins = new InstructionSimple(activity, nextLinkRenderer(),
|
final InstructionSimple ins = new InstructionSimple(activity, nextLinkRenderer(),
|
||||||
swinlanes.getCurrentSwimlane(), style, url, colors, stereotype);
|
swinlanes.getCurrentSwimlane(), boxStyle, url, colors, stereotype);
|
||||||
final CommandExecutionResult added = current().add(ins);
|
final CommandExecutionResult added = current().add(ins);
|
||||||
if (added.isOk() == false)
|
if (added.isOk() == false)
|
||||||
return added;
|
return added;
|
||||||
|
@ -396,7 +396,7 @@ public class ActivityDiagram3 extends UmlDiagram {
|
||||||
}
|
}
|
||||||
if (current() instanceof InstructionWhile) {
|
if (current() instanceof InstructionWhile) {
|
||||||
final InstructionWhile instructionWhile = (InstructionWhile) current();
|
final InstructionWhile instructionWhile = (InstructionWhile) current();
|
||||||
instructionWhile.setBackward(label, swinlanes.getCurrentSwimlane(), boxStyle, incoming1, incoming2);
|
instructionWhile.setBackward(label, boxStyle, incoming1, incoming2, stereotype);
|
||||||
return CommandExecutionResult.ok();
|
return CommandExecutionResult.ok();
|
||||||
}
|
}
|
||||||
return CommandExecutionResult.error("Cannot find repeat");
|
return CommandExecutionResult.error("Cannot find repeat");
|
||||||
|
@ -406,7 +406,7 @@ public class ActivityDiagram3 extends UmlDiagram {
|
||||||
public void doWhile(Display test, Display yes, HColor color) {
|
public void doWhile(Display test, Display yes, HColor color) {
|
||||||
manageSwimlaneStrategy();
|
manageSwimlaneStrategy();
|
||||||
final InstructionWhile instructionWhile = new InstructionWhile(swinlanes.getCurrentSwimlane(), current(), test,
|
final InstructionWhile instructionWhile = new InstructionWhile(swinlanes.getCurrentSwimlane(), current(), test,
|
||||||
nextLinkRenderer(), yes, color, getSkinParam());
|
nextLinkRenderer(), yes, color, getSkinParam().getCurrentStyleBuilder());
|
||||||
current().add(instructionWhile);
|
current().add(instructionWhile);
|
||||||
setCurrent(instructionWhile);
|
setCurrent(instructionWhile);
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ public class InstructionSimple extends MonoSwimable implements Instruction {
|
||||||
private final Display label;
|
private final Display label;
|
||||||
private final Colors colors;
|
private final Colors colors;
|
||||||
private final LinkRendering inlinkRendering;
|
private final LinkRendering inlinkRendering;
|
||||||
private final BoxStyle style;
|
private final BoxStyle boxStyle;
|
||||||
private final Url url;
|
private final Url url;
|
||||||
private final Stereotype stereotype;
|
private final Stereotype stereotype;
|
||||||
|
|
||||||
|
@ -71,12 +71,12 @@ public class InstructionSimple extends MonoSwimable implements Instruction {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public InstructionSimple(Display label, LinkRendering inlinkRendering, Swimlane swimlane, BoxStyle style, Url url,
|
public InstructionSimple(Display label, LinkRendering inlinkRendering, Swimlane swimlane, BoxStyle boxStyle,
|
||||||
Colors colors, Stereotype stereotype) {
|
Url url, Colors colors, Stereotype stereotype) {
|
||||||
super(swimlane);
|
super(swimlane);
|
||||||
this.stereotype = stereotype;
|
this.stereotype = stereotype;
|
||||||
this.url = url;
|
this.url = url;
|
||||||
this.style = style;
|
this.boxStyle = boxStyle;
|
||||||
this.label = label;
|
this.label = label;
|
||||||
this.inlinkRendering = Objects.requireNonNull(inlinkRendering);
|
this.inlinkRendering = Objects.requireNonNull(inlinkRendering);
|
||||||
this.colors = Objects.requireNonNull(colors);
|
this.colors = Objects.requireNonNull(colors);
|
||||||
|
@ -85,7 +85,7 @@ public class InstructionSimple extends MonoSwimable implements Instruction {
|
||||||
// ::comment when __CORE__
|
// ::comment when __CORE__
|
||||||
@Override
|
@Override
|
||||||
public Gtile createGtile(ISkinParam skinParam, StringBounder stringBounder) {
|
public Gtile createGtile(ISkinParam skinParam, StringBounder stringBounder) {
|
||||||
GtileBox result = GtileBox.create(stringBounder, colors.mute(skinParam), label, getSwimlaneIn(), style,
|
GtileBox result = GtileBox.create(stringBounder, colors.mute(skinParam), label, getSwimlaneIn(), boxStyle,
|
||||||
stereotype);
|
stereotype);
|
||||||
if (hasNotes()) {
|
if (hasNotes()) {
|
||||||
final Collection<PositionedNote> notes = getPositionedNotes();
|
final Collection<PositionedNote> notes = getPositionedNotes();
|
||||||
|
@ -103,7 +103,7 @@ public class InstructionSimple extends MonoSwimable implements Instruction {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Ftile createFtile(FtileFactory factory) {
|
public Ftile createFtile(FtileFactory factory) {
|
||||||
Ftile result = factory.activity(label, getSwimlaneIn(), style, colors, stereotype);
|
Ftile result = factory.activity(label, getSwimlaneIn(), boxStyle, colors, stereotype);
|
||||||
if (url != null) {
|
if (url != null) {
|
||||||
result = factory.addUrl(result, url);
|
result = factory.addUrl(result, url);
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,6 +55,7 @@ import net.sourceforge.plantuml.klimt.font.StringBounder;
|
||||||
import net.sourceforge.plantuml.klimt.geom.VerticalAlignment;
|
import net.sourceforge.plantuml.klimt.geom.VerticalAlignment;
|
||||||
import net.sourceforge.plantuml.sequencediagram.NotePosition;
|
import net.sourceforge.plantuml.sequencediagram.NotePosition;
|
||||||
import net.sourceforge.plantuml.sequencediagram.NoteType;
|
import net.sourceforge.plantuml.sequencediagram.NoteType;
|
||||||
|
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||||
import net.sourceforge.plantuml.style.ISkinParam;
|
import net.sourceforge.plantuml.style.ISkinParam;
|
||||||
import net.sourceforge.plantuml.style.StyleBuilder;
|
import net.sourceforge.plantuml.style.StyleBuilder;
|
||||||
|
|
||||||
|
@ -73,13 +74,14 @@ public class InstructionWhile extends WithNote implements Instruction, Instructi
|
||||||
|
|
||||||
private LinkRendering outColor = LinkRendering.none();
|
private LinkRendering outColor = LinkRendering.none();
|
||||||
private final Swimlane swimlane;
|
private final Swimlane swimlane;
|
||||||
private final ISkinParam skinParam;
|
|
||||||
|
|
||||||
private Instruction specialOut;
|
private Instruction specialOut;
|
||||||
|
|
||||||
private BoxStyle boxStyle;
|
private BoxStyle boxStyle;
|
||||||
private Swimlane swimlaneOut;
|
|
||||||
private Display backward = Display.NULL;
|
private Display backward = Display.NULL;
|
||||||
|
private Stereotype stereotype;
|
||||||
|
|
||||||
private LinkRendering incoming1 = LinkRendering.none();
|
private LinkRendering incoming1 = LinkRendering.none();
|
||||||
private LinkRendering incoming2 = LinkRendering.none();
|
private LinkRendering incoming2 = LinkRendering.none();
|
||||||
private boolean backwardCalled;
|
private boolean backwardCalled;
|
||||||
|
@ -90,15 +92,14 @@ public class InstructionWhile extends WithNote implements Instruction, Instructi
|
||||||
}
|
}
|
||||||
|
|
||||||
public InstructionWhile(Swimlane swimlane, Instruction parent, Display test, LinkRendering nextLinkRenderer,
|
public InstructionWhile(Swimlane swimlane, Instruction parent, Display test, LinkRendering nextLinkRenderer,
|
||||||
Display yes, HColor color, ISkinParam skinParam) {
|
Display yes, HColor color, StyleBuilder currentStyleBuilder) {
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
this.test = Objects.requireNonNull(test);
|
this.test = Objects.requireNonNull(test);
|
||||||
this.nextLinkRenderer = Objects.requireNonNull(nextLinkRenderer);
|
this.nextLinkRenderer = Objects.requireNonNull(nextLinkRenderer);
|
||||||
this.yes = Objects.requireNonNull(yes);
|
this.yes = Objects.requireNonNull(yes);
|
||||||
this.swimlane = swimlane;
|
this.swimlane = swimlane;
|
||||||
this.currentStyleBuilder = skinParam.getCurrentStyleBuilder();
|
this.currentStyleBuilder = currentStyleBuilder;
|
||||||
this.color = color;
|
this.color = color;
|
||||||
this.skinParam = skinParam;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -119,9 +120,10 @@ public class InstructionWhile extends WithNote implements Instruction, Instructi
|
||||||
@Override
|
@Override
|
||||||
public Ftile createFtile(FtileFactory factory) {
|
public Ftile createFtile(FtileFactory factory) {
|
||||||
final Ftile back = Display.isNull(backward) ? null
|
final Ftile back = Display.isNull(backward) ? null
|
||||||
: factory.activity(backward, swimlane, boxStyle, Colors.empty(), null);
|
: factory.activity(backward, swimlane, boxStyle, Colors.empty(), stereotype);
|
||||||
Ftile tmp = repeatList.createFtile(factory);
|
Ftile tmp = repeatList.createFtile(factory);
|
||||||
tmp = factory.createWhile(outColor, swimlane, tmp, test, yes, color, specialOut, back, incoming1, incoming2, currentStyleBuilder);
|
tmp = factory.createWhile(outColor, swimlane, tmp, test, yes, color, specialOut, back, incoming1, incoming2,
|
||||||
|
currentStyleBuilder);
|
||||||
if (getPositionedNotes().size() > 0)
|
if (getPositionedNotes().size() > 0)
|
||||||
tmp = FtileWithNoteOpale.create(tmp, getPositionedNotes(), false, VerticalAlignment.CENTER);
|
tmp = FtileWithNoteOpale.create(tmp, getPositionedNotes(), false, VerticalAlignment.CENTER);
|
||||||
|
|
||||||
|
@ -194,14 +196,14 @@ public class InstructionWhile extends WithNote implements Instruction, Instructi
|
||||||
return repeatList.containsBreak();
|
return repeatList.containsBreak();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBackward(Display label, Swimlane swimlaneOut, BoxStyle boxStyle, LinkRendering incoming1,
|
public void setBackward(Display label, BoxStyle boxStyle, LinkRendering incoming1, LinkRendering incoming2,
|
||||||
LinkRendering incoming2) {
|
Stereotype stereotype) {
|
||||||
this.backward = label;
|
this.backward = label;
|
||||||
this.swimlaneOut = swimlaneOut;
|
|
||||||
this.boxStyle = boxStyle;
|
this.boxStyle = boxStyle;
|
||||||
this.incoming1 = incoming1;
|
this.incoming1 = incoming1;
|
||||||
this.incoming2 = incoming2;
|
this.incoming2 = incoming2;
|
||||||
this.backwardCalled = true;
|
this.backwardCalled = true;
|
||||||
|
this.stereotype = stereotype;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void incoming(LinkRendering incoming) {
|
public void incoming(LinkRendering incoming) {
|
||||||
|
|
|
@ -160,11 +160,12 @@ public enum BoxStyle {
|
||||||
if (bs.style == style.charAt(0))
|
if (bs.style == style.charAt(0))
|
||||||
return bs;
|
return bs;
|
||||||
|
|
||||||
style = style.replaceAll("\\W", "");
|
for (String s : style.split("\\s")) {
|
||||||
|
s = s.replaceAll("\\W", "");
|
||||||
for (BoxStyle bs : BoxStyle.values())
|
for (BoxStyle bs : BoxStyle.values())
|
||||||
if (style.equalsIgnoreCase(bs.stereotype))
|
if (s.equalsIgnoreCase(bs.stereotype))
|
||||||
return bs;
|
return bs;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return PLAIN;
|
return PLAIN;
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,12 +102,44 @@ class USymbolAction extends USymbol {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private double getHTitle(XDimension2D dimTitle) {
|
||||||
|
final double htitle;
|
||||||
|
if (dimTitle.getWidth() == 0)
|
||||||
|
htitle = 10;
|
||||||
|
else
|
||||||
|
htitle = dimTitle.getHeight();
|
||||||
|
|
||||||
|
return htitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TextBlock asBig(final TextBlock title, final HorizontalAlignment labelAlignment, final TextBlock stereotype,
|
public TextBlock asBig(final TextBlock title, final HorizontalAlignment labelAlignment, final TextBlock stereotype,
|
||||||
final double width, final double height, final Fashion symbolContext,
|
final double width, final double height, final Fashion symbolContext,
|
||||||
final HorizontalAlignment stereoAlignment) {
|
final HorizontalAlignment stereoAlignment) {
|
||||||
throw new UnsupportedOperationException();
|
return new AbstractTextBlock() {
|
||||||
|
|
||||||
|
public void drawU(UGraphic ug) {
|
||||||
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
|
final XDimension2D dim = calculateDimension(stringBounder);
|
||||||
|
ug = symbolContext.apply(ug);
|
||||||
|
final XDimension2D dimTitle = title.calculateDimension(stringBounder);
|
||||||
|
drawAction(ug, dim.getWidth(), dim.getHeight(), symbolContext.getDeltaShadow(),
|
||||||
|
symbolContext.getRoundCorner(), symbolContext.getDiagonalCorner());
|
||||||
|
final double posTitle = (width - dimTitle.getWidth()) / 2;
|
||||||
|
title.drawU(ug.apply(new UTranslate(posTitle, 2)));
|
||||||
|
final XDimension2D dimStereo = stereotype.calculateDimension(stringBounder);
|
||||||
|
final double posStereo = (width - dimStereo.getWidth()) / 2;
|
||||||
|
|
||||||
|
stereotype.drawU(ug.apply(new UTranslate(4 + posStereo, 2 + getHTitle(dimTitle))));
|
||||||
|
}
|
||||||
|
|
||||||
|
public XDimension2D calculateDimension(StringBounder stringBounder) {
|
||||||
|
return new XDimension2D(width, height);
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -64,7 +64,7 @@ class USymbolProcess extends USymbol {
|
||||||
return sname;
|
return sname;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void drawAction(UGraphic ug, double width, double height, double shadowing, double roundCorner,
|
private void drawProcess(UGraphic ug, double width, double height, double shadowing, double roundCorner,
|
||||||
double diagonalCorner) {
|
double diagonalCorner) {
|
||||||
final UPolygon shape = new UPolygon();
|
final UPolygon shape = new UPolygon();
|
||||||
shape.addPoint(0, 0);
|
shape.addPoint(0, 0);
|
||||||
|
@ -89,7 +89,7 @@ class USymbolProcess extends USymbol {
|
||||||
final XDimension2D dim = calculateDimension(ug.getStringBounder());
|
final XDimension2D dim = calculateDimension(ug.getStringBounder());
|
||||||
ug = UGraphicStencil.create(ug, dim);
|
ug = UGraphicStencil.create(ug, dim);
|
||||||
ug = symbolContext.apply(ug);
|
ug = symbolContext.apply(ug);
|
||||||
drawAction(ug, dim.getWidth(), dim.getHeight(), symbolContext.getDeltaShadow(),
|
drawProcess(ug, dim.getWidth(), dim.getHeight(), symbolContext.getDeltaShadow(),
|
||||||
symbolContext.getRoundCorner(), symbolContext.getDiagonalCorner());
|
symbolContext.getRoundCorner(), symbolContext.getDiagonalCorner());
|
||||||
final Margin margin = getMargin();
|
final Margin margin = getMargin();
|
||||||
final TextBlock tb = TextBlockUtils.mergeTB(stereotype, label, stereoAlignment);
|
final TextBlock tb = TextBlockUtils.mergeTB(stereotype, label, stereoAlignment);
|
||||||
|
@ -104,11 +104,41 @@ class USymbolProcess extends USymbol {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private double getHTitle(XDimension2D dimTitle) {
|
||||||
|
final double htitle;
|
||||||
|
if (dimTitle.getWidth() == 0)
|
||||||
|
htitle = 10;
|
||||||
|
else
|
||||||
|
htitle = dimTitle.getHeight();
|
||||||
|
|
||||||
|
return htitle;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TextBlock asBig(final TextBlock title, final HorizontalAlignment labelAlignment, final TextBlock stereotype,
|
public TextBlock asBig(final TextBlock title, final HorizontalAlignment labelAlignment, final TextBlock stereotype,
|
||||||
final double width, final double height, final Fashion symbolContext,
|
final double width, final double height, final Fashion symbolContext,
|
||||||
final HorizontalAlignment stereoAlignment) {
|
final HorizontalAlignment stereoAlignment) {
|
||||||
throw new UnsupportedOperationException();
|
return new AbstractTextBlock() {
|
||||||
|
|
||||||
|
public void drawU(UGraphic ug) {
|
||||||
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
|
final XDimension2D dim = calculateDimension(stringBounder);
|
||||||
|
ug = symbolContext.apply(ug);
|
||||||
|
final XDimension2D dimTitle = title.calculateDimension(stringBounder);
|
||||||
|
drawProcess(ug, dim.getWidth(), dim.getHeight(), symbolContext.getDeltaShadow(),
|
||||||
|
symbolContext.getRoundCorner(), symbolContext.getDiagonalCorner());
|
||||||
|
final double posTitle = (width - dimTitle.getWidth()) / 2;
|
||||||
|
title.drawU(ug.apply(new UTranslate(posTitle, 2)));
|
||||||
|
final XDimension2D dimStereo = stereotype.calculateDimension(stringBounder);
|
||||||
|
final double posStereo = (width - dimStereo.getWidth()) / 2;
|
||||||
|
|
||||||
|
stereotype.drawU(ug.apply(new UTranslate(4 + posStereo, 2 + getHTitle(dimTitle))));
|
||||||
|
}
|
||||||
|
|
||||||
|
public XDimension2D calculateDimension(StringBounder stringBounder) {
|
||||||
|
return new XDimension2D(width, height);
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -72,7 +72,7 @@ public class CommandPackageWithUSymbol extends SingleLineCommand2<AbstractEntity
|
||||||
private static IRegex getRegexConcat() {
|
private static IRegex getRegexConcat() {
|
||||||
return RegexConcat.build(CommandPackageWithUSymbol.class.getName(), RegexLeaf.start(), //
|
return RegexConcat.build(CommandPackageWithUSymbol.class.getName(), RegexLeaf.start(), //
|
||||||
new RegexLeaf("SYMBOL",
|
new RegexLeaf("SYMBOL",
|
||||||
"(package|rectangle|hexagon|node|artifact|folder|file|frame|cloud|database|storage|component|card|queue|stack)"), //
|
"(package|rectangle|hexagon|node|artifact|folder|file|frame|cloud|action|process|database|storage|component|card|queue|stack)"), //
|
||||||
RegexLeaf.spaceOneOrMore(), //
|
RegexLeaf.spaceOneOrMore(), //
|
||||||
new RegexOr(//
|
new RegexOr(//
|
||||||
new RegexConcat( //
|
new RegexConcat( //
|
||||||
|
|
Loading…
Reference in New Issue
Block a user