Make the preset combo box display empty when the preset is lost due to changes in...
[debian/openrocket] / core / src / net / sf / openrocket / gui / adaptors / BodyTubePresetModel.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.preset.ComponentPreset;
9 import net.sf.openrocket.rocketcomponent.RocketComponent;
10 import net.sf.openrocket.startup.Application;
11
12 public class BodyTubePresetModel extends AbstractListModel implements ComboBoxModel {
13
14         private final RocketComponent component;
15
16         private List<ComponentPreset> presets;
17         
18         public BodyTubePresetModel(RocketComponent component) {
19                 presets = Application.getDaos().getBodyTubePresetDao().listAll();
20                 this.component = component;
21         }
22         
23         public static class BodyTubePresetAdapter {
24                 // If the ComponentPreset bt is null, then no preset is selected.
25                 private ComponentPreset bt;
26                 private BodyTubePresetAdapter( ComponentPreset bt ) {
27                         this.bt = bt;
28                 }
29                 @Override
30                 public String toString() {
31                         if ( bt != null ) {
32                                 return bt.getManufacturer() + " " + bt.getPartNo();
33                         } else {
34                                 return "";
35                         }
36                 }
37                 @Override
38                 public int hashCode() {
39                         final int prime = 31;
40                         int result = 1;
41                         result = prime * result + ((bt == null) ? 0 : bt.hashCode());
42                         return result;
43                 }
44                 @Override
45                 public boolean equals(Object obj) {
46                         if (this == obj)
47                                 return true;
48                         if (obj == null)
49                                 return false;
50                         if (getClass() != obj.getClass())
51                                 return false;
52                         BodyTubePresetAdapter other = (BodyTubePresetAdapter) obj;
53                         if (bt == null) {
54                                 if (other.bt != null)
55                                         return false;
56                         } else if (!bt.equals(other.bt))
57                                 return false;
58                         return true;
59                 }
60         }
61         
62         @Override
63         public int getSize() {
64                 return presets.size();
65         }
66
67         @Override
68         public Object getElementAt(int index) {
69                 if ( index < 0 ) {
70                         return null;
71                 }
72                 return new BodyTubePresetAdapter(presets.get(index));
73         }
74
75         @Override
76         public void setSelectedItem(Object anItem) {
77                 BodyTubePresetAdapter selected = (BodyTubePresetAdapter) anItem;
78                 if ( selected == null ) {
79                         component.loadPreset(null);
80                 } else {
81                         component.loadPreset(selected.bt);
82                 }
83         }
84
85         @Override
86         public Object getSelectedItem() {
87                 ComponentPreset preset = (ComponentPreset) component.getPresetComponent();
88                 if ( preset == null ) {
89                         return null;
90                 } else {
91                         return new BodyTubePresetAdapter(preset);
92                 }
93         }
94
95 }