[fixes #1076] Move PresetModel database listener internally

setComponent() of ComponentConfigDialog called pack(), which triggered invalidate() in RocketComponentConfig, thus removing presetModel from the database listeners before the Component Preset window could even be called
This commit is contained in:
Sibo Van Gool 2022-02-01 00:39:22 +01:00
parent 1ae589d864
commit 3541899b0f
2 changed files with 3 additions and 3 deletions

View File

@ -7,6 +7,7 @@ import javax.swing.AbstractListModel;
import javax.swing.ComboBoxModel; import javax.swing.ComboBoxModel;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import net.sf.openrocket.database.ComponentPresetDatabase;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -75,6 +76,7 @@ public class PresetModel extends AbstractListModel implements ComboBoxModel, Com
SwingUtilities.invokeLater(new Runnable() { SwingUtilities.invokeLater(new Runnable() {
@Override @Override
public void run() { public void run() {
((ComponentPresetDatabase) Application.getComponentPresetDao()).addDatabaseListener(PresetModel.this);
ComponentPresetChooserDialog dialog = ComponentPresetChooserDialog dialog =
new ComponentPresetChooserDialog(SwingUtilities.getWindowAncestor(parent), component); new ComponentPresetChooserDialog(SwingUtilities.getWindowAncestor(parent), component);
dialog.setVisible(true); dialog.setVisible(true);
@ -82,6 +84,7 @@ public class PresetModel extends AbstractListModel implements ComboBoxModel, Com
if (preset != null) { if (preset != null) {
setSelectedItem(preset); setSelectedItem(preset);
} }
((ComponentPresetDatabase) Application.getComponentPresetDao()).removeChangeListener(PresetModel.this);
} }
}); });
} else { } else {

View File

@ -22,7 +22,6 @@ import javax.swing.JTextArea;
import javax.swing.JTextField; import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout; import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.database.ComponentPresetDatabase;
import net.sf.openrocket.document.OpenRocketDocument; import net.sf.openrocket.document.OpenRocketDocument;
import net.sf.openrocket.gui.SpinnerEditor; import net.sf.openrocket.gui.SpinnerEditor;
import net.sf.openrocket.gui.adaptors.BooleanModel; import net.sf.openrocket.gui.adaptors.BooleanModel;
@ -94,7 +93,6 @@ public class RocketComponentConfig extends JPanel {
if (component.getPresetType() != null) { if (component.getPresetType() != null) {
// If the component supports a preset, show the preset selection box. // If the component supports a preset, show the preset selection box.
presetModel = new PresetModel(this, document, component); presetModel = new PresetModel(this, document, component);
((ComponentPresetDatabase) Application.getComponentPresetDao()).addDatabaseListener(presetModel);
presetComboBox = new JComboBox(presetModel); presetComboBox = new JComboBox(presetModel);
presetComboBox.setEditable(false); presetComboBox.setEditable(false);
this.add(presetComboBox, ""); this.add(presetComboBox, "");
@ -623,7 +621,6 @@ public class RocketComponentConfig extends JPanel {
for (Invalidatable i : invalidatables) { for (Invalidatable i : invalidatables) {
i.invalidate(); i.invalidate();
} }
((ComponentPresetDatabase) Application.getComponentPresetDao()).removeChangeListener(presetModel);
} }