summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2017-11-11 16:08:32 -0800
committerKeith Packard <keithp@keithp.com>2017-11-11 16:36:56 -0800
commit5b6805d1a6a91a26a1892f414a99f0184871ac1a (patch)
treed072cada406fab1a98028f006f4d6d1c69361a0e
parent82e552d194216b41d27d805bee2947127c2d555b (diff)
altosuilib: New line styles and colors for graphs. Selectable line width
Improve the readability of graphs by offering a better selection of colors and adding line styles. Let the user configure the line width as desired. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--altosuilib/AltosEepromGrapher.java22
-rw-r--r--altosuilib/AltosGraph.java116
-rw-r--r--altosuilib/AltosShapeListener.java1
-rw-r--r--altosuilib/AltosUIAxis.java23
-rw-r--r--altosuilib/AltosUIEnable.java36
-rw-r--r--altosuilib/AltosUIFlightSeries.java52
-rw-r--r--altosuilib/AltosUIGraph.java13
-rw-r--r--altosuilib/AltosUILineStyle.java84
-rw-r--r--altosuilib/AltosUITimeSeries.java54
-rw-r--r--altosuilib/Makefile.am2
10 files changed, 297 insertions, 106 deletions
diff --git a/altosuilib/AltosEepromGrapher.java b/altosuilib/AltosEepromGrapher.java
new file mode 100644
index 00000000..a29f64ea
--- /dev/null
+++ b/altosuilib/AltosEepromGrapher.java
@@ -0,0 +1,22 @@
+/*
+ * 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;
+
+import org.altusmetrum.altoslib_12.*;
+
+public interface AltosEepromGrapher {
+
+ public void graph_flights(AltosEepromList list);
+}
diff --git a/altosuilib/AltosGraph.java b/altosuilib/AltosGraph.java
index 3f610285..a758bcde 100644
--- a/altosuilib/AltosGraph.java
+++ b/altosuilib/AltosGraph.java
@@ -37,47 +37,53 @@ import org.jfree.data.*;
public class AltosGraph extends AltosUIGraph {
- static final private Color height_color = new Color(194,31,31);
- static final private Color kalman_height_color = new Color(255,0,0);
- static final private Color gps_height_color = new Color(150,31,31);
- static final private Color pressure_color = new Color (225,31,31);
- static final private Color range_color = new Color(100, 31, 31);
- static final private Color distance_color = new Color(100, 31, 194);
- static final private Color speed_color = new Color(31,194,31);
- static final private Color kalman_speed_color = new Color(0,255,0);
- static final private Color thrust_color = new Color(31,194,31);
- static final private Color accel_color = new Color(31,31,194);
- static final private Color vert_accel_color = new Color(64,164,164);
- static final private Color kalman_accel_color = new Color(0,0,255);
- static final private Color voltage_color = new Color(194, 194, 31);
- static final private Color battery_voltage_color = new Color(194, 194, 31);
- static final private Color drogue_voltage_color = new Color(150, 150, 31);
- static final private Color main_voltage_color = new Color(100, 100, 31);
- static final private Color igniter_voltage_color = new Color(80, 80, 31);
- static final private Color igniter_marker_color = new Color(255, 0, 0);
- static final private Color gps_nsat_color = new Color (194, 31, 194);
- static final private Color gps_nsat_solution_color = new Color (194, 31, 194);
- static final private Color gps_nsat_view_color = new Color (150, 31, 150);
- static final private Color gps_course_color = new Color (100, 31, 112);
- static final private Color gps_ground_speed_color = new Color (31, 112, 100);
- static final private Color gps_speed_color = new Color (31, 112, 100);
- static final private Color gps_climb_rate_color = new Color (31, 31, 112);
- static final private Color gps_pdop_color = new Color(50, 194, 0);
- static final private Color gps_hdop_color = new Color(50, 0, 194);
- static final private Color gps_vdop_color = new Color(194, 0, 50);
- static final private Color temperature_color = new Color (31, 194, 194);
- static final private Color dbm_color = new Color(31, 100, 100);
- static final private Color state_color = new Color(0,0,0);
- static final private Color accel_along_color = new Color(255, 0, 0);
- static final private Color accel_across_color = new Color(0, 255, 0);
- static final private Color accel_through_color = new Color(0, 0, 255);
- static final private Color gyro_roll_color = new Color(192, 0, 0);
- static final private Color gyro_pitch_color = new Color(0, 192, 0);
- static final private Color gyro_yaw_color = new Color(0, 0, 192);
- static final private Color mag_along_color = new Color(128, 0, 0);
- static final private Color mag_across_color = new Color(0, 128, 0);
- static final private Color mag_through_color = new Color(0, 0, 128);
- static final private Color orient_color = new Color(31, 31, 31);
+ /* These are in 'priority' order so that earlier ones get simpler line styles,
+ * then they are grouped so that adjacent ones get sequential colors
+ */
+ static final private AltosUILineStyle height_color = new AltosUILineStyle();
+ static final private AltosUILineStyle speed_color = new AltosUILineStyle();
+ static final private AltosUILineStyle accel_color = new AltosUILineStyle();
+ static final private AltosUILineStyle vert_accel_color = new AltosUILineStyle();
+ static final private AltosUILineStyle orient_color = new AltosUILineStyle();
+
+ static final private AltosUILineStyle gps_height_color = new AltosUILineStyle();
+ static final private AltosUILineStyle altitude_color = new AltosUILineStyle();
+
+ static final private AltosUILineStyle battery_voltage_color = new AltosUILineStyle();
+ static final private AltosUILineStyle pyro_voltage_color = new AltosUILineStyle();
+ static final private AltosUILineStyle drogue_voltage_color = new AltosUILineStyle();
+ static final private AltosUILineStyle main_voltage_color = new AltosUILineStyle();
+ static final private AltosUILineStyle igniter_marker_color = new AltosUILineStyle(1);
+
+ static final private AltosUILineStyle kalman_height_color = new AltosUILineStyle();
+ static final private AltosUILineStyle kalman_speed_color = new AltosUILineStyle();
+ static final private AltosUILineStyle kalman_accel_color = new AltosUILineStyle();
+
+ static final private AltosUILineStyle gps_nsat_color = new AltosUILineStyle ();
+ static final private AltosUILineStyle gps_nsat_solution_color = new AltosUILineStyle ();
+ static final private AltosUILineStyle gps_nsat_view_color = new AltosUILineStyle ();
+ static final private AltosUILineStyle gps_course_color = new AltosUILineStyle ();
+ static final private AltosUILineStyle gps_ground_speed_color = new AltosUILineStyle ();
+ static final private AltosUILineStyle gps_speed_color = new AltosUILineStyle ();
+ static final private AltosUILineStyle gps_climb_rate_color = new AltosUILineStyle ();
+ static final private AltosUILineStyle gps_pdop_color = new AltosUILineStyle();
+ static final private AltosUILineStyle gps_hdop_color = new AltosUILineStyle();
+ static final private AltosUILineStyle gps_vdop_color = new AltosUILineStyle();
+
+ static final private AltosUILineStyle temperature_color = new AltosUILineStyle ();
+ static final private AltosUILineStyle dbm_color = new AltosUILineStyle();
+ static final private AltosUILineStyle pressure_color = new AltosUILineStyle ();
+
+ static final private AltosUILineStyle state_color = new AltosUILineStyle(0);
+ static final private AltosUILineStyle accel_along_color = new AltosUILineStyle();
+ static final private AltosUILineStyle accel_across_color = new AltosUILineStyle();
+ static final private AltosUILineStyle accel_through_color = new AltosUILineStyle();
+ static final private AltosUILineStyle gyro_roll_color = new AltosUILineStyle();
+ static final private AltosUILineStyle gyro_pitch_color = new AltosUILineStyle();
+ static final private AltosUILineStyle gyro_yaw_color = new AltosUILineStyle();
+ static final private AltosUILineStyle mag_along_color = new AltosUILineStyle();
+ static final private AltosUILineStyle mag_across_color = new AltosUILineStyle();
+ static final private AltosUILineStyle mag_through_color = new AltosUILineStyle();
static AltosUnits dop_units = null;
static AltosUnits tick_units = null;
@@ -88,7 +94,7 @@ public class AltosGraph extends AltosUIGraph {
AltosCalData cal_data = flight_series.cal_data();
AltosUIAxis height_axis, speed_axis, accel_axis, voltage_axis, temperature_axis, nsat_axis, dbm_axis;
- AltosUIAxis distance_axis, pressure_axis, thrust_axis;
+ AltosUIAxis pressure_axis, thrust_axis;
AltosUIAxis gyro_axis, orient_axis, mag_axis;
AltosUIAxis course_axis, dop_axis, tick_axis;
@@ -98,15 +104,14 @@ public class AltosGraph extends AltosUIGraph {
height_axis = newAxis("Height", AltosConvert.height, height_color);
pressure_axis = newAxis("Pressure", AltosConvert.pressure, pressure_color, 0);
speed_axis = newAxis("Speed", AltosConvert.speed, speed_color);
- thrust_axis = newAxis("Thrust", AltosConvert.force, thrust_color);
+ thrust_axis = newAxis("Thrust", AltosConvert.force, accel_color);
tick_axis = newAxis("Tick", tick_units, accel_color, 0);
accel_axis = newAxis("Acceleration", AltosConvert.accel, accel_color);
- voltage_axis = newAxis("Voltage", AltosConvert.voltage, voltage_color);
+ voltage_axis = newAxis("Voltage", AltosConvert.voltage, battery_voltage_color);
temperature_axis = newAxis("Temperature", AltosConvert.temperature, temperature_color, 0);
nsat_axis = newAxis("Satellites", null, gps_nsat_color,
AltosUIAxis.axis_include_zero | AltosUIAxis.axis_integer);
dbm_axis = newAxis("Signal Strength", null, dbm_color, 0);
- distance_axis = newAxis("Distance", AltosConvert.distance, range_color);
gyro_axis = newAxis("Rotation Rate", AltosConvert.rotation_rate, gyro_roll_color, 0);
orient_axis = newAxis("Tilt Angle", AltosConvert.orient, orient_color, 0);
@@ -177,7 +182,7 @@ public class AltosGraph extends AltosUIGraph {
height_axis);
flight_series.register_axis(AltosUIFlightSeries.altitude_name,
- height_color,
+ altitude_color,
false,
height_axis);
@@ -197,6 +202,11 @@ public class AltosGraph extends AltosUIGraph {
false,
voltage_axis);
+ flight_series.register_axis(AltosUIFlightSeries.pyro_voltage_name,
+ pyro_voltage_color,
+ false,
+ voltage_axis);
+
flight_series.register_axis(AltosUIFlightSeries.apogee_voltage_name,
drogue_voltage_color,
false,
@@ -312,17 +322,19 @@ public class AltosGraph extends AltosUIGraph {
false,
orient_axis);
- for (int channel = 0; channel < 26; channel++) {
+ flight_series.register_axis(AltosUIFlightSeries.thrust_name,
+ accel_color,
+ true,
+ thrust_axis);
+
+ for (int channel = 0; channel < 8; channel++) {
flight_series.register_axis(flight_series.igniter_voltage_name(channel),
- igniter_voltage_color,
+ new AltosUILineStyle(),
false,
voltage_axis);
}
- flight_series.register_axis(AltosUIFlightSeries.thrust_name,
- thrust_color,
- true,
- thrust_axis);
+ flight_series.check_axes();
return flight_series.series(cal_data);
}
diff --git a/altosuilib/AltosShapeListener.java b/altosuilib/AltosShapeListener.java
index 082b6135..6bf52fd4 100644
--- a/altosuilib/AltosShapeListener.java
+++ b/altosuilib/AltosShapeListener.java
@@ -16,4 +16,5 @@ package org.altusmetrum.altosuilib_12;
public interface AltosShapeListener {
void set_shapes_visible(boolean visible);
+ void set_line_width(float width);
}
diff --git a/altosuilib/AltosUIAxis.java b/altosuilib/AltosUIAxis.java
index fe94f161..52873363 100644
--- a/altosuilib/AltosUIAxis.java
+++ b/altosuilib/AltosUIAxis.java
@@ -36,12 +36,12 @@ import org.jfree.data.xy.*;
import org.jfree.data.*;
public class AltosUIAxis extends NumberAxis {
- String label;
- AltosUnits units;
- Color color;
- int ref;
- int visible;
- int index;
+ String label;
+ AltosUnits units;
+ AltosUILineStyle line_style;
+ int ref;
+ int visible;
+ int index;
public final static int axis_integer = 1;
public final static int axis_include_zero = 2;
@@ -82,21 +82,22 @@ public class AltosUIAxis extends NumberAxis {
}
}
- public AltosUIAxis(String label, AltosUnits units, Color color, int index, int flags) {
+ public AltosUIAxis(String label, AltosUnits units, AltosUILineStyle line_style, int index, int flags) {
this.label = label;
this.units = units;
+ this.line_style = line_style;
this.index = index;
this.visible = 0;
this.ref = 0;
- setLabelPaint(color);
- setTickLabelPaint(color);
+ setLabelPaint(line_style.color);
+ setTickLabelPaint(line_style.color);
setVisible(false);
if ((flags & axis_integer) != 0)
setStandardTickUnits(NumberAxis.createIntegerTickUnits());
setAutoRangeIncludesZero((flags & axis_include_zero) != 0);
}
- public AltosUIAxis(String label, AltosUnits units, Color color, int index) {
- this(label, units, color, index, axis_default);
+ public AltosUIAxis(String label, AltosUnits units, AltosUILineStyle line_style, int index) {
+ this(label, units, line_style, index, axis_default);
}
}
diff --git a/altosuilib/AltosUIEnable.java b/altosuilib/AltosUIEnable.java
index ed1e6c53..851e831f 100644
--- a/altosuilib/AltosUIEnable.java
+++ b/altosuilib/AltosUIEnable.java
@@ -44,6 +44,8 @@ public class AltosUIEnable extends Container implements ChangeListener {
int x;
JCheckBox imperial_units;
JCheckBox show_shapes;
+ JLabel line_width_label;
+ JSpinner line_width;
JLabel speed_filter_label;
JSlider speed_filter;
JLabel accel_filter_label;
@@ -114,11 +116,15 @@ 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 set_line_width(float width) {
+ if (shape_listener != null)
+ shape_listener.set_line_width(width);
+ }
+
public void register_shape_listener(AltosShapeListener shape_listener) {
this.shape_listener = shape_listener;
}
@@ -160,6 +166,34 @@ public class AltosUIEnable extends Container implements ChangeListener {
add(show_shapes, c);
+ line_width_label = new JLabel("Line Width");
+ c = new GridBagConstraints();
+ c.gridx = 1; c.gridy = 1001;
+ c.fill = GridBagConstraints.NONE;
+ c.anchor = GridBagConstraints.LINE_START;
+ c.insets = il;
+ add(line_width_label, c);
+
+ line_width = new JSpinner();
+ line_width.setValue(new Integer(1));
+ line_width.addChangeListener(new ChangeListener() {
+ public void stateChanged(ChangeEvent e) {
+ int w = (Integer) line_width.getValue();
+ if (w < 1) {
+ w = 1;
+ line_width.setValue(new Integer(w));
+ }
+ System.out.printf("line width set to %d\n", w);
+ set_line_width(w);
+ }
+ });
+ c = new GridBagConstraints();
+ c.gridx = 2; c.gridy = 1001;
+ c.fill = GridBagConstraints.NONE;
+ c.anchor = GridBagConstraints.LINE_START;
+ c.insets = il;
+ add(line_width, c);
+
speed_filter_label = new JLabel("Speed Filter(ms)");
c = new GridBagConstraints();
c.gridx = 0; c.gridy = 1002;
diff --git a/altosuilib/AltosUIFlightSeries.java b/altosuilib/AltosUIFlightSeries.java
index 19bed609..407e5ab4 100644
--- a/altosuilib/AltosUIFlightSeries.java
+++ b/altosuilib/AltosUIFlightSeries.java
@@ -30,15 +30,16 @@ import org.jfree.data.xy.*;
import org.jfree.data.*;
class AltosUITimeSeriesAxis {
- Color color;
- boolean enabled;
- boolean marker;
- boolean marker_top;
- AltosUIAxis axis;
- XYPlot plot;
-
- public AltosUITimeSeriesAxis(Color color, boolean enabled, AltosUIAxis axis, XYPlot plot, boolean marker, boolean marker_top) {
- this.color = color;
+ AltosUILineStyle line_style;
+ boolean enabled;
+ boolean marker;
+ boolean marker_top;
+ AltosUIAxis axis;
+ XYPlot plot;
+
+ public AltosUITimeSeriesAxis(AltosUILineStyle line_style, boolean enabled,
+ AltosUIAxis axis, XYPlot plot, boolean marker, boolean marker_top) {
+ this.line_style = line_style;
this.enabled = enabled;
this.axis = axis;
this.plot = plot;
@@ -51,26 +52,34 @@ public class AltosUIFlightSeries extends AltosFlightSeries {
Hashtable<String,AltosUITimeSeriesAxis> axes;
- AltosUIFlightSeries flight_series;
-
void fill_axes(String label, AltosUITimeSeriesAxis axis) {
for (AltosTimeSeries ts : series) {
AltosUITimeSeries uts = (AltosUITimeSeries) ts;
- if (label.equals(ts.label) || (label.equals("default") && uts.color == null)) {
+ if (label.equals(ts.label) || (label.equals("default") && uts.line_style == null)) {
+ uts.custom_axis_set = true;
if (axis.marker)
- uts.set_marker(axis.color, axis.enabled, axis.plot, axis.marker_top);
+ uts.set_marker(axis.line_style, axis.enabled, axis.plot, axis.marker_top);
else
- uts.set_axis(axis.color, axis.enabled, axis.axis);
+ uts.set_axis(axis.line_style, axis.enabled, axis.axis);
}
}
}
+ void check_axes() {
+ for (AltosTimeSeries ts : series) {
+ AltosUITimeSeries uts = (AltosUITimeSeries) ts;
+
+ if (!uts.custom_axis_set)
+ System.out.printf("%s using default axis\n", ts.label);
+ }
+ }
+
public void register_axis(String label,
- Color color,
+ AltosUILineStyle line_style,
boolean enabled,
AltosUIAxis axis) {
- AltosUITimeSeriesAxis tsa = new AltosUITimeSeriesAxis(color,
+ AltosUITimeSeriesAxis tsa = new AltosUITimeSeriesAxis(line_style,
enabled,
axis,
null,
@@ -81,11 +90,11 @@ public class AltosUIFlightSeries extends AltosFlightSeries {
}
public void register_marker(String label,
- Color color,
+ AltosUILineStyle line_style,
boolean enabled,
XYPlot plot,
boolean marker_top) {
- AltosUITimeSeriesAxis tsa = new AltosUITimeSeriesAxis(color,
+ AltosUITimeSeriesAxis tsa = new AltosUITimeSeriesAxis(line_style,
enabled,
null,
plot,
@@ -97,17 +106,18 @@ public class AltosUIFlightSeries extends AltosFlightSeries {
public AltosTimeSeries make_series(String label, AltosUnits units) {
-
AltosUITimeSeries time_series = new AltosUITimeSeries(label, units);
AltosUITimeSeriesAxis tsa = axes.get(label);
if (tsa == null)
tsa = axes.get("default");
+ else
+ time_series.custom_axis_set = true;
if (tsa != null) {
if (tsa.marker)
- time_series.set_marker(tsa.color, tsa.enabled, tsa.plot, tsa.marker_top);
+ time_series.set_marker(tsa.line_style, tsa.enabled, tsa.plot, tsa.marker_top);
else
- time_series.set_axis(tsa.color, tsa.enabled, tsa.axis);
+ time_series.set_axis(tsa.line_style, tsa.enabled, tsa.axis);
}
return time_series;
}
diff --git a/altosuilib/AltosUIGraph.java b/altosuilib/AltosUIGraph.java
index 6328d40a..40f415f1 100644
--- a/altosuilib/AltosUIGraph.java
+++ b/altosuilib/AltosUIGraph.java
@@ -56,14 +56,14 @@ public class AltosUIGraph implements AltosUnitsListener, AltosShapeListener {
return panel;
}
- public AltosUIAxis newAxis(String label, AltosUnits units, Color color, int flags) {
- AltosUIAxis axis = new AltosUIAxis(label, units, color, axis_index++, flags);
+ public AltosUIAxis newAxis(String label, AltosUnits units, AltosUILineStyle line_style, int flags) {
+ AltosUIAxis axis = new AltosUIAxis(label, units, line_style, axis_index++, flags);
plot.setRangeAxis(axis.index, axis);
return axis;
}
- public AltosUIAxis newAxis(String label, AltosUnits units, Color color) {
- return newAxis(label, units, color, AltosUIAxis.axis_default);
+ public AltosUIAxis newAxis(String label, AltosUnits units, AltosUILineStyle line_style) {
+ return newAxis(label, units, line_style, AltosUIAxis.axis_default);
}
void addAxis(AltosUIAxis axis) {
@@ -104,6 +104,11 @@ public class AltosUIGraph implements AltosUnitsListener, AltosShapeListener {
s.set_shapes_visible(visible);
}
+ public void set_line_width(float width) {
+ for (AltosUITimeSeries s : series)
+ s.set_line_width(width);
+ }
+
public void setName (String name) {
chart.setTitle(name);
}
diff --git a/altosuilib/AltosUILineStyle.java b/altosuilib/AltosUILineStyle.java
new file mode 100644
index 00000000..387281a3
--- /dev/null
+++ b/altosuilib/AltosUILineStyle.java
@@ -0,0 +1,84 @@
+/*
+ * 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;
+
+import java.io.*;
+import java.util.ArrayList;
+
+import java.awt.*;
+import javax.swing.*;
+import org.altusmetrum.altoslib_12.*;
+
+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.*;
+
+public class AltosUILineStyle {
+ public Color color;
+ public float[] dash;
+
+ static private Color color(int r, int g, int b) {
+ return new Color(r,g,b);
+ }
+
+ static final private Color[] colors = {
+ new Color(0,0,0),
+ new Color(230,0,0), // red
+ new Color(216,103,0), // orange
+ new Color(200,200,0), // yellow
+ new Color(0,180,0), // green
+ new Color(0,140,140), // cyan
+ new Color(130,0,0), // dark red
+ new Color(0,100,0), // dark green
+ new Color(0,0,255), // blue
+ new Color(140,0,140), // magenta
+ new Color(150,150,150), // gray
+ };
+
+ static final private float[][] dashes = {
+ { 0 },
+ { 2, 4 },
+ { 4, 4 },
+ { 6, 4 },
+ { 6, 4, 2, 4 }
+ };
+
+ static int color_index, dash_index;
+
+ public AltosUILineStyle () {
+ color = colors[color_index];
+ dash = dashes[dash_index];
+ color_index = (color_index + 1) % colors.length;
+ if (color_index == 0) {
+ dash_index = (dash_index + 1) % dashes.length;
+ if (dash_index == 0)
+ System.out.printf("too many line styles\n");
+ }
+ }
+
+ public AltosUILineStyle(int index) {
+ index = index % (colors.length * dashes.length);
+ int c = index % colors.length;
+ int d = index / colors.length;
+ color = colors[c];
+ dash = dashes[d];
+ }
+}
diff --git a/altosuilib/AltosUITimeSeries.java b/altosuilib/AltosUITimeSeries.java
index b98c8376..e85e3c17 100644
--- a/altosuilib/AltosUITimeSeries.java
+++ b/altosuilib/AltosUITimeSeries.java
@@ -61,16 +61,17 @@ class AltosXYSeries extends XYSeries {
}
public class AltosUITimeSeries extends AltosTimeSeries implements AltosUIGrapher {
- Color color;
- boolean enable;
- AltosUIAxis axis;
- boolean marker;
- boolean marker_top;
+ AltosUILineStyle line_style;
+ boolean enable;
+ boolean custom_axis_set;
+ AltosUIAxis axis;
+ boolean marker;
+ boolean marker_top;
XYLineAndShapeRenderer renderer;
- XYPlot plot;
- AltosXYSeries xy_series;
+ XYPlot plot;
+ AltosXYSeries xy_series;
ArrayList<ValueMarker> markers;
-
+ float width;
/* AltosUIGrapher interface */
public boolean need_reset() {
@@ -107,7 +108,8 @@ public class AltosUITimeSeries extends AltosTimeSeries implements AltosUIGrapher
marker.setLabelAnchor(RectangleAnchor.BOTTOM_RIGHT);
marker.setLabelTextAnchor(TextAnchor.BOTTOM_LEFT);
}
- marker.setPaint(color);
+ marker.setPaint(line_style.color);
+ marker.setStroke(new BasicStroke(width, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
if (enable)
plot.addDomainMarker(marker);
markers.add(marker);
@@ -165,23 +167,41 @@ public class AltosUITimeSeries extends AltosTimeSeries implements AltosUIGrapher
}
}
- public void set_axis(Color color, boolean enable, AltosUIAxis axis) {
- this.color = color;
+ // public BasicStroke(float width, int cap, int join, float miterlimit,
+ // float dash[], float dash_phase)
+
+ public void set_line_width(float width) {
+ this.width = width;
+ if (markers != null) {
+ for (ValueMarker marker : markers) {
+ marker.setStroke(new BasicStroke(width, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
+ }
+ } else {
+ if (line_style.dash[0] == 0.0)
+ renderer.setSeriesStroke(0, new BasicStroke(width, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
+ else
+ renderer.setSeriesStroke(0, new BasicStroke(width, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 10.0f, line_style.dash, 0.0f));
+ }
+ }
+
+ public void set_axis(AltosUILineStyle line_style, boolean enable, AltosUIAxis axis) {
+ this.line_style = line_style;
this.enable = enable;
this.axis = axis;
this.marker = false;
+ this.width = 1.0f;
axis.ref(this.enable);
renderer = new XYLineAndShapeRenderer(true, false);
- renderer.setSeriesPaint(0, color);
- renderer.setSeriesStroke(0, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
+ renderer.setSeriesPaint(0, line_style.color);
+ set_line_width(this.width);
renderer.setSeriesVisible(0, enable);
xy_series = new AltosXYSeries(label);
}
- public void set_marker(Color color, boolean enable, XYPlot plot, boolean marker_top) {
- this.color = color;
+ public void set_marker(AltosUILineStyle line_style, boolean enable, XYPlot plot, boolean marker_top) {
+ this.line_style = line_style;
this.enable = enable;
this.marker = true;
this.plot = plot;
@@ -197,9 +217,9 @@ public class AltosUITimeSeries extends AltosTimeSeries implements AltosUIGrapher
}
public AltosUITimeSeries(String label, AltosUnits units,
- Color color, boolean enable,
+ AltosUILineStyle line_style, boolean enable,
AltosUIAxis axis) {
this(label, units);
- set_axis(color, enable, axis);
+ set_axis(line_style, enable, axis);
}
}
diff --git a/altosuilib/Makefile.am b/altosuilib/Makefile.am
index 0f606225..c65a3d15 100644
--- a/altosuilib/Makefile.am
+++ b/altosuilib/Makefile.am
@@ -41,6 +41,7 @@ altosuilib_JAVA = \
AltosConfigFreqUI.java \
AltosScanUI.java \
AltosEepromDelete.java \
+ AltosEepromGrapher.java \
AltosEepromManage.java \
AltosEepromMonitorUI.java \
AltosEepromSelect.java \
@@ -57,6 +58,7 @@ altosuilib_JAVA = \
AltosBTDeviceIterator.java \
AltosBTManage.java \
AltosBTKnown.java \
+ AltosUILineStyle.java \
AltosUIMap.java \
AltosUIMapPreload.java \
AltosUIFlightTab.java \