1 package com.billkuker.rocketry.motorsim.visual.workbench;
\r
3 import java.util.Iterator;
\r
4 import java.util.List;
\r
5 import java.util.Vector;
\r
7 import javax.swing.JTable;
\r
8 import javax.swing.table.AbstractTableModel;
\r
10 import com.billkuker.rocketry.motorsim.Burn;
\r
11 import com.billkuker.rocketry.motorsim.BurnSummary;
\r
12 import com.billkuker.rocketry.motorsim.Motor;
\r
13 import com.billkuker.rocketry.motorsim.RocketScience;
\r
15 public class MultiMotorTable extends JTable implements BurnWatcher, RocketScience.UnitPreferenceListener {
\r
16 private static final long serialVersionUID = 1L;
\r
18 private class Entry {
\r
23 private List<Entry> entries = new Vector<Entry>();
\r
25 private class TM extends AbstractTableModel {
\r
26 private static final long serialVersionUID = 1L;
\r
29 public String getColumnName(int col) {
\r
38 return "Total Impulse";
\r
42 return "Max Thrust";
\r
44 return "Average Thrust";
\r
46 return "Max Pressure";
\r
48 return "Volume Loading";
\r
56 public int getColumnCount() {
\r
61 public int getRowCount() {
\r
62 return entries.size();
\r
66 public Object getValueAt(int rowIdx, int col) {
\r
67 if (rowIdx >= entries.size() || rowIdx < 0)
\r
68 throw new IndexOutOfBoundsException("Row out of bounds");
\r
69 BurnSummary bs = entries.get(rowIdx).bs;
\r
70 Motor m = entries.get(rowIdx).m;
\r
75 return m.getFuel().getName();
\r
77 return bs.getRating();
\r
79 return RocketScience.ammountToRoundedString(bs.totalImpulse());
\r
81 return RocketScience.ammountToRoundedString(bs.specificImpulse());
\r
83 return RocketScience.ammountToRoundedString(bs.maxThrust());
\r
85 return RocketScience.ammountToRoundedString(bs.averageThrust());
\r
87 return RocketScience.ammountToRoundedString(bs.maxPressure());
\r
89 return Integer.toString((int)(bs.getVolumeLoading()*100.0)) + "%";
\r
91 return RocketScience.ammountToRoundedString(bs.getPropellantMass());
\r
93 throw new IndexOutOfBoundsException("Col out of bounds");
\r
98 private TM tm = new TM();
\r
100 public MultiMotorTable() {
\r
102 RocketScience.addUnitPreferenceListener(this);
\r
105 public void addBurn(Burn b) {
\r
106 Entry e = new Entry();
\r
107 e.m = b.getMotor();
\r
108 e.bs = new BurnSummary(b);
\r
110 tm.fireTableDataChanged();
\r
113 public void removeBurn(Burn b) {
\r
114 Iterator<Entry> i = entries.iterator();
\r
115 while (i.hasNext()) {
\r
116 if (i.next().m == b.getMotor())
\r
119 tm.fireTableDataChanged();
\r
123 public void replace(Burn oldBurn, Burn newBurn) {
\r
124 if (oldBurn != null)
\r
125 removeBurn(oldBurn);
\r
126 if (newBurn != null)
\r
131 public void preferredUnitsChanged() {
\r
132 tm.fireTableDataChanged();
\r