//
package widgets;
import java.awt.*;
import java.util.*;

public class Sliders extends BufferedApplet
{
   Slider slider[] = new Slider[0];
   boolean changed[] = new boolean[0];
   int width, height;

   int y(int i, int n) { return i * height / n; }
   boolean more(int i) { return i < slider.length && slider[i] != null; }

   public void set(int i, double t) { }

   public void defineSliders(String labels) {
      width  = bounds().width;
      height = bounds().height;
      int n;
      String label[] = new String[100];
      StringTokenizer st = new StringTokenizer(labels);
      for (n = 0 ; st.hasMoreTokens() ; n++)
         label[n] = st.nextToken();
      slider  = new Slider[n];
      changed = new boolean[n];
      for (int i = 0 ; i < n ; i++) {
         slider[i] = new Slider(0, y(i,n), width, y(i+1,n) - y(i,n));
         slider[i].label = label[i];
      }
      damage = true;
   }

   public void setValues(String values) {
      StringTokenizer st = new StringTokenizer(values);
      for (int i = 0 ; st.hasMoreTokens() && more(i) ; i++)
         slider[i].setValue(.01 * (new Integer(st.nextToken())).intValue());
   }

   public String getValues() {
      String values = "";
      for (int i = 0 ; more(i) ; i++) {
         values += (changed[i] ? " +" : " ") +
                   (int)(100 * slider[i].getValue() + .5);
         changed[i] = false;
      }
      return values;
   }

   java.applet.Applet outputApplet;
   public java.applet.Applet getOutputApplet() {
      if (outputApplet == null)
	 outputApplet = getParameter("output") == null
	 ? this
	 : getAppletContext().getApplet(getParameter("output"));
      return outputApplet;
   }

   public java.applet.Applet applet(String s) {
      return getAppletContext().getApplet(s);
   }

   public void output(int i, double t) { } // this can be overridden

   public void render(Graphics g) {
      for (int i = 0 ; more(i) ; i++) {
	 slider[i].render(g);
	 output(i, slider[i].getValue());
      }
   }

   public boolean mouseDown(Event e, int x, int y) {
      for (int i = 0 ; more(i) ; i++)
	 if (slider[i].down(x, y))
	    break;
      return true;
   }

   public boolean mouseDrag(Event e, int x, int y) {
      for (int i = 0 ; more(i) ; i++)
	 if (slider[i].drag(x, y)) {
            changed[i] = true;
            damage = true;
	    break;
         }
      return true;
   }

   public boolean mouseUp(Event e, int x, int y) {
      for (int i = 0 ; more(i) ; i++)
	 if (slider[i].up(x, y))
	    break;
      return true;
   }
}