Make chart and summary update with units
authorBill Kuker <bkuker@billkuker.com>
Tue, 23 Nov 2010 15:49:04 +0000 (15:49 +0000)
committerBill Kuker <bkuker@billkuker.com>
Tue, 23 Nov 2010 15:49:04 +0000 (15:49 +0000)
gui/com/billkuker/rocketry/motorsim/visual/Chart.java
gui/com/billkuker/rocketry/motorsim/visual/SummaryPanel.java

index 27c71b4c633e3bdd3754e3208054dce6822bbee6..ce85bc2c480e9b88ad0878c29cd923cf09611b41 100644 (file)
@@ -40,7 +40,7 @@ import org.jscience.physics.amount.Amount;
 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
@@ -107,6 +107,8 @@ public class Chart<X extends Quantity, Y extends Quantity> extends JPanel {
 \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
@@ -114,16 +116,25 @@ public class Chart<X extends Quantity, Y extends Quantity> extends JPanel {
                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
@@ -134,6 +145,15 @@ public class Chart<X extends Quantity, Y extends Quantity> extends JPanel {
                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
@@ -257,6 +277,8 @@ public class Chart<X extends Quantity, Y extends Quantity> extends JPanel {
 \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
@@ -348,4 +370,5 @@ public class Chart<X extends Quantity, Y extends Quantity> extends JPanel {
                v.show();\r
        }\r
 \r
+\r
 }\r
index 189b78114cee09aee63c774e00bff0ad9de781bc..33ae34e22d9df258110f0ecb02e689d61aead791 100644 (file)
@@ -18,13 +18,14 @@ import com.billkuker.rocketry.motorsim.Burn;
 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
@@ -50,7 +51,15 @@ public class SummaryPanel extends JPanel implements Burn.BurnProgressListener {
 \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
@@ -107,4 +116,5 @@ public class SummaryPanel extends JPanel implements Burn.BurnProgressListener {
                });\r
        }\r
 \r
+\r
 }\r