Weakened references to static listener types for unit pref change and fuel change.
[sw/motorsim] / gui / com / billkuker / rocketry / motorsim / visual / workbench / MultiMotorTable.java
1 package com.billkuker.rocketry.motorsim.visual.workbench;\r
2 \r
3 import java.util.Iterator;\r
4 import java.util.List;\r
5 import java.util.Vector;\r
6 \r
7 import javax.swing.JTable;\r
8 import javax.swing.table.AbstractTableModel;\r
9 \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
14 \r
15 public class MultiMotorTable extends JTable implements BurnWatcher, RocketScience.UnitPreferenceListener {\r
16 \r
17         private class Entry {\r
18                 Motor m;\r
19                 BurnSummary bs;\r
20         }\r
21 \r
22         private List<Entry> entries = new Vector<Entry>();\r
23 \r
24         private class TM extends AbstractTableModel {\r
25                 @Override\r
26                 public String getColumnName(int col) {\r
27                         switch (col) {\r
28                         case 0:\r
29                                 return "Motor";\r
30                         case 1:\r
31                                 return "Fuel";\r
32                         case 2:\r
33                                 return "Rating";\r
34                         case 3:\r
35                                 return "Total Impulse";\r
36                         case 4:\r
37                                 return "ISP";\r
38                         case 5:\r
39                                 return "Max Thrust";\r
40                         case 6:\r
41                                 return "Average Thrust";\r
42                         case 7:\r
43                                 return "Max Pressure";\r
44                         case 8:\r
45                                 return "Fuel Mass";\r
46                         }\r
47                         return null;\r
48                 }\r
49                 \r
50                 @Override\r
51                 public int getColumnCount() {\r
52                         return 9;\r
53                 }\r
54 \r
55                 @Override\r
56                 public int getRowCount() {\r
57                         return entries.size();\r
58                 }\r
59 \r
60                 @Override\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
66                         switch (col) {\r
67                         case 0:\r
68                                 return m.getName();\r
69                         case 1:\r
70                                 return m.getFuel().getName();\r
71                         case 2:\r
72                                 return bs.getRating();\r
73                         case 3:\r
74                                 return RocketScience.ammountToRoundedString(bs.totalImpulse());\r
75                         case 4:\r
76                                 return RocketScience.ammountToRoundedString(bs.specificImpulse());\r
77                         case 5:\r
78                                 return RocketScience.ammountToRoundedString(bs.maxThrust());\r
79                         case 6:\r
80                                 return RocketScience.ammountToRoundedString(bs.averageThrust());\r
81                         case 7:\r
82                                 return RocketScience.ammountToRoundedString(bs.maxPressure());\r
83                         case 8:\r
84                                 return RocketScience.ammountToRoundedString(bs.getPropellantMass());\r
85                         }\r
86                         throw new IndexOutOfBoundsException("Col out of bounds");\r
87                 }\r
88 \r
89         }\r
90 \r
91         private TM tm = new TM();\r
92 \r
93         public MultiMotorTable() {\r
94                 setModel(tm);\r
95                 RocketScience.addUnitPreferenceListener(this);\r
96         }\r
97 \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
102                 entries.add(e);\r
103                 tm.fireTableDataChanged();\r
104         }\r
105 \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
110                                 i.remove();\r
111                 }\r
112                 tm.fireTableDataChanged();\r
113         }\r
114 \r
115         @Override\r
116         public void replace(Burn oldBurn, Burn newBurn) {\r
117                 if (oldBurn != null)\r
118                         removeBurn(oldBurn);\r
119                 if (newBurn != null)\r
120                         addBurn(newBurn);\r
121         }\r
122 \r
123         @Override\r
124         public void preferredUnitsChanged() {\r
125                 tm.fireTableDataChanged();\r
126         }\r
127 }\r