1 package net.sf.openrocket.gui.adaptors;
5 import javax.swing.AbstractListModel;
6 import javax.swing.ComboBoxModel;
8 import net.sf.openrocket.database.Database;
9 import net.sf.openrocket.database.DatabaseListener;
10 import net.sf.openrocket.l10n.Translator;
11 import net.sf.openrocket.logging.LogHelper;
12 import net.sf.openrocket.preset.ComponentPreset;
13 import net.sf.openrocket.rocketcomponent.ComponentChangeEvent;
14 import net.sf.openrocket.rocketcomponent.ComponentChangeListener;
15 import net.sf.openrocket.rocketcomponent.RocketComponent;
16 import net.sf.openrocket.startup.Application;
18 public class PresetModel extends AbstractListModel implements ComboBoxModel, ComponentChangeListener, DatabaseListener<ComponentPreset> {
20 private static final LogHelper log = Application.getLogger();
21 private static final Translator trans = Application.getTranslator();
23 private static final String SELECT_PRESET = trans.get("lbl.select");
24 private static final String SELECT_DATABASE = trans.get("lbl.database");
27 private final RocketComponent component;
28 private ComponentPreset previousPreset;
30 private List<ComponentPreset> presets;
32 public PresetModel(RocketComponent component) {
33 presets = Application.getComponentPresetDao().listForType(component.getPresetType(), true);
34 this.component = component;
35 previousPreset = component.getPresetComponent();
36 component.addComponentChangeListener(this);
40 public int getSize() {
41 return presets.size() + 2;
45 public Object getElementAt(int index) {
49 if (index == getSize() - 1) {
50 return SELECT_DATABASE;
52 return presets.get(index - 1);
56 public void setSelectedItem(Object item) {
57 log.user("User selected preset item '" + item + "' for component " + component);
61 } else if (item.equals(SELECT_PRESET)) {
62 component.clearPreset();
63 } else if (item.equals(SELECT_DATABASE)) {
64 // FIXME: Open database dialog
66 // FIXME: Add undo point here
67 component.loadPreset((ComponentPreset) item);
72 public Object getSelectedItem() {
73 ComponentPreset preset = component.getPresetComponent();
82 public void componentChanged(ComponentChangeEvent e) {
83 if (previousPreset != component.getPresetComponent()) {
84 previousPreset = component.getPresetComponent();
85 fireContentsChanged(this, 0, getSize());
90 public void elementAdded(ComponentPreset element, Database<ComponentPreset> source) {
91 presets = Application.getComponentPresetDao().listForType(component.getPresetType(), true);
92 this.fireContentsChanged(this, 0, getSize());
96 public void elementRemoved(ComponentPreset element, Database<ComponentPreset> source) {
97 presets = Application.getComponentPresetDao().listForType(component.getPresetType(), true);
98 this.fireContentsChanged(this, 0, getSize());