From 4b525611ce9352bd6828b72d0f754422c07612b5 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Tue, 21 Mar 2023 23:06:01 +0100 Subject: [PATCH] Fix split not working on config listeners --- .../sf/openrocket/rocketcomponent/FreeformFinSet.java | 2 +- .../net/sf/openrocket/gui/configdialog/FinSetConfig.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/core/src/net/sf/openrocket/rocketcomponent/FreeformFinSet.java b/core/src/net/sf/openrocket/rocketcomponent/FreeformFinSet.java index 518433a6c..99d901e93 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/FreeformFinSet.java +++ b/core/src/net/sf/openrocket/rocketcomponent/FreeformFinSet.java @@ -97,8 +97,8 @@ public class FreeformFinSet extends FinSet { for (RocketComponent listener : finset.configListeners) { if (listener instanceof FinSet) { FreeformFinSet listenerSet = FreeformFinSet.convertFinSet((FinSet) listener, false); - freeform.addConfigListener(listenerSet); finset.removeConfigListener(listener); + freeform.addConfigListener(listenerSet); } } diff --git a/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java index 52653c5ba..eb45a473f 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java @@ -1,5 +1,6 @@ package net.sf.openrocket.gui.configdialog; +import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; @@ -105,6 +106,10 @@ public abstract class FinSetConfig extends RocketComponentConfig { log.info(Markers.USER_MARKER, "Splitting " + component.getComponentName() + " into separate fins, fin count=" + ((FinSet) component).getFinCount()); + // This is a bit awkward, we need to store the listeners before closing the dialog, because closing it + // will remove them. We then add them back before the split and remove them afterwards. + List listeners = new ArrayList<>(component.getConfigListeners()); + ComponentConfigDialog.disposeDialog(); // Do change in future for overall safety @@ -112,7 +117,11 @@ public abstract class FinSetConfig extends RocketComponentConfig { @Override public void run() { document.addUndoPosition("Split fin set"); + for (RocketComponent listener : listeners) { + component.addConfigListener(listener); + } ((FinSet) component).splitFins(); + component.clearConfigListeners(); } }); }