Properly cleanup the download pane for restartless plugins

Signed-off-by: Taylor Smock <taylor.smock@kaart.com>
pull/1/head
Taylor Smock 2020-06-29 16:28:03 -06:00
rodzic 267c97200f
commit f82a296c60
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 625F6A74A3E4311A
1 zmienionych plików z 24 dodań i 1 usunięć

Wyświetl plik

@ -3,10 +3,13 @@ package org.openstreetmap.josm.plugins.mapwithai.gui.download;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.Component;
import java.awt.GridBagLayout;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.stream.Stream;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
@ -55,11 +58,31 @@ public class MapWithAIDownloadOptions extends JPanel implements DownloadSelectio
@Override
public void destroy() {
if (this.iGui != null) {
this.iGui.remove(this);
for (JComponent component : getJComponents(this.iGui.getComponents())) {
removeFromComponent(component);
}
this.iGui.removeDownloadAreaListener(this);
this.iGui = null;
}
}
private JComponent[] getJComponents(Component[] components) {
return Stream.of(components).filter(JComponent.class::isInstance).map(JComponent.class::cast)
.toArray(JComponent[]::new);
}
private boolean removeFromComponent(JComponent component) {
for (JComponent newComponent : getJComponents(component.getComponents())) {
if (optionPanel.equals(newComponent)) {
component.remove(optionPanel);
return true;
} else if (removeFromComponent(newComponent)) {
return true;
}
}
return false;
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getPropertyName().equals(BBoxChooser.BBOX_PROP) && iGui != null) {