package com.billkuker.rocketry.motorsim.visual.openRocket;\r
\r
+import java.awt.BorderLayout;\r
+import java.awt.Color;\r
+import java.awt.Component;\r
import java.awt.event.MouseAdapter;\r
import java.awt.event.MouseEvent;\r
import java.io.File;\r
import java.util.Vector;\r
\r
import javax.measure.unit.SI;\r
+import javax.swing.JLabel;\r
+import javax.swing.JPanel;\r
import javax.swing.JScrollPane;\r
import javax.swing.JTable;\r
import javax.swing.SwingUtilities;\r
import javax.swing.table.AbstractTableModel;\r
+import javax.swing.table.DefaultTableCellRenderer;\r
\r
+import net.sf.openrocket.aerodynamics.Warning;\r
import net.sf.openrocket.document.OpenRocketDocument;\r
import net.sf.openrocket.document.Simulation;\r
import net.sf.openrocket.file.RocketLoadException;\r
import com.billkuker.rocketry.motorsim.RocketScience.UnitPreference;\r
import com.billkuker.rocketry.motorsim.visual.workbench.BurnWatcher;\r
\r
-public class RocketSimTable extends JScrollPane implements BurnWatcher,\r
+public class RocketSimTable extends JPanel implements BurnWatcher,\r
RocketScience.UnitPreferenceListener {\r
static final long serialVersionUID = 1L;\r
\r
+ private static final Color RED = new Color(196, 0, 0);\r
+\r
static {\r
Application.setBaseTranslator(new ResourceBundleTranslator(\r
"l10n.messages"));\r
private OpenRocketDocument doc;\r
\r
public RocketSimTable() {\r
- setViewportView(table);\r
+ setLayout(new BorderLayout());\r
+ JScrollPane scroll = new JScrollPane();\r
+ scroll.setViewportView(table);\r
+ add(scroll, BorderLayout.CENTER);\r
+\r
+ table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {\r
+ private static final long serialVersionUID = 1L;\r
+\r
+ public Component getTableCellRendererComponent(JTable table,\r
+ Object value, boolean isSelected, boolean hasFocus,\r
+ int row, int column) {\r
+ Component c = super.getTableCellRendererComponent(table, value,\r
+ isSelected, hasFocus, row, column);\r
+ Entry e = entries.get(row);\r
+ if (e.ready && e.s.getSimulatedWarnings().size() > 0) {\r
+ c.setBackground(RED);\r
+ c.setForeground(Color.WHITE);\r
+ StringBuilder sb = new StringBuilder();\r
+ sb.append("<html>");\r
+ for (Warning w : e.s.getSimulatedWarnings()) {\r
+ sb.append(w.toString());\r
+ sb.append("<br>");\r
+ }\r
+ sb.append("<html>");\r
+ setToolTipText(sb.toString());\r
+ } else {\r
+ c.setBackground(table.getBackground());\r
+ c.setForeground(table.getForeground());\r
+ }\r
+ return c;\r
+ }\r
+ });\r
+\r
RocketScience.addUnitPreferenceListener(this);\r
table.addMouseListener(new MouseAdapter() {\r
public void mouseClicked(MouseEvent e) {\r
\r
public void openRocket(File f) throws RocketLoadException {\r
this.doc = new OpenRocketLoader().load(f);\r
+ JPanel rocketInfo = new JPanel();\r
+ JLabel name = new JLabel("File: " + f.getAbsolutePath());\r
+ rocketInfo.add(name);\r
+ add(rocketInfo, BorderLayout.NORTH);\r
+ revalidate();\r
}\r
\r
private Entry toEntry(Burn b) {\r
\r
import java.io.File;\r
\r
+import javax.measure.unit.SI;\r
import javax.swing.JFrame;\r
\r
+import org.jscience.physics.amount.Amount;\r
+\r
import com.billkuker.rocketry.motorsim.Burn;\r
import com.billkuker.rocketry.motorsim.RocketScience.UnitPreference;\r
import com.billkuker.rocketry.motorsim.motors.kuker.PVC9;\r
* @param args\r
*/\r
public static void main(String[] args) throws Exception {\r
- \r
+\r
UnitPreference.setUnitPreference(UnitPreference.NONSI);\r
\r
JFrame frame = new JFrame();\r
frame.setSize(1024, 768);\r
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\r
\r
RocketSimTable st = new RocketSimTable();\r
st.openRocket(new File("simple.ork"));\r
\r
com.billkuker.rocketry.motorsim.Motor m = new PVC9();\r
+ m.setEjectionDelay(Amount.valueOf(1, SI.SECOND));\r
Burn b = new Burn(m);\r
b.burn();\r
st.replace(null, b);\r