Added table of motor info
authorBill Kuker <bkuker@billkuker.com>
Tue, 23 Nov 2010 01:21:21 +0000 (01:21 +0000)
committerBill Kuker <bkuker@billkuker.com>
Tue, 23 Nov 2010 01:21:21 +0000 (01:21 +0000)
gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorsEditor.java
gui/com/billkuker/rocketry/motorsim/visual/workbench/MultiMotorTable.java [new file with mode: 0644]

index 05d947585d1248401f5081bec7ddd9cfb08c60a9..e805f8acef95bbd7ba72c9d0a0e2e881ab5292ce 100644 (file)
@@ -11,6 +11,7 @@ import java.util.Vector;
 import javax.swing.JFrame;\r
 import javax.swing.JMenu;\r
 import javax.swing.JMenuItem;\r
+import javax.swing.JScrollPane;\r
 import javax.swing.JSeparator;\r
 import java.awt.event.ActionListener;\r
 \r
@@ -25,10 +26,12 @@ public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {
        \r
        MultiMotorThrustChart mbc = new MultiMotorThrustChart();\r
        MultiMotorPressureChart mpc = new MultiMotorPressureChart();\r
+       MultiMotorTable mmt = new MultiMotorTable();\r
 \r
        public MotorsEditor(JFrame f) {\r
                super(f, "Motor");\r
                \r
+               addTab("All Motors", new JScrollPane(mmt));\r
                addTab("All Thrust", mbc);\r
                addTab("All Pressure", mpc);\r
                \r
@@ -49,12 +52,14 @@ public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {
        protected void objectAdded(Motor m, MotorEditor e){\r
                e.addBurnWatcher(mbc);\r
                e.addBurnWatcher(mpc);\r
+               e.addBurnWatcher(mmt);\r
        }\r
        \r
        @Override\r
        protected void objectRemoved(Motor m, MotorEditor e){\r
                mbc.removeBurn(e.burn);\r
                mpc.removeBurn(e.burn);\r
+               mmt.removeBurn(e.burn);\r
        }\r
 \r
        @Override\r
diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MultiMotorTable.java b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MultiMotorTable.java
new file mode 100644 (file)
index 0000000..518904f
--- /dev/null
@@ -0,0 +1,127 @@
+package com.billkuker.rocketry.motorsim.visual.workbench;\r
+\r
+import java.util.Iterator;\r
+import java.util.List;\r
+import java.util.Vector;\r
+\r
+import javax.swing.JTable;\r
+import javax.swing.table.AbstractTableModel;\r
+\r
+import com.billkuker.rocketry.motorsim.Burn;\r
+import com.billkuker.rocketry.motorsim.BurnSummary;\r
+import com.billkuker.rocketry.motorsim.Motor;\r
+import com.billkuker.rocketry.motorsim.RocketScience;\r
+\r
+public class MultiMotorTable extends JTable implements BurnWatcher, RocketScience.UnitPreferenceListener {\r
+\r
+       private class Entry {\r
+               Motor m;\r
+               BurnSummary bs;\r
+       }\r
+\r
+       private List<Entry> entries = new Vector<Entry>();\r
+\r
+       private class TM extends AbstractTableModel {\r
+               @Override\r
+               public String getColumnName(int col) {\r
+                       switch (col) {\r
+                       case 0:\r
+                               return "Motor";\r
+                       case 1:\r
+                               return "Fuel";\r
+                       case 2:\r
+                               return "Rating";\r
+                       case 3:\r
+                               return "Total Impulse";\r
+                       case 4:\r
+                               return "ISP";\r
+                       case 5:\r
+                               return "Max Thrust";\r
+                       case 6:\r
+                               return "Average Thrust";\r
+                       case 7:\r
+                               return "Max Pressure";\r
+                       case 8:\r
+                               return "Fuel Mass";\r
+                       }\r
+                       return null;\r
+               }\r
+               \r
+               @Override\r
+               public int getColumnCount() {\r
+                       return 9;\r
+               }\r
+\r
+               @Override\r
+               public int getRowCount() {\r
+                       return entries.size();\r
+               }\r
+\r
+               @Override\r
+               public Object getValueAt(int rowIdx, int col) {\r
+                       if (rowIdx >= entries.size() || rowIdx < 0)\r
+                               throw new IndexOutOfBoundsException("Row out of bounds");\r
+                       BurnSummary bs = entries.get(rowIdx).bs;\r
+                       Motor m = entries.get(rowIdx).m;\r
+                       switch (col) {\r
+                       case 0:\r
+                               return m.getName();\r
+                       case 1:\r
+                               return m.getFuel().getName();\r
+                       case 2:\r
+                               return bs.getRating();\r
+                       case 3:\r
+                               return RocketScience.ammountToRoundedString(bs.totalImpulse());\r
+                       case 4:\r
+                               return RocketScience.ammountToRoundedString(bs.specificImpulse());\r
+                       case 5:\r
+                               return RocketScience.ammountToRoundedString(bs.maxThrust());\r
+                       case 6:\r
+                               return RocketScience.ammountToRoundedString(bs.averageThrust());\r
+                       case 7:\r
+                               return RocketScience.ammountToRoundedString(bs.maxPressure());\r
+                       case 8:\r
+                               return RocketScience.ammountToRoundedString(bs.getPropellantMass());\r
+                       }\r
+                       throw new IndexOutOfBoundsException("Col out of bounds");\r
+               }\r
+\r
+       }\r
+\r
+       private TM tm = new TM();\r
+\r
+       public MultiMotorTable() {\r
+               setModel(tm);\r
+               RocketScience.addUnitPreferenceListener(this);\r
+       }\r
+\r
+       public void addBurn(Burn b) {\r
+               Entry e = new Entry();\r
+               e.m = b.getMotor();\r
+               e.bs = new BurnSummary(b);\r
+               entries.add(e);\r
+               tm.fireTableDataChanged();\r
+       }\r
+\r
+       public void removeBurn(Burn b) {\r
+               Iterator<Entry> i = entries.iterator();\r
+               while (i.hasNext()) {\r
+                       if (i.next().m == b.getMotor())\r
+                               i.remove();\r
+               }\r
+               tm.fireTableDataChanged();\r
+       }\r
+\r
+       @Override\r
+       public void replace(Burn oldBurn, Burn newBurn) {\r
+               if (oldBurn != null)\r
+                       removeBurn(oldBurn);\r
+               if (newBurn != null)\r
+                       addBurn(newBurn);\r
+       }\r
+\r
+       @Override\r
+       public void preferredUnitsChanged() {\r
+               tm.fireTableDataChanged();\r
+       }\r
+}\r