* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.io.*;
import java.util.ArrayList;
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
import org.jfree.ui.*;
import org.jfree.chart.*;
import org.jfree.data.xy.*;
import org.jfree.data.*;
+class AltosUITime extends AltosUnits {
+ public double value(double v, boolean imperial_units) { return v; }
+
+ public double inverse(double v, boolean imperial_unis) { return v; }
+
+ public String show_units(boolean imperial_units) { return "s"; }
+
+ public String say_units(boolean imperial_units) { return "seconds"; }
+
+ public int show_fraction(int width, boolean imperial_units) {
+ if (width < 5)
+ return 0;
+ return width - 5;
+ }
+
+ public int say_fraction(boolean imperial_units) { return 0; }
+}
+
class AltosXYSeries extends XYSeries {
public AltosXYSeries(String label) {
Color color;
boolean enable;
AltosUIAxis axis;
+ boolean marker;
+ boolean marker_top;
XYItemRenderer renderer;
+ XYPlot plot;
AltosXYSeries xy_series;
+ ArrayList<ValueMarker> markers;
+
/* AltosUIGrapher interface */
public boolean need_reset() {
}
void set_data() {
- xy_series.clear();
-
- for (AltosTimeValue v : this) {
- double y = v.y;
- if (units != null)
- y = units.graph_value(y);
- xy_series.add(v.x, y);
+ if (marker) {
+ if (markers != null) {
+ for (ValueMarker marker : markers)
+ plot.removeDomainMarker(marker);
+ }
+ markers = new ArrayList<ValueMarker>();
+ for (AltosTimeValue v : this) {
+ String s = units.string_value(v.value);
+ ValueMarker marker = new ValueMarker(v.time);
+ marker.setLabel(s);
+ if (marker_top) {
+ marker.setLabelAnchor(RectangleAnchor.TOP_RIGHT);
+ marker.setLabelTextAnchor(TextAnchor.TOP_LEFT);
+ } else {
+ marker.setLabelAnchor(RectangleAnchor.BOTTOM_RIGHT);
+ marker.setLabelTextAnchor(TextAnchor.BOTTOM_LEFT);
+ }
+ marker.setPaint(color);
+ if (enable)
+ plot.addDomainMarker(marker);
+ markers.add(marker);
+ }
+ } else {
+ xy_series.clear();
+
+ xy_series.setNotify(false);
+ for (AltosTimeValue v : this) {
+ double value = v.value;
+ if (units != null)
+ value = units.graph_value(value);
+ xy_series.add(v.time, value);
+ }
+ xy_series.setNotify(true);
}
}
public void set_enable(boolean enable) {
if (this.enable != enable) {
this.enable = enable;
- renderer.setSeriesVisible(0, enable);
- axis.set_enable(enable);
+ if (marker) {
+ for (ValueMarker marker : markers) {
+ if (enable)
+ plot.addDomainMarker(marker);
+ else
+ plot.removeDomainMarker(marker);
+ }
+ } else {
+ renderer.setSeriesVisible(0, enable);
+ axis.set_enable(enable);
+ }
}
}
- public AltosUITimeSeries(String label, AltosUnits units,
- Color color, boolean enable,
- AltosUIAxis axis) {
- super(label, units);
- System.out.printf("time series %s units %s\n", label, units);
+ public void set_axis(Color color, boolean enable, AltosUIAxis axis) {
this.color = color;
this.enable = enable;
this.axis = axis;
+ this.marker = false;
axis.ref(this.enable);
renderer.setSeriesVisible(0, enable);
xy_series = new AltosXYSeries(label);
}
+
+ public void set_marker(Color color, boolean enable, XYPlot plot, boolean marker_top) {
+ this.color = color;
+ this.enable = enable;
+ this.marker = true;
+ this.plot = plot;
+ this.marker_top = marker_top;
+ }
+
+ public AltosUITimeSeries(String label, AltosUnits units) {
+ super(label, units);
+ }
+
+ public AltosUITimeSeries(String label, AltosUnits units,
+ Color color, boolean enable,
+ AltosUIAxis axis) {
+ this(label, units);
+ set_axis(color, enable, axis);
+ }
}