diff options
author | Bdale Garbee <bdale@gag.com> | 2013-01-12 10:57:22 -0700 |
---|---|---|
committer | Bdale Garbee <bdale@gag.com> | 2013-01-12 10:57:22 -0700 |
commit | 670034eef48d63cdaec8d271fa93da984ffe2ea9 (patch) | |
tree | 422713fba95404876049f785255942ce6d9c4afd /micropeak/MicroGraph.java | |
parent | 8c5ebaf88b459b09924753a8077393a7b0639133 (diff) | |
parent | d374d6be7eb040457f4df6c38b5d057f26ee741c (diff) |
Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
Diffstat (limited to 'micropeak/MicroGraph.java')
-rw-r--r-- | micropeak/MicroGraph.java | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/micropeak/MicroGraph.java b/micropeak/MicroGraph.java new file mode 100644 index 00000000..5aa127bb --- /dev/null +++ b/micropeak/MicroGraph.java @@ -0,0 +1,179 @@ +/* + * Copyright © 2012 Keith Packard <keithp@keithp.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +package org.altusmetrum.micropeak; + +import java.io.*; +import java.util.ArrayList; + +import java.awt.*; +import javax.swing.*; +import org.altusmetrum.AltosLib.*; + +import org.jfree.ui.*; +import org.jfree.chart.*; +import org.jfree.chart.plot.*; +import org.jfree.chart.axis.*; +import org.jfree.chart.renderer.*; +import org.jfree.chart.renderer.xy.*; +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; + + 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)); + + AltosPreferences.register_units_listener(this); + } +}
\ No newline at end of file |