Use UnitPrefListener in multicharts
[sw/motorsim] / gui / com / billkuker / rocketry / motorsim / visual / workbench / MultiMotorPressureChart.java
index 874518fcdfc3340350a38dbeedb4b245fdeedb8f..8eeba3295c09c6aa7c60f9dfa358cd5a3b5a3be2 100644 (file)
@@ -2,12 +2,15 @@ package com.billkuker.rocketry.motorsim.visual.workbench;
 
 import java.awt.BorderLayout;
 import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Set;
 
 import javax.measure.quantity.Duration;
 import javax.measure.quantity.Pressure;
 import javax.measure.unit.SI;
 import javax.measure.unit.Unit;
 import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
 
 import org.jfree.chart.ChartFactory;
 import org.jfree.chart.ChartPanel;
@@ -18,6 +21,7 @@ import org.jfree.data.xy.XYSeriesCollection;
 
 import com.billkuker.rocketry.motorsim.Burn;
 import com.billkuker.rocketry.motorsim.RocketScience;
+import com.billkuker.rocketry.motorsim.RocketScience.UnitPreferenceListener;
 
 public class MultiMotorPressureChart extends JPanel implements BurnWatcher {
        private static final long serialVersionUID = 1L;
@@ -30,6 +34,30 @@ public class MultiMotorPressureChart extends JPanel implements BurnWatcher {
 
        public MultiMotorPressureChart() {
                this.setLayout(new BorderLayout());
+               RocketScience.addUnitPreferenceListener(new UnitPreferenceListener() {
+                       @Override
+                       public void preferredUnitsChanged() {
+                               SwingUtilities.invokeLater(new Runnable() {
+                                       @Override
+                                       public void run() {
+                                               removeAll();
+                                               dataset.removeAllSeries();
+                                               Set<Burn> burns = new HashSet<Burn>();
+                                               burns.addAll(burnToSeries.keySet());
+                                               burnToSeries.clear();
+                                               setup();        
+                                               for ( Burn b : burns ){
+                                                       addBurn(b);
+                                               }
+                                               revalidate();
+                                       }
+                               });
+                       }
+               });
+               setup();
+       }
+       
+       private void setup(){
                time = RocketScience.UnitPreference.getUnitPreference()
                                .getPreferredUnit(SI.SECOND);
                pressureUnit = RocketScience.UnitPreference.getUnitPreference()