1
0
mirror of https://github.com/octoleo/plantuml.git synced 2024-11-22 21:15:09 +00:00
This commit is contained in:
Arnaud Roques 2021-10-17 11:02:33 +02:00
parent b5bf071737
commit aa7d520a45
24 changed files with 546 additions and 246 deletions

View File

@ -133,7 +133,7 @@ public class CommandCreateClass extends SingleLineCommand2<ClassDiagram> {
final String genericOption = arg.getLazzy("DISPLAY", 1);
final String generic = genericOption != null ? genericOption : arg.get("GENERIC", 0);
final String stereotype = arg.get("STEREO", 0);
final String stereo = arg.get("STEREO", 0);
final ILeaf entity;
final Ident idNewLong = diagram.buildLeafIdent(idShort);
if (diagram.V1972()) {
@ -156,10 +156,11 @@ public class CommandCreateClass extends SingleLineCommand2<ClassDiagram> {
entity = diagram.createLeaf(idNewLong, code, Display.getWithNewlines(display), type, null);
}
}
if (stereotype != null) {
entity.setStereotype(Stereotype.build(stereotype, diagram.getSkinParam().getCircledCharacterRadius(),
if (stereo != null) {
entity.setStereotype(Stereotype.build(stereo, diagram.getSkinParam().getCircledCharacterRadius(),
diagram.getSkinParam().getFont(null, false, FontParam.CIRCLED_CHARACTER),
diagram.getSkinParam().getIHtmlColorSet()));
entity.setStereostyle(stereo);
}
if (generic != null) {
entity.setGeneric(generic);

View File

@ -49,8 +49,7 @@ import net.sourceforge.plantuml.ugraphic.color.NoSuchColorRuntimeException;
public class CommandCreoleColorChange implements Command {
private static final Pattern2 pattern = MyPattern
.cmpile("^(" + Splitter.fontColorPattern2 + "(.*?)\\</color\\>)");
private static final Pattern2 pattern = MyPattern.cmpile("^(" + Splitter.fontColorPattern2 + "(.*?)\\</color\\>)");
private static final Pattern2 patternEol = MyPattern.cmpile("^(" + Splitter.fontColorPattern2 + "(.*)$)");
@ -90,12 +89,13 @@ public class CommandCreoleColorChange implements Command {
final HColor color = HColorSet.instance().getColor(themeStyle, s);
final FontConfiguration fc2 = fc1.changeColor(color);
stripe.setActualFontConfiguration(fc2);
stripe.analyzeAndAdd(m.group(3));
stripe.setActualFontConfiguration(fc1);
return line.substring(m.group(1).length());
} catch (NoSuchColorException e) {
throw new NoSuchColorRuntimeException();
// Too late for parsing error
// So we just ignore
}
stripe.analyzeAndAdd(m.group(3));
stripe.setActualFontConfiguration(fc1);
return line.substring(m.group(1).length());
}
}

View File

@ -66,6 +66,7 @@ public class GroupRoot implements IGroup {
this.entityFactory = entityFactory;
}
@Override
public Collection<ILeaf> getLeafsDirect() {
final List<ILeaf> result = new ArrayList<>();
for (ILeaf ent : entityFactory.leafs()) {
@ -82,71 +83,79 @@ public class GroupRoot implements IGroup {
return "ROOT";
}
@Override
public boolean isGroup() {
return true;
}
@Override
public Display getDisplay() {
throw new UnsupportedOperationException();
}
@Override
public void setDisplay(Display display) {
throw new UnsupportedOperationException();
}
@Override
public LeafType getLeafType() {
throw new UnsupportedOperationException();
}
@Override
public String getUid() {
throw new UnsupportedOperationException();
}
@Override
public Url getUrl99() {
return null;
}
@Override
public Stereotype getStereotype() {
throw new UnsupportedOperationException();
}
@Override
public void setStereotype(Stereotype stereotype) {
throw new UnsupportedOperationException();
}
public TextBlock getBody(PortionShower portionShower, FontParam fontParam, ISkinParam skinParam) {
throw new UnsupportedOperationException();
}
@Override
public Code getCode() {
return CodeImpl.of("__ROOT__");
}
@Override
public String getCodeGetName() {
return getCode().getName();
}
@Override
public void addUrl(Url url) {
throw new UnsupportedOperationException();
}
@Override
public IGroup getParentContainer() {
return null;
}
@Override
public boolean containsLeafRecurse(ILeaf entity) {
throw new UnsupportedOperationException();
}
@Override
public Collection<IGroup> getChildren() {
final List<IGroup> result = new ArrayList<>();
if (entityFactory.namespaceSeparator.V1972()) {
@ -166,93 +175,105 @@ public class GroupRoot implements IGroup {
return Collections.unmodifiableCollection(result);
}
@Override
public void moveEntitiesTo(IGroup dest) {
throw new UnsupportedOperationException();
}
@Override
public int size() {
throw new UnsupportedOperationException();
}
@Override
public GroupType getGroupType() {
return null;
}
@Override
public Code getNamespace() {
throw new UnsupportedOperationException();
}
@Override
public PackageStyle getPackageStyle() {
throw new UnsupportedOperationException();
}
@Override
public void overrideImage(IEntityImage img, LeafType state) {
throw new UnsupportedOperationException();
}
@Override
public boolean isHidden() {
return false;
}
@Override
public USymbol getUSymbol() {
return null;
// throw new UnsupportedOperationException();
}
@Override
public void setUSymbol(USymbol symbol) {
throw new UnsupportedOperationException();
}
@Override
public SingleStrategy getSingleStrategy() {
return SingleStrategy.SQUARE;
}
@Override
public boolean isRemoved() {
return false;
}
@Override
public boolean hasUrl() {
return false;
}
public int getHectorLayer() {
throw new UnsupportedOperationException();
}
public void setHectorLayer(int layer) {
throw new UnsupportedOperationException();
}
@Override
public int getRawLayout() {
throw new UnsupportedOperationException();
}
@Override
public char getConcurrentSeparator() {
throw new UnsupportedOperationException();
}
@Override
public void setConcurrentSeparator(char separator) {
// throw new UnsupportedOperationException();
}
@Override
public void putTip(String member, Display display) {
throw new UnsupportedOperationException();
}
@Override
public Map<String, Display> getTips() {
throw new UnsupportedOperationException();
}
@Override
public Bodier getBodier() {
throw new UnsupportedOperationException();
}
@Override
public Colors getColors(ISkinParam skinParam) {
return Colors.empty();
}
@Override
public void setColors(Colors colors) {
throw new UnsupportedOperationException();
}
@ -277,31 +298,48 @@ public class GroupRoot implements IGroup {
throw new UnsupportedOperationException();
}
@Override
public void setLegend(DisplayPositionned legend) {
throw new UnsupportedOperationException();
}
@Override
public DisplayPositionned getLegend() {
throw new UnsupportedOperationException();
}
@Override
public Ident getIdent() {
return Ident.empty();
}
@Override
public boolean isAloneAndUnlinked() {
throw new UnsupportedOperationException();
}
@Override
public void setThisIsTogether() {
throw new UnsupportedOperationException();
}
@Override
public String getCodeLine() {
throw new UnsupportedOperationException();
}
@Override
public void setCodeLine(LineLocation codeLine) {
throw new UnsupportedOperationException();
}
@Override
public void setStereostyle(String stereo) {
throw new UnsupportedOperationException();
}
@Override
public Stereostyles getStereostyles() {
throw new UnsupportedOperationException();
}
}

View File

@ -82,10 +82,6 @@ public interface IEntity extends SpecificBackcolorable, Hideable, Removeable, Li
public boolean hasUrl();
public int getHectorLayer();
public void setHectorLayer(int layer);
public int getRawLayout();
public void putTip(String member, Display display);
@ -104,4 +100,8 @@ public interface IEntity extends SpecificBackcolorable, Hideable, Removeable, Li
public void setCodeLine(LineLocation codeLine);
public void setStereostyle(String stereo);
public Stereostyles getStereostyles();
}

View File

@ -0,0 +1,74 @@
/* ========================================================================
* 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.cucadiagram;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;
import net.sourceforge.plantuml.command.regex.Matcher2;
import net.sourceforge.plantuml.command.regex.MyPattern;
import net.sourceforge.plantuml.command.regex.Pattern2;
public class Stereostyles {
public static final Stereostyles NONE = new Stereostyles();
private final Set<String> names = new LinkedHashSet<String>();
private Stereostyles() {
}
public boolean isEmpty() {
return names.isEmpty();
}
public static Stereostyles build(String label) {
final Stereostyles result = new Stereostyles();
final Pattern2 p = MyPattern.cmpile("\\<{3}(.*?)\\>{3}");
final Matcher2 m = p.matcher(label);
while (m.find()) {
result.names.add(m.group(1));
}
return result;
}
public Collection<String> getStyleNames() {
return Collections.unmodifiableCollection(names);
}
}

View File

@ -66,6 +66,7 @@ import net.sourceforge.plantuml.cucadiagram.ILeaf;
import net.sourceforge.plantuml.cucadiagram.Ident;
import net.sourceforge.plantuml.cucadiagram.LeafType;
import net.sourceforge.plantuml.cucadiagram.Link;
import net.sourceforge.plantuml.cucadiagram.Stereostyles;
import net.sourceforge.plantuml.cucadiagram.Stereotag;
import net.sourceforge.plantuml.cucadiagram.Stereotype;
import net.sourceforge.plantuml.cucadiagram.dot.Neighborhood;
@ -98,6 +99,7 @@ final public class EntityImpl implements ILeaf, IGroup {
private LeafType leafType;
private Stereotype stereotype;
private Stereostyles stereostyles = Stereostyles.NONE;
private String generic;
private IGroup parentContainer;
@ -662,19 +664,6 @@ final public class EntityImpl implements ILeaf, IGroup {
return true;
}
private int layer;
public int getHectorLayer() {
return layer;
}
public void setHectorLayer(int layer) {
this.layer = layer;
if (layer > 1000) {
throw new IllegalArgumentException();
}
}
private FontParam getTitleFontParam() {
if (symbol != null) {
return symbol.getFontParam();
@ -804,4 +793,14 @@ final public class EntityImpl implements ILeaf, IGroup {
this.codeLine = codeLine;
}
@Override
public void setStereostyle(String stereo) {
this.stereostyles = Stereostyles.build(stereo);
}
@Override
public Stereostyles getStereostyles() {
return stereostyles;
}
}

View File

@ -45,7 +45,7 @@ public class NBox implements Staged {
public void add(NBar bar) {
if (this.bars.contains(bar)) {
throw new IllegalStateException();
return;
}
this.bars.add(bar);
this.tetris.add(bar);

View File

@ -83,7 +83,7 @@ public class Participant implements SpecificBackcolorable, WithStyle {
final StyleSignature signature = getDefaultStyleDefinition().with(stereotype);
Style tmp = signature.getMergedStyle(styleBuilder);
tmp = tmp.eventuallyOverride(getColors(null));
Style stereo = getDefaultStyleDefinition().withStereotype(stereotype).getMergedStyle(styleBuilder);
Style stereo = getDefaultStyleDefinition().forStereotypeItself(stereotype).getMergedStyle(styleBuilder);
if (tmp != null) {
stereo = tmp.mergeWith(stereo);
}

View File

@ -59,6 +59,7 @@ import net.sourceforge.plantuml.statediagram.command.CommandCreatePackageState;
import net.sourceforge.plantuml.statediagram.command.CommandCreateState;
import net.sourceforge.plantuml.statediagram.command.CommandEndState;
import net.sourceforge.plantuml.statediagram.command.CommandLinkState;
import net.sourceforge.plantuml.statediagram.command.CommandLinkStateReverse;
public class StateDiagramFactory extends PSystemCommandFactory {
@ -75,6 +76,7 @@ public class StateDiagramFactory extends PSystemCommandFactory {
cmds.add(new CommandRemoveRestore());
cmds.add(new CommandCreateState());
cmds.add(new CommandLinkState());
cmds.add(new CommandLinkStateReverse());
cmds.add(new CommandCreatePackageState());
cmds.add(new CommandEndState());
cmds.add(new CommandAddField());

View File

@ -36,31 +36,12 @@
*/
package net.sourceforge.plantuml.statediagram.command;
import net.sourceforge.plantuml.Direction;
import net.sourceforge.plantuml.LineLocation;
import net.sourceforge.plantuml.StringUtils;
import net.sourceforge.plantuml.UmlDiagramType;
import net.sourceforge.plantuml.command.CommandExecutionResult;
import net.sourceforge.plantuml.command.SingleLineCommand2;
import net.sourceforge.plantuml.command.regex.RegexConcat;
import net.sourceforge.plantuml.command.regex.RegexLeaf;
import net.sourceforge.plantuml.command.regex.RegexOptional;
import net.sourceforge.plantuml.command.regex.RegexResult;
import net.sourceforge.plantuml.cucadiagram.Code;
import net.sourceforge.plantuml.cucadiagram.Display;
import net.sourceforge.plantuml.cucadiagram.IEntity;
import net.sourceforge.plantuml.cucadiagram.Ident;
import net.sourceforge.plantuml.cucadiagram.LeafType;
import net.sourceforge.plantuml.cucadiagram.Link;
import net.sourceforge.plantuml.cucadiagram.LinkDecor;
import net.sourceforge.plantuml.cucadiagram.LinkType;
import net.sourceforge.plantuml.cucadiagram.Stereotype;
import net.sourceforge.plantuml.descdiagram.command.CommandLinkElement;
import net.sourceforge.plantuml.graphic.color.ColorType;
import net.sourceforge.plantuml.statediagram.StateDiagram;
import net.sourceforge.plantuml.ugraphic.color.NoSuchColorException;
public class CommandLinkState extends SingleLineCommand2<StateDiagram> {
public class CommandLinkState extends CommandLinkStateCommon {
public CommandLinkState() {
super(getRegex());
@ -91,128 +72,4 @@ public class CommandLinkState extends SingleLineCommand2<StateDiagram> {
)), RegexLeaf.end());
}
private static RegexLeaf getStatePattern(String name) {
return new RegexLeaf(name,
"([%pLN_.:]+|[%pLN_.:]+\\[H\\*?\\]|\\[\\*\\]|\\[H\\*?\\]|(?:==+)(?:[%pLN_.:]+)(?:==+))[%s]*(\\<\\<.*\\>\\>)?[%s]*(#\\w+)?");
}
@Override
protected CommandExecutionResult executeArg(StateDiagram diagram, LineLocation location, RegexResult arg)
throws NoSuchColorException {
final String ent1 = arg.get("ENT1", 0);
final String ent2 = arg.get("ENT2", 0);
final IEntity cl1 = getEntityStart(diagram, ent1);
if (cl1 == null) {
return CommandExecutionResult
.error("The state " + ent1 + " has been created in a concurrent state : it cannot be used here.");
}
final IEntity cl2 = getEntityEnd(diagram, ent2);
if (cl2 == null) {
return CommandExecutionResult
.error("The state " + ent2 + " has been created in a concurrent state : it cannot be used here.");
}
if (arg.get("ENT1", 1) != null) {
cl1.setStereotype(Stereotype.build(arg.get("ENT1", 1)));
}
if (arg.get("ENT1", 2) != null) {
final String s = arg.get("ENT1", 2);
cl1.setSpecificColorTOBEREMOVED(ColorType.BACK,
diagram.getSkinParam().getIHtmlColorSet().getColor(diagram.getSkinParam().getThemeStyle(), s));
}
if (arg.get("ENT2", 1) != null) {
cl2.setStereotype(Stereotype.build(arg.get("ENT2", 1)));
}
if (arg.get("ENT2", 2) != null) {
final String s = arg.get("ENT2", 2);
cl2.setSpecificColorTOBEREMOVED(ColorType.BACK,
diagram.getSkinParam().getIHtmlColorSet().getColor(diagram.getSkinParam().getThemeStyle(), s));
}
String queue = arg.get("ARROW_BODY1", 0) + arg.get("ARROW_BODY2", 0);
final Direction dir = getDirection(arg);
if (dir == Direction.LEFT || dir == Direction.RIGHT) {
queue = "-";
}
final int lenght = queue.length();
final boolean crossStart = arg.get("ARROW_CROSS_START", 0) != null;
final boolean circleEnd = arg.get("ARROW_CIRCLE_END", 0) != null;
final LinkType linkType = new LinkType(circleEnd ? LinkDecor.ARROW_AND_CIRCLE : LinkDecor.ARROW,
crossStart ? LinkDecor.CIRCLE_CROSS : LinkDecor.NONE);
final Display label = Display.getWithNewlines(arg.get("LABEL", 0));
Link link = new Link(cl1, cl2, linkType, label, lenght, diagram.getSkinParam().getCurrentStyleBuilder());
if (dir == Direction.LEFT || dir == Direction.UP) {
link = link.getInv();
}
link.applyStyle(diagram.getSkinParam().getThemeStyle(), arg.getLazzy("ARROW_STYLE", 0));
link.setUmlDiagramType(UmlDiagramType.STATE);
diagram.addLink(link);
return CommandExecutionResult.ok();
}
private Direction getDirection(RegexResult arg) {
final String arrowDirection = arg.get("ARROW_DIRECTION", 0);
if (arrowDirection != null) {
return StringUtils.getQueueDirection(arrowDirection);
}
return null;
}
private IEntity getEntityStart(StateDiagram diagram, final String codeString) {
if (codeString.startsWith("[*]")) {
return diagram.getStart();
}
return getFoo1(diagram, codeString);
}
private IEntity getEntityEnd(StateDiagram diagram, final String codeString) {
if (codeString.startsWith("[*]")) {
return diagram.getEnd();
}
return getFoo1(diagram, codeString);
}
private IEntity getFoo1(StateDiagram diagram, final String codeString) {
if (codeString.equalsIgnoreCase("[H]")) {
return diagram.getHistorical();
}
if (codeString.endsWith("[H]")) {
return diagram.getHistorical(codeString.substring(0, codeString.length() - 3));
}
if (codeString.equalsIgnoreCase("[H*]")) {
return diagram.getDeepHistory();
}
if (codeString.endsWith("[H*]")) {
return diagram.getDeepHistory(codeString.substring(0, codeString.length() - 4));
}
if (codeString.startsWith("=") && codeString.endsWith("=")) {
final String codeString1 = removeEquals(codeString);
final Ident ident1 = diagram.buildLeafIdent(codeString1);
final Code code1 = diagram.V1972() ? ident1 : diagram.buildCode(codeString1);
return diagram.getOrCreateLeaf(ident1, code1, LeafType.SYNCHRO_BAR, null);
}
final Ident ident = diagram.buildLeafIdent(codeString);
final Code code = diagram.V1972() ? ident : diagram.buildCode(codeString);
if (diagram.checkConcurrentStateOk(ident, code) == false) {
return null;
}
return diagram.getOrCreateLeaf(ident, code, null, null);
}
private String removeEquals(String code) {
while (code.startsWith("=")) {
code = code.substring(1);
}
while (code.endsWith("=")) {
code = code.substring(0, code.length() - 1);
}
return code;
}
}

View File

@ -0,0 +1,195 @@
/* ========================================================================
* 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
* Contribution : Serge Wenger
*
*
*/
package net.sourceforge.plantuml.statediagram.command;
import net.sourceforge.plantuml.Direction;
import net.sourceforge.plantuml.LineLocation;
import net.sourceforge.plantuml.StringUtils;
import net.sourceforge.plantuml.UmlDiagramType;
import net.sourceforge.plantuml.command.CommandExecutionResult;
import net.sourceforge.plantuml.command.SingleLineCommand2;
import net.sourceforge.plantuml.command.regex.IRegex;
import net.sourceforge.plantuml.command.regex.RegexLeaf;
import net.sourceforge.plantuml.command.regex.RegexResult;
import net.sourceforge.plantuml.cucadiagram.Code;
import net.sourceforge.plantuml.cucadiagram.Display;
import net.sourceforge.plantuml.cucadiagram.IEntity;
import net.sourceforge.plantuml.cucadiagram.Ident;
import net.sourceforge.plantuml.cucadiagram.LeafType;
import net.sourceforge.plantuml.cucadiagram.Link;
import net.sourceforge.plantuml.cucadiagram.LinkDecor;
import net.sourceforge.plantuml.cucadiagram.LinkType;
import net.sourceforge.plantuml.cucadiagram.Stereotype;
import net.sourceforge.plantuml.graphic.color.ColorType;
import net.sourceforge.plantuml.statediagram.StateDiagram;
import net.sourceforge.plantuml.ugraphic.color.NoSuchColorException;
abstract class CommandLinkStateCommon extends SingleLineCommand2<StateDiagram> {
CommandLinkStateCommon(IRegex pattern) {
super(pattern);
}
protected static RegexLeaf getStatePattern(String name) {
return new RegexLeaf(name,
"([%pLN_.:]+|[%pLN_.:]+\\[H\\*?\\]|\\[\\*\\]|\\[H\\*?\\]|(?:==+)(?:[%pLN_.:]+)(?:==+))[%s]*(\\<\\<.*\\>\\>)?[%s]*(#\\w+)?");
}
@Override
protected CommandExecutionResult executeArg(StateDiagram diagram, LineLocation location, RegexResult arg)
throws NoSuchColorException {
final String ent1 = arg.get("ENT1", 0);
final String ent2 = arg.get("ENT2", 0);
final IEntity cl1 = getEntityStart(diagram, ent1);
if (cl1 == null) {
return CommandExecutionResult
.error("The state " + ent1 + " has been created in a concurrent state : it cannot be used here.");
}
final IEntity cl2 = getEntityEnd(diagram, ent2);
if (cl2 == null) {
return CommandExecutionResult
.error("The state " + ent2 + " has been created in a concurrent state : it cannot be used here.");
}
if (arg.get("ENT1", 1) != null) {
cl1.setStereotype(Stereotype.build(arg.get("ENT1", 1)));
}
if (arg.get("ENT1", 2) != null) {
final String s = arg.get("ENT1", 2);
cl1.setSpecificColorTOBEREMOVED(ColorType.BACK,
diagram.getSkinParam().getIHtmlColorSet().getColor(diagram.getSkinParam().getThemeStyle(), s));
}
if (arg.get("ENT2", 1) != null) {
cl2.setStereotype(Stereotype.build(arg.get("ENT2", 1)));
}
if (arg.get("ENT2", 2) != null) {
final String s = arg.get("ENT2", 2);
cl2.setSpecificColorTOBEREMOVED(ColorType.BACK,
diagram.getSkinParam().getIHtmlColorSet().getColor(diagram.getSkinParam().getThemeStyle(), s));
}
String queue = arg.get("ARROW_BODY1", 0) + arg.get("ARROW_BODY2", 0);
final Direction dir = getDirection(arg);
if (dir == Direction.LEFT || dir == Direction.RIGHT) {
queue = "-";
}
final int lenght = queue.length();
final boolean crossStart = arg.get("ARROW_CROSS_START", 0) != null;
final boolean circleEnd = arg.get("ARROW_CIRCLE_END", 0) != null;
final LinkType linkType = new LinkType(circleEnd ? LinkDecor.ARROW_AND_CIRCLE : LinkDecor.ARROW,
crossStart ? LinkDecor.CIRCLE_CROSS : LinkDecor.NONE);
final Display label = Display.getWithNewlines(arg.get("LABEL", 0));
Link link = new Link(cl1, cl2, linkType, label, lenght, diagram.getSkinParam().getCurrentStyleBuilder());
if (dir == Direction.LEFT || dir == Direction.UP) {
link = link.getInv();
}
link.applyStyle(diagram.getSkinParam().getThemeStyle(), arg.getLazzy("ARROW_STYLE", 0));
link.setUmlDiagramType(UmlDiagramType.STATE);
diagram.addLink(link);
return CommandExecutionResult.ok();
}
private Direction getDirection(RegexResult arg) {
final String arrowDirection = arg.get("ARROW_DIRECTION", 0);
if (arrowDirection != null) {
return StringUtils.getQueueDirection(arrowDirection);
}
return getDefaultDirection();
}
protected Direction getDefaultDirection() {
return null;
}
private IEntity getEntityStart(StateDiagram diagram, final String codeString) {
if (codeString.startsWith("[*]")) {
return diagram.getStart();
}
return getFoo1(diagram, codeString);
}
private IEntity getEntityEnd(StateDiagram diagram, final String codeString) {
if (codeString.startsWith("[*]")) {
return diagram.getEnd();
}
return getFoo1(diagram, codeString);
}
private IEntity getFoo1(StateDiagram diagram, final String codeString) {
if (codeString.equalsIgnoreCase("[H]")) {
return diagram.getHistorical();
}
if (codeString.endsWith("[H]")) {
return diagram.getHistorical(codeString.substring(0, codeString.length() - 3));
}
if (codeString.equalsIgnoreCase("[H*]")) {
return diagram.getDeepHistory();
}
if (codeString.endsWith("[H*]")) {
return diagram.getDeepHistory(codeString.substring(0, codeString.length() - 4));
}
if (codeString.startsWith("=") && codeString.endsWith("=")) {
final String codeString1 = removeEquals(codeString);
final Ident ident1 = diagram.buildLeafIdent(codeString1);
final Code code1 = diagram.V1972() ? ident1 : diagram.buildCode(codeString1);
return diagram.getOrCreateLeaf(ident1, code1, LeafType.SYNCHRO_BAR, null);
}
final Ident ident = diagram.buildLeafIdent(codeString);
final Code code = diagram.V1972() ? ident : diagram.buildCode(codeString);
if (diagram.checkConcurrentStateOk(ident, code) == false) {
return null;
}
return diagram.getOrCreateLeaf(ident, code, null, null);
}
private String removeEquals(String code) {
while (code.startsWith("=")) {
code = code.substring(1);
}
while (code.endsWith("=")) {
code = code.substring(0, code.length() - 1);
}
return code;
}
}

View File

@ -0,0 +1,81 @@
/* ========================================================================
* 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
* Contribution : Serge Wenger
*
*
*/
package net.sourceforge.plantuml.statediagram.command;
import net.sourceforge.plantuml.Direction;
import net.sourceforge.plantuml.command.regex.RegexConcat;
import net.sourceforge.plantuml.command.regex.RegexLeaf;
import net.sourceforge.plantuml.command.regex.RegexOptional;
import net.sourceforge.plantuml.descdiagram.command.CommandLinkElement;
public class CommandLinkStateReverse extends CommandLinkStateCommon {
public CommandLinkStateReverse() {
super(getRegex());
}
static RegexConcat getRegex() {
return RegexConcat.build(CommandLinkStateReverse.class.getName(), RegexLeaf.start(), //
getStatePattern("ENT2"), //
RegexLeaf.spaceZeroOrMore(), //
new RegexConcat(
//
new RegexLeaf("ARROW_CIRCLE_END", "(o[%s]+)?"), //
new RegexLeaf("\\<"), //
new RegexLeaf("ARROW_BODY2", "(-*)"), //
new RegexLeaf("ARROW_STYLE2", "(?:\\[(" + CommandLinkElement.LINE_STYLE + ")\\])?"), //
new RegexLeaf("ARROW_DIRECTION", "(left|right|up|down|le?|ri?|up?|do?)?"), //
new RegexLeaf("ARROW_STYLE1", "(?:\\[(" + CommandLinkElement.LINE_STYLE + ")\\])?"), //
new RegexLeaf("ARROW_BODY1", "(-+)"), //
new RegexLeaf("ARROW_CROSS_START", "(x)?")), //
RegexLeaf.spaceZeroOrMore(), //
getStatePattern("ENT1"), //
RegexLeaf.spaceZeroOrMore(), //
new RegexOptional( //
new RegexConcat( //
new RegexLeaf(":"), //
RegexLeaf.spaceZeroOrMore(), //
new RegexLeaf("LABEL", "(.+)") //
)), RegexLeaf.end());
}
@Override
protected Direction getDefaultDirection() {
return Direction.LEFT;
}
}

View File

@ -43,6 +43,7 @@ import java.util.List;
import java.util.Set;
import net.sourceforge.plantuml.Url;
import net.sourceforge.plantuml.cucadiagram.Stereostyles;
import net.sourceforge.plantuml.cucadiagram.Stereotype;
public class StyleSignature {
@ -153,7 +154,7 @@ public class StyleSignature {
return new StyleSignature(result);
}
public StyleSignature withStereotype(Stereotype stereotype) {
public StyleSignature forStereotypeItself(Stereotype stereotype) {
final List<String> result = new ArrayList<>(names);
if (stereotype != null) {
for (String name : stereotype.getStyleNames()) {
@ -174,6 +175,16 @@ public class StyleSignature {
return new StyleSignature(result);
}
public StyleSignature with(Stereostyles stereostyles) {
if (stereostyles.isEmpty())
return this;
final List<String> result = new ArrayList<>(names);
for (String name : stereostyles.getStyleNames()) {
result.add(clean(name));
}
return new StyleSignature(result);
}
private String clean(String name) {
return name.toLowerCase().replace("_", "");
}

View File

@ -317,13 +317,26 @@ public class Cluster implements Moveable {
}
HColor borderColor;
Style style = null;
final double rounded;
final double shadowing;
if (UseStyle.useBetaStyle()) {
style = getDefaultStyleDefinition(umlDiagramType.getStyleName())
.getMergedStyle(skinParam.getCurrentStyleBuilder());
shadowing = style.value(PName.Shadowing).asDouble();
borderColor = style.value(PName.LineColor).asColor(skinParam2.getThemeStyle(),
skinParam2.getIHtmlColorSet());
if (umlDiagramType == UmlDiagramType.STATE)
rounded = style.value(PName.RoundCorner).asDouble();
else
rounded = IEntityImage.CORNER;
} else {
if (group.getUSymbol() == null) {
shadowing = skinParam2.shadowing2(group.getStereotype(), USymbol.PACKAGE.getSkinParameter()) ? 3 : 0;
} else {
shadowing = skinParam2.shadowing2(group.getStereotype(), group.getUSymbol().getSkinParameter()) ? 3 : 0;
}
rounded = IEntityImage.CORNER;
if (umlDiagramType == UmlDiagramType.STATE) {
borderColor = getColor(ColorParam.stateBorder, skinParam, group.getStereotype());
} else if (umlDiagramType == UmlDiagramType.ACTIVITY) {
@ -353,7 +366,7 @@ public class Cluster implements Moveable {
if (group.getColors(skinParam).getColor(ColorType.LINE) != null) {
borderColor = group.getColors(skinParam).getColor(ColorType.LINE);
}
drawUState(ug, borderColor, skinParam2, strokeForState, umlDiagramType);
drawUState(ug, borderColor, skinParam2, strokeForState, umlDiagramType, rounded, shadowing);
return;
}
PackageStyle packageStyle = group.getPackageStyle();
@ -367,19 +380,10 @@ public class Cluster implements Moveable {
}
}
final double shadowing;
final UStroke stroke;
if (UseStyle.useBetaStyle()) {
shadowing = style.value(PName.Shadowing).asDouble();
stroke = style.getStroke();
} else {
if (group.getUSymbol() == null) {
shadowing = skinParam2.shadowing2(group.getStereotype(), USymbol.PACKAGE.getSkinParameter()) ? 3
: 0;
} else {
shadowing = skinParam2.shadowing2(group.getStereotype(), group.getUSymbol().getSkinParameter()) ? 3
: 0;
}
stroke = getStrokeInternal(group, skinParam2);
}
HColor backColor = getBackColor(umlDiagramType, style);
@ -463,7 +467,7 @@ public class Cluster implements Moveable {
}
private void drawUState(UGraphic ug, HColor borderColor, ISkinParam skinParam2, UStroke stroke,
UmlDiagramType umlDiagramType) {
UmlDiagramType umlDiagramType, double rounded, double shadowing) {
final Dimension2D total = new Dimension2DDouble(maxX - minX, maxY - minY);
final double suppY;
if (ztitle == null) {
@ -492,8 +496,8 @@ public class Cluster implements Moveable {
}
final RoundedContainer r = new RoundedContainer(total, suppY,
attributeHeight + (attributeHeight > 0 ? IEntityImage.MARGIN : 0), borderColor, stateBack, background,
stroke);
r.drawU(ug.apply(new UTranslate(minX, minY)), skinParam2.shadowing(group.getStereotype()));
stroke, rounded, shadowing);
r.drawU(ug.apply(new UTranslate(minX, minY)));
if (ztitle != null) {
ztitle.drawU(ug.apply(new UTranslate(xTitle, yTitle)));

View File

@ -643,7 +643,7 @@ public final class GeneralImageBuilder {
final TextBlock stereoAndTitle = TextBlockUtils.mergeTB(stereo, title, HorizontalAlignment.CENTER);
final Dimension2D dimLabel = stereoAndTitle.calculateDimension(stringBounder);
if (dimLabel.getWidth() > 0) {
final Dimension2D dimAttribute = stateHeader((IEntity) g, getStyle(FontParam.STATE_ATTRIBUTE),
final Dimension2D dimAttribute = stateHeader((IEntity) g, getStyleState(FontParam.STATE_ATTRIBUTE),
dotData.getSkinParam()).calculateDimension(stringBounder);
final double attributeHeight = dimAttribute.getHeight();
final double attributeWidth = dimAttribute.getWidth();
@ -690,7 +690,7 @@ public final class GeneralImageBuilder {
}
private Style getStyle(FontParam fontParam) {
private Style getStyleState(FontParam fontParam) {
return fontParam.getStyleDefinition(SName.stateDiagram)
.getMergedStyle(dotData.getSkinParam().getCurrentStyleBuilder());
}
@ -700,10 +700,19 @@ public final class GeneralImageBuilder {
if (label == null) {
return TextBlockUtils.empty(0, 0);
}
final ISkinParam skinParam = dotData.getSkinParam();
final FontConfiguration fontConfiguration = g.getFontConfigurationForTitle(skinParam);
return label.create(fontConfiguration, HorizontalAlignment.CENTER, skinParam);
final FontConfiguration fontConfiguration;
if (UseStyle.useBetaStyle()) {
final SName sname = dotData.getUmlDiagramType().getStyleName();
final Style style = StyleSignature.of(SName.root, SName.element, sname, SName.title) //
.with(g.getStereotype()) //
.with(g.getStereostyles()) //
.getMergedStyle(skinParam.getCurrentStyleBuilder());
fontConfiguration = style.getFontConfiguration(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
} else
fontConfiguration = g.getFontConfigurationForTitle(skinParam);
final HorizontalAlignment alignment = HorizontalAlignment.CENTER;
return label.create(fontConfiguration, alignment, dotData.getSkinParam());
}
private TextBlock addLegend(TextBlock original, DisplayPositionned legend) {

View File

@ -123,12 +123,12 @@ public final class GroupPngMakerState {
return result;
}
private Style getStyleHeader() {
private Style getStyleStateHeader() {
return StyleSignature.of(SName.root, SName.element, SName.stateDiagram, SName.state, SName.header)
.with(group.getStereotype()).getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder());
}
private Style getStyle() {
private Style getStyleState() {
return StyleSignature.of(SName.root, SName.element, SName.stateDiagram, SName.state).with(group.getStereotype())
.getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder());
}
@ -138,11 +138,20 @@ public final class GroupPngMakerState {
final ISkinParam skinParam = diagram.getSkinParam();
final FontConfiguration fontConfiguration;
if (UseStyle.useBetaStyle())
fontConfiguration = getStyleHeader().getFontConfiguration(skinParam.getThemeStyle(),
final double rounded;
double shadowing = 0;
if (UseStyle.useBetaStyle()) {
rounded = getStyleState().value(PName.RoundCorner).asDouble();
shadowing = getStyleState().value(PName.Shadowing).asDouble();
fontConfiguration = getStyleStateHeader().getFontConfiguration(skinParam.getThemeStyle(),
skinParam.getIHtmlColorSet());
else
} else {
rounded = IEntityImage.CORNER;
fontConfiguration = new FontConfiguration(skinParam, FontParam.STATE, group.getStereotype());
if (skinParam.shadowing(group.getStereotype()))
shadowing = 3.0;
}
final TextBlock title = display.create(fontConfiguration, HorizontalAlignment.CENTER, diagram.getSkinParam());
@ -171,7 +180,7 @@ public final class GroupPngMakerState {
HColor borderColor = group.getColors(skinParam).getColor(ColorType.LINE);
if (borderColor == null) {
if (UseStyle.useBetaStyle())
borderColor = getStyle().value(PName.LineColor).asColor(skinParam.getThemeStyle(),
borderColor = getStyleState().value(PName.LineColor).asColor(skinParam.getThemeStyle(),
skinParam.getIHtmlColorSet());
else
borderColor = getColor(ColorParam.stateBorder, group.getStereotype());
@ -181,8 +190,10 @@ public final class GroupPngMakerState {
final HColor backColor;
if (tmp == null)
if (UseStyle.useBetaStyle())
backColor = getStyle().value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
skinParam.getIHtmlColorSet());
backColor =
getStyleState().value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
skinParam.getIHtmlColorSet());
else
backColor = getColor(ColorParam.stateBackground, stereo);
else
@ -200,8 +211,8 @@ public final class GroupPngMakerState {
if (stroke == null) {
stroke = new UStroke(1.5);
}
return new InnerStateAutonom(image, title, attribute, borderColor, backColor,
skinParam.shadowing(group.getStereotype()), group.getUrl99(), withSymbol, stroke);
return new InnerStateAutonom(image, title, attribute, borderColor, backColor, group.getUrl99(), withSymbol,
stroke, rounded, shadowing);
}

View File

@ -55,13 +55,14 @@ public final class InnerStateAutonom extends AbstractTextBlock implements IEntit
private final TextBlock attribute;
private final HColor borderColor;
private final HColor backColor;
private final boolean shadowing;
private final Url url;
private final boolean withSymbol;
private final UStroke stroke;
private final double rounded;
private final double shadowing;
public InnerStateAutonom(final IEntityImage im, final TextBlock title, TextBlock attribute, HColor borderColor,
HColor backColor, boolean shadowing, Url url, boolean withSymbol, UStroke stroke) {
public InnerStateAutonom(IEntityImage im, TextBlock title, TextBlock attribute, HColor borderColor,
HColor backColor, Url url, boolean withSymbol, UStroke stroke, double rounded, double shadowing) {
this.im = im;
this.withSymbol = withSymbol;
this.title = title;
@ -71,6 +72,7 @@ public final class InnerStateAutonom extends AbstractTextBlock implements IEntit
this.attribute = attribute;
this.url = url;
this.stroke = stroke;
this.rounded = rounded;
}
public void drawU(UGraphic ug) {
@ -81,13 +83,13 @@ public final class InnerStateAutonom extends AbstractTextBlock implements IEntit
final double titreHeight = IEntityImage.MARGIN + text.getHeight() + IEntityImage.MARGIN_LINE;
final RoundedContainer r = new RoundedContainer(total, titreHeight, attr.getHeight() + marginForFields,
borderColor, backColor, im.getBackcolor(), stroke);
borderColor, backColor, im.getBackcolor(), stroke, rounded, shadowing);
if (url != null) {
ug.startUrl(url);
}
r.drawU(ug, shadowing);
r.drawU(ug);
title.drawU(ug.apply(new UTranslate((total.getWidth() - text.getWidth()) / 2, IEntityImage.MARGIN)));
attribute.drawU(ug.apply(
new UTranslate(0 + IEntityImage.MARGIN, IEntityImage.MARGIN + text.getHeight() + IEntityImage.MARGIN)));

View File

@ -53,12 +53,15 @@ public final class RoundedContainer {
private final HColor backColor;
private final HColor imgBackcolor;
private final UStroke stroke;
private final double rounded;
private final double shadowing;
public RoundedContainer(Dimension2D dim, double titleHeight, double attributeHeight, HColor borderColor,
HColor backColor, HColor imgBackcolor, UStroke stroke) {
HColor backColor, HColor imgBackcolor, UStroke stroke, double rounded, double shadowing) {
if (dim.getWidth() == 0) {
throw new IllegalArgumentException();
}
this.rounded = rounded;
this.dim = dim;
this.imgBackcolor = imgBackcolor;
this.titleHeight = titleHeight;
@ -66,15 +69,13 @@ public final class RoundedContainer {
this.backColor = backColor;
this.attributeHeight = attributeHeight;
this.stroke = stroke;
this.shadowing = shadowing;
}
public void drawU(UGraphic ug, boolean shadowing) {
public void drawU(UGraphic ug) {
ug = ug.apply(backColor.bg()).apply(borderColor);
final URectangle rect = new URectangle(dim.getWidth(), dim.getHeight()).rounded(IEntityImage.CORNER);
if (shadowing) {
rect.setDeltaShadow(3.0);
}
final URectangle rect = new URectangle(dim.getWidth(), dim.getHeight()).rounded(rounded);
rect.setDeltaShadow(shadowing);
ug.apply(stroke).draw(rect);
final double yLine = titleHeight + attributeHeight;
@ -84,9 +85,8 @@ public final class RoundedContainer {
final double thickness = stroke.getThickness();
final URectangle inner = new URectangle(dim.getWidth() - 4 * thickness,
dim.getHeight() - titleHeight - 4 * thickness - attributeHeight).rounded(IEntityImage.CORNER);
ug.apply(imgBackcolor).apply(new UTranslate(2 * thickness, yLine + 2 * thickness))
.draw(inner);
dim.getHeight() - titleHeight - 4 * thickness - attributeHeight).rounded(rounded);
ug.apply(imgBackcolor).apply(new UTranslate(2 * thickness, yLine + 2 * thickness)).draw(inner);
if (titleHeight > 0) {
ug.apply(stroke).apply(UTranslate.dy(yLine)).draw(ULine.hline(dim.getWidth()));

View File

@ -93,7 +93,10 @@ public class EntityImageClass extends AbstractEntityImage implements Stencil, Wi
super(entity, entity.getColors(skinParam).mute(skinParam));
this.leafType = entity.getLeafType();
this.lineConfig = entity;
this.roundCorner = getSkinParam().getRoundCorner(CornerParam.DEFAULT, null);
if (UseStyle.useBetaStyle())
this.roundCorner = getStyle().value(PName.RoundCorner).asDouble();
else
this.roundCorner = getSkinParam().getRoundCorner(CornerParam.DEFAULT, null);
this.shield = version != null && version.useShield() && entity.hasNearDecoration() ? Margins.uniform(16)
: Margins.NONE;
final boolean showMethods = portionShower.showPortion(EntityPortion.METHOD, entity);
@ -101,7 +104,7 @@ public class EntityImageClass extends AbstractEntityImage implements Stencil, Wi
this.body = entity.getBodier().getBody(FontParam.CLASS_ATTRIBUTE, getSkinParam(), showMethods, showFields,
entity.getStereotype(), getStyle());
header = new EntityImageClassHeader(entity, getSkinParam(), portionShower);
this.header = new EntityImageClassHeader(entity, getSkinParam(), portionShower);
this.url = entity.getUrl99();
}
@ -143,8 +146,10 @@ public class EntityImageClass extends AbstractEntityImage implements Stencil, Wi
}
private Style getStyle() {
return StyleSignature.of(SName.root, SName.element, SName.classDiagram, SName.class_)
.with(getEntity().getStereotype()).getMergedStyle(getSkinParam().getCurrentStyleBuilder());
return StyleSignature.of(SName.root, SName.element, SName.classDiagram, SName.class_) //
.with(getEntity().getStereotype()) //
.with(getEntity().getStereostyles()) //
.getMergedStyle(getSkinParam().getCurrentStyleBuilder());
}
private void drawInternal(UGraphic ug) {

View File

@ -86,7 +86,9 @@ public class EntityImageClassHeader extends AbstractEntityImage {
if (UseStyle.useBetaStyle()) {
final Style style = StyleSignature
.of(SName.root, SName.element, SName.classDiagram, SName.class_, SName.header).with(stereotype)
.of(SName.root, SName.element, SName.classDiagram, SName.class_, SName.header) //
.with(stereotype) //
.with(entity.getStereostyles()) //
.getMergedStyle(skinParam.getCurrentStyleBuilder());
fontConfigurationName = new FontConfiguration(skinParam, style);
} else {

View File

@ -146,7 +146,7 @@ public class EntityImageDescription extends AbstractEntityImage {
symbol.getSkinParameter().getStyleName());
style = tmp.with(stereotype).getMergedStyle(getSkinParam().getCurrentStyleBuilder());
style = style.eventuallyOverride(colors);
final Style styleStereo = tmp.withStereotype(stereotype)
final Style styleStereo = tmp.forStereotypeItself(stereotype)
.getMergedStyle(getSkinParam().getCurrentStyleBuilder());
forecolor = style.value(PName.LineColor).asColor(getSkinParam().getThemeStyle(),
getSkinParam().getIHtmlColorSet());

View File

@ -83,7 +83,7 @@ public class EntityImageState extends EntityImageStateCommon {
final FontConfiguration fontConfiguration;
if (UseStyle.useBetaStyle())
fontConfiguration = getStyleMember().getFontConfiguration(getSkinParam().getThemeStyle(),
fontConfiguration = getStyleState().getFontConfiguration(getSkinParam().getThemeStyle(),
getSkinParam().getIHtmlColorSet());
else
fontConfiguration = new FontConfiguration(getSkinParam(), FontParam.STATE_ATTRIBUTE, stereotype);

View File

@ -78,7 +78,7 @@ public abstract class EntityImageStateCommon extends AbstractEntityImage {
final FontConfiguration fontConfiguration;
if (UseStyle.useBetaStyle())
fontConfiguration = getStyleHeader().getFontConfiguration(getSkinParam().getThemeStyle(),
fontConfiguration = getStyleStateHeader().getFontConfiguration(getSkinParam().getThemeStyle(),
getSkinParam().getIHtmlColorSet());
else
fontConfiguration = new FontConfiguration(getSkinParam(), FontParam.STATE, stereotype);
@ -89,12 +89,12 @@ public abstract class EntityImageStateCommon extends AbstractEntityImage {
}
final protected Style getStyleHeader() {
private Style getStyleStateHeader() {
return StyleSignature.of(SName.root, SName.element, SName.stateDiagram, SName.state, SName.header)
.with(getEntity().getStereotype()).getMergedStyle(getSkinParam().getCurrentStyleBuilder());
}
final protected Style getStyleMember() {
final protected Style getStyleState() {
return StyleSignature.of(SName.root, SName.element, SName.stateDiagram, SName.state)
.with(getEntity().getStereotype()).getMergedStyle(getSkinParam().getCurrentStyleBuilder());
}
@ -112,10 +112,19 @@ public abstract class EntityImageStateCommon extends AbstractEntityImage {
}
final protected URectangle getShape(final Dimension2D dimTotal) {
final URectangle rect = new URectangle(dimTotal).rounded(CORNER);
if (getSkinParam().shadowing(getEntity().getStereotype())) {
rect.setDeltaShadow(4);
double deltaShadow = 0;
final double corner;
if (UseStyle.useBetaStyle()) {
corner = getStyleState().value(PName.RoundCorner).asDouble();
deltaShadow = getStyleState().value(PName.Shadowing).asDouble();
} else {
corner = CORNER;
if (getSkinParam().shadowing(getEntity().getStereotype()))
deltaShadow = 4;
}
final URectangle rect = new URectangle(dimTotal).rounded(corner);
rect.setDeltaShadow(deltaShadow);
return rect;
}
@ -124,7 +133,7 @@ public abstract class EntityImageStateCommon extends AbstractEntityImage {
HColor classBorder = lineConfig.getColors(getSkinParam()).getColor(ColorType.LINE);
if (classBorder == null) {
if (UseStyle.useBetaStyle())
classBorder = getStyleMember().value(PName.LineColor).asColor(getSkinParam().getThemeStyle(),
classBorder = getStyleState().value(PName.LineColor).asColor(getSkinParam().getThemeStyle(),
getSkinParam().getIHtmlColorSet());
else
classBorder = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBorder);
@ -133,7 +142,7 @@ public abstract class EntityImageStateCommon extends AbstractEntityImage {
HColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK);
if (backcolor == null) {
if (UseStyle.useBetaStyle())
backcolor = getStyleMember().value(PName.BackGroundColor).asColor(getSkinParam().getThemeStyle(),
backcolor = getStyleState().value(PName.BackGroundColor).asColor(getSkinParam().getThemeStyle(),
getSkinParam().getIHtmlColorSet());
else
backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBackground);

View File

@ -80,7 +80,7 @@ public class Version {
}
public static int beta() {
final int beta = 0;
final int beta = 3;
return beta;
}