package com.baselet.element.facet.customdrawings;
import java.util.LinkedList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.baselet.control.enums.FormatLabels;
import com.baselet.control.enums.Priority;
import com.baselet.element.facet.Facet;
import com.baselet.element.facet.PropertiesParserState;
import com.baselet.gui.AutocompletionText;
public class CustomDrawingFacet extends Facet {
public static final CustomDrawingFacet INSTANCE = new CustomDrawingFacet();
public static final Logger logger = LoggerFactory.getLogger(CustomDrawingFacet.class);
public static final String CODE_SEP_START = "customelement=";
public static final String CODE_START_INFO = "indicates the start of custom drawing commands, has no close command.";
@Override
public boolean checkStart(String line, PropertiesParserState state) {
Object objIsActive = state.getFacetResponse(CustomDrawingFacet.class, false);
if (objIsActive instanceof Boolean && (Boolean) objIsActive) {
return true;
}
else if (CODE_SEP_START.equals(line)) {
return true;
}
else {
return false;
}
}
@Override
public void handleLine(String line, PropertiesParserState state) {
if (CODE_SEP_START.equals(line)) {
Object objIsActive = state.getFacetResponse(CustomDrawingFacet.class, false);
if (objIsActive instanceof Boolean && (Boolean) objIsActive) {
// custom commands are already turned on -> error
throw new RuntimeException(FormatLabels.BOLD.getValue() + "Invalid value: " + FormatLabels.BOLD.getValue() + CODE_SEP_START + "\nDuplicate command. This command may only occur once.");
}
state.setFacetResponse(CustomDrawingFacet.class, true);
}
else {
CustomDrawingParserImpl.parse(line, state.getGridElementSize().getWidth(), state.getGridElementSize().getHeight(), state.getDrawer());
}
}
@Override
public List<AutocompletionText> getAutocompletionStrings() {
List<AutocompletionText> autocompletionList = new LinkedList<AutocompletionText>();
autocompletionList.add(new AutocompletionText(CODE_SEP_START, CODE_START_INFO));
autocompletionList.add(new AutocompletionText("drawLine(20, 10, 50, 20)",
"Draws a line from (x1, y1) to (x2, y2). Supports fg, lt and lw option after the last bracket."));
autocompletionList.add(new AutocompletionText("drawRectangle(5,5,40,20)",
"Draws a rectangle with the top left corner at (x, y). Supports fg, bg, lt and lw option after the last bracket."));
autocompletionList.add(new AutocompletionText("drawRectangleRound(5,5,40,20,5)",
"Draws a rectangle with round corners with the top left corner at (x, y). Supports fg, bg, lt and lw option after the last bracket."));
autocompletionList.add(new AutocompletionText("drawCircle(20,20,20)",
"Draws a circle with the center at (x, y) and the given radius. Supports fg, bg, lt and lw option after the last bracket."));
autocompletionList.add(new AutocompletionText("drawEllipse(0,0,40,20)",
"Draws an ellipse where the top left corner of the surrounding rectangle is at (x, y). Supports fg, bg, lt and lw option after the last bracket."));
autocompletionList.add(new AutocompletionText("drawArc(0,0,60,30,0,270,false)",
"Draws an elliptical arc where the top left corner of the surrounding rectangle is at (x, y). Supports fg, bg, lt and lw option after the last bracket."));
autocompletionList.add(new AutocompletionText("drawText(\"This is text!\", width/2, height/2, center)",
"Draws the text at (x, y) with the given horizontal alignment. Supports fg option after the last bracket."));
return autocompletionList;
}
@Override
public Priority getPriority() {
return Priority.HIGHEST;
}
}