Red row and popup for rocksim warnings
authorBill Kuker <bkuker@billkuker.com>
Sun, 22 Jan 2012 19:15:12 +0000 (19:15 +0000)
committerBill Kuker <bkuker@billkuker.com>
Sun, 22 Jan 2012 19:15:12 +0000 (19:15 +0000)
gpl/com/billkuker/rocketry/motorsim/visual/openRocket/OneMotorDatabase.java
gpl/com/billkuker/rocketry/motorsim/visual/openRocket/RocketSimTable.java
gpl/com/billkuker/rocketry/motorsim/visual/openRocket/Test.java

index 09d1f7205b0f7514308a1498fa4016ede4320dc8..5d238850c080b2ed73cdf20e947ad60ef4da2035 100644 (file)
@@ -295,10 +295,10 @@ public class OneMotorDatabase implements MotorDatabase {
                time = new double[burn.getData().size()];\r
                thrust = new double[burn.getData().size()];\r
                \r
-               Coordinate c = new Coordinate();\r
 \r
                for (int i = 0; i < cg.length; i++) {\r
-                       cg[i] = c;\r
+                       cg[i] = new Coordinate();\r
+                       cg[i].setWeight(0.0); //TODO: Set weight!\r
                }\r
 \r
                int i = 0;\r
index b6155f3864d450c61d45f23027c48d9cd4e3fc83..0eb73d5c7927afd728c03fd7ffbd1ea08026ee08 100644 (file)
@@ -1,5 +1,8 @@
 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
@@ -8,11 +11,15 @@ import java.util.List;
 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
@@ -35,10 +42,12 @@ import com.billkuker.rocketry.motorsim.RocketScience;
 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
@@ -138,7 +147,39 @@ public class RocketSimTable extends JScrollPane implements BurnWatcher,
        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
@@ -156,6 +197,11 @@ public class RocketSimTable extends JScrollPane implements BurnWatcher,
 \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
index 56fe81bbf0677523382b94fea4f5da38248378ab..e4fb4f3ccfed3a8bf92c9776e871f1200ca3003f 100644 (file)
@@ -2,8 +2,11 @@ package com.billkuker.rocketry.motorsim.visual.openRocket;
 \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
@@ -14,16 +17,18 @@ public class Test {
         * @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