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;
21 public class PresetModel extends AbstractListModel implements ComboBoxModel, ComponentChangeListener, DatabaseListener<ComponentPreset> {
23 private static final LogHelper log = Application.getLogger();
24 private static final Translator trans = Application.getTranslator();
26 private static final String NONE_SELECTED = "";
27 private static final String SELECT_DATABASE = trans.get("lbl.database");
29 private final Component parent;
30 private final RocketComponent component;
31 private ComponentPreset previousPreset;
33 private List<ComponentPreset> presets;
35 public PresetModel(Component parent, RocketComponent component) {
37 presets = Application.getComponentPresetDao().listForType(component.getPresetType(), true);
38 this.component = component;
39 previousPreset = component.getPresetComponent();
40 component.addComponentChangeListener(this);
44 public int getSize() {
45 return presets.size() + 2;
49 public Object getElementAt(int index) {
53 if (index == getSize() - 1) {
54 return SELECT_DATABASE;
56 return presets.get(index - 1);
60 public void setSelectedItem(Object item) {
61 log.user("User selected preset item '" + item + "' for component " + component);
65 } else if (item.equals(NONE_SELECTED)) {
66 component.clearPreset();
67 } else if (item.equals(SELECT_DATABASE)) {
68 SwingUtilities.invokeLater( new Runnable() {
71 ComponentPresetChooserDialog dialog =
72 new ComponentPresetChooserDialog( SwingUtilities.getWindowAncestor(PresetModel.this.parent),
73 PresetModel.this.component);
74 dialog.setVisible(true);
75 ComponentPreset preset = dialog.getSelectedComponentPreset();
76 setSelectedItem(preset);
81 // FIXME: Add undo point here
82 component.loadPreset((ComponentPreset) item);
87 public Object getSelectedItem() {
88 ComponentPreset preset = component.getPresetComponent();
97 public void componentChanged(ComponentChangeEvent e) {
98 if (previousPreset != component.getPresetComponent()) {
99 previousPreset = component.getPresetComponent();
100 fireContentsChanged(this, 0, getSize());
105 public void elementAdded(ComponentPreset element, Database<ComponentPreset> source) {
106 presets = Application.getComponentPresetDao().listForType(component.getPresetType(), true);
107 this.fireContentsChanged(this, 0, getSize());
111 public void elementRemoved(ComponentPreset element, Database<ComponentPreset> source) {
112 presets = Application.getComponentPresetDao().listForType(component.getPresetType(), true);
113 this.fireContentsChanged(this, 0, getSize());