altosuilib: Add 'show marker' button to graphs
authorKeith Packard <keithp@keithp.com>
Wed, 4 Oct 2017 20:43:45 +0000 (13:43 -0700)
committerKeith Packard <keithp@keithp.com>
Wed, 4 Oct 2017 20:43:45 +0000 (13:43 -0700)
Provides a marker at each actual data point which can be useful for
sparse data sets like telemetry with poor reception.

Signed-off-by: Keith Packard <keithp@keithp.com>
altosuilib/AltosShapeListener.java [new file with mode: 0644]
altosuilib/AltosUIEnable.java
altosuilib/AltosUIGraph.java
altosuilib/AltosUITimeSeries.java
altosuilib/Makefile.am

diff --git a/altosuilib/AltosShapeListener.java b/altosuilib/AltosShapeListener.java
new file mode 100644 (file)
index 0000000..082b613
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Copyright © 2017 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, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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.
+ */
+
+package org.altusmetrum.altosuilib_12;
+
+public interface AltosShapeListener {
+       void set_shapes_visible(boolean visible);
+}
index 4bd07c52fa5df3f66d887f9b582b0c44ca2b3771..ed1e6c53b87b029eb4658bde94f7d02310c10902 100644 (file)
@@ -43,11 +43,13 @@ public class AltosUIEnable extends Container implements ChangeListener {
        int             y;
        int             x;
        JCheckBox       imperial_units;
+       JCheckBox       show_shapes;
        JLabel          speed_filter_label;
        JSlider         speed_filter;
        JLabel          accel_filter_label;
        JSlider         accel_filter;
        AltosFilterListener     filter_listener;
+       AltosShapeListener      shape_listener;
 
        static final int max_rows = 14;
 
@@ -111,6 +113,16 @@ public class AltosUIEnable extends Container implements ChangeListener {
                }
        }
 
+       public void set_shapes_visible(boolean visible) {
+               System.out.printf("set shapes %b\n", visible);
+               if (shape_listener != null)
+                       shape_listener.set_shapes_visible(visible);
+       }
+
+       public void register_shape_listener(AltosShapeListener shape_listener) {
+               this.shape_listener = shape_listener;
+       }
+
        public void add_units() {
                /* Imperial units setting */
 
@@ -131,12 +143,29 @@ public class AltosUIEnable extends Container implements ChangeListener {
                c.insets = il;
                add(imperial_units, c);
 
-               speed_filter_label = new JLabel("Speed Filter(ms)");
+               show_shapes = new JCheckBox("Show Markers", false);
+               show_shapes.addActionListener(new ActionListener() {
+                               public void actionPerformed(ActionEvent e) {
+                                       JCheckBox item = (JCheckBox) e.getSource();
+                                       boolean enabled = item.isSelected();
+                                       set_shapes_visible(enabled);
+                               }
+                       });
+               show_shapes.setToolTipText("Show marker Use Imperial units instead of metric");
                c = new GridBagConstraints();
                c.gridx = 0; c.gridy = 1001;
                c.fill = GridBagConstraints.NONE;
                c.anchor = GridBagConstraints.LINE_START;
                c.insets = il;
+               add(show_shapes, c);
+
+
+               speed_filter_label = new JLabel("Speed Filter(ms)");
+               c = new GridBagConstraints();
+               c.gridx = 0; c.gridy = 1002;
+               c.fill = GridBagConstraints.NONE;
+               c.anchor = GridBagConstraints.LINE_START;
+               c.insets = il;
                add(speed_filter_label, c);
 
                speed_filter = new JSlider(JSlider.HORIZONTAL, 0, 10000, (int) (filter_listener.speed_filter() * 1000.0));
@@ -154,7 +183,7 @@ public class AltosUIEnable extends Container implements ChangeListener {
                speed_filter.addChangeListener(this);
 
                c = new GridBagConstraints();
-               c.gridx = 1; c.gridy = 1001;
+               c.gridx = 1; c.gridy = 1002;
                c.gridwidth = 1000; c.gridheight = 1;
                c.fill = GridBagConstraints.BOTH;
                c.anchor = GridBagConstraints.LINE_START;
@@ -163,7 +192,7 @@ public class AltosUIEnable extends Container implements ChangeListener {
 
                accel_filter_label = new JLabel("Acceleration Filter(ms)");
                c = new GridBagConstraints();
-               c.gridx = 0; c.gridy = 1002;
+               c.gridx = 0; c.gridy = 1003;
                c.fill = GridBagConstraints.NONE;
                c.anchor = GridBagConstraints.LINE_START;
                c.insets = il;
@@ -180,7 +209,7 @@ public class AltosUIEnable extends Container implements ChangeListener {
                accel_filter.addChangeListener(this);
 
                c = new GridBagConstraints();
-               c.gridx = 1; c.gridy = 1002;
+               c.gridx = 1; c.gridy = 1003;
                c.gridwidth = 1000; c.gridheight = 1;
                c.fill = GridBagConstraints.BOTH;
                c.anchor = GridBagConstraints.LINE_START;
index efc3d493cd840794fc8f4ada944c544701cd2066..6328d40a788820e9dc7340addfd759e12ac479bc 100644 (file)
@@ -36,7 +36,7 @@ import org.jfree.chart.labels.*;
 import org.jfree.data.xy.*;
 import org.jfree.data.*;
 
-public class AltosUIGraph implements AltosUnitsListener {
+public class AltosUIGraph implements AltosUnitsListener, AltosShapeListener {
 
        XYPlot                          plot;
        JFreeChart                      chart;
@@ -99,6 +99,11 @@ public class AltosUIGraph implements AltosUnitsListener {
                units_changed(false);
        }
 
+       public void set_shapes_visible(boolean visible) {
+               for (AltosUITimeSeries s : series)
+                       s.set_shapes_visible(visible);
+       }
+
        public void setName (String name) {
                chart.setTitle(name);
        }
@@ -127,6 +132,8 @@ public class AltosUIGraph implements AltosUnitsListener {
                this.series = null;
                this.axis_index = 0;
 
+               enable.register_shape_listener(this);
+
                axes_added = new Hashtable<Integer,Boolean>();
 
                xAxis = new NumberAxis("Time (s)");
index 7116606418731d4d74a33c5daa68b2f375783dc5..b98c83768f057e7084c48b7fcdd55ab2cd860e19 100644 (file)
@@ -66,7 +66,7 @@ public class AltosUITimeSeries extends AltosTimeSeries implements AltosUIGrapher
        AltosUIAxis     axis;
        boolean         marker;
        boolean         marker_top;
-       XYItemRenderer  renderer;
+       XYLineAndShapeRenderer  renderer;
        XYPlot          plot;
        AltosXYSeries   xy_series;
        ArrayList<ValueMarker>  markers;
@@ -188,6 +188,10 @@ public class AltosUITimeSeries extends AltosTimeSeries implements AltosUIGrapher
                this.marker_top = marker_top;
        }
 
+       public void set_shapes_visible(boolean shapes_visible) {
+               renderer.setSeriesShapesVisible(0, shapes_visible);
+       }
+
        public AltosUITimeSeries(String label, AltosUnits units) {
                super(label, units);
        }
index ce86d21e3a1405a4665cd86a04bb7b58f26a8774..0f606225341c761c43ae7f58387b1e90bac80dd5 100644 (file)
@@ -31,6 +31,7 @@ altosuilib_JAVA = \
        AltosUIFlightSeries.java \
        AltosUIGraph.java \
        AltosGraph.java \
+       AltosShapeListener.java \
        AltosUSBDevice.java \
        AltosVoice.java \
        AltosDisplayThread.java \