import com.billkuker.rocketry.motorsim.RocketScience;\r
import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain;\r
\r
-public class Chart<X extends Quantity, Y extends Quantity> extends JPanel {\r
+public class Chart<X extends Quantity, Y extends Quantity> extends JPanel implements RocketScience.UnitPreferenceListener {\r
private static final long serialVersionUID = 1L;\r
private static Logger log = Logger.getLogger(Chart.class);\r
\r
\r
Object source;\r
Method f;\r
+ \r
+ Iterable<Amount<X>> domain;\r
\r
public Chart(Unit<X> xUnit, Unit<Y> yUnit, Object source, String method)\r
throws NoSuchMethodException {\r
f = source.getClass().getMethod(method, Amount.class);\r
\r
this.source = source;\r
+ \r
+ this.xUnit = xUnit;\r
+ this.yUnit = yUnit;\r
\r
-\r
+ RocketScience.addUnitPreferenceListener(this);\r
+ \r
+ setup();\r
+ }\r
+ \r
+ private void setup(){\r
+ removeAll();\r
this.xUnit = RocketScience.UnitPreference.getUnitPreference()\r
.getPreferredUnit(xUnit);\r
this.yUnit = RocketScience.UnitPreference.getUnitPreference()\r
.getPreferredUnit(yUnit);\r
\r
- chart = ChartFactory.createXYLineChart(method.substring(0, 1)\r
+ chart = ChartFactory.createXYLineChart(f.getName().substring(0, 1)\r
.toUpperCase()\r
- + method.substring(1), // Title\r
+ + f.getName().substring(1), // Title\r
this.xUnit.toString(), // x-axis Label\r
this.yUnit.toString(), // y-axis Label\r
dataset, PlotOrientation.VERTICAL, // Plot Orientation\r
add(new ChartPanel(chart));\r
}\r
\r
+\r
+ @Override\r
+ public void preferredUnitsChanged() {\r
+ setup();\r
+ setDomain(domain);\r
+ }\r
+ \r
+ \r
+ \r
public void addDomainMarker(Amount<X> x, String label, Color c){\r
double xVal = x.doubleValue(xUnit);\r
Marker marker = new ValueMarker(xVal);\r
\r
@SuppressWarnings("unchecked")\r
private synchronized void fill(Iterable<Amount<X>> d, final int requestedSkip) {\r
+ this.domain = d;\r
+ \r
log.debug(f.getName() + " " + requestedSkip + " Start");\r
stop = false;\r
int sz = 0;\r
v.show();\r
}\r
\r
+\r
}\r