Reimplement ComponentPreset to be a bag of typed parameters. This provides greater...
[debian/openrocket] / core / src / net / sf / openrocket / gui / adaptors / BodyTubePresetModel.java
index ff73bf601ed53a29a41c87a7842f7a36d214d95b..08850b8f0a53a7947bef2e218f8b5bab42b8eb7d 100644 (file)
@@ -4,16 +4,12 @@ import java.util.List;
 
 import javax.swing.AbstractListModel;
 import javax.swing.ComboBoxModel;
-import javax.swing.event.ListDataListener;
 
 import net.sf.openrocket.preset.ComponentPreset;
-import net.sf.openrocket.rocketcomponent.ComponentChangeEvent;
-import net.sf.openrocket.rocketcomponent.ComponentChangeListener;
 import net.sf.openrocket.rocketcomponent.RocketComponent;
 import net.sf.openrocket.startup.Application;
 
-public class BodyTubePresetModel extends AbstractListModel implements
-               ComboBoxModel, ComponentChangeListener {
+public class BodyTubePresetModel extends AbstractListModel implements ComboBoxModel {
 
        private final RocketComponent component;
 
@@ -25,13 +21,18 @@ public class BodyTubePresetModel extends AbstractListModel implements
        }
        
        public static class BodyTubePresetAdapter {
+               // If the ComponentPreset bt is null, then no preset is selected.
                private ComponentPreset bt;
                private BodyTubePresetAdapter( ComponentPreset bt ) {
                        this.bt = bt;
                }
                @Override
                public String toString() {
-                       return bt.getManufacturer() + " " + bt.getPartNo();
+                       if ( bt != null ) {
+                               return bt.getManufacturer() + " " + bt.getPartNo();
+                       } else {
+                               return "";
+                       }
                }
                @Override
                public int hashCode() {
@@ -42,6 +43,8 @@ public class BodyTubePresetModel extends AbstractListModel implements
                }
                @Override
                public boolean equals(Object obj) {
+                       // I don't know why the default equals generated by Eclipse does not work.
+                       // instead of relying on bt.equals(other.bt), we have to compare the hashcodes of those objects.
                        if (this == obj)
                                return true;
                        if (obj == null)
@@ -52,9 +55,9 @@ public class BodyTubePresetModel extends AbstractListModel implements
                        if (bt == null) {
                                if (other.bt != null)
                                        return false;
-                       } else if (!bt.equals(other.bt))
+                       } else if (other.bt == null)
                                return false;
-                       return true;
+                       return bt.hashCode() == other.bt.hashCode();
                }
        }
        
@@ -65,31 +68,20 @@ public class BodyTubePresetModel extends AbstractListModel implements
 
        @Override
        public Object getElementAt(int index) {
+               if ( index < 0 ) {
+                       return null;
+               }
                return new BodyTubePresetAdapter(presets.get(index));
        }
 
-       @Override
-       public void addListDataListener(ListDataListener l) {
-               // TODO Auto-generated method stub
-
-       }
-
-       @Override
-       public void removeListDataListener(ListDataListener l) {
-               // TODO Auto-generated method stub
-
-       }
-
-       @Override
-       public void componentChanged(ComponentChangeEvent e) {
-               // TODO Auto-generated method stub
-
-       }
-
        @Override
        public void setSelectedItem(Object anItem) {
                BodyTubePresetAdapter selected = (BodyTubePresetAdapter) anItem;
-               component.loadPreset(selected.bt);
+               if ( selected == null ) {
+                       component.loadPreset(null);
+               } else {
+                       component.loadPreset(selected.bt);
+               }
        }
 
        @Override