//TransSlidePanel.java
/* A Java class for
 * LineImpedance.java
 * Electromagnetic Transmission Line Applet
 * Applet without Smith Chart - Prepared by Umberto Ravaioli 
 * for 6th edition of Fundamentals of Applied Electromagnetics Book
 * May 2009 - All Rights Reserved
 */ 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class TransSlidePanel extends Panel implements ChangeListener {
    public JSlider slider, slider2;
    public Label vlab1, vlab2;

    //private double lineLength;
    private double lineLength = 1.66782, lineLength_part1 = 1.667, 
         lineLength_part2 = 8.2e-4, linecounter1 = 3335, linecounter2 = 641;

    private final Font labelfont=TheFonts.sanSerif12;

    private static final Color bgcolor = Color.white;
    private static final Color tinta = new Color(236,236,236);
    public int SCROLLMIN=0, SCROLLMAX=3336, SCROLLMAX2 = 1000;
    Trans_State state;

    public TransSlidePanel(Trans_State state){
        super();
        this.state = state;

        setLayout(null);
        setBackground(bgcolor);

        lineLength = 1.66782;	

        //vlab1 = new Label(" "+lineLength,Label.LEFT);
        vlab1 = new Label ("d = ", Label.RIGHT);
        vlab1.setFont(new Font("Serif",Font.PLAIN,state.font13));
        vlab2 = new Label(" \u03bb",Label.LEFT);
        vlab2.setFont(new Font("Serif",Font.PLAIN,state.font13));
        vlab1.setBackground(Color.white);
        vlab2.setBackground(Color.white);	

        slider = new JSlider(SCROLLMIN,SCROLLMAX);
        slider2 = new JSlider(SCROLLMIN,SCROLLMAX2);	
        slider.addChangeListener(this);
        slider2.addChangeListener(this);
        slider.setValue(slider.getMaximum());
        slider2.setValue(slider2.getMaximum());

        //slider.setBackground(bgcolor);	
        //slider.setBackground(bgcolor.brighter());
        //slider.setForeground(bgcolor.darker());	 		

        add(slider);
        add(slider2);
        add(vlab1);
        //add(vlab2);

        vlab1.setBounds(state.s4,state.s8,state.s40,state.s17);
        vlab2.setBounds(state.s606,state.s8,state.s20,state.s17);
        
        /*
        if(state.IsMac){
            slider.setBounds(state.s64,state.s3,state.s525,state.s15);
        }
        else{
            slider.setBounds(state.s50,state.s3,state.s553,state.s15);
        }
        if(state.IsMac){
            slider2.setBounds(state.s50+state.s14,state.s18+1,state.s525,state.s15);
        }
        else{
            slider2.setBounds(state.s50,state.s18+1,state.s553,state.s15);
        }
        slider.setBackground(new Color(245,255,235));
        slider2.setBackground(Color.white);

        Panel slide1 = new Panel();
            slide1.setBackground(Color.black);
            add(slide1);
            // Make sure to scale round-off as well when determining height of backpanel
            slide1.setBounds(state.s50-1,state.s3-1,state.s553+2,state.s15+state.s15+3);	
        */
        //REDO SLIDERS
        if(state.IsMac){
            slider.setBounds(state.s64,state.s3,state.s525,state.s15);
        }
        else{
            slider.setBounds(state.s50,state.s3,state.s553,state.s14);
        }
        if(state.IsMac){
            slider2.setBounds(state.s50+state.s21,state.s18+1,state.s525,state.s15);
        }
        else{
            slider2.setBounds(state.s50,state.s21,state.s553,state.s14);
        }
        slider.setBackground(new Color(245,255,235));
        slider2.setBackground(Color.white);

	/*
        Panel slide1 = new Panel();
            slide1.setBackground(Color.black);
            add(slide1);
            slide1.setBounds(state.s50-1,state.s3-1,state.s553+2,state.s14+2);
        
        Panel slide2 = new Panel();
            slide2.setBackground(Color.black);
            add(slide2);
            slide2.setBounds(state.s50-1,state.s21-1,state.s553+2,state.s14+2);
	*/
    }

    public void paint(Graphics g){
        //g.setColor(bgcolor);
        //g.fill3DRect(0,0,getSize().width-1,getSize().height-1,true);
	slider.requestFocusInWindow();
	slider2.requestFocusInWindow();
    }

    public void stateChanged(ChangeEvent evt){
      if(evt.getSource()==slider){
            SCROLLMAX = slider.getMaximum();
            SCROLLMIN = slider.getMinimum();
            //vlab1.setText("    d = ");    
      }
    }


    public double getValue(){
            SCROLLMAX = slider.getMaximum();
            SCROLLMIN = slider.getMinimum();

            return (MaestroA.rounder((SCROLLMAX-SCROLLMIN-1-slider.getValue())*lineLength_part1/(SCROLLMAX-SCROLLMIN-1),5));
    }

    public double getValue2(){
            SCROLLMAX2 = slider2.getMaximum();
            SCROLLMIN = slider2.getMinimum();
            if(lineLength < 0.0001){
                return (MaestroA.rounder((double)(SCROLLMAX2-SCROLLMIN-1-slider2.getValue())*0.00000001/(double)(SCROLLMAX2-SCROLLMIN),11));
            }
            else if(lineLength >=0.0001 && lineLength < 0.001){
                return (MaestroA.rounder((double)(SCROLLMAX2-SCROLLMIN-1-slider2.getValue())*0.0000001/(double)(SCROLLMAX2-SCROLLMIN),10));
            }
            else if(lineLength >=0.001 && lineLength < 0.01){
                return (MaestroA.rounder((double)(SCROLLMAX2-SCROLLMIN-1-slider2.getValue())*0.000001/(double)(SCROLLMAX2-SCROLLMIN),9));
            }
            else if(lineLength >=0.01 && lineLength < 0.1){
                return (MaestroA.rounder((double)(SCROLLMAX2-SCROLLMIN-1-slider2.getValue())*0.00001/(double)(SCROLLMAX2-SCROLLMIN),8));
            }
            else if(lineLength >= 0.1 && lineLength < 1.0){
                return (MaestroA.rounder((double)(SCROLLMAX2-SCROLLMIN-1-slider2.getValue())*0.0001/(double)(SCROLLMAX2-SCROLLMIN),7));
            }
            else if(lineLength >= 1.0 && lineLength < 10.0){
                return (MaestroA.rounder((double)(SCROLLMAX2-SCROLLMIN-1-slider2.getValue())*0.001/(double)(SCROLLMAX2-SCROLLMIN),6));
            }
            else if(lineLength >= 10.0 && lineLength < 100.0){
                return (MaestroA.rounder((double)(SCROLLMAX2-SCROLLMIN-1-slider2.getValue())*0.01/(double)(SCROLLMAX2-SCROLLMIN),5));
            }
            else if(lineLength >= 100.0 && lineLength < 1000.0){
                return (MaestroA.rounder((double)(SCROLLMAX2-SCROLLMIN-1-slider2.getValue())*0.1/(double)(SCROLLMAX2-SCROLLMIN),4));
            }
            else if(lineLength >= 1000.0 && lineLength < 10000.0){
                return (MaestroA.rounder((double)(SCROLLMAX2-SCROLLMIN-1-slider2.getValue())/(double)(SCROLLMAX2-SCROLLMIN),3));
            }
            else if(lineLength >= 10000.0 && lineLength < 100000.0){
                return (MaestroA.rounder((double)(SCROLLMAX2-SCROLLMIN-1-slider2.getValue())*10.0/(double)(SCROLLMAX2-SCROLLMIN),2));
            }
            else{
                return (MaestroA.rounder((double)(SCROLLMAX2-SCROLLMIN-1-slider2.getValue())*100.0/(double)(SCROLLMAX2-SCROLLMIN),1));
            }
    }

    public synchronized void setValue(double x){
        slider.setValue((int)(x));
    }

    public synchronized void setValue2(double x){
        slider2.setValue((int)(x));
    }

    //public synchronized void setLineLength(double lineLength){
      //  this.lineLength=lineLength;
    //}

    public synchronized void setLineLength(double lineLength, double lineLength_part1, double lineLength_part2, int linecounter1, int linecounter2){
        this.lineLength=lineLength;
        this.lineLength_part1=lineLength_part1;
        this.lineLength_part2=lineLength_part2;
        this.linecounter1 = linecounter1;
        this.linecounter2 = linecounter2;
    }

    public synchronized void reset(){
        //vlab1.setText(" "+MaestroA.rounder(lineLength,5));
        //vlab1.setText("    d = ");
        slider.setValue(slider.getMaximum());
        slider2.setValue(slider.getMaximum());
    }

}//End of TransSlidePanel

