package com.baselet.element.facet.common; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import com.baselet.control.basics.XValues; import com.baselet.control.enums.LineType; import com.baselet.diagram.draw.DrawHandler; import com.baselet.diagram.draw.DrawHandler.Layer; import com.baselet.element.facet.Facet; import com.baselet.element.facet.PropertiesParserState; import com.baselet.gui.AutocompletionText; public class SeparatorLineFacet extends Facet { public static final SeparatorLineFacet INSTANCE = new SeparatorLineFacet(); private static final String KEY_PREFIX = "-"; private final Map<String, LineType> variants = new HashMap<String, LineType>(); protected SeparatorLineFacet() { variants.put(KEY_PREFIX, null); for (LineType lt : LineType.LT_LIST) { variants.put(KEY_PREFIX + lt.getValue(), lt); } } private static final double Y_SPACE = 5; @Override public void handleLine(String line, PropertiesParserState state) { DrawHandler drawer = state.getDrawer(); LineType ltBefore = drawer.getLineType(); LineType ltForLine = variants.get(line); if (ltForLine != null) { drawer.setLineType(ltForLine); } drawer.setLayer(Layer.Foreground); // should be always on top of background double linePos = state.getTextPrintPosition() - drawer.textHeightMax() + Y_SPACE / 2; XValues xPos = state.getXLimits(linePos); drawer.drawLine(xPos.getLeft() + 0.5, linePos, xPos.getRight() - 1, linePos); state.increaseTextPrintPosition(Y_SPACE); drawer.setLayer(Layer.Background); drawer.setLineType(ltBefore); } @Override public boolean checkStart(String line, PropertiesParserState state) { return variants.containsKey(line); } @Override public List<AutocompletionText> getAutocompletionStrings() { List<AutocompletionText> returnList = new ArrayList<AutocompletionText>(); for (Entry<String, LineType> lt : variants.entrySet()) { if (lt.getValue() == null) { returnList.add(new AutocompletionText(lt.getKey(), "draw horizontal line of current linetype")); } else { returnList.add(new AutocompletionText(lt.getKey(), "draw " + lt.getValue().getReadableText() + " horizontal line")); } } return returnList; } }