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.document.OpenRocketDocument;
13 import net.sf.openrocket.gui.dialogs.preset.ComponentPresetChooserDialog;
14 import net.sf.openrocket.l10n.Translator;
15 import net.sf.openrocket.logging.LogHelper;
16 import net.sf.openrocket.preset.ComponentPreset;
17 import net.sf.openrocket.rocketcomponent.ComponentChangeEvent;
18 import net.sf.openrocket.rocketcomponent.ComponentChangeListener;
19 import net.sf.openrocket.rocketcomponent.RocketComponent;
20 import net.sf.openrocket.startup.Application;
21 import net.sf.openrocket.util.BugException;
23 public class PresetModel extends AbstractListModel implements ComboBoxModel, ComponentChangeListener, DatabaseListener<ComponentPreset> {
25 private static final LogHelper log = Application.getLogger();
26 private static final Translator trans = Application.getTranslator();
28 private static final String NONE_SELECTED = trans.get("lbl.select");
29 private static final String SELECT_DATABASE = trans.get("lbl.database");
31 private final Component parent;
32 private final RocketComponent component;
33 private final OpenRocketDocument document;
34 private ComponentPreset previousPreset;
36 private List<ComponentPreset> presets;
38 public PresetModel(Component parent, OpenRocketDocument document, RocketComponent component) {
40 this.document = document;
41 presets = Application.getComponentPresetDao().listForType(component.getPresetType(), true);
42 this.component = component;
43 previousPreset = component.getPresetComponent();
44 component.addComponentChangeListener(this);
48 public int getSize() {
49 return presets.size() + 2;
53 public Object getElementAt(int index) {
57 if (index == getSize() - 1) {
58 return SELECT_DATABASE;
60 return presets.get(index - 1);
64 public void setSelectedItem(Object item) {
65 log.user("User selected preset item '" + item + "' for component " + component);
68 throw new BugException("item is null");
69 } else if (item.equals(NONE_SELECTED)) {
70 component.clearPreset();
71 } else if (item.equals(SELECT_DATABASE)) {
72 SwingUtilities.invokeLater(new Runnable() {
75 ComponentPresetChooserDialog dialog =
76 new ComponentPresetChooserDialog(SwingUtilities.getWindowAncestor(parent), component);
77 dialog.setVisible(true);
78 ComponentPreset preset = dialog.getSelectedComponentPreset();
80 setSelectedItem(preset);
85 document.addUndoPosition("Use Preset " + component.getComponentName());
86 component.loadPreset((ComponentPreset) item);
91 public Object getSelectedItem() {
92 ComponentPreset preset = component.getPresetComponent();
101 public void componentChanged(ComponentChangeEvent e) {
102 if (previousPreset != component.getPresetComponent()) {
103 previousPreset = component.getPresetComponent();
104 fireContentsChanged(this, 0, getSize());
109 public void elementAdded(ComponentPreset element, Database<ComponentPreset> source) {
110 presets = Application.getComponentPresetDao().listForType(component.getPresetType(), true);
111 this.fireContentsChanged(this, 0, getSize());
115 public void elementRemoved(ComponentPreset element, Database<ComponentPreset> source) {
116 presets = Application.getComponentPresetDao().listForType(component.getPresetType(), true);
117 this.fireContentsChanged(this, 0, getSize());