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
import com.billkuker.rocketry.motorsim.BurnSummary;\r
import com.billkuker.rocketry.motorsim.RocketScience;\r
\r
-public class SummaryPanel extends JPanel implements Burn.BurnProgressListener {\r
+public class SummaryPanel extends JPanel implements Burn.BurnProgressListener, RocketScience.UnitPreferenceListener {\r
private static final long serialVersionUID = 1L;\r
private static final Color RED = new Color(196, 0, 0);\r
private static final Color GREEN = new Color(0, 196, 0);\r
private static final Color ORANGE = new Color(160, 96, 0);\r
private final Burn burn;\r
private final JProgressBar bar = new JProgressBar();\r
+ private BurnSummary bs;\r
\r
\r
public SummaryPanel(Burn b) {\r
\r
@Override\r
public void burnComplete() {\r
- setBurnSummary(new BurnSummary(burn));\r
+ setBurnSummary(bs = new BurnSummary(burn));\r
+ RocketScience.addUnitPreferenceListener(this);\r
+ }\r
+ \r
+\r
+ @Override\r
+ public void preferredUnitsChanged() {\r
+ if ( bs != null )\r
+ setBurnSummary(bs);\r
}\r
\r
private void setBurnSummary(final BurnSummary bi) {\r
});\r
}\r
\r
+\r
}\r