package edu.byu.cs.roots.opg.gui.tools;
import java.util.concurrent.CopyOnWriteArraySet;
import javax.swing.SpinnerModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class FloatSpinnerModel implements SpinnerModel {
Float value = 1f;
float maxvalue = 100;
float minvalue = 0;
float stepsize = 0.5f;
CopyOnWriteArraySet<ChangeListener> listenerset = new CopyOnWriteArraySet<ChangeListener>();
public void addChangeListener(ChangeListener arg0) {
listenerset.add(arg0);
}
public Object getNextValue() {
// System.out.println("getting next value from " + value);
Float value = this.value;
if(value > maxvalue - stepsize)
value = null;
else{
value -= (float)(Math.IEEEremainder(value, stepsize));
value += stepsize;
}
// System.out.println("returning " + value);
return value;
}
public Object getPreviousValue(){
// System.out.println("getting previous value from " + value);
Float value = this.value;
if(value < minvalue + stepsize)
value = null;
else{
float tempval = (float) Math.IEEEremainder(value , stepsize);
value -= (stepsize + tempval);
}
// System.out.println("returning " + value);
return value;
}
public Object getValue() {
return value;
}
public void removeChangeListener(ChangeListener arg0) {
listenerset.remove(arg0);
}
public void setValue(Object arg0) {
// System.out.println("setting value to " + arg0);
Float val;
if(arg0 instanceof Double){
Double dval = (Double) arg0;
val = dval.floatValue();
}
else{
val = (Float) arg0;
}
if(val < minvalue) val = minvalue;
else if(val > maxvalue) val = maxvalue;
value = val;
fireStateChanged();
}
private void fireStateChanged(){
ChangeEvent e = new ChangeEvent(value);
for(ChangeListener listener : listenerset){
listener.stateChanged(e);
}
}
/**
* @return the maxvalue
*/
public float getMaxvalue() {
return maxvalue;
}
/**
* @param maxvalue the maxvalue to set
*/
public void setMaxvalue(float maxvalue) {
this.maxvalue = maxvalue;
}
/**
* @return the minvalue
*/
public float getMinvalue() {
return minvalue;
}
/**
* @param minvalue the minvalue to set
*/
public void setMinvalue(float minvalue) {
this.minvalue = minvalue;
}
/**
* @return the stepsize
*/
public float getStepsize() {
return stepsize;
}
/**
* @param stepsize the stepsize to set
*/
public void setStepsize(float stepsize) {
this.stepsize = stepsize;
}
}