package jass.render;
/**
Applet derived class intended to be subclassed to create applet with sliders and buttons.
@author Kees van den Doel (kvdoel@cs.ubc.ca)
*/
public abstract class AppletController extends java.applet.Applet {
/**
Intended to be overridden by deriving class to set the number of sliders on the applet
@param n number of sliders
*/
protected abstract void setNSliders(); // {nsliders = 7; }
/**
Intended to be overridden by deriving class to set the number of buttons on the applet
@param n number of buttons
*/
protected abstract void setNButtons(); // {nbuttons = 2; }
/** Initializes the applet */
public void init () {
initComponents ();
}
protected static final double MAX_SLIDERVAL = 10000;
protected static final int NSLIDERS = 30;
protected static final int NBUTTONS = 4;
protected double[] val; //initial slider values
protected String[] names; //slider labels
protected double[] min,max; //slider ranges
protected int nsliders = NSLIDERS;
protected int nbuttons = NBUTTONS;
/** Set the slider values (do not call its handlers) */
protected void setValues(double[] val,double[] min,double[] max,String[] names) {
for(int i=0;i<val.length;i++) {
this.names[i] = names[i];
this.val[i] = val[i];
this.min[i] = min[i];
this.max[i] = max[i];
int x = (int)(MAX_SLIDERVAL * (val[i]-min[i])/(max[i]-min[i]));
jSlider[i].setValue(x);
jTextPane[i].setText(names[i]+new Double(val[i]).toString());
}
}
/** Init the slider variables */
protected void initValues() {
val = new double[nsliders];
min = new double[nsliders];
max = new double[nsliders];
names = new String[nsliders];
for(int i=0;i<nsliders;i++) {
names[i] = "- ";
val[i]=.5111313131;
min[i] = 0;
max[i] = 1;
}
}
/** Member class to handle slider events */
class LabeledMouseMotionAdapter extends java.awt.event.MouseMotionAdapter {
private int label;
public LabeledMouseMotionAdapter(int label) {
super();
this.label = label;
}
public void mouseDragged (java.awt.event.MouseEvent evt) {
jSliderMouseDragged (label,evt);
}
}
/** Member class to handle button events */
class LabeledMouseAdapter extends java.awt.event.MouseAdapter {
private int label;
public LabeledMouseAdapter(int label) {
super();
this.label = label;
}
public void mousePressed (java.awt.event.MouseEvent evt) {
jButtonMousePressed (label,evt);
}
}
/** This method is called from within the init() method to
* initialize the form.
*/
protected void initComponents () {
setNSliders();
setNButtons();
jSlider = new javax.swing.JSlider[nsliders];
jTextPane = new javax.swing.JTextPane[nsliders];
jButton = new javax.swing.JButton[nbuttons];
for(int i=0;i<nsliders;i++) {
jSlider[i] = new javax.swing.JSlider();
jTextPane[i] = new javax.swing.JTextPane();
}
for(int i=0;i<nbuttons;i++) {
jButton[i] = new javax.swing.JButton ();
}
setLayout (new java.awt.GridLayout (nsliders+(1+nbuttons)/2, 2));
for(int i=0;i<nsliders;i++) {
jSlider[i].setMaximum ((int)MAX_SLIDERVAL);
add (jSlider[i]);
jTextPane[i].setEditable (false);
jTextPane[i].setText ("");
add (jTextPane[i]);
}
for(int i=0;i<nsliders;i++) {
jSlider[i].addMouseMotionListener (new LabeledMouseMotionAdapter(i));
}
for(int i=0;i<nbuttons;i++) {
jButton[i].addMouseListener (new LabeledMouseAdapter(i));
add (jButton[i]);
}
initValues();
setValues(val,min,max,names);
}
/** User should verride slider handler */
protected void onSlider(int k) {;}
/** User should verride button handler */
protected void onButton(int k) {;}
protected void jButtonMousePressed (int k, java.awt.event.MouseEvent evt) {
onButton(k);
}
/** Get slider values, scale, and call onSlider()
*/
protected void jSliderMouseDragged (int k,java.awt.event.MouseEvent evt) {
double sval = jSlider[k].getValue()/MAX_SLIDERVAL;
val[k] = (float)(sval*(max[k]-min[k])+min[k]);
jTextPane[k].setText(names[k] + new Double(val[k]).toString());
onSlider(k);
}
protected javax.swing.JSlider[] jSlider;
protected javax.swing.JTextPane[] jTextPane;
protected javax.swing.JButton[] jButton;
}