class SliderGroup extends Vector {

  float sx=-1,sy=-1,w=0,h=0;
  float FRAME_SPACING = 3;

  SliderGroup() {
    super();
  }

  public void createFrameFromSliders(float wAdd, float hAdd) {
    float minX = 999999, maxX = -999999;
    float minY = 999999, maxY = -999999;
    for (int i=0;i<this.size();i++) {
      Slider sl = (Slider)this.elementAt(i);
      float x = sl.getX();
      float y = sl.getY();
      float s = sl.getSize();
      float ss = sl.getSlideSize();
      int o = sl.getOrientation();
      if (x<minX) minX = x;
      if (y<minY) minY = y;
      if (o==Slider.ORIENTATION_HORIZONTAL) {
        if (x+s>maxX) maxX = x+s;
        if (y+ss>maxY) maxY = y+ss;
      } 
      else if (o==Slider.ORIENTATION_VERTICAL) {
        if (x+ss>maxX) maxX = x+ss;
        if (y+s>maxY) maxY = y+s;
      }
    }
    sx = minX - FRAME_SPACING;
    sy = minY - FRAME_SPACING;
    w = maxX-minX + 2*FRAME_SPACING;
    h = maxY-minY + 2*FRAME_SPACING;
    w += wAdd;
    h += hAdd;
  }
  
  public void move(float x, float y) {
    sx += x;
    sy += y;
    for (int i=0;i<this.size();i++) {
      ((Slider)this.elementAt(i)).move(x,y);
    }
  }

  public void startManipulation() {
    for (int i=0;i<this.size();i++) {
      if (((Slider)this.elementAt(i)).mouseIsOver()) ((Slider)this.elementAt(i)).startManipulating();
    }
  }
  public void stopManipulation() {
    for (int i=0;i<this.size();i++) {
      ((Slider)this.elementAt(i)).stopManipulating();
    }
  }

  public boolean isManipulated() {
    boolean out = false;
    for (int i=0;i<this.size();i++) if (((Slider)this.elementAt(i)).isManipulated()) out = true;
    return out;
  }

  public int findIndexOfSliderNamed(String n) {
    int index = -1;
    for (int i=0;i<this.size();i++) if ((((Slider)this.elementAt(i)).getName()).equals(n)) index = i;
    return index;
  }

  public boolean hasChanged(String n) {
    boolean out = false;
    int index = findIndexOfSliderNamed(n);
    if (index==-1) return false; 
    else return ((Slider)this.elementAt(index)).hasChanged();
  }

  public float getValueOfSlider(String n) {
    int index = findIndexOfSliderNamed(n);
    if (index==-1) return -999.999; 
    else return ((Slider)this.elementAt(index)).getValue();
  }
  
  public boolean getBooleanOfSlider(String n) {
    int index = findIndexOfSliderNamed(n);
    if (index==-1) return false; 
    else return ((Slider)this.elementAt(index)).getBoolean();
  }

  public void update() {
    for (int i=0;i<this.size();i++) ((Slider)this.elementAt(i)).update();
  }

  public void randomizeAll() {
    for (int i=0;i<this.size();i++) ((Slider)this.elementAt(i)).randomize();
  }

  public void randomize(String s) {
    int index = findIndexOfSliderNamed(s);
    if (index!=-1) ((Slider)this.elementAt(index)).randomize();
  }

  public void draw() {
    
    if (sx!=-1&&sy!=-1) {
      stroke(0,0,0);
      fill(255,255,255);
      rectMode(CORNER);
      rect(sx,sy,w,h);
      //println(sx+" "+sy+" "+w+" "+h);
    }
    for (int i=0;i<this.size();i++) ((Slider)this.elementAt(i)).draw();
  }

}
