Use UnitPrefListener in multicharts
authorBill Kuker <bkuker@billkuker.com>
Mon, 22 Nov 2010 18:53:59 +0000 (18:53 +0000)
committerBill Kuker <bkuker@billkuker.com>
Mon, 22 Nov 2010 18:53:59 +0000 (18:53 +0000)
gui/com/billkuker/rocketry/motorsim/fuel/MultiFuelChart.java
gui/com/billkuker/rocketry/motorsim/visual/workbench/MultiMotorPressureChart.java
gui/com/billkuker/rocketry/motorsim/visual/workbench/MultiMotorThrustChart.java

index e1389edce42c0bd6870a1bdc05588d004626c288..4c03e128f878e87615ff865fc1038de84698b2b4 100644 (file)
@@ -10,6 +10,7 @@ import javax.measure.quantity.Velocity;
 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;
@@ -21,6 +22,7 @@ import org.jscience.physics.amount.Amount;
 
 import com.billkuker.rocketry.motorsim.Fuel;
 import com.billkuker.rocketry.motorsim.RocketScience;
+import com.billkuker.rocketry.motorsim.RocketScience.UnitPreferenceListener;
 
 public class MultiFuelChart extends JPanel implements FuelResolver.FuelsChangeListener {
        private static final long serialVersionUID = 1L;
@@ -33,10 +35,29 @@ public class MultiFuelChart extends JPanel implements FuelResolver.FuelsChangeLi
        
        public MultiFuelChart() {
                this.setLayout(new BorderLayout());
+               RocketScience.addUnitPreferenceListener(new UnitPreferenceListener() {
+                       @Override
+                       public void preferredUnitsChanged() {
+                               SwingUtilities.invokeLater(new Runnable() {
+                                       @Override
+                                       public void run() {
+                                               setup();        
+                                               revalidate();
+                                       }
+                               });
+                       }
+               });
+               setup();
+               FuelResolver.addFuelsChangeListener(this);
+       }
+       
+       private void setup(){
                pressureUnit = RocketScience.UnitPreference.getUnitPreference()
                                .getPreferredUnit(SI.PASCAL);
                rateUnit = RocketScience.UnitPreference.getUnitPreference()
                                .getPreferredUnit(SI.METERS_PER_SECOND);
+               System.err.println(pressureUnit);
+               removeAll();
                JFreeChart chart = ChartFactory.createXYLineChart(
                                "", // Title
                                pressureUnit.toString(), // x-axis Label
@@ -47,7 +68,8 @@ public class MultiFuelChart extends JPanel implements FuelResolver.FuelsChangeLi
                                false // Configure chart to generate URLs?
                                );
                add(new ChartPanel(chart));
-               FuelResolver.addFuelsChangeListener(this);
+               dataset.removeAllSeries();
+               fuelToSeries.clear();
                fuelsChanged();
        }
 
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()
index 6a9d9fcfb381af25b715e94e198496c611c05c98..54708285977677fc62d842472baf6a706686369a 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.Force;
 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 MultiMotorThrustChart extends JPanel implements BurnWatcher {
        private static final long serialVersionUID = 1L;
@@ -30,6 +34,31 @@ public class MultiMotorThrustChart extends JPanel implements BurnWatcher {
 
        public MultiMotorThrustChart() {
                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);
                force = RocketScience.UnitPreference.getUnitPreference()