import org.jfree.data.xy.*;
import org.jfree.data.*;
-public class MicroGraph {
+class MicroSeries extends XYSeries {
+ NumberAxis axis;
+ String label;
+ String units;
+ Color color;
+ XYItemRenderer renderer;
+
+ void set_units(String units) {
+ this.units = units;
+
+ axis.setLabel(String.format("%s (%s)", label, units));
+
+ StandardXYToolTipGenerator ttg;
+
+ ttg = new StandardXYToolTipGenerator(String.format("{1}s: {2}%s ({0})", units),
+ new java.text.DecimalFormat("0.00"),
+ new java.text.DecimalFormat("0.00"));
+ renderer.setBaseToolTipGenerator(ttg);
+ }
+
+ public MicroSeries (String label, String units, Color color) {
+ super(label);
+ this.label = label;
+ this.units = units;
+ this.color = color;
+
+ axis = new NumberAxis();
+ axis.setLabelPaint(color);
+ axis.setTickLabelPaint(color);
+
+ renderer = new XYLineAndShapeRenderer(true, false);
+ renderer.setSeriesPaint(0, color);
+ set_units(units);
+ }
+}
+
+public class MicroGraph implements AltosUnitsListener {
XYPlot plot;
JFreeChart chart;
ChartPanel panel;
NumberAxis xAxis;
- XYSeries heightSeries;
- XYSeries speedSeries;
- XYSeries accelSeries;
+ MicroSeries heightSeries;
+ MicroSeries speedSeries;
+ MicroSeries accelSeries;
+
+ static final private Color height_color = new Color(194,31,31);
+ static final private Color speed_color = new Color(31,194,31);
+ static final private Color accel_color = new Color(31,31,194);
+ static final private Color gridline_color = new Color(0, 0, 0);
+ static final private Color border_color = new Color(255, 255, 255);
+ static final private Color background_color = new Color(255, 255, 255);
MicroData data;
return panel;
}
- private void addSeries(XYSeries series, int index, String label, String units) {
+ private MicroSeries addSeries(int index, String label, String units, Color color) {
+ MicroSeries series = new MicroSeries(label, units, color);
XYSeriesCollection dataset = new XYSeriesCollection(series);
- NumberAxis axis = new NumberAxis(String.format("%s (%s)", label, units));
- XYItemRenderer renderer = new XYLineAndShapeRenderer(true, false);
-
- renderer.setPlot(plot);
- renderer.setBaseToolTipGenerator(new StandardXYToolTipGenerator(String.format("{1}s: {2}%s ({0})", units),
- new java.text.DecimalFormat("0.00"),
- new java.text.DecimalFormat("0.00")));
- plot.setRangeAxis(index, axis);
+
+ series.renderer.setPlot(plot);
+ plot.setRangeAxis(index, series.axis);
plot.setDataset(index, dataset);
- plot.setRenderer(index, renderer);
+ plot.setRenderer(index, series.renderer);
plot.mapDatasetToRangeAxis(index, index);
+ return series;
}
- public MicroGraph(MicroData data) {
+ public void resetData() {
+ heightSeries.clear();
+ speedSeries.clear();
+ accelSeries.clear();
+ if (data != null) {
+ for (MicroDataPoint point : data.points()) {
+ heightSeries.add(point.time, AltosConvert.height.value(point.height));
+ speedSeries.add(point.time, AltosConvert.speed.value(point.speed));
+ accelSeries.add(point.time, AltosConvert.accel.value(point.accel));
+ }
+ }
+ }
+
+ public void setName (String name) {
+ chart.setTitle(name);
+ }
+ public void setData (MicroData data) {
this.data = data;
+ if (data != null)
+ setName(data.name);
+ resetData();
+ }
- heightSeries = new XYSeries("Height");
- speedSeries = new XYSeries("Speed");
- accelSeries = new XYSeries("Acceleration");
+ public void units_changed(boolean imperial_units) {
+ heightSeries.set_units(AltosConvert.height.show_units());
+ speedSeries.set_units(AltosConvert.speed.show_units());
+ accelSeries.set_units(AltosConvert.accel.show_units());
+ resetData();
+ }
- for (int i = 0; i < data.pressures.length; i++) {
- double x = data.time(i);
- heightSeries.add(x, data.height(i));
- speedSeries.add(x, data.speed(i));
- accelSeries.add(x, data.acceleration(i));
- }
+ public MicroGraph() {
xAxis = new NumberAxis("Time (s)");
plot.setDomainPannable(true);
plot.setRangePannable(true);
- addSeries(heightSeries, 0, "Height", "m");
- addSeries(speedSeries, 1, "Speed", "m/s");
- addSeries(accelSeries, 2, "Acceleration", "m/s²");
-
chart = new JFreeChart("Flight", JFreeChart.DEFAULT_TITLE_FONT,
plot, true);
ChartUtilities.applyCurrentTheme(chart);
+
+ heightSeries = addSeries(0, "Height", AltosConvert.height.show_units(), height_color);
+ speedSeries = addSeries(1, "Speed", AltosConvert.speed.show_units(), speed_color);
+ accelSeries = addSeries(2, "Acceleration", AltosConvert.accel.show_units(), accel_color);
+
+ plot.setDomainGridlinePaint(gridline_color);
+ plot.setRangeGridlinePaint(gridline_color);
+ plot.setBackgroundPaint(background_color);
+ plot.setBackgroundAlpha((float) 1);
+
+ chart.setBackgroundPaint(background_color);
+ chart.setBorderPaint(border_color);
panel = new ChartPanel(chart);
panel.setMouseWheelEnabled(true);
panel.setPreferredSize(new java.awt.Dimension(800, 500));
+
+ AltosPreferences.register_units_listener(this);
}
}
\ No newline at end of file