Fix the problem where the PresetModel drop down was not closing when the ComponentPresetChooserDialog is opened.

This commit is contained in:
Kevin Ruland 2012-04-12 04:12:45 +00:00
parent f92034db56
commit ef8499e6a8

View File

@ -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);