Component preset updates
[debian/openrocket] / core / src / net / sf / openrocket / gui / dialogs / preset / ComponentPresetRowFilter.java
index 283ec027901fb91265fb01b89fab79c695434ac7..7c66aa136d593b42cd6900f00769cbc6c9a1811b 100644 (file)
@@ -4,31 +4,35 @@ import javax.swing.RowFilter;
 import javax.swing.table.TableModel;
 
 import net.sf.openrocket.unit.Value;
+import net.sf.openrocket.util.MathUtil;
 
 public class ComponentPresetRowFilter extends RowFilter<TableModel, Object> {
        
        private final double value;
        private final int column;
-       // I chose epsilon to be 0.005 units.  Since this is mostly used diameters, it represents 5mm.
-       private final double epsilon = .005;
+       private final double epsilon;
        
-       ComponentPresetRowFilter( double value, int column ) {
+       ComponentPresetRowFilter(double value, int column) {
                this.value = value;
                this.column = column;
+               /*
+                * Accept 5% difference, but at least 1mm.
+                */
+               this.epsilon = MathUtil.max(value * 0.05, 0.001);
        }
-
+       
        @Override
-       public boolean include( RowFilter.Entry<? extends TableModel, ? extends Object> entry) {
+       public boolean include(RowFilter.Entry<? extends TableModel, ? extends Object> entry) {
                Object o = entry.getValue(column);
-               if ( o instanceof Value ) {
-                       Value v = (Value)o;
-                       return Math.abs( value - v.getValue() ) < epsilon;
+               if (o instanceof Value) {
+                       Value v = (Value) o;
+                       return Math.abs(value - v.getValue()) < epsilon;
                }
-               if ( o instanceof Double ) {
+               if (o instanceof Double) {
                        Double d = (Double) o;
-                       return Math.abs( value - d ) < epsilon;
+                       return Math.abs(value - d) < epsilon;
                }
                return true;
        }
-
+       
 }