import java.awt.event.MouseAdapter;\r
import java.awt.event.MouseEvent;\r
import java.io.File;\r
+import java.util.HashSet;\r
import java.util.Iterator;\r
import java.util.List;\r
+import java.util.Set;\r
import java.util.Vector;\r
\r
import javax.measure.unit.SI;\r
Burn b;\r
}\r
\r
- List<Entry> entries = new Vector<Entry>();\r
\r
class TM extends AbstractTableModel {\r
private static final long serialVersionUID = 1L;\r
private TM tm = new TM();\r
private JTable table = new JTable(tm);\r
private OpenRocketDocument doc;\r
+ List<Entry> entries = new Vector<Entry>();\r
+ Set<Burn> burns = new HashSet<Burn>();\r
\r
public RocketSimTable() {\r
setLayout(new BorderLayout());\r
JLabel name = new JLabel("File: " + f.getAbsolutePath());\r
rocketInfo.add(name);\r
add(rocketInfo, BorderLayout.NORTH);\r
+ \r
+ entries = new Vector<Entry>();\r
+ for ( Burn b : burns ){\r
+ entries.add(toEntry(b));\r
+ }\r
+ tm.fireTableDataChanged();\r
revalidate();\r
}\r
\r
- private Entry toEntry(Burn b) {\r
+ private Entry toEntry(final Burn b) {\r
final Entry e = new Entry(b.getMotor(), doc.getSimulation(0).copy(), b);\r
- OneMotorDatabase.setBurn(b);\r
-\r
- e.s.getConfiguration().getMotorConfigurationID();\r
- Iterator<RocketComponent> iterator = doc.getRocket().iterator();\r
- while (iterator.hasNext()) {\r
- RocketComponent c = iterator.next();\r
- if (c instanceof MotorMount) {\r
- ((MotorMount) c).setMotorDelay(e.s.getConfiguration()\r
- .getMotorConfigurationID(), b.getMotor()\r
- .getEjectionDelay().doubleValue(SI.SECOND));\r
- }\r
- }\r
-\r
tm.fireTableDataChanged();\r
new Thread() {\r
@Override\r
public void run() {\r
try {\r
- e.s.simulate();\r
- e.ready = true;\r
- tm.fireTableDataChanged();\r
+ synchronized (OneMotorDatabase.lock) {\r
+\r
+ OneMotorDatabase.setBurn(b);\r
+\r
+ e.s.getConfiguration().getMotorConfigurationID();\r
+ Iterator<RocketComponent> iterator = doc.getRocket()\r
+ .iterator();\r
+ while (iterator.hasNext()) {\r
+ RocketComponent c = iterator.next();\r
+ if (c instanceof MotorMount) {\r
+ ((MotorMount) c).setMotorDelay(e.s\r
+ .getConfiguration()\r
+ .getMotorConfigurationID(), b\r
+ .getMotor().getEjectionDelay()\r
+ .doubleValue(SI.SECOND));\r
+ }\r
+ }\r
+\r
+ e.s.simulate();\r
+ e.ready = true;\r
+ tm.fireTableDataChanged();\r
+ }\r
} catch (SimulationException e1) {\r
e1.printStackTrace();\r
}\r
\r
@Override\r
public void replace(Burn oldBurn, Burn newBurn) {\r
+ burns.add(newBurn);\r
+ burns.remove(oldBurn);\r
+ \r
if (doc == null) {\r
return; // TODO, deal with changing rockets\r
}\r