//Mod2Input.java
/*
 * Panel with all input operations for Module1.1
 * Using null layout - positions of elements hard-coded
 * authors: Umberto Ravaioli, Janice Richards
 * version 1.0 - Copyright: Amanogawa.com - All Rights Reserved
 */

import java.awt.*;
import java.awt.event.*;
import java.awt.font.*;
import java.text.*;
import java.util.Map;
import java.util.Hashtable;
import java.util.jar.Attributes;

public class Mod2Input extends Panel implements AdjustmentListener {
    private Mod2State state;
    private static final Color bgcolor = new Color(236,236,236);
    private static final Font labfont=new Font("SanSerif",Font.PLAIN,12);
    private static final Font symbolfont = new Font("Serif",Font.PLAIN,12);
    private static final Font normalfont = new Font("SanSerif",Font.PLAIN,14);
    public int ScrollMax = 10000;
    private Label titlelabel1, titlelabel2, titlelabel3;
    private Label lab1, lab2, lab3;
    private Label ulab1, ulab2, ulab3;
    public TextField text1, text2, text3;
    public Scrollbar slider1, slider2, slider3;
  
    public Mod2Input(Mod2State state){
	super();
	setLayout(null);
	setBackground(bgcolor);
	this.state = state;
	//titlelabel = new Label("Input for green wave",Label.CENTER);

	//titlelabel = new Label("Input for green wave",Label.LEFT);
	//titlelabel.setFont(TheFonts.bold14);
	//titlelabel = new Label("Input for green wave",Label.LEFT);
	//titlelabel.setFont(TheFonts.bold16);
	titlelabel1 = new Label("Input for",Label.LEFT);
	titlelabel2 = new Label("blue",Label.LEFT);
	titlelabel3 = new Label("wave",Label.LEFT);
	titlelabel1.setFont(TheFonts.bold16);
	titlelabel2.setFont(TheFonts.bold16);
        titlelabel2.setForeground(state.greenWaveColor);
	titlelabel3.setFont(TheFonts.bold16);
	
		
	lab1 = new Label("Frequency  f =  ",Label.RIGHT);
        lab1.setFont(TheFonts.sanSerif12);
        //lab1.setForeground(state.greenWaveColor);
	lab2 = new Label("Wavelength "+
                         Character.toString((char)0x03bb)+" =  ",Label.RIGHT);
        lab2.setFont(TheFonts.sanSerif12);
        //lab2.setForeground(state.greenWaveColor);
	lab3 = new Label("Attenuation "+
                         Character.toString((char)0x03b1)+" =  ",Label.RIGHT);
        lab3.setFont(TheFonts.sanSerif12);
        //lab3.setForeground(state.greenWaveColor);
		
	text1 = new TextField(""+state.frequency,8);
        text1.setFont(TheFonts.sanSerif12);
        //text1.setForeground(state.greenWaveColor);
	text2 = new TextField(""+state.lambda,8);
        text2.setFont(TheFonts.sanSerif12);
        //text2.setForeground(state.greenWaveColor);
	text3 = new TextField(""+state.alpha,8);
        text3.setFont(TheFonts.sanSerif12);
        //text3.setForeground(state.greenWaveColor);
	
	ulab1 = new Label(" [Hz]",Label.LEFT);
        ulab1.setFont(TheFonts.sanSerif12);
        //ulab1.setForeground(state.greenWaveColor);
	ulab2 = new Label(" [cm]",Label.LEFT);
        ulab2.setFont(TheFonts.sanSerif12);
        //ulab2.setForeground(state.greenWaveColor);
	ulab3 = new Label(" [Np/cm]",Label.LEFT);
        ulab3.setFont(TheFonts.sanSerif12);
        //ulab3.setForeground(state.greenWaveColor);
	
	slider1 = new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,ScrollMax+1);//ampl
	slider2 = new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,ScrollMax+1);//freq
	slider3 = new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,ScrollMax+1);//phi
	
	slider1.setValue((int)((state.frequency-state.fMin)*
                               ScrollMax/(state.fMax-state.fMin)));
	slider2.setValue((int)((state.lambda-state.lambdaMin)*
                               ScrollMax/(state.lambdaMax-state.lambdaMin)));
	slider3.setValue((int)((state.alpha-state.alphaMin)*
                               ScrollMax/(state.alphaMax-state.alphaMin)));
	
	add(titlelabel1);
	add(titlelabel2);
	add(titlelabel3);
	add(lab1);
	add(lab2);
	add(lab3);
	add(text1);
	add(text2);
	add(text3);
	add(slider1);
	add(slider2);
	add(slider3);

	add(ulab1);
	add(ulab2);
	add(ulab3);

	//titlelabel.setBounds(20,5,200,18);
	titlelabel1.setBounds(20,5,80,18);
	titlelabel2.setBounds(100,5,40,18);
	titlelabel3.setBounds(140,5,50,18);

	//int vPosInit = 25, vPos, dvPos = 2, vHeight = 18; 
	int vPosInit = 27, vPos, dvPos = 4, vHeight = 20; 
	vPos = vPosInit;
	
	lab1.setBounds(20,vPos,120,vHeight);
	text1.setBounds(140,vPos,80,vHeight);
	ulab1.setBounds(220,vPos,40,vHeight);
	
	    vPos += vHeight + dvPos; 
	   

	slider1.setBounds(22,vPos+2,196,vHeight);
	Panel ps1 = new Panel();
            ps1.setBackground(Color.cyan);
            //ps1.setBackground(Mod2State.greenWaveColor);
	    add(ps1);
	    ps1.setBounds(21,vPos+1,198,vHeight+2);
	    
	Panel ps2 = new Panel();
	    ps2.setBackground(Color.black);
	    add(ps2);
	    ps2.setBounds(20,vPos,200,vHeight+4);
	
	    vPos += vHeight + 4*dvPos; 
	    
	lab2.setBounds(20,vPos,120,vHeight);    
	text2.setBounds(140,vPos,80,vHeight);
	ulab2.setBounds(220,vPos,40,vHeight);
	  
	     vPos += vHeight + dvPos;
	     
	slider2.setBounds(22,vPos+2,196,vHeight);
	Panel ps3 = new Panel();
            ps3.setBackground(Color.cyan);
	    //ps3.setBackground(Mod2State.greenWaveColor);
	    add(ps3);
	    ps3.setBounds(21,vPos+1,198,vHeight+2);
	    
	Panel ps4 = new Panel();
	    ps4.setBackground(Color.black);
	    add(ps4);
	    ps4.setBounds(20,vPos,200,vHeight+4);
	
	    vPos += vHeight + 4*dvPos;
	    
	//
	lab3.setBounds(20,vPos,120,vHeight);    
	text3.setBounds(140,vPos,80,vHeight);
	ulab3.setBounds(220,vPos,70,vHeight);  
	  
	     vPos += vHeight + dvPos;
	     
	slider3.setBounds(22,vPos+2,196,vHeight);
	Panel ps9 = new Panel();
            ps9.setBackground(Color.cyan);
	    //ps9.setBackground(Mod2State.greenWaveColor);
	    add(ps9);
	    ps9.setBounds(21,vPos+1,198,vHeight+2);
	    
	Panel ps10 = new Panel();
	    ps10.setBackground(Color.black);
	    add(ps10);
	    ps10.setBounds(20,vPos,200,vHeight+4);
	
	//Listeners
	slider1.addAdjustmentListener(this);
	slider2.addAdjustmentListener(this);
	slider3.addAdjustmentListener(this);

    }


    
    public void reset() {
        state.frequency = 0.5;
        state.lambda = 2.0;
        state.alpha = 0.0;
	text1.setText(""+state.frequency);
	text2.setText(""+state.lambda);
	text3.setText(""+state.alpha);
        readTextUpdateSliders();
    }


    
    public void paint(Graphics g){
      Graphics2D g2d = (Graphics2D)g;
      g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                           RenderingHints.VALUE_ANTIALIAS_ON);     
	
	g.setColor(bgcolor.darker());
	g.fillRect(0,getSize().height-2,getSize().width,2);
	g.fillRect(getSize().width-2,0,2,getSize().height);
	g.setColor(bgcolor.brighter());
	g.fillRect(0,0,2,getSize().height-1);
	g.fillRect(0,0,getSize().width-2,2);
    }
    

    
    public void readTextUpdateSliders() {
        
        try { if(Double.valueOf(text1.getText()).doubleValue()<=state.fMax &&
                 Double.valueOf(text1.getText()).doubleValue()>=state.fMin){
                state.frequency=Double.valueOf(text1.getText()).doubleValue();
                slider1.setValue((int)(ScrollMax*(state.frequency-state.fMin)
                                       /(state.fMax-state.fMin)));
            } else if(Double.valueOf(text1.getText()).doubleValue()>state.fMax){
                  state.frequency = state.fMax;
                  text1.setText(""+state.fMax);
                  slider1.setValue(ScrollMax);
              }
              else if(Double.valueOf(text1.getText()).doubleValue()<state.fMin){
                  state.frequency = state.fMin;
                  text1.setText(""+state.fMin);
                  slider1.setValue(0);
              }
        } catch(NumberFormatException e){
            state.frequency =  0.0;
        }

        try { if(Double.valueOf(text2.getText()).doubleValue()<=state.lambdaMax &&
                 Double.valueOf(text2.getText()).doubleValue()>=state.lambdaMin){
                state.lambda=Double.valueOf(text2.getText()).doubleValue();
                slider2.setValue((int)(ScrollMax*(state.lambda-state.lambdaMin)
                                       /(state.lambdaMax-state.lambdaMin)));
            } else if(Double.valueOf(text2.getText()).doubleValue()>state.lambdaMax){
                  state.lambda = state.lambdaMax;
                  text2.setText(""+state.lambdaMax);
                  slider2.setValue(ScrollMax);
            } else if(Double.valueOf(text2.getText()).doubleValue()<state.lambdaMin){
                  state.lambda = state.lambdaMin;
                  text2.setText(""+state.lambdaMin);
                  slider2.setValue(0);
            }
        } catch(NumberFormatException e){
            state.lambda =  0.0;
        }

        try { if(Double.valueOf(text3.getText()).doubleValue()<=state.alphaMax &&
                 Double.valueOf(text3.getText()).doubleValue()>=state.alphaMin){
                state.alpha=Double.valueOf(text3.getText()).doubleValue();
                slider3.setValue((int)(ScrollMax*(state.alpha-state.alphaMin)
                                       /(state.alphaMax-state.alphaMin)));
            } else if(Double.valueOf(text3.getText()).doubleValue()>state.alphaMax){
                  state.alpha = state.alphaMax;
                  text3.setText(""+state.alphaMax);
                  slider3.setValue(ScrollMax);
              }
              else if(Double.valueOf(text3.getText()).doubleValue()<state.alphaMin){
                  state.alpha = state.alphaMin;
                  text3.setText(""+state.alphaMin);
                  slider3.setValue(0);
              }
        } catch(NumberFormatException e){
            state.alpha =  0.0;
        }
        
        repaint();
    }


    
    public void adjustmentValueChanged(AdjustmentEvent evt){//NEED HERE
	if (evt.getSource()==slider1) {
	    if (slider1.getValue()>=ScrollMax) {
                state.frequency=state.fMax;
                slider1.setValue((int)((state.frequency-state.fMin)*
                                       ScrollMax/(state.fMax-state.fMin)));
	    } else {
                state.frequency = state.fMin + 
                    (state.fMax-state.fMin)*
                    slider1.getValue()/ScrollMax;
	    }
            
	    text1.setText(""+MaestroA.rounder(state.frequency,7));
	} else if (evt.getSource()==slider2) {
	    if(slider2.getValue()>=ScrollMax) {
                
                state.lambda=state.lambdaMax;
                slider2.setValue((int)((state.lambda-state.lambdaMin)*
                                       ScrollMax/(state.lambdaMax-state.lambdaMin)));
	    } else {
		state.lambda = state.lambdaMin + 
		    (state.lambdaMax-state.lambdaMin)*
                    slider2.getValue()/ScrollMax;
	    }
            
	    text2.setText(""+MaestroA.rounder(state.lambda,7));
        } else if (evt.getSource()==slider3) {
            if(slider3.getValue()>=ScrollMax){
                state.alpha=state.alphaMax;
                slider3.setValue((int)((state.alpha-state.alphaMin)*
                                       ScrollMax/(state.alphaMax-state.alphaMin)));
	    } else {
		state.alpha = state.alphaMin + 
		    (state.alphaMax-state.alphaMin)*
                    slider3.getValue()/ScrollMax;
                state.alpha = MaestroA.rounder(state.alpha,7);
	    }
            
	    text3.setText(""+MaestroA.rounder(state.alpha,7));
        }
    }
    
}
