import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.AltosLib.*;
+import org.altusmetrum.altoslib_6.*;
+import org.altusmetrum.altosuilib_6.*;
import org.jfree.ui.*;
import org.jfree.chart.*;
import org.jfree.data.xy.*;
import org.jfree.data.*;
-class MicroSeries extends XYSeries {
- NumberAxis axis;
- String label;
- String units;
- Color color;
-
- String label() {
- return String.format("%s (%s)", label, units);
- }
-
- void set_units(String units) {
- this.units = units;
-
- axis.setLabel(label());
- }
-
- public MicroSeries (String label, String units, Color color) {
- super(label);
- this.label = label;
- this.units = units;
- this.color = color;
-
- axis = new NumberAxis(label());
- axis.setLabelPaint(color);
- axis.setTickLabelPaint(color);
- }
-}
-
-public class MicroGraph implements AltosUnitsListener {
-
- XYPlot plot;
- JFreeChart chart;
- ChartPanel panel;
- NumberAxis xAxis;
- MicroSeries heightSeries;
- MicroSeries speedSeries;
- MicroSeries accelSeries;
-
- static final private Color red = new Color(194,31,31);
- static final private Color green = new Color(31,194,31);
- static final private Color blue = new Color(31,31,194);
-
- MicroData data;
-
- public JPanel panel() {
- return panel;
- }
-
- private MicroSeries addSeries(int index, String label, String units, Color color) {
- MicroSeries series = new MicroSeries(label, units, color);
- XYSeriesCollection dataset = new XYSeriesCollection(series);
- XYItemRenderer renderer = new XYLineAndShapeRenderer(true, false);
-
- renderer.setSeriesPaint(0, color);
- 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, series.axis);
- plot.setDataset(index, dataset);
- plot.setRenderer(index, renderer);
- plot.mapDatasetToRangeAxis(index, index);
- return series;
- }
-
- public void resetData() {
- heightSeries.clear();
- speedSeries.clear();
- accelSeries.clear();
- for (int i = 0; i < data.pressures.length; i++) {
- double x = data.time(i);
- heightSeries.add(x, AltosConvert.height.value(data.height(i)));
- speedSeries.add(x, AltosConvert.speed.value(data.speed(i)));
- accelSeries.add(x, AltosConvert.accel.value(data.acceleration(i)));
- }
- }
-
- public void setData (MicroData data) {
- this.data = data;
- resetData();
- }
-
- public void units_changed(boolean imperial_units) {
- if (data != null) {
- heightSeries.set_units(AltosConvert.height.show_units());
- speedSeries.set_units(AltosConvert.speed.show_units());
- accelSeries.set_units(AltosConvert.accel.show_units());
- resetData();
- }
- }
-
- public MicroGraph() {
-
- xAxis = new NumberAxis("Time (s)");
-
- xAxis.setAutoRangeIncludesZero(true);
-
- plot = new XYPlot();
- plot.setDomainAxis(xAxis);
- plot.setOrientation(PlotOrientation.VERTICAL);
- plot.setDomainPannable(true);
- plot.setRangePannable(true);
-
- heightSeries = addSeries(0, "Height", AltosConvert.height.show_units(), red);
- speedSeries = addSeries(1, "Speed", AltosConvert.speed.show_units(), green);
- accelSeries = addSeries(2, "Acceleration", AltosConvert.accel.show_units(), blue);
+public class MicroGraph extends AltosUIGraph {
- chart = new JFreeChart("Flight", JFreeChart.DEFAULT_TITLE_FONT,
- plot, true);
+ 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 state_color = new Color(3,3,3);
- ChartUtilities.applyCurrentTheme(chart);
- panel = new ChartPanel(chart);
- panel.setMouseWheelEnabled(true);
- panel.setPreferredSize(new java.awt.Dimension(800, 500));
+ public MicroGraph(AltosUIEnable enable) {
+ super(enable);
- AltosPreferences.register_units_listener(this);
+ addSeries("Height", MicroDataPoint.data_height, AltosConvert.height, height_color);
+ addSeries("Speed", MicroDataPoint.data_speed, AltosConvert.speed, speed_color);
+ addSeries("Acceleration", MicroDataPoint.data_accel, AltosConvert.accel, accel_color);
+ addMarker("State", MicroDataPoint.data_state, state_color);
}
}
\ No newline at end of file