package com.baselet.element.elementnew.plot.drawer; import java.util.List; import java.util.TreeSet; import com.baselet.element.elementnew.plot.parser.PlotConstants.AxisList; import com.baselet.element.elementnew.plot.parser.PlotConstants.AxisShow; public class AxisConfig { private boolean descAxisLine, valueAxisLine; private boolean descAxisMarkers, valueAxisMarkers; private boolean descAxisText, valueAxisText; private boolean descAxisGray, valueAxisGray; private TreeSet<Double> valueAxisList; private boolean showRelevantValues; public static final int ARROW_SIZE = (int) (5 * 1f); // arrowLength * arrowEndAngle public static final int ARROW_DISTANCE = ARROW_SIZE * 3; // Distance between outerBorder and innerBorder; plotarea where only axis are allowed to draw private boolean xIsDescription; private boolean drawAxis; private int descSegment; // The width of a bar (always the "shorter" side of the bar) private Double valueSegment; // How many pixels equal one valuesegment (eg: if values reach from 1 to 100000 it's very small, if they reach from 1 to 5 it's very high) private int descAxisPos; // If horizontal sourceAxisPos is the x value of the vertical axis, else it's the y value of the horizontal axis private int valueAxisPos; // If horizontal sourceAxisPos is the x value of the vertical axis, else it's the y value of the horizontal axis private int xAxisPos; private int yAxisPos; public AxisConfig() { super(); drawAxis = false; } public final void enableDescAxis(List<String> showList/* , List<String> valueList */) { drawAxis = true; descAxisLine = showList.contains(AxisShow.Axis.getValue()); descAxisGray = showList.contains(AxisShow.Line.getValue()); descAxisMarkers = showList.contains(AxisShow.Marker.getValue()); descAxisText = showList.contains(AxisShow.Text.getValue()); } public final void enableValueAxis(List<String> showList, List<String> valueList) { drawAxis = true; valueAxisLine = showList.contains(AxisShow.Axis.getValue()); valueAxisGray = showList.contains(AxisShow.Line.getValue()); valueAxisMarkers = showList.contains(AxisShow.Marker.getValue()); valueAxisText = showList.contains(AxisShow.Text.getValue()); // other than the special value "relevant", only double values are allowed showRelevantValues = valueList.contains(AxisList.Relevant.getValue()); valueAxisList = new TreeSet<Double>(); for (String v : valueList) { if ("".equals(v) || AxisList.Relevant.getValue().equals(v)) { continue; } try { valueAxisList.add(Double.parseDouble(v)); } catch (Exception e) { throw new RuntimeException("Value must be a double: " + v, e); } } } public boolean isxDescription() { return xIsDescription; } public void setxIsDescription(boolean xIsDescription) { this.xIsDescription = xIsDescription; } public boolean showAxis() { return drawAxis; } public boolean drawXAxis() { return isxDescription() && descAxisLine || !isxDescription() && valueAxisLine; } public boolean drawYAxis() { return isxDescription() && valueAxisLine || !isxDescription() && descAxisLine; } public boolean drawDescriptionAxisMarkers() { return descAxisMarkers; } public boolean drawDescriptionAxisMarkerText() { return descAxisText; } public boolean drawDescriptionAxisMarkerGrayline() { return descAxisGray; } public boolean drawValueAxis() { return valueAxisLine; } public boolean drawValueAxisMarkers() { return valueAxisMarkers; } public boolean drawValueAxisMarkerText() { return valueAxisText; } public boolean drawValueAxisMarkerGrayline() { return valueAxisGray; } public void setDescAxisPos(int pos) { descAxisPos = pos; if (xIsDescription) { xAxisPos = pos; } else { yAxisPos = pos; } } public int getxAxisPos() { return xAxisPos; } public void setValueAxisPos(int pos) { valueAxisPos = pos; if (!xIsDescription) { xAxisPos = pos; } else { yAxisPos = pos; } } public int getyAxisPos() { return yAxisPos; } public int getDescAxisPos() { return descAxisPos; } public int getValueAxisPos() { return valueAxisPos; } public int getDescSegment() { return descSegment; } public void setDescSegment(int descSegment) { this.descSegment = descSegment; } public Double getValueSegment() { return valueSegment; } public void setValueSegment(Double valueSegment) { this.valueSegment = valueSegment; } public TreeSet<Double> setValueAxisList(TreeSet<Double> valuesSorted) { if (showRelevantValues) { valueAxisList.addAll(valuesSorted); } return valueAxisList; } }