Show fuels that are loaded in graph
authorBill Kuker <bkuker@billkuker.com>
Tue, 23 Nov 2010 00:22:32 +0000 (00:22 +0000)
committerBill Kuker <bkuker@billkuker.com>
Tue, 23 Nov 2010 00:22:32 +0000 (00:22 +0000)
Show editors for fuels that are loaded

gui/com/billkuker/rocketry/motorsim/fuel/FuelsEditor.java
gui/com/billkuker/rocketry/motorsim/fuel/MultiFuelChart.java

index e74b7dabaec76e83719231f9cab6c0124fe4634e..3399b493a5d4064b42db6144aa77e81c942505c3 100644 (file)
@@ -5,17 +5,21 @@ import java.io.File;
 import java.io.FileInputStream;\r
 import java.io.FileOutputStream;\r
 import java.io.IOException;\r
+import java.net.URI;\r
+import java.util.Map;\r
 \r
 import javax.swing.JFrame;\r
 import javax.swing.JMenuBar;\r
 \r
 import com.billkuker.rocketry.motorsim.Fuel;\r
+import com.billkuker.rocketry.motorsim.fuel.FuelResolver.FuelsChangeListener;\r
+import com.billkuker.rocketry.motorsim.fuel.editable.EditableFuel;\r
 import com.billkuker.rocketry.motorsim.fuel.editable.EditablePiecewiseLinearFuel;\r
 import com.billkuker.rocketry.motorsim.fuel.editable.EditablePiecewiseSaintRobertFuel;\r
 import com.billkuker.rocketry.motorsim.io.MotorIO;\r
 import com.billkuker.rocketry.motorsim.visual.MultiObjectEditor;\r
 \r
-public class FuelsEditor extends MultiObjectEditor<Fuel, AbstractFuelEditor> {\r
+public class FuelsEditor extends MultiObjectEditor<Fuel, AbstractFuelEditor> implements FuelsChangeListener {\r
 \r
        private static final long serialVersionUID = 1L;\r
        \r
@@ -26,7 +30,7 @@ public class FuelsEditor extends MultiObjectEditor<Fuel, AbstractFuelEditor> {
        public FuelsEditor(Frame frame) {\r
                super(frame, "Fuel");\r
                addTab("All Fuels", allFuels);\r
-               \r
+               FuelResolver.addFuelsChangeListener(this);\r
                addCreator(new ObjectCreator() {\r
                        @Override\r
                        public Fuel newObject() {\r
@@ -55,16 +59,16 @@ public class FuelsEditor extends MultiObjectEditor<Fuel, AbstractFuelEditor> {
                });\r
        }\r
        \r
-       /*\r
+       \r
        @Override\r
        protected void objectAdded(Fuel f, AbstractFuelEditor e){\r
-               allFuels.addFuel(f);\r
+               allFuels.addFuel(f, true);\r
        }\r
        \r
        @Override\r
        protected void objectRemoved(Fuel f, AbstractFuelEditor e){\r
                allFuels.removeFuel(f);\r
-       }*/\r
+       }\r
 \r
        @Override\r
        public AbstractFuelEditor createEditor(Fuel o) {\r
@@ -79,12 +83,14 @@ public class FuelsEditor extends MultiObjectEditor<Fuel, AbstractFuelEditor> {
        @Override\r
        protected Fuel loadFromFile(File f) throws IOException {\r
                Fuel fuel =  MotorIO.readFuel(new FileInputStream(f));\r
+               FuelResolver.add(fuel, f.toURI());\r
                return fuel;\r
        }\r
 \r
        @Override\r
        protected void saveToFile(Fuel o, File f) throws IOException {\r
                MotorIO.writeFuel(o, new FileOutputStream(f));\r
+               FuelResolver.add(o, f.toURI());\r
        }\r
        \r
        @SuppressWarnings("deprecation")\r
@@ -100,4 +106,16 @@ public class FuelsEditor extends MultiObjectEditor<Fuel, AbstractFuelEditor> {
                f.show();\r
        }\r
 \r
+\r
+       @Override\r
+       public void fuelsChanged() {\r
+               for ( Map.Entry<URI, Fuel> e : FuelResolver.getFuelMap().entrySet() ){\r
+                       if ( !has(e.getValue()) ){\r
+                               if ( e.getValue() instanceof EditableFuel ){\r
+                                       add(e.getValue(), new File(e.getKey()));\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
 }\r
index 4c03e128f878e87615ff865fc1038de84698b2b4..587073abc27bff2d0251aa5a3b4a960249057ae4 100644 (file)
@@ -4,6 +4,7 @@ import java.awt.BorderLayout;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.util.HashMap;
+import java.util.HashSet;
 
 import javax.measure.quantity.Pressure;
 import javax.measure.quantity.Velocity;
@@ -32,6 +33,7 @@ public class MultiFuelChart extends JPanel implements FuelResolver.FuelsChangeLi
        private HashMap<Fuel, XYSeries> fuelToSeries = new HashMap<Fuel, XYSeries>();
        private Unit<Pressure> pressureUnit;
        private Unit<Velocity> rateUnit;
+       private HashSet<Fuel> editFuels = new HashSet<Fuel>();
        
        public MultiFuelChart() {
                this.setLayout(new BorderLayout());
@@ -73,7 +75,9 @@ public class MultiFuelChart extends JPanel implements FuelResolver.FuelsChangeLi
                fuelsChanged();
        }
 
-       public void addFuel(final Fuel f) {
+       void addFuel(final Fuel f, final boolean keep) {
+               if ( keep )
+                       editFuels.add(f);
                XYSeries s = createSeries(f);
                fuelToSeries.put(f, s);
                dataset.addSeries(s);
@@ -82,7 +86,7 @@ public class MultiFuelChart extends JPanel implements FuelResolver.FuelsChangeLi
                        public void propertyChange(PropertyChangeEvent evt) {
                                System.err.println("PropertyChanged :" + evt.getPropertyName());
                                removeFuel(f);
-                               addFuel(f);
+                               addFuel(f, keep);
                        }
                });
        }
@@ -110,11 +114,11 @@ public class MultiFuelChart extends JPanel implements FuelResolver.FuelsChangeLi
        public void fuelsChanged() {
                for ( Fuel f : FuelResolver.getFuelMap().values() ){
                        if ( !fuelToSeries.containsKey(f) ){
-                               addFuel(f);
+                               addFuel(f, false);
                        }
                }
                for ( Fuel f : fuelToSeries.keySet() ){
-                       if ( !FuelResolver.getFuelMap().values().contains(f) ){
+                       if ( !FuelResolver.getFuelMap().values().contains(f) && !editFuels.contains(f) ){
                                removeFuel(f);
                        }
                }