From: Bill Kuker Date: Sun, 22 Jan 2012 19:15:12 +0000 (+0000) Subject: Red row and popup for rocksim warnings X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=4ce76ea75e957b9d8b2592ab2e9f0e8df9ba0a28;p=sw%2Fmotorsim Red row and popup for rocksim warnings --- diff --git a/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/OneMotorDatabase.java b/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/OneMotorDatabase.java index 09d1f72..5d23885 100644 --- a/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/OneMotorDatabase.java +++ b/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/OneMotorDatabase.java @@ -295,10 +295,10 @@ public class OneMotorDatabase implements MotorDatabase { time = new double[burn.getData().size()]; thrust = new double[burn.getData().size()]; - Coordinate c = new Coordinate(); for (int i = 0; i < cg.length; i++) { - cg[i] = c; + cg[i] = new Coordinate(); + cg[i].setWeight(0.0); //TODO: Set weight! } int i = 0; diff --git a/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/RocketSimTable.java b/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/RocketSimTable.java index b6155f3..0eb73d5 100644 --- a/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/RocketSimTable.java +++ b/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/RocketSimTable.java @@ -1,5 +1,8 @@ package com.billkuker.rocketry.motorsim.visual.openRocket; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; @@ -8,11 +11,15 @@ import java.util.List; import java.util.Vector; import javax.measure.unit.SI; +import javax.swing.JLabel; +import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.SwingUtilities; import javax.swing.table.AbstractTableModel; +import javax.swing.table.DefaultTableCellRenderer; +import net.sf.openrocket.aerodynamics.Warning; import net.sf.openrocket.document.OpenRocketDocument; import net.sf.openrocket.document.Simulation; import net.sf.openrocket.file.RocketLoadException; @@ -35,10 +42,12 @@ import com.billkuker.rocketry.motorsim.RocketScience; import com.billkuker.rocketry.motorsim.RocketScience.UnitPreference; import com.billkuker.rocketry.motorsim.visual.workbench.BurnWatcher; -public class RocketSimTable extends JScrollPane implements BurnWatcher, +public class RocketSimTable extends JPanel implements BurnWatcher, RocketScience.UnitPreferenceListener { static final long serialVersionUID = 1L; + private static final Color RED = new Color(196, 0, 0); + static { Application.setBaseTranslator(new ResourceBundleTranslator( "l10n.messages")); @@ -138,7 +147,39 @@ public class RocketSimTable extends JScrollPane implements BurnWatcher, private OpenRocketDocument doc; public RocketSimTable() { - setViewportView(table); + setLayout(new BorderLayout()); + JScrollPane scroll = new JScrollPane(); + scroll.setViewportView(table); + add(scroll, BorderLayout.CENTER); + + table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() { + private static final long serialVersionUID = 1L; + + public Component getTableCellRendererComponent(JTable table, + Object value, boolean isSelected, boolean hasFocus, + int row, int column) { + Component c = super.getTableCellRendererComponent(table, value, + isSelected, hasFocus, row, column); + Entry e = entries.get(row); + if (e.ready && e.s.getSimulatedWarnings().size() > 0) { + c.setBackground(RED); + c.setForeground(Color.WHITE); + StringBuilder sb = new StringBuilder(); + sb.append(""); + for (Warning w : e.s.getSimulatedWarnings()) { + sb.append(w.toString()); + sb.append("
"); + } + sb.append(""); + setToolTipText(sb.toString()); + } else { + c.setBackground(table.getBackground()); + c.setForeground(table.getForeground()); + } + return c; + } + }); + RocketScience.addUnitPreferenceListener(this); table.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { @@ -156,6 +197,11 @@ public class RocketSimTable extends JScrollPane implements BurnWatcher, public void openRocket(File f) throws RocketLoadException { this.doc = new OpenRocketLoader().load(f); + JPanel rocketInfo = new JPanel(); + JLabel name = new JLabel("File: " + f.getAbsolutePath()); + rocketInfo.add(name); + add(rocketInfo, BorderLayout.NORTH); + revalidate(); } private Entry toEntry(Burn b) { diff --git a/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/Test.java b/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/Test.java index 56fe81b..e4fb4f3 100644 --- a/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/Test.java +++ b/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/Test.java @@ -2,8 +2,11 @@ package com.billkuker.rocketry.motorsim.visual.openRocket; import java.io.File; +import javax.measure.unit.SI; import javax.swing.JFrame; +import org.jscience.physics.amount.Amount; + import com.billkuker.rocketry.motorsim.Burn; import com.billkuker.rocketry.motorsim.RocketScience.UnitPreference; import com.billkuker.rocketry.motorsim.motors.kuker.PVC9; @@ -14,16 +17,18 @@ public class Test { * @param args */ public static void main(String[] args) throws Exception { - + UnitPreference.setUnitPreference(UnitPreference.NONSI); JFrame frame = new JFrame(); frame.setSize(1024, 768); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); RocketSimTable st = new RocketSimTable(); st.openRocket(new File("simple.ork")); com.billkuker.rocketry.motorsim.Motor m = new PVC9(); + m.setEjectionDelay(Amount.valueOf(1, SI.SECOND)); Burn b = new Burn(m); b.burn(); st.replace(null, b);