1 package prefuse.data.query; 2 3 import javax.swing.DefaultBoundedRangeModel ; 4 5 import prefuse.util.TypeLib; 6 import prefuse.util.ui.ValuedRangeModel; 7 8 14 public class NumberRangeModel extends DefaultBoundedRangeModel 15 implements ValuedRangeModel 16 { 17 protected Class m_type; 18 protected Number m_min, m_max, m_lo, m_hi; 19 20 22 29 public NumberRangeModel(int lo, int hi, int min, int max) { 30 this(new Integer (lo), new Integer (hi), 31 new Integer (min), new Integer (hi)); 32 } 33 34 41 public NumberRangeModel(long lo, long hi, long min, long max) { 42 this(new Long (lo), new Long (hi), new Long (min), new Long (max)); 43 } 44 45 52 public NumberRangeModel(float lo, float hi, float min, float max) { 53 this(new Float (lo), new Float (hi), new Float (min), new Float (max)); 54 } 55 56 63 public NumberRangeModel(double lo, double hi, double min, double max) { 64 this(new Double (lo), new Double (hi), new Double (min), new Double (max)); 65 } 66 67 74 public NumberRangeModel(Number lo, Number hi, Number min, Number max) { 75 m_type = TypeLib.getPrimitiveType(min.getClass()); 76 setValueRange(lo, hi, min, max); 77 } 78 79 81 84 protected void updateRange() { 85 if ( m_type == int.class ) 86 { 87 setRange(m_lo.intValue(), m_hi.intValue()-m_lo.intValue(), 88 m_min.intValue(), m_max.intValue()); 89 } 90 else if ( m_type == long.class ) 91 { 92 int v = 10000 * (int)( (m_lo.longValue()-m_min.longValue()) / 93 (m_max.longValue()-m_min.longValue()) ); 94 int e = 10000 * (int)( (m_hi.longValue()-m_min.longValue()) / 95 (m_max.longValue()-m_min.longValue()) ) - v; 96 setRange(v, e, 0, 10000); 97 } 98 else 99 { 100 int v = 10000 * (int)( (m_lo.doubleValue()-m_min.doubleValue()) / 101 (m_max.doubleValue()-m_min.doubleValue()) ); 102 int e = 10000 * (int)( (m_hi.doubleValue()-m_min.doubleValue()) / 103 (m_max.doubleValue()-m_min.doubleValue()) ) - v; 104 setRange(v, e, 0, 10000); 105 } 106 } 107 108 111 protected void setRange(int val, int ext, int min, int max) { 112 super.setRangeProperties(val, ext, min, max, false); 113 } 114 115 118 public void setRangeProperties(int val, int extent, int min, int max, 119 boolean adj) 120 { 121 if ( min!=getMinimum() || max!= getMaximum() ) { 122 throw new IllegalArgumentException ("Can not change min or max."); 123 } 124 m_lo = null; 125 m_hi = null; 126 super.setRangeProperties(val, extent, min, max, adj); 127 } 128 129 136 public void setValueRange(Number lo, Number hi, Number min, Number max) { 137 m_lo = lo; m_hi = hi; m_min = min; m_max = max; 138 updateRange(); 139 } 140 141 148 public void setValueRange(double lo, double hi, double min, double max) { 149 m_lo = new Double (lo); m_hi = new Double (hi); 150 m_min = new Double (min); m_max = new Double (max); 151 updateRange(); 152 } 153 154 161 public void setValueRange(int lo, int hi, int min, int max) { 162 m_lo = new Integer (lo); m_hi = new Integer (hi); 163 m_min = new Integer (min); m_max = new Integer (max); 164 updateRange(); 165 } 166 167 174 public void setValueRange(long lo, long hi, long min, long max) { 175 m_lo = new Long (lo); m_hi = new Long (hi); 176 m_min = new Long (min); m_max = new Long (max); 177 updateRange(); 178 } 179 180 183 public Object getMinValue() { 184 return m_min; 185 } 186 187 191 public void setMinValue(Number n) { 192 setValueRange((Number )getLowValue(), (Number )getHighValue(), n, m_max); 193 } 194 195 198 public Object getMaxValue() { 199 return m_max; 200 } 201 202 206 public void setMaxValue(Number n) { 207 setValueRange((Number )getLowValue(), (Number )getHighValue(), m_min, n); 208 } 209 210 213 public Object getLowValue() { 214 if ( m_lo == null ) 215 m_lo = (Number )value(getValue()); 216 return m_lo; 217 } 218 219 223 public void setLowValue(Number n) { 224 setValueRange(n, (Number )getHighValue(), m_min, m_max); 225 } 226 227 230 public Object getHighValue() { 231 if ( m_hi == null ) 232 m_hi = (Number )value(getValue()+getExtent()); 233 return m_hi; 234 } 235 236 240 public void setHighValue(Number n) { 241 setValueRange((Number )getLowValue(), n, m_min, m_max); 242 } 243 244 protected Object value(int val) { 245 int min = getMinimum(); 246 int max = getMaximum(); 247 if ( m_type == double.class || m_type == float.class ) { 248 double f = (val-min)/(double)(max-min); 249 double m = m_min.doubleValue(); 250 double v = m + f*(m_max.doubleValue()-m); 251 return (m_type==float.class ? (Number )new Float ((float)v) 252 : new Double (v)); 253 } else if ( m_type == long.class ) { 254 long m = m_min.longValue(); 255 long v = m + (val-min)*(m_max.longValue()-m)/(max-min); 256 return new Long (v); 257 } else { 258 return new Integer (val); 259 } 260 } 261 262 267 public void setMinimum(int min) { 268 throw new UnsupportedOperationException (); 269 } 270 271 276 public void setMaximum(int max) { 277 throw new UnsupportedOperationException (); 278 } 279 280 283 public void setValue(int val) { 284 m_lo = null; 285 super.setValue(val); 286 } 287 288 291 public void setExtent(int extent) { 292 m_hi = null; 293 super.setExtent(extent); 294 } 295 296 } | Popular Tags |