diff --git a/core/src/net/sf/openrocket/gui/dialogs/flightconfiguration/FlightConfigurationDialog.java b/core/src/net/sf/openrocket/gui/dialogs/flightconfiguration/FlightConfigurationDialog.java index 11c681584..4fbaf3801 100644 --- a/core/src/net/sf/openrocket/gui/dialogs/flightconfiguration/FlightConfigurationDialog.java +++ b/core/src/net/sf/openrocket/gui/dialogs/flightconfiguration/FlightConfigurationDialog.java @@ -19,6 +19,7 @@ import net.sf.openrocket.gui.main.BasicFrame; import net.sf.openrocket.gui.util.GUIUtil; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.rocketcomponent.Rocket; +import net.sf.openrocket.rocketvisitors.CopyFlightConfigurationVisitor; import net.sf.openrocket.startup.Application; public class FlightConfigurationDialog extends JDialog { @@ -63,7 +64,7 @@ public class FlightConfigurationDialog extends JDialog { newConfButton.addActionListener( new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - FlightConfigurationDialog.this.addConfiguration(); + addConfiguration(); } }); @@ -94,7 +95,7 @@ public class FlightConfigurationDialog extends JDialog { copyConfButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - // FIXME - ! + copyConfiguration(); } }); panel.add(copyConfButton,"wrap"); @@ -162,6 +163,17 @@ public class FlightConfigurationDialog extends JDialog { updateButtonState(); } + public void copyConfiguration() { + // currentID is the currently selected configuration. + String newConfigId = rocket.newFlightConfigurationID(); + CopyFlightConfigurationVisitor v = new CopyFlightConfigurationVisitor(currentID, newConfigId); + v.visit(rocket); + motorConfigurationPanel.fireTableDataChanged(); + flightConfigurationModel.fireContentsUpdated(); + recoveryConfigurationPanel.fireTableDataChanged(); + updateButtonState(); + } + public void changeConfigurationName( String newName ) { rocket.setFlightConfigurationName(currentID, newName); flightConfigurationModel.fireContentsUpdated(); diff --git a/core/src/net/sf/openrocket/rocketvisitors/CopyFlightConfigurationVisitor.java b/core/src/net/sf/openrocket/rocketvisitors/CopyFlightConfigurationVisitor.java new file mode 100644 index 000000000..5f56dc5a3 --- /dev/null +++ b/core/src/net/sf/openrocket/rocketvisitors/CopyFlightConfigurationVisitor.java @@ -0,0 +1,26 @@ +package net.sf.openrocket.rocketvisitors; + +import net.sf.openrocket.rocketcomponent.RocketComponent; +import net.sf.openrocket.rocketcomponent.SupportsFlightConfiguration; + +public class CopyFlightConfigurationVisitor extends DepthFirstRecusiveVisitor { + + private final String oldConfigId; + private final String newConfigId; + + public CopyFlightConfigurationVisitor(String oldConfigId, String newConfigId) { + super(); + this.oldConfigId = oldConfigId; + this.newConfigId = newConfigId; + } + + @Override + public void doAction(RocketComponent visitable) { + + if ( visitable instanceof SupportsFlightConfiguration ) { + ((SupportsFlightConfiguration)visitable).cloneFlightConfiguration(oldConfigId, newConfigId); + } + } + + +}