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
17 private class Entry {
\r
22 private List<Entry> entries = new Vector<Entry>();
\r
24 private class TM extends AbstractTableModel {
\r
26 public String getColumnName(int col) {
\r
35 return "Total Impulse";
\r
39 return "Max Thrust";
\r
41 return "Average Thrust";
\r
43 return "Max Pressure";
\r
51 public int getColumnCount() {
\r
56 public int getRowCount() {
\r
57 return entries.size();
\r
61 public Object getValueAt(int rowIdx, int col) {
\r
62 if (rowIdx >= entries.size() || rowIdx < 0)
\r
63 throw new IndexOutOfBoundsException("Row out of bounds");
\r
64 BurnSummary bs = entries.get(rowIdx).bs;
\r
65 Motor m = entries.get(rowIdx).m;
\r
70 return m.getFuel().getName();
\r
72 return bs.getRating();
\r
74 return RocketScience.ammountToRoundedString(bs.totalImpulse());
\r
76 return RocketScience.ammountToRoundedString(bs.specificImpulse());
\r
78 return RocketScience.ammountToRoundedString(bs.maxThrust());
\r
80 return RocketScience.ammountToRoundedString(bs.averageThrust());
\r
82 return RocketScience.ammountToRoundedString(bs.maxPressure());
\r
84 return RocketScience.ammountToRoundedString(bs.getPropellantMass());
\r
86 throw new IndexOutOfBoundsException("Col out of bounds");
\r
91 private TM tm = new TM();
\r
93 public MultiMotorTable() {
\r
95 RocketScience.addUnitPreferenceListener(this);
\r
98 public void addBurn(Burn b) {
\r
99 Entry e = new Entry();
\r
100 e.m = b.getMotor();
\r
101 e.bs = new BurnSummary(b);
\r
103 tm.fireTableDataChanged();
\r
106 public void removeBurn(Burn b) {
\r
107 Iterator<Entry> i = entries.iterator();
\r
108 while (i.hasNext()) {
\r
109 if (i.next().m == b.getMotor())
\r
112 tm.fireTableDataChanged();
\r
116 public void replace(Burn oldBurn, Burn newBurn) {
\r
117 if (oldBurn != null)
\r
118 removeBurn(oldBurn);
\r
119 if (newBurn != null)
\r
124 public void preferredUnitsChanged() {
\r
125 tm.fireTableDataChanged();
\r