micropeak: Use altosuilib graphing functions
authorKeith Packard <keithp@keithp.com>
Sat, 9 Feb 2013 09:59:18 +0000 (01:59 -0800)
committerKeith Packard <keithp@keithp.com>
Sun, 10 Feb 2013 08:30:32 +0000 (00:30 -0800)
Move these out of micropeak and into shared code

Signed-off-by: Keith Packard <keithp@keithp.com>
micropeak/MicroData.java
micropeak/MicroDataPoint.java
micropeak/MicroGraph.java
micropeak/MicroPeak.java

index 473af44bc691da619c51deef5988039717d0582f..26e3c07dc41851e75efd886a6ac900655633cab8 100644 (file)
@@ -21,6 +21,7 @@ import java.lang.*;
 import java.io.*;
 import java.util.*;
 import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altosuilib_1.*;
 
 class MicroIterator implements Iterator<MicroDataPoint> {
        int             i;
@@ -56,7 +57,40 @@ class MicroIterable implements Iterable<MicroDataPoint> {
        }
 }
 
-public class MicroData {
+class MicroUIIterator implements Iterator<AltosUIDataPoint> {
+       int             i;
+       MicroData       data;
+
+       public boolean hasNext() {
+               return i < data.pressures.length;
+       }
+
+       public AltosUIDataPoint next() {
+               return new MicroDataPoint(data, i++);
+       }
+
+       public MicroUIIterator (MicroData data) {
+               this.data = data;
+               i = 0;
+       }
+
+       public void remove() {
+       }
+}
+
+class MicroUIIterable implements Iterable<AltosUIDataPoint> {
+       MicroData       data;
+
+       public Iterator<AltosUIDataPoint> iterator() {
+               return new MicroUIIterator(data);
+       }
+
+       public MicroUIIterable(MicroData data) {
+               this.data = data;
+       }
+}
+
+public class MicroData implements AltosUIDataSet {
        public int              ground_pressure;
        public int              min_pressure;
        public int[]            pressures;
@@ -65,7 +99,6 @@ public class MicroData {
        private ArrayList<Integer>      bytes;
        String                  name;
        
-
        class FileEndedException extends Exception {
        }
 
@@ -178,6 +211,14 @@ public class MicroData {
                return AltosConvert.pressure_to_altitude(pressures[i]);
        }
 
+       public String name() {
+               return name;
+       }
+
+       public Iterable<AltosUIDataPoint> dataPoints() {
+               return new MicroUIIterable(this);
+       }
+
        public Iterable<MicroDataPoint> points() {
                return new MicroIterable(this);
        }
index c58708e6aa73676332a44a9565811811d96dd247..a81eb0d357dba3f34e28daf3f54e8655f1bcb968 100644 (file)
 
 package org.altusmetrum.micropeak;
 
-public class MicroDataPoint {
+import org.altusmetrum.altosuilib_1.*;
+
+public class MicroDataPoint implements AltosUIDataPoint {
        public double   time;
        public double   pressure;
        public double   height;
        public double   speed;
        public double   accel;
 
+       public static final int data_height = 0;
+       public static final int data_speed = 1;
+       public static final int data_accel = 2;
+
+       public double x() {
+               return time;
+       }
+
+       public double y(int index) {
+               switch (index) {
+               case data_height:
+                       return height;
+               case data_speed:
+                       return speed;
+               case data_accel:
+                       return accel;
+               default:
+                       return 0;
+               }
+       }
+
        public MicroDataPoint (double pressure, double height, double speed, double accel, double time) {
                this.pressure = pressure;
                this.height = height;
index e8a6ea16f7967ee034e9f7ee1661217673d86d86..0071a160ef988a3cc44dfda02279c7aadef0b915 100644 (file)
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.awt.*;
 import javax.swing.*;
 import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altosuilib_1.*;
 
 import org.jfree.ui.*;
 import org.jfree.chart.*;
@@ -34,146 +35,17 @@ import org.jfree.chart.labels.*;
 import org.jfree.data.xy.*;
 import org.jfree.data.*;
 
-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);
-       }
-
-       void set_enable(boolean enable) {
-               renderer.setSeriesVisible(0, enable);
-               axis.setVisible(enable);
-       }
-
-       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;
-       MicroSeries     heightSeries;
-        MicroSeries    speedSeries;
-       MicroSeries     accelSeries;
+public class MicroGraph extends AltosUIGraph {
 
        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;
-
-       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);
-
-               series.renderer.setPlot(plot);
-               plot.setRangeAxis(index, series.axis);
-               plot.setDataset(index, dataset);
-               plot.setRenderer(index, series.renderer);
-               plot.mapDatasetToRangeAxis(index, index);
-               return series;
-       }
-       
-       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));
-                       }
-               }
-//             accelSeries.set_enable(false);
-       }
-
-       public void setName (String name) {
-               chart.setTitle(name);
-       }
-
-       public void setData (MicroData data) {
-               this.data = data;
-               if (data != null)
-                       setName(data.name);
-               resetData();
-       }
-
-       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();
-       }
-
-       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);
-
-               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));
+       public MicroGraph(AltosUIEnable enable) {
+               super(enable);
 
-               AltosPreferences.register_units_listener(this);
+               addSeries(0, "Height", MicroDataPoint.data_height, AltosConvert.height, height_color);
+               addSeries(1, "Speed", MicroDataPoint.data_speed, AltosConvert.speed, speed_color);
+               addSeries(2, "Acceleration", MicroDataPoint.data_accel, AltosConvert.accel, accel_color);
        }
 }
\ No newline at end of file
index 63387ed1fc0f26d60999e2954ebcdbe35df645cd..871d5cc34658e98d835ac2d6b5a94f730321540a 100644 (file)
@@ -30,6 +30,7 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene
 
        File            filename;
        MicroGraph      graph;
+       AltosUIEnable   enable;
        MicroStatsTable stats;
        MicroRaw        raw;
        MicroData       data;
@@ -44,7 +45,7 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene
                        return mp.SetData(data);
                }
                this.data = data;
-               graph.setData(data);
+               graph.setDataSet(data);
                stats.setData(data);
                raw.setData(data);
                setTitle(data.name);
@@ -236,10 +237,12 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene
                        }
                });
 
-               graph = new MicroGraph();
+               enable = new AltosUIEnable();
+               graph = new MicroGraph(enable);
                stats = new MicroStatsTable();
                raw = new MicroRaw();
                pane.add(graph.panel, "Graph");
+               pane.add(enable, "Configure Graph");
                pane.add(stats, "Statistics");
                JScrollPane scroll = new JScrollPane(raw);
                pane.add(scroll, "Raw Data");