1 package net.sf.openrocket.gui.adaptors;
3 import java.awt.Component;
6 import javax.swing.AbstractListModel;
7 import javax.swing.ComboBoxModel;
8 import javax.swing.SwingUtilities;
10 import net.sf.openrocket.database.Database;
11 import net.sf.openrocket.database.DatabaseListener;
12 import net.sf.openrocket.gui.dialogs.preset.ComponentPresetChooserDialog;
13 import net.sf.openrocket.l10n.Translator;
14 import net.sf.openrocket.logging.LogHelper;
15 import net.sf.openrocket.preset.ComponentPreset;
16 import net.sf.openrocket.rocketcomponent.ComponentChangeEvent;
17 import net.sf.openrocket.rocketcomponent.ComponentChangeListener;
18 import net.sf.openrocket.rocketcomponent.RocketComponent;
19 import net.sf.openrocket.startup.Application;
20 import net.sf.openrocket.util.BugException;
22 public class PresetModel extends AbstractListModel implements ComboBoxModel, ComponentChangeListener, DatabaseListener<ComponentPreset> {
24 private static final LogHelper log = Application.getLogger();
25 private static final Translator trans = Application.getTranslator();
27 private static final String NONE_SELECTED = trans.get("lbl.select");
28 private static final String SELECT_DATABASE = trans.get("lbl.database");
30 private final Component parent;
31 private final RocketComponent component;
32 private ComponentPreset previousPreset;
34 private List<ComponentPreset> presets;
36 public PresetModel(Component parent, RocketComponent component) {
38 presets = Application.getComponentPresetDao().listForType(component.getPresetType(), true);
39 this.component = component;
40 previousPreset = component.getPresetComponent();
41 component.addComponentChangeListener(this);
45 public int getSize() {
46 return presets.size() + 2;
50 public Object getElementAt(int index) {
54 if (index == getSize() - 1) {
55 return SELECT_DATABASE;
57 return presets.get(index - 1);
61 public void setSelectedItem(Object item) {
62 log.user("User selected preset item '" + item + "' for component " + component);
66 throw new BugException("item is null");
67 } else if (item.equals(NONE_SELECTED)) {
68 component.clearPreset();
69 } else if (item.equals(SELECT_DATABASE)) {
70 SwingUtilities.invokeLater(new Runnable() {
73 ComponentPresetChooserDialog dialog =
74 new ComponentPresetChooserDialog(SwingUtilities.getWindowAncestor(parent), component);
75 dialog.setVisible(true);
76 ComponentPreset preset = dialog.getSelectedComponentPreset();
78 setSelectedItem(preset);
83 // FIXME: Add undo point here
84 component.loadPreset((ComponentPreset) item);
89 public Object getSelectedItem() {
90 ComponentPreset preset = component.getPresetComponent();
99 public void componentChanged(ComponentChangeEvent e) {
100 if (previousPreset != component.getPresetComponent()) {
101 previousPreset = component.getPresetComponent();
102 fireContentsChanged(this, 0, getSize());
107 public void elementAdded(ComponentPreset element, Database<ComponentPreset> source) {
108 presets = Application.getComponentPresetDao().listForType(component.getPresetType(), true);
109 this.fireContentsChanged(this, 0, getSize());
113 public void elementRemoved(ComponentPreset element, Database<ComponentPreset> source) {
114 presets = Application.getComponentPresetDao().listForType(component.getPresetType(), true);
115 this.fireContentsChanged(this, 0, getSize());