Merge pull request #1103 from SiboVG/issue-1076

[fixes #1076] Fix preset combobox not updating
This commit is contained in:
Joe Pfeiffer 2022-01-31 18:09:01 -07:00 committed by GitHub
commit 8e50f5202e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 31 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);
} }

View File

@ -67,8 +67,6 @@ public class ComponentPresetChooserDialog extends JDialog {
private List<ComponentPreset> presets; private List<ComponentPreset> presets;
private ComponentPreset.Type presetType; private ComponentPreset.Type presetType;
private boolean okClicked = false;
public ComponentPresetChooserDialog(Window owner, RocketComponent component) { public ComponentPresetChooserDialog(Window owner, RocketComponent component) {
super(owner, trans.get("title"), Dialog.ModalityType.APPLICATION_MODAL); super(owner, trans.get("title"), Dialog.ModalityType.APPLICATION_MODAL);
@ -113,7 +111,7 @@ public class ComponentPresetChooserDialog extends JDialog {
sub.add(filterLabel, "gapright para"); sub.add(filterLabel, "gapright para");
filterText = new JTextField(); filterText = new JTextField();
sub.add(filterText, "width 50:320, growx"); sub.add(filterText, "width 50:320, pushx, growx");
filterText.getDocument().addDocumentListener(new DocumentListener() { filterText.getDocument().addDocumentListener(new DocumentListener() {
@Override @Override
public void changedUpdate(DocumentEvent e) { public void changedUpdate(DocumentEvent e) {
@ -131,7 +129,7 @@ public class ComponentPresetChooserDialog extends JDialog {
} }
}); });
panel.add(sub, "growx, ay 0, gapright para"); panel.add(sub, "growx, pushx, ay 0, gapright para");
// need to create componentSelectionTable before filter checkboxes, // need to create componentSelectionTable before filter checkboxes,
// but add to panel after // but add to panel after
@ -149,35 +147,25 @@ public class ComponentPresetChooserDialog extends JDialog {
JScrollPane scrollpane = new JScrollPane(); JScrollPane scrollpane = new JScrollPane();
scrollpane.setViewportView(componentSelectionTable); scrollpane.setViewportView(componentSelectionTable);
panel.add(scrollpane, "grow, width 700lp, height 300lp, spanx, wrap rel"); panel.add(scrollpane, "grow, width 700lp, height 300lp, pushy, spanx, wrap rel");
panel.add(new JLabel(Chars.UP_ARROW + " " + trans.get("lbl.favorites")), "spanx, gapleft 5px, wrap para"); panel.add(new JLabel(Chars.UP_ARROW + " " + trans.get("lbl.favorites")), "spanx, gapleft 5px, wrap para");
// OK / Cancel buttons // Close buttons
JButton okButton = new SelectColorButton(trans.get("dlg.but.ok")); JButton closeButton = new SelectColorButton(trans.get("dlg.but.close"));
okButton.addActionListener(new ActionListener() { closeButton.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
close(true); ComponentPresetChooserDialog.this.setVisible(false);
} }
}); });
panel.add(okButton, "tag ok, spanx, split"); panel.add(closeButton, "spanx, right, tag close");
//// Cancel button
JButton cancelButton = new SelectColorButton(trans.get("dlg.but.cancel"));
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
close(false);
}
});
panel.add(cancelButton, "tag cancel");
this.add(panel); this.add(panel);
GUIUtil.rememberWindowSize(this); GUIUtil.rememberWindowSize(this);
GUIUtil.setDisposableDialogOptions(this, okButton); GUIUtil.setDisposableDialogOptions(this, closeButton);
updateFilters(); updateFilters();
} }
@ -270,8 +258,6 @@ public class ComponentPresetChooserDialog extends JDialog {
* @return the selected motor, or <code>null</code> if no motor has been selected or the selection was canceled. * @return the selected motor, or <code>null</code> if no motor has been selected or the selection was canceled.
*/ */
public ComponentPreset getSelectedComponentPreset() { public ComponentPreset getSelectedComponentPreset() {
if (!okClicked)
return null;
int row = componentSelectionTable.getSelectedRow(); int row = componentSelectionTable.getSelectedRow();
if (row < 0) { if (row < 0) {
// Nothing selected. // Nothing selected.
@ -281,11 +267,6 @@ public class ComponentPresetChooserDialog extends JDialog {
return presets.get(row); return presets.get(row);
} }
public void close(boolean ok) {
okClicked = ok;
this.setVisible(false);
}
private void updateFilters() { private void updateFilters() {
List<RowFilter<TableModel, Object>> filters = new ArrayList<RowFilter<TableModel, Object>>(2); List<RowFilter<TableModel, Object>> filters = new ArrayList<RowFilter<TableModel, Object>>(2);
String filterTextRegex = filterText.getText(); String filterTextRegex = filterText.getText();