Fix split not working on config listeners

This commit is contained in:
SiboVG 2023-03-21 23:06:01 +01:00
parent ee8dbffd98
commit 4b525611ce
2 changed files with 10 additions and 1 deletions

View File

@ -97,8 +97,8 @@ public class FreeformFinSet extends FinSet {
for (RocketComponent listener : finset.configListeners) { for (RocketComponent listener : finset.configListeners) {
if (listener instanceof FinSet) { if (listener instanceof FinSet) {
FreeformFinSet listenerSet = FreeformFinSet.convertFinSet((FinSet) listener, false); FreeformFinSet listenerSet = FreeformFinSet.convertFinSet((FinSet) listener, false);
freeform.addConfigListener(listenerSet);
finset.removeConfigListener(listener); finset.removeConfigListener(listener);
freeform.addConfigListener(listenerSet);
} }
} }

View File

@ -1,5 +1,6 @@
package net.sf.openrocket.gui.configdialog; package net.sf.openrocket.gui.configdialog;
import java.awt.Component;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.util.ArrayList; 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=" + log.info(Markers.USER_MARKER, "Splitting " + component.getComponentName() + " into separate fins, fin count=" +
((FinSet) component).getFinCount()); ((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<RocketComponent> listeners = new ArrayList<>(component.getConfigListeners());
ComponentConfigDialog.disposeDialog(); ComponentConfigDialog.disposeDialog();
// Do change in future for overall safety // Do change in future for overall safety
@ -112,7 +117,11 @@ public abstract class FinSetConfig extends RocketComponentConfig {
@Override @Override
public void run() { public void run() {
document.addUndoPosition("Split fin set"); document.addUndoPosition("Split fin set");
for (RocketComponent listener : listeners) {
component.addConfigListener(listener);
}
((FinSet) component).splitFins(); ((FinSet) component).splitFins();
component.clearConfigListeners();
} }
}); });
} }