package jas.hist; import jas.plot.CoordinateTransformation; import jas.plot.DateCoordinateTransformation; import jas.plot.DoubleCoordinateTransformation; import jas.plot.MutableLegendEntry; import jas.plot.Overlay; import jas.plot.PlotGraphics; import jas.plot.Transformation; import java.awt.BasicStroke; import java.io.IOException; import java.io.Serializable; import java.util.Observable; class JASHist1DFunctionData extends JASHistData implements Serializable { private double lowerBound = Double.NaN; private double upperBound = Double.NaN; JASHist1DFunctionData(DataManager parent, Basic1DFunction ds) { super(parent); dataSource = ds; style = new JASHist1DFunctionStyle(); style.addObserver(this); } public void setStyle(JASHistStyle style) { if (!(style instanceof JASHist1DFunctionStyle)) throw new IllegalArgumentException("Style is not subclass of JASHist1DFunctionStyle"); if (this.style != null) this.style.deleteObserver(this); this.style = (JASHist1DFunctionStyle) style; style.addObserver(this); } public void update (Observable o, Object arg) { // Dragons: Likely to be called by different thread if (o == dataSource) ((SupportsFunctions) parent).update(this); else if (o == style) ((SupportsFunctions) parent).update(this); // overkill, we really just need a repaint } public void axisChanged() { ((SupportsFunctions) parent).update(this); } public void setXBounds(double xmin, double xmax) { this.lowerBound = xmin; this.upperBound = xmax; } void setXRange(double xmin, double xmax) { if ( ! Double.isNaN(lowerBound) ) xmin = xmin < lowerBound ? lowerBound : xmin; if ( ! Double.isNaN(upperBound) ) xmax = xmax > upperBound ? upperBound : xmax; if ( xmin > xmax ) xmin = xmax; if (overlay instanceof JASHistFunctionOverlay) ((JASHistFunctionOverlay) overlay).setXRange(xmin,xmax); } public String getTitle() { return dataSource.getTitle(); } Overlay createOverlay() { return new JASHistFunctionOverlay(this,style); } public JASHistStyle getStyle() { return style; } public DataSource getDataSource() { return dataSource; } void normalizationChanged(boolean now) { } public void writeAsXML(XMLPrintWriter pw, boolean snapshot) { pw.setAttribute("axis","y"+getYAxis()); //TODO: getTitle is not correct, fix this pw.setAttribute("type",dataSource.getTitle()); pw.openTag("function1d"); String[] pNames = dataSource.getParameterNames(); double[] pValue = dataSource.getParameterValues(); for (int i=0; i (width/2)) flw = (width > 2) ? (float) (width/2 -1) : 1; BasicStroke s = new BasicStroke(flw,BasicStroke.CAP_SQUARE,BasicStroke.JOIN_ROUND,10,lineStyles[style.getLineStyle()],0); g.setStroke(s); g.setStroke(s); g.drawLine(1, height/2, width-2, height/2); g.setStroke(null); } private JASHist1DFunctionStyle style; private JASHist1DFunctionData source; private double xmin, xmax; }