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
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
});\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
@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
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
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;
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());
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);
public void propertyChange(PropertyChangeEvent evt) {
System.err.println("PropertyChanged :" + evt.getPropertyName());
removeFuel(f);
- addFuel(f);
+ addFuel(f, keep);
}
});
}
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);
}
}