From 78d282f56fa6f1a21dc6b0453e8a263976675be1 Mon Sep 17 00:00:00 2001 From: Sampo Niskanen Date: Wed, 7 Jan 2015 17:13:41 +0200 Subject: [PATCH] Add possibility to copy simulation extensions from other simulations --- core/resources/l10n/messages.properties | 1 + .../gui/simulation/SimulationEditDialog.java | 2 +- .../simulation/SimulationOptionsPanel.java | 37 ++++++++++++++++++- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index 87fe2550e..384913337 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -387,6 +387,7 @@ simedtdlg.border.SimExt = Simulation extensions simedtdlg.SimExt.desc = Simulation extensions enable advanced features and custom functionality during flight simulations. You can for example do hardware-in-the-loop testing with them. simedtdlg.SimExt.noExtensions = No simulation extensions defined simedtdlg.SimExt.add = Add extension +simedtdlg.SimExt.copyExtension = Copy extension simedtdlg.lbl.Noflightdata = No flight data available. simedtdlg.lbl.runsimfirst = Please run the simulation first. simedtdlg.chart.Simflight = Simulated flight diff --git a/swing/src/net/sf/openrocket/gui/simulation/SimulationEditDialog.java b/swing/src/net/sf/openrocket/gui/simulation/SimulationEditDialog.java index af0ae5298..7f8307225 100644 --- a/swing/src/net/sf/openrocket/gui/simulation/SimulationEditDialog.java +++ b/swing/src/net/sf/openrocket/gui/simulation/SimulationEditDialog.java @@ -170,7 +170,7 @@ public class SimulationEditDialog extends JDialog { //// Launch conditions tabbedPane.addTab(trans.get("simedtdlg.tab.Launchcond"), new SimulationConditionsPanel(simulation[0])); //// Simulation options - tabbedPane.addTab(trans.get("simedtdlg.tab.Simopt"), new SimulationOptionsPanel(simulation[0])); + tabbedPane.addTab(trans.get("simedtdlg.tab.Simopt"), new SimulationOptionsPanel(document, simulation[0])); tabbedPane.setSelectedIndex(0); diff --git a/swing/src/net/sf/openrocket/gui/simulation/SimulationOptionsPanel.java b/swing/src/net/sf/openrocket/gui/simulation/SimulationOptionsPanel.java index a4b3587f3..4a5a5e320 100644 --- a/swing/src/net/sf/openrocket/gui/simulation/SimulationOptionsPanel.java +++ b/swing/src/net/sf/openrocket/gui/simulation/SimulationOptionsPanel.java @@ -24,6 +24,7 @@ import javax.swing.MenuElement; import javax.swing.SwingUtilities; import net.miginfocom.swing.MigLayout; +import net.sf.openrocket.document.OpenRocketDocument; import net.sf.openrocket.document.Simulation; import net.sf.openrocket.gui.SpinnerEditor; import net.sf.openrocket.gui.adaptors.DoubleModel; @@ -51,12 +52,14 @@ class SimulationOptionsPanel extends JPanel { private static final Translator trans = Application.getTranslator(); + private OpenRocketDocument document; final Simulation simulation; private JPanel currentExtensions; - SimulationOptionsPanel(final Simulation simulation) { + SimulationOptionsPanel(OpenRocketDocument document, final Simulation simulation) { super(new MigLayout("fill")); + this.document = document; this.simulation = simulation; final SimulationOptions conditions = simulation.getOptions(); @@ -233,6 +236,38 @@ class SimulationOptionsPanel extends JPanel { } } } + + JMenu copyMenu = null; + for (Simulation sim : document.getSimulations()) { + if (!sim.getSimulationExtensions().isEmpty()) { + JMenu menu = new JMenu(sim.getName()); + for (final SimulationExtension ext : sim.getSimulationExtensions()) { + JMenuItem item = new JMenuItem(ext.getName()); + item.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SimulationExtension e = ext.clone(); + simulation.getSimulationExtensions().add(e); + updateCurrentExtensions(); + SwingSimulationExtensionConfigurator configurator = findConfigurator(e); + if (configurator != null) { + configurator.configure(e, simulation, SwingUtilities.windowForComponent(SimulationOptionsPanel.this)); + } + } + }); + menu.add(item); + } + + if (copyMenu == null) { + copyMenu = new JMenu(trans.get("simedtdlg.SimExt.copyExtension")); + } + copyMenu.add(menu); + } + } + if (copyMenu != null) { + basemenu.add(copyMenu); + } + return basemenu; }