package ddddbb.gen; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoundedRangeModel; import javax.swing.SpinnerModel; import javax.swing.event.ChangeListener; public class DoubleModel extends Model implements SpinnerModel { protected double defaultValue; protected double value; protected double delta = 1; protected double min = Double.MIN_VALUE; protected double max = Double.MAX_VALUE; protected int iMax = 100; protected int iMin = 0; protected int iValue; public DoubleModel(double _value) { defaultValue = _value; value = _value; } public DoubleModel(double v,Unit u) { this(v*u.unitFactor()); } public DoubleModel(double _value,double _delta) { defaultValue = _value; value = _value; delta = _delta; } public DoubleModel(double _value,double _delta, Unit u) { this(_value*u.unitFactor(),_delta*u.unitFactor()); } public DoubleModel(double _value,double _min,double _max) { defaultValue = _value; value = _value; min = _min; max = _max; } public DoubleModel(double _value,double _min,double _max,Unit u) { this(_value*u.unitFactor(),_min*u.unitFactor(),_max*u.unitFactor()); } protected void setIValue(int x) { double f = (iMax-iMin)/(max-min); setDouble((x-iMin)/f+min); } protected int getIValue() { double f = (iMax-iMin)/(max-min); return (int)Math.round((getDouble()-min)*f+iMin); } public BoundedRangeModel boundedRange = new BoundedRangeModel() { public int getValue() { return getIValue(); } public void setValue(int newValue) { setIValue(newValue); } public int getMaximum() { return iMax; } public int getMinimum() { return iMin; } public void setMinimum(int newMinimum) { //fixed value } public void setMaximum(int newMaximum) { //fixed value } public void setValueIsAdjusting(boolean b) { //not used for our purposes } public boolean getValueIsAdjusting() { return false; } public int getExtent() { return 0; } public void setExtent(int newExtent) { //not used for our purposes } public void setRangeProperties(int _value, int extent, int _min, int _max, boolean adjusting) { iValue = _value; iMin = _min; iMax = _max; } public void addChangeListener(ChangeListener x) { DoubleModel.this.addChangeListener(x); } public void removeChangeListener(ChangeListener x) { DoubleModel.this.removeChangeListener(x); }}; public void setToDefault() { setDouble(defaultValue); } public double getDouble() { return value; } public void setDouble(double _value) { value = _value; changed(); } public double getDouble(Unit u) { return value/u.unitFactor(); } public void setDouble(double v, Unit u) { value = v*u.unitFactor(); changed(); } // public Object getValue() { // return new Double(value); // } public Object getNextValue() { return new Double(value+delta); } public Object getPreviousValue() { return new Double(value-delta); } public void setValue(Object _value) { setDouble(((Number)_value).doubleValue()); } public void setValue(Object _value, Unit u) { setDouble(((Number)_value).doubleValue(),u); } public Object getValue() { return new Double(getDouble()); } public Object getValue(Unit u) { return new Double(getDouble(u)); } public ActionListener increaseAction = new ActionListener() { public void actionPerformed(ActionEvent e) { setDouble(getDouble()+delta); } }; public ActionListener decreaseAction = new ActionListener() { public void actionPerformed(ActionEvent e) { setDouble(getDouble()-delta); } }; }