//SlidePanel.java
//author Umberto Ravaioli, 2005

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;
	private Label vlab1, vlab2, vlab3;
	private double lineLength = 1.0, lineLength_part1 = 1.0, 
                lineLength_part2 = 0.0, linecounter1 = 1000, linecounter2 = 0;
        	
	private static final Color bgcolor = new Color(255,255,255);
	private static final Color tinta = new Color(236,236,236);
		
	public int SCROLLMIN=0, SCROLLMAX=1001, SCROLLMAX2 = 1000;
        Trans_State state;
        
	public TransSlidePanel(Trans_State state){
		super();
                this.state = state;
		setLayout(null);
		setBackground(bgcolor);
        			
		vlab1 = new Label(" 0.0",Label.LEFT);
		vlab1.setFont(new Font("Serif",Font.BOLD,state.font14));
		vlab2 = new Label(" \u03bb",Label.LEFT);
		vlab2.setFont(new Font("Serif",Font.BOLD,state.font14));
                
		// CHANGE ======================================================
		vlab3 = new Label("d  = ",Label.RIGHT);
                //==============================================================
                vlab3.setFont(new Font("Serif",Font.BOLD,state.font14));
        	
		vlab1.setBackground(Color.white);
		vlab2.setBackground(Color.white);
		vlab3.setBackground(Color.white);	
		slider = new JSlider(SCROLLMIN,SCROLLMAX);
		slider.setValue(1000);
		slider2 = new JSlider(SCROLLMIN,SCROLLMAX2);
		slider2.setValue(1000);
		
                slider.setBackground(new Color(245,255,245));
                slider2.setBackground(Color.white);

		//slider.setBackground(bgcolor);
		//slider.setBackground(bgcolor.brighter());
		//slider.setForeground(bgcolor.darker());
		slider.addChangeListener(this);
		slider2.addChangeListener(this);
		lineLength=1.0;		 		
			
		add(slider);
		add(slider2);
		//add(vlab1);
		add(vlab2);
		add(vlab3);
    
		vlab3.setBounds(state.s15,state.s10,state.s30,state.s12);
		vlab2.setBounds(state.s545,state.s9,state.s12,state.s18);
                /*
                if(state.IsMac){
                    slider.setBounds(state.s64,state.s3,state.s462,state.s14);
                }
                else{
                    slider.setBounds(state.s50,state.s3,state.s490,state.s14);
                }
                if(state.IsMac){
                    slider2.setBounds(state.s64,state.s3+state.s14+1,state.s462,state.s14);
                }
                else{
                    slider2.setBounds(state.s50,state.s3+state.s14+1,state.s490,state.s14);
                }
		Panel slide1 = new Panel();
		    slide1.setBackground(Color.black);
		    add(slide1);
		    slide1.setBounds(state.s50-1,state.s3-1,state.s490+2,state.s14+2);
                Panel slide2 = new Panel();
		    slide2.setBackground(Color.black);
		    add(slide2);
		    slide2.setBounds(state.s50-1,state.s3+state.s14,state.s490+2,state.s14+2);
                    
                */
                // REDO SLIDERS
                if(state.IsMac){
                    slider.setBounds(state.s64,state.s3,state.s462,state.s14);
                }
                else{
                    slider.setBounds(state.s50,state.s3,state.s490,state.s14);
                }
                if(state.IsMac){
                    slider2.setBounds(state.s64,state.s21,state.s462,state.s14);
                }
                else{
                    slider2.setBounds(state.s50,state.s21,state.s490,state.s14);
                }
		/*
		Panel slide1 = new Panel();
		    slide1.setBackground(Color.black);
		    add(slide1);
		    slide1.setBounds(state.s50-1,state.s3-1,state.s490+2,state.s14+2);
                Panel slide2 = new Panel();
		    slide2.setBackground(Color.black);
		    add(slide2);
		    slide2.setBounds(state.s50-1,state.s21-1,state.s490+2,state.s14+2);
		*/
                
                //Listeners
		//slider.addAdjustmentListener(this);	
	}
	
	
	public void paint(Graphics g){
		g.setColor(bgcolor);
		//g.fill3DRect(0,0,getSize().width,getSize().height,true);
		slider.requestFocusInWindow();
		slider2.requestFocusInWindow();
	}
	
    	public void stateChanged(ChangeEvent evt){
	  if(evt.getSource()==slider){
		SCROLLMAX = slider.getMaximum();
		SCROLLMIN = slider.getMinimum();
		    vlab1.setText(" "+MaestroA.rounder((SCROLLMAX-SCROLLMIN-1-slider.getValue())*lineLength_part1/(SCROLLMAX-SCROLLMIN-1),5));    
	  }
	}
        
	
	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 < 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, 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(" 0.0");
	    slider.setValue(slider.getMaximum());
	    slider2.setValue(slider2.getMaximum());
	}
}//End of LossySlidePanel

