package main;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.EventListenerList;
public abstract class JModParameterObject extends JComponent {
public Parameter par = null;
private JLabel parLabel = null;
public float internalValue;
private float MIN_VAL = 0.0F;
private float MAX_VAL = 127.0F;
private ChangeEvent changeEvent = null;
private EventListenerList listenerList = new EventListenerList();
public JModParameterObject(int min_val, int max_val, Parameter newPar) {
par = newPar;
setMinValue((float)min_val);
setMaxValue((float)max_val);
setValue(par.getValue()+getMinValue());
par.setKnob(this);
}
public float getRange() {
return getMaxValue() - getMinValue();
}
public boolean isHalfway() {
// TODO ?Shouldn't this be at the 'default' position?
return ((getValue()-getMinValue())*2) == (getRange() + 1);
}
public float getInternalValue() {
return internalValue;
}
public int getValue() {
return (int)((internalValue * getRange())+getMinValue());
}
public void setMaxValue(float val) {
MAX_VAL = val;
}
public float getMaxValue() {
return MAX_VAL;
}
public void setMinValue(float val) {
MIN_VAL = val;
}
public float getMinValue() {
return MIN_VAL;
}
public void setValue(float val) {
setInternalValue((val-getMinValue()) / getRange(), true);
}
public void setValueWithoutFireStarter(float val) {
setInternalValue((val-getMinValue()) / getRange(), false);
}
public void setInternalValue(float val, boolean fire) {
if (val < 0) val = 0;
if (val > 1) val = 1;
internalValue = val;
// calcMisc zit in de paint -> lees paint waarom...
calcMisc(false); // Do calculation specialy for derived object
updateKnob();
this.setToolTipText(par.getName() + ": " + String.valueOf(getValue()));
if (fire) fireChangeEvent();
}
public void calcMisc(boolean custom) {
// Do calculation specialy for derived object
}
public void updateKnob() {
// Not every object needs to repaint() after a value update, otherwise place repaint here
}
public void addChangeListener(ChangeListener cl) {
listenerList.add(ChangeListener.class, cl);
}
public void removeChangeListener(ChangeListener cl) {
listenerList.remove(ChangeListener.class, cl);
}
protected void fireChangeEvent() {
// Guaranteed to return a non-null array
Object[] listeners = listenerList.getListenerList();
// Process the listeners last to first, notifying
// those that are interested in this event
for (int i = listeners.length-2; i>=0; i-=2) {
if (listeners[i] == ChangeListener.class) {
// Lazily create the event:
if (changeEvent == null)
changeEvent = new ChangeEvent(this);
((ChangeListener)listeners[i+1]).stateChanged(changeEvent);
}
}
}
}