package org.chartsy.hilo; import java.awt.Graphics2D; import java.awt.Rectangle; import org.chartsy.main.ChartFrame; import org.chartsy.main.ChartProperties; import org.chartsy.main.chart.Chart; import org.chartsy.main.data.ChartData; import org.chartsy.main.data.Dataset; import org.chartsy.main.utils.CoordCalc; import org.chartsy.main.utils.Range; import org.chartsy.main.utils.SerialVersion; /** * * @author viorel.gheba */ public class HLBars extends Chart { private static final long serialVersionUID = SerialVersion.APPVERSION; public HLBars() {} public String getName() { return "HL Bars"; } public void paint(Graphics2D g, ChartFrame cf) { ChartData cd = cf.getChartData(); ChartProperties cp = cf.getChartProperties(); boolean isLog = cp.getAxisLogarithmicFlag(); Rectangle rect = cf.getSplitPanel().getChartPanel().getBounds(); rect.grow(-2, -2); Range range = cf.getSplitPanel().getChartPanel().getRange(); if (!cd.isVisibleNull()) { Dataset dataset = cd.getVisible(); for(int i = 0; i < dataset.getItemsCount(); i++) { double open = dataset.getOpenAt(i); double close = dataset.getCloseAt(i); double high = dataset.getHighAt(i); double low = dataset.getLowAt(i); double x = cd.getX(i, rect); double yHigh = cd.getY(high, rect, range, isLog); double yLow = cd.getY(low, rect, range, isLog); double candleWidth = cp.getBarWidth(); double candleHeight = Math.abs(yHigh - yLow); g.setPaint(open > close ? cp.getBarDownColor() : cp.getBarUpColor()); if (open > close ? cp.getBarDownVisibility() : cp.getBarUpVisibility()) g.fill(CoordCalc.rectangle(x - candleWidth / 2, yHigh, candleWidth, candleHeight)); else { g.setStroke(cp.getBarStroke()); g.draw(CoordCalc.rectangle(x - candleWidth / 2, yHigh, candleWidth, candleHeight)); } } } } }