Fix the problem where the PresetModel drop down was not closing when the ComponentPresetChooserDialog is opened.
This commit is contained in:
parent
f92034db56
commit
ef8499e6a8
@ -19,19 +19,19 @@ import net.sf.openrocket.rocketcomponent.RocketComponent;
|
|||||||
import net.sf.openrocket.startup.Application;
|
import net.sf.openrocket.startup.Application;
|
||||||
|
|
||||||
public class PresetModel extends AbstractListModel implements ComboBoxModel, ComponentChangeListener, DatabaseListener<ComponentPreset> {
|
public class PresetModel extends AbstractListModel implements ComboBoxModel, ComponentChangeListener, DatabaseListener<ComponentPreset> {
|
||||||
|
|
||||||
private static final LogHelper log = Application.getLogger();
|
private static final LogHelper log = Application.getLogger();
|
||||||
private static final Translator trans = Application.getTranslator();
|
private static final Translator trans = Application.getTranslator();
|
||||||
|
|
||||||
private static final String NONE_SELECTED = "";
|
private static final String NONE_SELECTED = "";
|
||||||
private static final String SELECT_DATABASE = trans.get("lbl.database");
|
private static final String SELECT_DATABASE = trans.get("lbl.database");
|
||||||
|
|
||||||
private final Component parent;
|
private final Component parent;
|
||||||
private final RocketComponent component;
|
private final RocketComponent component;
|
||||||
private ComponentPreset previousPreset;
|
private ComponentPreset previousPreset;
|
||||||
|
|
||||||
private List<ComponentPreset> presets;
|
private List<ComponentPreset> presets;
|
||||||
|
|
||||||
public PresetModel(Component parent, RocketComponent component) {
|
public PresetModel(Component parent, RocketComponent component) {
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
presets = Application.getComponentPresetDao().listForType(component.getPresetType(), true);
|
presets = Application.getComponentPresetDao().listForType(component.getPresetType(), true);
|
||||||
@ -39,12 +39,12 @@ public class PresetModel extends AbstractListModel implements ComboBoxModel, Com
|
|||||||
previousPreset = component.getPresetComponent();
|
previousPreset = component.getPresetComponent();
|
||||||
component.addComponentChangeListener(this);
|
component.addComponentChangeListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getSize() {
|
public int getSize() {
|
||||||
return presets.size() + 2;
|
return presets.size() + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getElementAt(int index) {
|
public Object getElementAt(int index) {
|
||||||
if (index == 0) {
|
if (index == 0) {
|
||||||
@ -55,30 +55,34 @@ public class PresetModel extends AbstractListModel implements ComboBoxModel, Com
|
|||||||
}
|
}
|
||||||
return presets.get(index - 1);
|
return presets.get(index - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setSelectedItem(Object item) {
|
public void setSelectedItem(Object item) {
|
||||||
log.user("User selected preset item '" + item + "' for component " + component);
|
log.user("User selected preset item '" + item + "' for component " + component);
|
||||||
|
|
||||||
if (item == null) {
|
if (item == null) {
|
||||||
// FIXME: What to do?
|
// FIXME: What to do?
|
||||||
} else if (item.equals(NONE_SELECTED)) {
|
} else if (item.equals(NONE_SELECTED)) {
|
||||||
component.clearPreset();
|
component.clearPreset();
|
||||||
} else if (item.equals(SELECT_DATABASE)) {
|
} else if (item.equals(SELECT_DATABASE)) {
|
||||||
// FIXME - when the dialog first appears, the preset drop down still is open and has focus.
|
SwingUtilities.invokeLater( new Runnable() {
|
||||||
// we need to force focus to the new dialog.
|
@Override
|
||||||
ComponentPresetChooserDialog dialog =
|
public void run() {
|
||||||
new ComponentPresetChooserDialog( SwingUtilities.getWindowAncestor(PresetModel.this.parent),
|
ComponentPresetChooserDialog dialog =
|
||||||
PresetModel.this.component);
|
new ComponentPresetChooserDialog( SwingUtilities.getWindowAncestor(PresetModel.this.parent),
|
||||||
dialog.setVisible(true);
|
PresetModel.this.component);
|
||||||
ComponentPreset preset = dialog.getSelectedComponentPreset();
|
dialog.setVisible(true);
|
||||||
setSelectedItem(preset);
|
ComponentPreset preset = dialog.getSelectedComponentPreset();
|
||||||
|
setSelectedItem(preset);
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
// FIXME: Add undo point here
|
// FIXME: Add undo point here
|
||||||
component.loadPreset((ComponentPreset) item);
|
component.loadPreset((ComponentPreset) item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getSelectedItem() {
|
public Object getSelectedItem() {
|
||||||
ComponentPreset preset = component.getPresetComponent();
|
ComponentPreset preset = component.getPresetComponent();
|
||||||
@ -88,7 +92,7 @@ public class PresetModel extends AbstractListModel implements ComboBoxModel, Com
|
|||||||
return preset;
|
return preset;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void componentChanged(ComponentChangeEvent e) {
|
public void componentChanged(ComponentChangeEvent e) {
|
||||||
if (previousPreset != component.getPresetComponent()) {
|
if (previousPreset != component.getPresetComponent()) {
|
||||||
@ -96,7 +100,7 @@ public class PresetModel extends AbstractListModel implements ComboBoxModel, Com
|
|||||||
fireContentsChanged(this, 0, getSize());
|
fireContentsChanged(this, 0, getSize());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void elementAdded(ComponentPreset element, Database<ComponentPreset> source) {
|
public void elementAdded(ComponentPreset element, Database<ComponentPreset> source) {
|
||||||
presets = Application.getComponentPresetDao().listForType(component.getPresetType(), true);
|
presets = Application.getComponentPresetDao().listForType(component.getPresetType(), true);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user