import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.awt.Image.*;
import java.awt.image.*;
import java.awt.Graphics.*;
import java.lang.*;
import java.lang.Character.*;
public class Sl extends LP
 {
  boolean ftt=true;
  static int knobfocus=0;
  static String[] knobs=new String[124];
  static double[] kobs=new double[124];
  static Sl[] sla=new Sl[124];
  static int nfki=0;
  int mk1,mk2,mk3,mk4;
  boolean save=true,pending=false,busy=false,boxy=true;
  int[] rotindex={0,0,0,0};
  K oldbua2pk;
  K k,ko;
  dP dp,dpo;
  dP dpll,dpul;
  XYZ xyz,xyzo;
  XYZ xyzll,xyzul;
  boolean sweep=false,sweepup=true,pxbyv;
  double sweepbegin=0,sweepend=0,sweepstep=0,sweepdelay=20;
  int height;
  String[] svals;
  String Sasv;
  int Sasvx,Sasvy;
  int butot=62;
  int buga=3;
  Rec[] bua=new Rec[butot];
  Font ft;
  FontMetrics ftm;
  char[] cav;
  int fts,fth,usvx,usvy,svx,svy,svw,W,pll,pul,unamex,unamey,namex,namey,namew;
  double rW;
  String sv;
  //Rec chan,body,knob,chan2,knob2,chan3,knob3,chan4,knob4;
  Rec chan,knob,chan2,knob2,chan3,knob3,chan4,knob4;
  String chan1s,chan2s,chan3s,chan4s;
  boolean pm=false; // to force mkchan
  int slide=0;
  int enabled=2;
  double v,vo,ll,ul;
  double v2,v2o,ll2,ul2,v3,v3o,ll3,ul3,v4,v4o,ll4,ul4;
  double px,drgoff;
  double px2,px3,px4;
  //Te te;
  String type;
  public Sl() { super(); }
  public Sl(String name,LP lp,String type,double v,double ll,double ul,dP tl,boolean save)
   {
    super();
    hostlp=lp;
    comma(name,type);
    height=fourty;
    comm(v,ll,ul,tl,save);
   }
  public Sl(String name,LP lp,String type,double v,String[] svals,dP tl,boolean save)
   {
    super();
    hostlp=lp;
    comma(name,type);
    this.svals=svals;
    height=sixty;
    comm(v,0,svals.length-1,tl,save);
   }
  public Sl(String name,LP lp,String type,K k,dP tl,boolean hsv,boolean save)
   {
    super();
    hostlp=lp;
    comma(name,type);
    this.k=k;
    k.hsv=hsv;
    height=oneten;
    buga=4;
    ll4=0;
    ul4=255;
    commb(tl,save);
   }
  public Sl(String name,LP lp,String type,dP dp,dP dpll,dP dpul,dP tl,boolean boxy,boolean save)
   {
    super();
    hostlp=lp;
    comma(name,type);
    this.dp=dp;
    this.dpll=dpll;
    this.dpul=dpul;
    this.boxy=boxy;
    height=seventy;
    buga=4;
    commb(tl,save);
   }
  public Sl(String name,LP lp,String type,XYZ xyz,XYZ xyzll,XYZ xyzul,dP tl,boolean save)
   {
    super();
    hostlp=lp;
    comma(name,type);
    this.xyz=xyz;
    this.xyzll=xyzll;
    this.xyzul=xyzul;
    height=seventy;
    buga=3;
    commb(tl,save);
   }
  public void comma(String name,String type)
   {
    te=parent.te;
    this.name=name;
    hosttype="LP";
    host=hostlp.name;
    this.type=type;
    if(type.equals("d")) type="r";
   }
  public void comm(double v,double ll,double ul,dP tl,boolean save)
   {
    this.v=v;
    vo=v;
    this.ll=ll;
    this.ul=ul;
    commb(tl,save);
   }
  public void commb(dP tl,boolean save)
   {
    //tta("Sl.commb");
    setBackground(bk.c);
    Te.Slh.put(name,this);
    attach();
    this.tl=tl;
    this.save=save;
    pk=new K(200.0,160.0,120.0,255.0);
    bk=new K(125.0,50.0,10.0,255.0);
    if(tl.eq(new dP(-1000,-1000)))
     {
      rec=new Rec(0,hostlp.nexty,hostlp.getSize().width,height,pk,bk);
      this.tl=new dP(0,hostlp.nexty);
      hostlp.nexty+=rec.hi;
     }
    else 
     {
      rec=new Rec(tl.x,tl.y,hostlp.getSize().width,height,pk,bk);
      hostlp.nexty=rec.yi+rec.hi;
     }
    setBounds(rec.xi,rec.yi,rec.wi,rec.hi);
    setLayout(null);
    addMouseListener(this);
    addMouseMotionListener(this);
    pw=1;
    init();
    sweepbegin=ll;
    sweepend=ul;
    if(type.equals("r"))  sweepstep=(ul-ll)/100;
    else sweepstep=1;
    slinit();
   }
  public void slinit()
   {
    onsg=(Graphics2D)getGraphics();
    body=new Rec(0,0,rec.wi,rec.hi,rec.pk,rec.fk);
    fts=15;
    ft=new Font("Courier",Font.PLAIN,fts);
    ftm=getFontMetrics(ft);
    offsg.setFont(ft);
    fth=(int)ftm.getHeight();
    namew=(int)ftm.stringWidth(name);
    W=(int)ftm.stringWidth("w");
    rW=ftm.stringWidth("w");
    namex=(int)(rec.w-(namew+4));
    unamey=(int)(fth-2);
    Sasvy=(int)(2+sixty-(fth*.3));
    usvy=unamey;
    svx=6;
    Sasvx=6;
    usvx=6;
    mkbuttons();
    if(type.equals("K")) 
     {
      namey=(int)(2+height-(fth*.3));
      svy=(int)(2+height-(fth*1.3));
      if(k.hsv) setbutton3(0);
      else setbutton3(1);
     }
    else if(type.equals("dP"))
     {
      namey=(int)(2+height-(fth*.3));
      svy=(int)(4+height-(fth*1.3));
      if(boxy) setbutton3(0);
      else setbutton3(1);
     }
    else if(type.equals("XYZ"))
     {
      namey=(int)(2+height-(fth*.3));
      svy=(int)(2+height-(fth*.3));
     }
    else 
     {
      namey=(int)(2+fourty-(fth*.3));
      svy=namey;
     }
    mkchan();
    fender();
    ftt=false;
    //repaint();
   }
  public void sethostlp(LP lp) 
   {
    hostlp=lp;
    host=hostlp.name;
   }
  public void settl(dP tl)
   {
    //tta("Sl.settl");
    this.tl=tl;
    rec=new Rec(tl.x,tl.y,body.wi,body.hi);
    setBounds(rec.xi,rec.yi,rec.wi,rec.hi);
    onsg=(Graphics2D)getGraphics();
    fender();
   }
  static public void setknobhue(int i,double d)
   {
    kobs[knobfocus]=60;
    sla[knobfocus].mkchan();
    sla[knobfocus].fender();
    knobfocus=i;
    kobs[knobfocus]=d; 
    sla[knobfocus].mkchan();
    sla[knobfocus].fender();
   }
  public void mkchan()
   {
    int x=8;
    if(rotindex[2]==1 && ! type.equals("K")) 
     {
      x=6+12*W;
      //x=6+7*W;
      pm=true;
     }
    else pm=false;
    if(type.equals("K"))
     {
      x=6+W;
      if(ftt)
       {
        sla[nfki]=this;
        mk1=nfki++;
        sla[nfki]=this;
        mk2=nfki++;
        sla[nfki]=this;
        mk3=nfki++;
        sla[nfki]=this;
        mk4=nfki++;
        kobs[mk1]=60;
        kobs[mk2]=60;
        kobs[mk3]=60;
        kobs[mk4]=60;
       }
      chan=new Rec(x,6,rec.wi-(8+x),(int)(fourty*6/16),new K(0,0,0,255),body.pk);
      knob=new Rec(chan.x,chan.y,12,chan.h,new K(kobs[mk1],1.0,1.0),chan.pk);
      chan2=new Rec(x,chan.y+chan.h+2,chan.w,chan.h,new K(0,0,0,255),body.pk);
      knob2=new Rec(x,chan2.y,12,chan.h,new K(kobs[mk2],1.0,1.0),chan2.pk);
      chan3=new Rec(x,chan2.y+chan.h+2,chan.w,chan.h,new K(0,0,0,255),body.pk);
      knob3=new Rec(x,chan3.y,12,chan.h,new K(kobs[mk3],1.0,1.0),chan3.pk);
      chan4=new Rec(x,chan3.y+chan.h+2,chan.w,chan.h,new K(0,0,0,255),body.pk);
      knob4=new Rec(x,chan4.y,12,chan.h,new K(kobs[mk4],1.0,1.0),chan3.pk);
      if(k.hsv)
       {
        v=k.h;
        ll=0;
        ul=360;
        chan1s="h";
        v2=k.s;
        ll2=0;
        ul2=1;
        chan2s="s";
        v3=k.v;
        ll3=0;
        ul3=1;
        chan3s="v";
        v4=k.a;
        ll4=0;
        ul4=255;
        chan4s="a";
       }
      else
       {
        v=k.r;
        ll=0;
        ul=255;
        chan1s="r";
        v2=k.g;
        ll2=0;
        ul2=255;
        chan2s="g";
        v3=k.b;
        ll3=0;
        ul3=255;
        chan3s="b";
        v4=k.a;
        ll4=0;
        ul4=255;
        chan4s="a";
       }
      knobs[mk1]=name+"."+chan1s;
      knobs[mk2]=name+"."+chan2s;
      knobs[mk3]=name+"."+chan3s;
      knobs[mk4]=name+"."+chan4s;
     }
    else if(type.equals("XYZ"))
     {
      if(ftt)
       {
        sla[nfki]=this;
        mk1=nfki++;
        sla[nfki]=this;
        mk2=nfki++;
        sla[nfki]=this;
        mk3=nfki++;
        kobs[mk1]=60;
        kobs[mk2]=60;
        kobs[mk3]=60;
       }
      x=6+W;
      chan=new Rec(x,6,rec.wi-(8+x),(int)(fourty*6/16),new K(0,0,0,255),body.pk);
      knob=new Rec(chan.x,chan.y,12,chan.h,new K(kobs[mk1],1.0,1.0),chan.pk);
      chan2=new Rec(x,chan.y+chan.h+2,chan.w,chan.h,new K(0,0,0,255),body.pk);
      knob2=new Rec(x,chan2.y,12,chan.h,new K(kobs[mk2],1.0,1.0),chan2.pk);
      chan3=new Rec(x,chan2.y+chan.h+2,chan.w,chan.h,new K(0,0,0,255),body.pk);
      knob3=new Rec(x,chan3.y,12,chan.h,new K(kobs[mk3],1.0,1.0),chan3.pk);
      v=xyz.x;
      ll=xyzll.x;
      ul=xyzul.x;
      chan1s="x";
      v2=xyz.y;
      ll2=xyzll.y;
      ul2=xyzul.y;
      chan2s="y";
      v3=xyz.z;
      ll3=xyzll.z;
      ul3=xyzul.z;
      chan3s="z";
      knobs[mk1]=name+"."+chan1s;
      knobs[mk2]=name+"."+chan2s;
      knobs[mk3]=name+"."+chan3s;
     }
    else if(type.equals("dP"))
     {
      if(ftt)
       {
        sla[nfki]=this;
        mk1=nfki++;
        sla[nfki]=this;
        mk2=nfki++;
        kobs[mk1]=60;
        kobs[mk2]=60;
       }
      x=6+W;
      chan=new Rec(x,6,rec.wi-(8+x),(int)(fourty*6/16),new K(0,0,0,255),body.pk);
      knob=new Rec(chan.x,chan.y,12,chan.h,new K(kobs[mk1],1.0,1.0),chan.pk);
      chan2=new Rec(x,chan.y+chan.h+2,chan.w,chan.h,new K(0,0,0,255),body.pk);
      knob2=new Rec(x,chan2.y,12,chan.h,new K(kobs[mk2],1.0,1.0),chan2.pk);
      if(boxy)
       {
        v=dp.x;
        ll=dpll.x;
        ul=dpul.x;
        chan1s="x";
        v2=dp.y;
        ll2=dpll.y;
        ul2=dpul.y;
        chan2s="y";
       }
      else
       {
        v=dp.r;
        //ll=dpll.r;
        //ul=dpul.r;
        ll=0;
        ul=1000;
        chan1s="r";
        v2=dp.t;
        ll2=0;
        ul2=360;
        chan2s="t";
       }
      knobs[mk1]=name+"."+chan1s;
      knobs[mk2]=name+"."+chan2s;
     }
    else
     {
      if(ftt)
       {
        sla[nfki]=this;
        mk1=nfki++;
        kobs[mk1]=60;
       }
      knobs[mk1]=name+".v";
      chan=new Rec(x,6,rec.wi-(8+x),(int)(fourty*6/16),new K(0,0,0,255),body.pk);
      knob=new Rec(chan.x,chan.y,12,chan.h,new K(kobs[mk1],1.0,1.0),chan.pk);
     }
    pll=chan.xi;
    pul=(int)(chan.xi + chan.w-knob.w);
   }
  public void paintComponent(Graphics g)
   {
    if(hostlp.getSize().width != rec.wi)
     {
      rec=new Rec(0,hostlp.nexty,hostlp.getSize().width,height,pk,bk);
      setSize(new Dimension(rec.wi,rec.hi));
      init();
      slinit();
     }
    if(offsimg != null) g.drawImage(offsimg,0,0,this);
   }
  public void mousePressed(MouseEvent e) 
   {
    mp=MEtodP(e);
    //tta("mousePressed");
    tldrgoff=mp;
    if(type.equals("K"))
     {
      if(knob.rect.contains(mp))
       {
        drgoff=knob.x-mp.x;
        slide=1;
       }
      else if(knob2.rect.contains(mp))
       {
        drgoff=knob2.x-mp.x;
        slide=2;
       }
      else if(knob3.rect.contains(mp))
       {
        drgoff=knob3.x-mp.x;
        slide=3;
       }
      else if(knob4.rect.contains(mp))
       {
        drgoff=knob4.x-mp.x;
        slide=4;
       }
     }
    else if(type.equals("XYZ"))
     {
      if(knob.rect.contains(mp))
       {
        drgoff=knob.x-mp.x;
        slide=1;
       }
      else if(knob2.rect.contains(mp))
       {
        drgoff=knob2.x-mp.x;
        slide=2;
       }
      else if(knob3.rect.contains(mp))
       {
        drgoff=knob3.x-mp.x;
        slide=3;
       }
     }
    else if(type.equals("dP"))
     {
      if(knob.rect.contains(mp))
       {
        drgoff=knob.x-mp.x;
        slide=1;
       }
      else if(knob2.rect.contains(mp))
       {
        drgoff=knob2.x-mp.x;
        slide=2;
       }
     }
    else
     {
      if(knob.rect.contains(mp))
       {
        drgoff=knob.x-mp.x;
        slide=1;
       }
     }
    if(slide==0)
     {
      if(testbuttons());
     }
   }
  public void mouseDragged(MouseEvent e)
   {
    md=MEtodP(e);
    if(edpos)
     {
      int cx=0;
      int cy=0;
      if(md.x-tldrgoff.x>45)  cx=45;
      else if(tldrgoff.x - md.x>45) cx=-45;
      if(md.y-tldrgoff.y >= 36)  cy=36;
      else if(md.y-tldrgoff.y>=27)  cy=36;
      else if(md.y-tldrgoff.y>=18)  cy=27;
      else if(md.y-tldrgoff.y>=9)  cy=18;
      else if(md.y-tldrgoff.y>=0)  cy=9;
      else if(md.y-tldrgoff.y<= -9) cy=-9;
      else if(md.y-tldrgoff.y<= -18) cy=-18;
      else if(md.y-tldrgoff.y<= -27) cy=-27;
      if(cx !=0 || cy != 0)
       {
        tl.ae(cx,cy);
        settl(tl);
       }
     }
    else if(slide>0)
     {
      if(busy) return;
      busy=true;
      if(slide==1) px=md.x+drgoff;
      else if(slide==2) px2=md.x+drgoff;
      else if(slide==3) px3=md.x+drgoff;
      else if(slide==4) px4=md.x+drgoff;
      fender(false);
      if(type.equals("K") && k.eq(ko))
       {
        busy=false;
        return;
       }
      else if(type.equals("dP") && dp.eq(dpo))
       {
        busy=false;
        return;
       }
      else if(type.equals("XYZ") && xyz.eq(xyzo))
       {
        busy=false;
        return;
       }
      else if(type.equals("r") || type.equals("i") || type.equals("Sa"))
       {
        if(v==vo) 
         {
          busy=false; return; 
         }
       }
      if(rotindex[2]==2)
       {
        if(enabled>1) te.runSlTrig(name,v);
       }
      else
       {
        if(enabled>1) runSlTrig(name);
       }
      busy=false;
      vo=v;
     }
   }
  synchronized public void doit()
   {
    busy=true;
    if(type.equals("K"))te.runSlTrig(name,k);
    else if(type.equals("dP"))te.runSlTrig(name,dp);
    else if(type.equals("XYZ"))te.runSlTrig(name,xyz);
    else te.runSlTrig(name,v);
   }
  public void mouseReleased(MouseEvent e)
   {
    if(bua[1].pk.eq(new K(Color.yellow.darker())))
     {
      bua[1].pk=new K(Color.yellow);
      fender();
     }
    slide=0;
   }
  public void fender() { fender(true); }
  public void fender(boolean pxbyv)
   {
    //tta("Sl fender");
    if(type.equals("K"))
     {
      ko=k;
      if(pxbyv)
       {
        px=pll+(pul-pll)*(v-ll)/(ul-ll);
        px2=pll+(pul-pll)*(v2-ll2)/(ul2-ll2);
        px3=pll+(pul-pll)*(v3-ll3)/(ul3-ll3);
        px4=pll+(pul-pll)*(v4-ll4)/(ul4-ll4);
       }
      if(px < pll || v < ll)
       {
        px=pll;
        v=ll;
       }
      else if(px > pul || v> ul)
       {
        px=pul;
        v=ul;
       }
      if(px2 < pll || v2 < ll2)
       {
        px2=pll;
        v2=ll2;
       }
      else if(px2 > pul || v2> ul2)
       {
        px2=pul;
        v2=ul2;
       }
      if(px3 < pll || v3 < ll3)
       {
        px3=pll;
        v3=ll3;
       }
      else if(px3 > pul || v3> ul3)
       {
        px3=pul;
        v3=ul3;
       }
      if(px4 < pll || v4 < ll4)
       {
        px4=pll;
        v4=ll4;
       }
      else if(px4 > pul || v4> ul4)
       {
        px4=pul;
        v4=ul4;
       }
      if(! pxbyv)
       {
        double vnew=rndto(ll+((ul-ll)*(knob.x-pll)/(pul-pll)));
        double vnew2=rndto(ll2+((ul2-ll2)*(knob2.x-pll)/(pul-pll)));
        double vnew3=rndto(ll3+((ul3-ll3)*(knob3.x-pll)/(pul-pll)));
        double vnew4=rndto(ll4+((ul4-ll4)*(knob4.x-pll)/(pul-pll)));
        k=new K(vnew,vnew2,vnew3,vnew4);
       }
      calcsv();
     }
    else if(type.equals("XYZ"))
     {
      xyzo=xyz;
      if(pxbyv)
       {
        px=pll+(pul-pll)*(v-ll)/(ul-ll);
        px2=pll+(pul-pll)*(v2-ll2)/(ul2-ll2);
        px3=pll+(pul-pll)*(v3-ll3)/(ul3-ll3);
       }
      if(px < pll || v < ll)
       {
        px=pll;
        v=ll;
       }
      else if(px > pul || v> ul)
       {
        px=pul;
        v=ul;
       }
      if(px2 < pll || v2 < ll2)
       {
        px2=pll;
        v2=ll2;
       }
      else if(px2 > pul || v2> ul2)
       {
        px2=pul;
        v2=ul2;
       }
      if(px3<pll||v3<ll3)
       {
        px3=pll;
        v3=ll3;
       }
      else if(px3>pul||v3>ul3)
       {
        px3=pul;
        v3=ul3;
       }
      if(! pxbyv)
       {
        double vnew=rndto(ll+((ul-ll)*(knob.x-pll)/(pul-pll)));
        double vnew2=rndto(ll2+((ul2-ll2)*(knob2.x-pll)/(pul-pll)));
        double vnew3=rndto(ll3+((ul3-ll3)*(knob3.x-pll)/(pul-pll)));
        xyz=new XYZ(vnew,vnew2,vnew3);
       }
      calcsv();
     }
    else if(type.equals("dP"))
     {
      dpo=dp;
      if(pxbyv)
       {
        px=pll+(pul-pll)*(v-ll)/(ul-ll);
        px2=pll+(pul-pll)*(v2-ll2)/(ul2-ll2);
       }
      if(px < pll || v < ll)
       {
        px=pll;
        v=ll;
       }
      else if(px > pul || v> ul)
       {
        px=pul;
        v=ul;
       }
      if(px2 < pll || v2 < ll2)
       {
        px2=pll;
        v2=ll2;
       }
      else if(px2 > pul || v2> ul2)
       {
        px2=pul;
        v2=ul2;
       }
      if(! pxbyv)
       {
        double vnew=rndto(ll+((ul-ll)*(knob.x-pll)/(pul-pll)));
        double vnew2=rndto(ll2+((ul2-ll2)*(knob2.x-pll)/(pul-pll)));
        if(boxy) dp=new dP(vnew,vnew2);
        else dp=new dP( vnew*Math.cos(DR*vnew2),vnew*Math.sin(DR*vnew2)); 
       }
      calcsv();
     }
    else
     {
      vo=v;
      if(pxbyv) px=pll+(pul-pll)*(v-ll)/(ul-ll);
      if(px < pll || v < ll)
       {
        px=pll;
        v=ll;
       }
      else if(px > pul || v> ul)
       {
        px=pul;
        v=ul;
       }
      if(! pxbyv)
       {
        double vnew=0;
        double vraw=(ll+((ul-ll)*(knob.x-pll)/(pul-pll)));
        if(type.equals("i")) vnew=(int)vraw;
        else if(type.equals("Sa")) vnew=(int)Math.rint(vraw);
        else  vnew=rndto(vraw);
        v=vnew;
       }
      calcsv();
     }
    render();
   }
  public void render()
   {
    body.fill3Dfk(offsg);
    for(int i=0;i<buga;i++) bua[i].fill3Dpk(offsg);
    offsg.setColor(Color.yellow);
    offsg.drawString(name,namex,namey);
    offsg.setColor(Color.yellow);
    chan.fill3Dpk(offsg);
    knob=knob.setx(px);
    knob.fill3Dpk(offsg);
    if(type.equals("K"))
     {
      offsg.drawString(chan1s,3,chan.yi+chan.hi-3);
      chan2.fill3Dpk(offsg);
      knob2=knob2.setx(px2);
      knob2.fill3Dpk(offsg);
      offsg.drawString(chan2s,3,chan2.yi+chan.hi-3);
      chan3.fill3Dpk(offsg);
      knob3=knob3.setx(px3);
      knob3.fill3Dpk(offsg);
      offsg.drawString(chan3s,3,chan3.yi+chan.hi-3);
      chan4.fill3Dpk(offsg);
      knob4=knob4.setx(px4);
      knob4.fill3Dpk(offsg);
      offsg.drawString(chan4s,3,chan4.yi+chan.hi-3);
     }
    else if(type.equals("XYZ"))
     {
      offsg.drawString(chan1s,3,chan.yi+chan.hi-3);
      chan2.fill3Dpk(offsg);
      knob2=knob2.setx(px2);
      knob2.fill3Dpk(offsg);
      offsg.drawString(chan2s,3,chan2.yi+chan.hi-3);
      chan3.fill3Dpk(offsg);
      knob3=knob3.setx(px3);
      knob3.fill3Dpk(offsg);
      offsg.drawString(chan3s,3,chan3.yi+chan.hi-3);
     }
    else if(type.equals("dP"))
     {
      offsg.drawString(chan1s,3,chan.yi+chan.hi-3);
      chan2.fill3Dpk(offsg);
      knob2=knob2.setx(px2);
      knob2.fill3Dpk(offsg);
      offsg.drawString(chan2s,3,chan2.yi+chan.hi-3);
     }
    if(pm)
     {
      mksvrecs();
      offsg.setColor(Color.black);
      offsg.drawString(sv,usvx,usvy);
      offsg.drawString(sv,svx,svy);
      offsg.setColor(Color.yellow);
     }
    else 
     {
      offsg.setColor(Color.yellow);
      offsg.drawString(sv,svx,svy);
     }
    if(type.equals("Sa")) offsg.drawString(Sasv,Sasvx,Sasvy);
    repaint();
   }
  void calcsv() 
   {
    //tta("calcsv");
    if(pm)
     {
      if(v>=0)
       {
        sv=Te.Svo(v);
        char[] a=sv.toCharArray();
        String sul=Te.Svo(ul);
        char[] b=sul.toCharArray();
        if(a.length<b.length)
         {
          sv="000000000"+sv;
          sv=sv.substring(9+a.length-b.length);
         }
        sv="+"+sv;
       }
      else
       {
        sv=Te.Svo(Math.abs(v));
        char[] a=sv.toCharArray();
        String sll=Te.Svo(Math.abs(ll));
        char[] b=sll.toCharArray();
        if(a.length<b.length)
         {
          sv="000000000"+sv;
          sv=sv.substring(9+a.length-b.length);
         }
        sv="-"+sv;
       }
     }
    else
     {
      if(type.equals("K")) 
       {
        if(rotindex[3]==2) sv=k.kh;
        else sv=Te.Svo(k,3);
       }
      else if(type.equals("dP")) 
       {
        if(boxy) sv=Te.Svo(dp,5);
        else sv="("+Te.Svo(dp.r,3)+","+Te.Svo(dp.t,3)+")";
       }
      else if(type.equals("XYZ")) sv=Te.Svo(xyz,3);
      else sv=Te.Svo(v);
     }
    if(type.equals("Sa")) Sasv=svals[(int)Math.rint(v)];
   }
  public void setsvals(String[] svals)
   {
    this.svals=svals;
    ul=svals.length-1;
    fender();
   }
  public void setname(String name)
   {
    this.name=name;
    fender();
   }
  public void settype(String s)
   {
    if(type.equals("d")) type="r";
    if(type.equals(s)) return;
    type=s;
    fender();
   }
  public void sethsv(boolean b)
   {
    if(b==k.hsv) return;
    k.hsv=b;
    slinit();
   }
  public void setul(double d)
   {
    if(ul==d) return;
    ul=d;
    fender();
   }
  public void setll(double d)
   {
    if(ll==d) return;
    ll=d;
    fender();
   }
  public void setval(double d)
   {
    if(v==d) return;
    v=d;
    fender();
   }
  public void setdp(dP a)
   {
    if(dp.eq(a)) return;
    dp=new dP(a);
    mkchan();
    fender();
   }
  public void setdpll(dP a)
   {
    if(dpll.eq(a)) return;
    dpll=new dP(a);
    mkchan();
    fender();
   }
  public void setdpul(dP a)
   {
    if(dpul.eq(a)) return;
    dpul=new dP(a);
    mkchan();
    fender();
   }
  public void setxyz(XYZ a)
   {
    if(xyz.eq(a)) return;
    xyz=new XYZ(a);
    mkchan();
    fender();
   }
  public void setxyzll(XYZ a)
   {
    if(xyzll.eq(a)) return;
    xyzll=new XYZ(a);
    mkchan();
    fender();
   }
  public void setxyzul(XYZ a)
   {
    if(xyzul.eq(a)) return;
    xyzul=new XYZ(a);
    mkchan();
    fender();
   }
  public void setk(K a)
   {
    if(k.eq(a)) return;
    k.sk(a);
    mkchan();
    fender();
   }
  public void setv(float f)
   {
    if(k.v==f) return;
    k.sv(f);
    mkchan();
    fender();
   }
  public void seth(float f)
   {
    if(k.h==f) return;
    k.sh(f);
    mkchan();
    fender();
   }
  public void sets(float f)
   {
    if(k.s==f) return;
    k.ss(f);
    mkchan();
    fender();
   }
  public void seta(int a)
   {
    if(k.a==a) return;
    k.a=a;
    mkchan();
    fender();
   }
  public void setx(double d)
   {
    if(type.equals("dP"))
     {
      if(dp.x==d) return;
      dp.setx(d);
     }
    else if(type.equals("XYZ"))
     {
      if(xyz.x==d) return;
      xyz.setx(d);
     }
    mkchan();
    fender();
   }
  public void sety(double d)
   {
    if(type.equals("dP"))
     {
      if(dp.y==d) return;
      dp.sety(d);
     }
    else if(type.equals("XYZ"))
     {
      if(xyz.y==d) return;
      xyz.sety(d);
     }
    mkchan();
    fender();
   }
  public void setz(double d)
   {
    if(type.equals("XYZ"))
     {
      if(xyz.z==d) return;
      xyz.setz(d);
     }
    mkchan();
    fender();
   }
  public void setr(double d)
   {
    if(dp.r==d) return;
    dp.setr(d);
    mkchan();
    fender();
   }
  public void sett(double d)
   {
    if(dp.t==d) return;
    dp.sett(d);
    mkchan();
    fender();
   }
  public void setr(int i)
   {
    if(type.equals("K"))
     {
      if(k.r==i) return;
      if(k.hsv) k.rgb2all();
      k.r=i;
     }
    mkchan();
    fender();
   }
  public void setg(int i)
   {
    if(k.g==i) return;
    if(k.hsv) k.rgb2all();
    k.g=i;
    mkchan();
    fender();
   }
  public void setb(int i)
   {
    if(k.b==i) return;
    if(k.hsv) k.rgb2all();
    k.b=i;
    mkchan();
    fender();
   }
  public void setrW(double d)
   {
    rW=d;
    mkchan();
    fender();
   }
  public void runSlTrig(String s) 
  {
	 // tta("Sl.runSlTrig s:"+s);
	  te.runSlTrig(s); 
	  }
  void ed()
   {
    if(type.equals("K")) tta1(name+".k "+Te.Svo(k));
    else if(type.equals("dP")) tta1(name+".dp "+Te.Svo(dp));
    else if(type.equals("XYZ")) tta1(name+".xyz "+Te.Svo(xyz));
    else tta1(name+".v "+Te.Svo(v));
    tta1(name+".type "+type);
    if(type.equals("i") || type.equals("r"))
     {
      tta1(name+".ll "+Te.Svo(ll));
      tta1(name+".ul "+Te.Svo(ul));
     }
    else if(type.equals("dP"))
     {
      tta1(name+".dpll "+Te.Svo(dpll));
      tta1(name+".dpul "+Te.Svo(dpul));
     }
    else if(type.equals("Sa")) tta1(name+".svals "+Te.Svo(svals));
    tta1(name+".tl "+Te.Svo(tl));
    tta1(name+".hostlp "+hostlp.name);
    tta1(name+".sweepbegin "+Te.Svo(sweepbegin));
    tta1(name+".sweepend "+Te.Svo(sweepend));
    tta1(name+".sweepstep "+Te.Svo(sweepstep));
    tta1(name+".sweepdelay "+Te.Svo(sweepdelay));
    tta1(name+".sweepup "+Te.Svo(sweepup));
    tta1(name+".edpos "+Te.Svo(LP.edpos));
    if(type.equals("K")) tta1(name+".hsv "+Te.Svo(k.hsv));
    tta1(name+".save "+Te.Svo(save));
    tta1(name+".rW "+Te.Svo(rW));
    tta1(name+".layer "+hostlp.getkidlayer(name));
   }
  void mkbuttons()
   {
    for(int i=0;i<buga;i++)
     {
      if(type.equals("K"))
       {
        bua[i]=new Rec(6+(7+i)*W,height-(W+5),W-1,(int)(2+1.1*W),new K(Color.yellow),new K(Color.yellow));
       }
      else if(type.equals("dP"))
       {
        bua[i]=new Rec(6+(7+i)*W,height-(W+5),W-1,(int)(2+1.1*W),new K(Color.yellow),new K(Color.yellow));
       }
      else if(type.equals("XYZ"))
       {
        int j=(int)(.45*rec.wi - buga/2);
        bua[i]=new Rec(j+(i*W),height-(W+5),W-1,(int)(2+1.1*W),new K(Color.yellow),new K(Color.yellow));
       }
      else 
       {
        int j=(int)(.45*rec.wi - buga/2);
        bua[i]=new Rec(j+((2+i)*W),fourty-(W+5),W-1,(int)(2+1.1*W),new K(Color.yellow),new K(Color.yellow));
        //zort bua[i]=new Rec(j+(i*W),fourty-(W+5),W-1,(int)(2+1.1*W),new K(Color.yellow),new K(Color.yellow));
       }
     }
   }
  void mksvrecs()
   {
    //tta("mksvrecs");
    cav=sv.toCharArray();
    //double mw=rW-2.25;
    double mw=11.189-2.25;
    for(int i=10;i<10+cav.length;i++)
     {
      bua[i]=new Rec(6+(i-10)*mw,3,mw,(int)(6+mw),new K(Color.green),new K(Color.green));
      bua[i].fill3Dpk(offsg);
     }
    for(int i=30;i<30+cav.length;i++)
     {
      bua[i]=new Rec(6+(i-30)*mw,fourty-(mw+5),mw,(int)(6+mw),new K(Color.red),new K(Color.red));
      bua[i].fill3Dpk(offsg);
     }
   }
  void sweep()
   {
    if(sweepup)
     {
      for(v=sweepbegin;v<=sweepend+sweepstep;v+=sweepstep) sweepdo();
     }
    else
     {
      for(v=sweepend;v>=sweepbegin-sweepstep;v-=sweepstep) sweepdo();
     }
   }
  void sweepdo()
   {
    if(sweepdelay>=100) fender();
    if(enabled>0) runSlTrig(name);
    if(sweepdelay>0) te.schleep(sweepdelay);
   }
  boolean testbuttons()
   {
    boolean ret=false;
    for(int i=0;i<buga;i++)
     {
      if( ! bua[i].rect.contains(mp)) continue;
      ret=true;
      if(i==0) setbutton0(--enabled);
      else if(i==1) firebutton1();
      else if(i==2) setbutton2();
      else if(i==3) setbutton3();
      return ret;
     }
    if(pm) ret=testpmbuttons();
    return ret;
   }
  void setbutton0(int i)
   {
    enabled=i;
    if(enabled==-1) enabled=2;
    if (enabled==2) bua[0].pk=new K(Color.yellow);
    else if(enabled==1)bua[0].pk=new K(Color.yellow.darker());
    else if(enabled==0)bua[0].pk=new K(Color.yellow.darker().darker());
    fender();
   }
  void firebutton1()
   {
    busy=false;
    bua[1].pk=new K(Color.yellow.darker());
    parent.newTeS(name+".fender");
    if(sweep) parent.newTeS(name+".sweep");
    else if(enabled>0) runSlTrig(name);
   }
  void setbutton2() 
   {
    if(++rotindex[2]==4) rotindex[2]=0;
    setbutton2(rotindex[2]);
   }
  void setbutton2(int i)
   {
    rotindex[2]=i; 
    if(i==2) sweep=true;
    else sweep=false;
    if(i==3) edpos=true;
    else edpos=false;
    if(rotindex[2]==0) bua[2].pk=new K(Color.yellow);
    else if(rotindex[2]==1) bua[2].pk=new K(Color.cyan);
    else if(rotindex[2]==2) bua[2].pk=new K (Color.magenta);
    else if(rotindex[2]==3) bua[2].pk=new K (Color.blue);
    mkchan();
    parent.newTeS(name+".fender");
   }
  void setbutton3()
   {
    if(++rotindex[3]==3) rotindex[3]=0;
    setbutton3(rotindex[3]);
    mkchan();
    parent.newTeS(name+".fender");
   }
  void setbutton3(int i)
   {
    rotindex[3]=i;
    if(i==0) 
     {
      bua[3].pk=new K (Color.cyan);
      if(type.equals("K")) k.hsv=true;
      else if(type.equals("dP")) boxy=true;
     }
    else
     {
      if(type.equals("K")) k.hsv=false;
      else if(type.equals("dP")) boxy=false;
      if(i==1) bua[3].pk=new K (Color.blue);
      else if(i==2) bua[3].pk=new K (Color.green);
     }
   }
  boolean testpmbuttons()
   {
    //tta("testpmbuttons");
    boolean ret=false;
    for(int i=0;i<cav.length;i++)
     {
      if(! bua[10+i].rect.contains(mp)) continue;
      ret=true;
      //tta("top for bua of 10+i was hit i:"+i);
      if(v>=0)
       {
        //tta("top for  v is greater or equal than zero");
        if(i==0)
         {
          cav[0]='-';
          //tta("i is zero cav[0]:"+cav[0]);
         }
        else
         {
          int j=Character.getNumericValue(cav[i]);
          //tta("i is not zero i:"+i+" cav[i]:"+cav[i]+" j:"+j);
          while(i>0 && j==9)
           {
            cav[i]='0';
            i--;
            j=Character.getNumericValue(cav[i]);
            //tta("cav[i] was 0 j:"+j);
           }
          char[] a=Te.Svo(++j).toCharArray();
          cav[i]=a[0];
         }
       }
      else
       {
        //tta("top for  v is less than zero");
        if(i==0) cav[0]='+';
        else
         {
          int j=Character.getNumericValue(cav[i]);
          //tta("i is not zero i:"+i+" cav[i]:"+cav[i]+" j:"+j);
          while(i>0 && j==0)
           {
            cav[i]='9';
            i--;
            j=Character.getNumericValue(cav[i]);
            //tta("while cav[i] was 9 j:"+j);
           }
          char[] a=Te.Svo(--j).toCharArray();
          cav[i]=a[0];
         }
       }
      sv=new String(cav);
      //tta("top for sv:"+sv);
      try { v=Double.parseDouble(sv); }
      catch (NumberFormatException e) { }
      //calcsv();
      fender();
      if(enabled>0)runSlTrig(name);
      //tta("top for return");
      return ret;
     }
    for(int i=0;i<cav.length;i++)
     {
      if(! bua[30+i].rect.contains(mp)) continue;
      ret=true;
      if(v<0)
       {
        //tta("bottom for  v is less than zero");
        if(i==0) cav[0]='+';
        else
         {
          int j=Character.getNumericValue(cav[i]);
          //tta("i is not zero i:"+i+" cav[i]:"+cav[i]+" j:"+j);
          while(i>0 && j==9)
           {
            cav[i]='0';
            i--;
            j=Character.getNumericValue(cav[i]);
            //tta("while cav[i] was 0  j:"+j);
           }
          char[] a=Te.Svo(++j).toCharArray();
          cav[i]=a[0];
         }
       }
      else
       {
        //tta("bottom for  v is greater or equal to zero");
        if(i==0) cav[0]='-';
        else
         {
          int j=Character.getNumericValue(cav[i]);
          //tta("i is not zero i:"+i+" cav[i]:"+cav[i]+" j:"+j);
          while(i>0 && j==0)
           {
            cav[i]='9';
            i--;
            j=Character.getNumericValue(cav[i]);
            //tta("while cav[i] was 9  j:"+j);
           }
          char[] a=Te.Svo(--j).toCharArray();
          cav[i]=a[0];
         }
       }
      sv=new String(cav);
      //tta("bottom for sv:"+sv);
      try { v=Double.parseDouble(sv); }
      catch (NumberFormatException e) { }
      // calcsv();
      fender();
      runSlTrig(name);
      return ret; // bail loop
     }
    return ret; 
   }
  static double rndto(double x,int nod) { return Te.rndto(x,nod); }
  static double rndto(double x) { return Te.rndto(x); }
  static String Svo(double d) { return Te.Svo(d); }
 }
