bug fixes
[debian/openrocket] / src / net / sf / openrocket / gui / plot / SimulationPlotPanel.java
index eb646dc5150d3e43ef092bfb7c27681748a20d40..898d7f67ae6d293439d5864b97577a9cac4ad872 100644 (file)
@@ -32,10 +32,16 @@ import net.sf.openrocket.startup.Application;
 import net.sf.openrocket.unit.Unit;
 import net.sf.openrocket.util.GUIUtil;
 import net.sf.openrocket.util.Icons;
+import net.sf.openrocket.util.Utils;
 
+/**
+ * Panel that displays the simulation plot options to the user.
+ * 
+ * @author Sampo Niskanen <sampo.niskanen@iki.fi>
+ */
 public class SimulationPlotPanel extends JPanel {
        private static final Translator trans = Application.getTranslator();
-
+       
        // TODO: LOW: Should these be somewhere else?
        public static final int AUTO = -1;
        public static final int LEFT = 0;
@@ -100,10 +106,8 @@ public class SimulationPlotPanel extends JPanel {
                FlightDataBranch branch = simulation.getSimulatedData().getBranch(0);
                types = branch.getTypes();
                
-               // TODO: LOW: Revert to custom if data type is not available.
-               configuration = defaultConfiguration.clone();
+               setConfiguration(defaultConfiguration);
                
-
                ////  Configuration selector
                
                // Setup the combo box
@@ -113,6 +117,9 @@ public class SimulationPlotPanel extends JPanel {
                                configurationSelector.setSelectedItem(config);
                        }
                }
+               
+               // FIXME:  Bugs when expected branch is not present
+               
                configurationSelector.addItemListener(new ItemListener() {
                        @Override
                        public void itemStateChanged(ItemEvent e) {
@@ -122,7 +129,7 @@ public class SimulationPlotPanel extends JPanel {
                                if (conf == CUSTOM_CONFIGURATION)
                                        return;
                                modifying++;
-                               configuration = conf.clone().resetUnits();
+                               setConfiguration(conf.clone().resetUnits());
                                updatePlots();
                                modifying--;
                        }
@@ -238,7 +245,7 @@ public class SimulationPlotPanel extends JPanel {
                                        JOptionPane.showMessageDialog(SimulationPlotPanel.this,
                                                        //// A maximum of 15 plots is allowed.
                                                        //// Cannot add plot
-                                                       trans.get("simplotpanel.OptionPane.lbl1"), 
+                                                       trans.get("simplotpanel.OptionPane.lbl1"),
                                                        trans.get("simplotpanel.OptionPane.lbl2"),
                                                        JOptionPane.ERROR_MESSAGE);
                                        return;
@@ -286,8 +293,15 @@ public class SimulationPlotPanel extends JPanel {
                button.addActionListener(new ActionListener() {
                        @Override
                        public void actionPerformed(ActionEvent e) {
+                               if (configuration.getTypeCount() == 0) {
+                                       JOptionPane.showMessageDialog(SimulationPlotPanel.this,
+                                                       trans.get("error.noPlotSelected"),
+                                                       trans.get("error.noPlotSelected.title"),
+                                                       JOptionPane.ERROR_MESSAGE);
+                                       return;
+                               }
                                defaultConfiguration = configuration.clone();
-                               PlotDialog.showPlot(SwingUtilities.getWindowAncestor(SimulationPlotPanel.this),
+                               SimulationPlotDialog.showPlot(SwingUtilities.getWindowAncestor(SimulationPlotPanel.this),
                                                simulation, configuration);
                        }
                });
@@ -298,6 +312,31 @@ public class SimulationPlotPanel extends JPanel {
        }
        
        
+       private void setConfiguration(PlotConfiguration conf) {
+               
+               boolean modified = false;
+               
+               configuration = conf.clone();
+               if (!Utils.contains(types, configuration.getDomainAxisType())) {
+                       configuration.setDomainAxisType(types[0]);
+                       modified = true;
+               }
+               
+               for (int i = 0; i < configuration.getTypeCount(); i++) {
+                       if (!Utils.contains(types, configuration.getType(i))) {
+                               configuration.removePlotDataType(i);
+                               i--;
+                               modified = true;
+                       }
+               }
+               
+               if (modified) {
+                       configuration.setName(CUSTOM);
+               }
+               
+       }
+       
+       
        private void setToCustom() {
                modifying++;
                configuration.setName(CUSTOM);
@@ -375,7 +414,7 @@ public class SimulationPlotPanel extends JPanel {
                                public void itemStateChanged(ItemEvent e) {
                                        if (modifying > 0)
                                                return;
-                                       Unit unit = (Unit) unitSelector.getSelectedUnit();
+                                       Unit unit = unitSelector.getSelectedUnit();
                                        configuration.setPlotDataUnit(index, unit);
                                }
                        });