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