63a0ef75ba88666ab5faca4e41da9c6706f66371
[debian/openrocket] / core / src / net / sf / openrocket / gui / adaptors / PresetModel.java
1 package net.sf.openrocket.gui.adaptors;
2
3 import java.util.List;
4
5 import javax.swing.AbstractListModel;
6 import javax.swing.ComboBoxModel;
7
8 import net.sf.openrocket.l10n.Translator;
9 import net.sf.openrocket.logging.LogHelper;
10 import net.sf.openrocket.preset.ComponentPreset;
11 import net.sf.openrocket.rocketcomponent.ComponentChangeEvent;
12 import net.sf.openrocket.rocketcomponent.ComponentChangeListener;
13 import net.sf.openrocket.rocketcomponent.RocketComponent;
14 import net.sf.openrocket.startup.Application;
15
16 public class PresetModel extends AbstractListModel implements ComboBoxModel, ComponentChangeListener {
17         
18         private static final LogHelper log = Application.getLogger();
19         private static final Translator trans = Application.getTranslator();
20         
21         private static final String SELECT_PRESET = trans.get("lbl.select");
22         private static final String SELECT_DATABASE = trans.get("lbl.database");
23         
24         
25         private final RocketComponent component;
26         private ComponentPreset previousPreset;
27         
28         private final List<ComponentPreset> presets;
29         
30         public PresetModel(RocketComponent component) {
31                 // FIXME:  Make generic for any component type
32                 // FIXME:  This should load only the user's favorites, NOT all presets
33                 presets = Application.getDaos().getBodyTubePresetDao().listAll();
34                 this.component = component;
35                 previousPreset = component.getPresetComponent();
36                 component.addComponentChangeListener(this);
37         }
38         
39         @Override
40         public int getSize() {
41                 return presets.size() + 2;
42         }
43         
44         @Override
45         public Object getElementAt(int index) {
46                 if (index == 0) {
47                         return SELECT_PRESET;
48                 }
49                 if (index == getSize() - 1) {
50                         return SELECT_DATABASE;
51                 }
52                 return presets.get(index - 1);
53         }
54         
55         @Override
56         public void setSelectedItem(Object item) {
57                 log.user("User selected preset item '" + item + "' for component " + component);
58                 System.err.println("**** Setting item: " + item);
59                 
60                 if (item == null) {
61                         // FIXME:  What to do?
62                 } else if (item.equals(SELECT_PRESET)) {
63                         component.clearPreset();
64                 } else if (item.equals(SELECT_DATABASE)) {
65                         // FIXME:  Open database dialog
66                 } else {
67                         // FIXME: Add undo point here
68                         component.loadPreset((ComponentPreset) item);
69                 }
70         }
71         
72         @Override
73         public Object getSelectedItem() {
74                 ComponentPreset preset = component.getPresetComponent();
75                 if (preset == null) {
76                         return SELECT_PRESET;
77                 } else {
78                         return preset;
79                 }
80         }
81         
82         @Override
83         public void componentChanged(ComponentChangeEvent e) {
84                 if (previousPreset != component.getPresetComponent()) {
85                         previousPreset = component.getPresetComponent();
86                         System.err.println("Firing event");
87                         fireContentsChanged(this, 0, getSize());
88                 }
89         }
90         
91         // FIXME:  Make model invalidatable
92         
93 }