altoslib: Add user-selectable filter width for data smoothing
[fw/altos] / altosuilib / AltosUITimeSeries.java
index 0f5e35ebd8f9aed74e0950c7ba78f66d7076c6e2..7116606418731d4d74a33c5daa68b2f375783dc5 100644 (file)
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  */
 
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
 
 import java.io.*;
 import java.util.ArrayList;
 
 import java.awt.*;
 import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
 
 import org.jfree.ui.*;
 import org.jfree.chart.*;
@@ -35,6 +35,24 @@ import org.jfree.chart.labels.*;
 import org.jfree.data.xy.*;
 import org.jfree.data.*;
 
+class AltosUITime extends AltosUnits {
+       public double value(double v, boolean imperial_units) { return v; }
+
+       public double inverse(double v, boolean imperial_unis) { return v; }
+
+       public String show_units(boolean imperial_units) { return "s"; }
+
+       public String say_units(boolean imperial_units) { return "seconds"; }
+
+       public int show_fraction(int width, boolean imperial_units) {
+               if (width < 5)
+                       return 0;
+               return width - 5;
+       }
+
+       public int say_fraction(boolean imperial_units) { return 0; }
+}
+
 class AltosXYSeries extends XYSeries {
 
        public AltosXYSeries(String label) {
@@ -47,6 +65,7 @@ public class AltosUITimeSeries extends AltosTimeSeries implements AltosUIGrapher
        boolean         enable;
        AltosUIAxis     axis;
        boolean         marker;
+       boolean         marker_top;
        XYItemRenderer  renderer;
        XYPlot          plot;
        AltosXYSeries   xy_series;
@@ -70,7 +89,7 @@ public class AltosUITimeSeries extends AltosTimeSeries implements AltosUIGrapher
        public void fireSeriesChanged() {
        }
 
-       void set_data() {
+       public void set_data() {
                if (marker) {
                        if (markers != null) {
                                for (ValueMarker marker : markers)
@@ -81,8 +100,13 @@ public class AltosUITimeSeries extends AltosTimeSeries implements AltosUIGrapher
                                String s = units.string_value(v.value);
                                ValueMarker marker = new ValueMarker(v.time);
                                marker.setLabel(s);
-                               marker.setLabelAnchor(RectangleAnchor.TOP_RIGHT);
-                               marker.setLabelTextAnchor(TextAnchor.TOP_LEFT);
+                               if (marker_top) {
+                                       marker.setLabelAnchor(RectangleAnchor.TOP_RIGHT);
+                                       marker.setLabelTextAnchor(TextAnchor.TOP_LEFT);
+                               } else {
+                                       marker.setLabelAnchor(RectangleAnchor.BOTTOM_RIGHT);
+                                       marker.setLabelTextAnchor(TextAnchor.BOTTOM_LEFT);
+                               }
                                marker.setPaint(color);
                                if (enable)
                                        plot.addDomainMarker(marker);
@@ -91,13 +115,16 @@ public class AltosUITimeSeries extends AltosTimeSeries implements AltosUIGrapher
                } else {
                        xy_series.clear();
 
+                       xy_series.setNotify(false);
                        for (AltosTimeValue v : this) {
                                double value = v.value;
                                if (units != null)
                                        value = units.graph_value(value);
                                xy_series.add(v.time, value);
                        }
+                       xy_series.setNotify(true);
                }
+               clear_changed();
        }
 
        public void set_units() {
@@ -153,11 +180,12 @@ public class AltosUITimeSeries extends AltosTimeSeries implements AltosUIGrapher
                xy_series = new AltosXYSeries(label);
        }
 
-       public void set_marker(Color color, boolean enable, XYPlot plot) {
+       public void set_marker(Color color, boolean enable, XYPlot plot, boolean marker_top) {
                this.color = color;
                this.enable = enable;
                this.marker = true;
                this.plot = plot;
+               this.marker_top = marker_top;
        }
 
        public AltosUITimeSeries(String label, AltosUnits units) {