//NewGuideInputPanel.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class NewGuideInputPanel extends Panel implements ActionListener, ChangeListener, ItemListener{
    private NewGuide_State state;
    private static final Color bgcolor = new Color(236,236,221);
    private Font labfont, labfont11;
    private Font labfontB;
    private Font labfont0;
    private Font labfont2;
    private Font normalfont;
    private Font labelfont;
    private Font labelfont2;
    private Font labelfont0;
    private Font labelfontIT;
    
    public int ScrollMax = 10000, ScrollMax2 = 1001; 
    public int ScrollMax1 = 180; 
    public int ScrollMax3 = 1000;
    
    public int offset;
    private Label titlelabel, titlelabel2;
    private Label lab1A, lab1, lab2, lab2_a, lab2_b, lab2_c, lab2A, lab3, 
                  lab3b, lab3c, lab4, lab4A, lab6a, lab6b, lab6c, labT;
    private Label ulab1, ulab3, ulab2, ulab4, ulabT, Click;
    public TextField text1, text2, text3, text4, text6, textT;
    public JSlider slider1, slider2, slider3;
    public JSlider sliderT, sliderT0;
    public  Button b1, b2, b3;
    public  Button bupdate;
    
    
    public Panel ps1, ps2;
    Choice ch1, ch2;
  
    public NewGuideInputPanel(NewGuide_State state){
	super();
	setLayout(null);
	setBackground(bgcolor);
	this.state = state;
	
        labfont = new Font("SanSerif",Font.PLAIN,state.font12);
        labfont11 = new Font("SanSerif",Font.PLAIN,state.font11);
        labfontB = new Font("SanSerif",Font.BOLD,state.font12);
        labfont0 = new Font("SanSerif",Font.PLAIN,state.font10);
        labfont2 = new Font("Serif",Font.PLAIN,state.font14);
        normalfont = new Font("SanSerif",Font.PLAIN,state.font14);
        labelfont = new Font("Serif",Font.ITALIC,state.font14);
        labelfont2 = new Font("Serif",Font.ITALIC,state.font16);
        labelfont0 = new Font("Serif",Font.ITALIC,state.font12);
        labelfontIT = new Font("Serif",Font.ITALIC,state.font18);
        
        offset = state.s10;
    
	titlelabel = new Label("Set Antenna Parameters",Label.LEFT);
	titlelabel.setFont(new Font("SanSerif",Font.BOLD,state.font13));    
	titlelabel2 = new Label("Elevation Angle",Label.LEFT);
	titlelabel2.setFont(labfont);    
        
	lab1A = new Label("Antenna Aperture",Label.LEFT);
	lab1A.setFont(labfont);
        lab1A.setForeground(Color.red);
	
        Click = new Label("Click Update",Label.LEFT);
	Click.setFont(labfontB);
        Click.setForeground(Color.red);
	
        lab1 = new Label("d  = ",Label.RIGHT);
	lab1.setFont(labelfont2);
	
        lab2A = new Label("Illumination factor",Label.LEFT);
	lab2A.setFont(labfont);
	lab2A.setForeground(Color.red);
        lab2 = new Label("\u03b1 ",Label.RIGHT);
        lab2.setFont(labelfont2);
        lab2_c = new Label(" = ",Label.RIGHT);
	lab2_c.setFont(labelfont2);
        
        // labels for epsilon - disabled
        lab3 = new Label("\u03b5",Label.RIGHT);
	lab3.setFont(labelfont);
	lab3b = new Label("r",Label.LEFT);
	lab3b.setFont(labelfont);
	lab3.setForeground(Color.black);
	lab3b.setForeground(Color.black);
	lab3c = new Label("=",Label.LEFT);
	lab3c.setFont(labelfont);
	lab3c.setForeground(Color.black);
            
	lab4A = new Label("Frequency",Label.LEFT);
	lab4A.setFont(labfont);
        lab4A.setForeground(Color.red);
        lab4 = new Label("f  = ",Label.RIGHT);
	lab4.setFont(labelfont2);
        
        // labels for wire - disabled
	lab6a = new Label("a",Label.RIGHT);
	lab6a.setFont(labelfontIT);
	lab6b = new Label("Radius",Label.CENTER);
	lab6b.setFont(labfont2);
	lab6c = new Label(" = ",Label.RIGHT);
	lab6c.setFont(labelfont);
			
	text1 = new TextField(""+state.a,8);
        text2 = new TextField(""+state.taper_parameter,8);
	text3 = new TextField(""+state.epsilon_r,8);
	text4 = new TextField(""+state.frequency,8);
	text6 = new TextField(""+state.wire_radius,8);
        
        text1.setFont(labfont);
        text2.setFont(labfont);
        text3.setFont(labfont);
        text4.setFont(labfont);
        text6.setFont(labfont);
	
	ulab4 = new Label(" [Hz]",Label.LEFT);
        ulab4.setFont(labfont);
        
	ulab2 = new Label(" [V/m]",Label.LEFT);
        ulab2.setFont(labfont);
        
        ulab1 = new Label("\u03bb",Label.LEFT);
        ulab1.setFont(labfont2);
        ulab3 = new Label("\u03bb",Label.LEFT);
        ulab3.setFont(labfont2);
        
	slider1 = new JSlider(0,ScrollMax+1); //changes a
	slider2 = new JSlider(0,ScrollMax+1); //changes frequency
	slider3 = new JSlider(0,ScrollMax2); //changes taper parameter
	/*
	slider1 = new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,ScrollMax+1);//changes a
	slider2 = new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,ScrollMax+1);//changes frequency
	slider3 = new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,ScrollMax2);//changes taper parameter
	*/
	//slider1.setBackground(Color.white);
        //slider2.setBackground(Color.white);
        //slider3.setBackground(Color.white);
	slider1.setValue((int)((state.a-state.a_minimum)*ScrollMax/(state.a_maximum-state.a_minimum)));
	slider2.setValue((int)((state.frequency-state.frequency_minimum)*ScrollMax/(state.frequency_maximum-state.frequency_minimum)));
	slider3.setValue(500);
	
        sliderT = new JSlider(0,ScrollMax1+1); //changes theta
        sliderT0 = new JSlider(0,ScrollMax3+1); //changes theta decimal
	/*
        sliderT = new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,ScrollMax1+1);//changes theta
        sliderT0 = new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,ScrollMax3+1);//changes theta decimal
	*/
        sliderT.setValue((int)((state.theta_angle-state.theta_minimum)*ScrollMax1/(state.theta_maximum-state.theta_minimum)));
	sliderT0.setValue((int)((state.theta_angle-(int)state.theta_angle)*ScrollMax3));
        //sliderT.setBackground(Color.white);
        //sliderT0.setBackground(Color.white);
        
        labT = new Label(" \u03b8  = ",Label.RIGHT);
	labT.setFont(labelfont2);
	textT = new TextField(""+(state.theta_angle-90.0),8);
        textT.setFont(labfont);
	ulabT = new Label(" [deg]",Label.LEFT);
	ulabT.setFont(labfont);
        
	b1 = new Button("Range");
	b2 = new Button("Range");
	b3 = new Button("Range");
        b1.setFont(labfont11);
        b2.setFont(labfont11);
        b1.setBackground(Color.white);
        b2.setBackground(Color.white);
        //b3.setBackground(Color.white);
	
	bupdate = new Button("Update");
        bupdate.setFont(labfont);
        bupdate.setBackground(Color.white);
	add(titlelabel);
	add(titlelabel2);
        
	add(lab1);
        add(lab1A);
        add(Click);
        Click.setVisible(false);
	add(lab2_c);
        add(lab2A);
	add(lab2);
        add(labT);
        add(lab4);
        add(lab4A);
        
	add(text1);
	add(text2);
	add(text3);
	add(text4);
	add(text6);
        add(textT);
	
	add(ulab4);
	add(ulab2);
        add(ulab1);
        add(ulab3);
        add(ulabT);
        
	add(slider1);
	add(slider2);
	add(slider3);
	add(sliderT);
        add(sliderT0);
        
	add(b1);
	add(b2);
	add(bupdate);
	
	titlelabel.setBounds(state.s10,state.s5,state.s200,state.s18);
	//Click.setBounds(state.s200+state.s20,state.s5,state.s95,state.s18);
        
        int vPosInit = state.s25+offset, vPos, dvPos = state.s5, vHeight = state.s18, vSlider = state.s15; 
	vPos = vPosInit;
	
	lab2A.setBounds(state.s15,vPos-state.s3,state.s110,vHeight);
        lab2.setBounds(state.s125,vPos-state.s3,state.s20,vHeight);
        lab2_c.setBounds(state.s145,vPos-state.s3,state.s20,vHeight);
	text2.setBounds(state.s170,vPos-state.s3,state.s80,vHeight);
	
        Panel ptext2 = new Panel();
	    ptext2.setBackground(Color.gray);
	    add(ptext2);
	    ptext2.setBounds(state.s170-1,vPos-state.s3-1,state.s80+2,vHeight+2);
	
	vPos += vHeight + state.s2;
	
        
        if(state.IsMac){
            slider3.setBounds(state.s80+state.s14,vPos+state.s2,state.s196-state.s28,vSlider);
        }
        else{
            slider3.setBounds(state.s80,vPos+state.s2,state.s196,vSlider);
        }
	/*
	Panel ps19 = new Panel();
	    ps19.setBackground(Color.cyan);
	    add(ps19);
	    ps19.setBounds(state.s80-1,vPos+state.s2-1,state.s196+2,vSlider+2);
	    
	Panel ps110 = new Panel();
	    ps110.setBackground(Color.black);
	    add(ps110);
	    ps110.setBounds(state.s80-2,vPos+state.s2-2,state.s196+4,vSlider+4);
	*/
	vPos += vHeight + 2*dvPos;
    	lab1.setBounds(state.s120,vPos-state.s3,state.s45,vHeight);    
        lab1A.setBounds(state.s15,vPos-state.s3,state.s110,vHeight);    
	text1.setBounds(state.s170,vPos-state.s3,state.s80,vHeight);
        ulab1.setBounds(state.s200+state.s55,vPos-state.s3,state.s35,vHeight); 
	
        Panel ptext1 = new Panel();
	    ptext1.setBackground(Color.gray);
	    add(ptext1);
	    ptext1.setBounds(state.s170-1,vPos-state.s3-1,state.s80+2,vHeight+2);
	
	vPos += vHeight + state.s2;   
	//slider for antenna length
        
        if(state.IsMac){
            slider1.setBounds(state.s80+state.s14,vPos+state.s2,state.s196-state.s28,vSlider);
        }
        else{
            slider1.setBounds(state.s80,vPos+state.s2,state.s196,vSlider);
        }
	/*
	Panel ps9 = new Panel();
	    ps9.setBackground(Color.cyan);
	    add(ps9);
	    ps9.setBounds(state.s80-1,vPos+state.s2-1,state.s196+2,vSlider+2);
	    
	Panel ps10 = new Panel();
	    ps10.setBackground(Color.black);
	    add(ps10);
	    ps10.setBounds(state.s80-2,vPos+state.s2-2,state.s196+4,vSlider+4);
	*/
	b1.setBounds(state.s10,vPos,state.s60,state.s20);
        Panel prange1 = new Panel();
	    prange1.setBackground(Color.black);
	    add(prange1);
	    prange1.setBounds(state.s10-1,vPos-1,state.s60+2,state.s20+2);
	    
	vPos += vHeight + 2*dvPos;
    	lab4.setBounds(state.s115,vPos-state.s3,state.s50,vHeight);
        lab4A.setBounds(state.s15,vPos-state.s3,state.s90,vHeight);
	text4.setBounds(state.s170,vPos-state.s3,state.s80,vHeight);
	ulab4.setBounds(state.s250+state.s1,vPos-state.s3,state.s35,vHeight);   
	
        Panel ptext4 = new Panel();
	    ptext4.setBackground(Color.gray);
	    add(ptext4);
	    ptext4.setBounds(state.s170-1,vPos-state.s3-1,state.s80+2,vHeight+2);
	
	vPos += vHeight + state.s2;
	
	//slider for frequency    
        if(state.IsMac){
            slider2.setBounds(state.s80+state.s14,vPos+state.s2,state.s196-state.s28,vSlider);
        }
        else{
            slider2.setBounds(state.s80,vPos+state.s2,state.s196,vSlider);
        }
	/*
	Panel ps5 = new Panel();
	    ps5.setBackground(Color.cyan);
	    add(ps5);
	    ps5.setBounds(state.s80-1,vPos+state.s2-1,state.s196+2,vSlider+2);
	    
	Panel ps6 = new Panel();
	    ps6.setBackground(Color.black);
	    add(ps6);
	    ps6.setBounds(state.s80-2,vPos+state.s2-2,state.s196+4,vSlider+4);
	*/
	b2.setBounds(state.s10,vPos,state.s60,state.s20);
	Panel prange2 = new Panel();
	    prange2.setBackground(Color.black);
	    add(prange2);
	    prange2.setBounds(state.s10-1,vPos-1,state.s60+2,state.s20+2);
	
	vPos += vHeight + dvPos;
	
	// update
	bupdate.setBounds(state.s80,vPos+state.s5,state.s196,vHeight+state.s3);	
	Panel ps7 = new Panel();
	    ps7.setBackground(Color.cyan);
	    add(ps7);
	    ps7.setBounds(state.s80-1,vPos+state.s5-1,state.s196+2,vHeight+state.s3+2);
	    
	Panel ps8 = new Panel();
	    ps8.setBackground(Color.black);
	    add(ps8);
	    ps8.setBounds(state.s80-2,vPos+state.s5-2,state.s196+4,vHeight+state.s3+4);
    
        vPos += vHeight + 40*dvPos/10 + state.s8;
        titlelabel2.setBounds(state.s10,vPos-state.s3,state.s100,state.s18);
        labT.setBounds(state.s115,vPos-state.s3,state.s50,vHeight);    
	textT.setBounds(state.s170,vPos-state.s3,state.s80,vHeight);
	ulabT.setBounds(state.s250+state.s1,vPos-state.s3,state.s40,vHeight);
        
        Panel ptextT = new Panel();
	    ptextT.setBackground(Color.gray);
	    add(ptextT);
	    ptextT.setBounds(state.s170-1,vPos-state.s3-1,state.s80+2,vHeight+2);
	
	vPos += vHeight;
        
        if(state.IsMac){
            sliderT.setBounds(state.s80+state.s14,vPos+state.s2,state.s196-state.s28,vSlider);
        }
        else{
            sliderT.setBounds(state.s80,vPos+state.s2,state.s196,vSlider);
        }
        /*
	Panel pT = new Panel();
	    pT.setBackground(Color.cyan);
	    add(pT);
	    pT.setBounds(state.s80-1,vPos+state.s2-1,state.s196+2,vSlider+2);
	    
	Panel pT2 = new Panel();
	    pT2.setBackground(Color.black);
	    add(pT2);
	    pT2.setBounds(state.s80-2,vPos+state.s2-2,state.s196+4,vSlider+4);
	*/
        vPos += vSlider + state.s4;
        if(state.IsMac){    
            sliderT0.setBounds(state.s80+state.s14,vPos+state.s2,state.s196-state.s28,vSlider);
        }
        else{
            sliderT0.setBounds(state.s80,vPos+state.s2,state.s196,vSlider);
        }
	/*
        Panel pT0 = new Panel();
	    pT0.setBackground(Color.cyan);
	    add(pT0);
	    pT0.setBounds(state.s80-1,vPos+state.s2-1,state.s196+2,vSlider+2);
	    
	Panel pT02 = new Panel();
	    pT02.setBackground(Color.black);
	    add(pT02);
	    pT02.setBounds(state.s80-2,vPos+state.s2-2,state.s196+4,vSlider+4);
	*/
	//Listeners
	bupdate.addActionListener(this);
       
	slider1.addChangeListener(this);
	slider2.addChangeListener(this);
	slider3.addChangeListener(this);
        sliderT0.addChangeListener(this);
	sliderT.addChangeListener(this);
    }
    
    @Override
    public void paint(Graphics g){
	
	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);
	
        int vPosInit = state.s30, vPos, dvPos = state.s2, vHeight = state.s20; 
	vPos = vPosInit;
	g.setColor(Color.black);
	//g.drawLine(state.s10,state.s200+state.s33,getSize().width-state.s10,state.s200+state.s33);
	slider1.requestFocusInWindow();
	slider2.requestFocusInWindow();
	slider3.requestFocusInWindow();
	sliderT.requestFocusInWindow();
	sliderT0.requestFocusInWindow();

    }
    
    public void actionPerformed(ActionEvent evt){
     
        //***********
        if(evt.getSource()==bupdate){
	//*********
	  
	    try{ if(Double.valueOf(text1.getText()).doubleValue()<=state.a_maximum &&
		    Double.valueOf(text1.getText()).doubleValue()>=state.a_minimum){
		    state.a=Double.valueOf(text1.getText()).doubleValue();
		    slider1.setValue((int)(ScrollMax*(state.a-state.a_minimum)
						    /(state.a_maximum-state.a_minimum)));
		 }
		 else if(Double.valueOf(text1.getText()).doubleValue()>state.a_maximum){
		    state.a = state.a_maximum;
		    text1.setText(""+state.a_maximum);
		    slider1.setValue(ScrollMax);
		 }
		 else if(Double.valueOf(text1.getText()).doubleValue()<state.a_minimum){
		    state.a = state.a_minimum;
		    text1.setText(""+state.a_minimum);
		    slider1.setValue(0);
		 }
		 
	    }
	     catch(NumberFormatException e){
		  state.a =  0.0;
	    } 	    
	    
	    try{if(Double.valueOf(text3.getText()).doubleValue()>=1.0){
		    state.epsilon_r=Double.valueOf(text3.getText()).doubleValue();
		}
		else{
		    state.epsilon_r=1.0;
		    text3.setText(""+state.epsilon_r);
		}
	    }
	    catch(NumberFormatException e){
		  state.epsilon_r = 1.0;
	    }
	    
	    try{if((Double.valueOf(text6.getText()).doubleValue())>=0.0 
		   //&&(Double.valueOf(text6.getText()).doubleValue())<=(state.DipoleLength_lambda/10.)
		   ){
	    
		      state.wire_radius=Double.valueOf(text6.getText()).doubleValue();
		}
		//else if(Double.valueOf(text6.getText()).doubleValue() > state.DipoleLength_lambda/10.){
		//    state.wire_radius=state.DipoleLength_lambda/10.;
		//    text6.setText(""+state.wire_radius);
		//}
		else if((Double.valueOf(text6.getText()).doubleValue())<0.0){
		    state.wire_radius=1.0e-5;
		    text6.setText(""+state.wire_radius);
		}
		
	    }
	    catch(NumberFormatException e){
		  state.wire_radius = 1.0e-5;
	    }   
	      
	    
	    try{if(Double.valueOf(text4.getText()).doubleValue()<=state.frequency_maximum &&
		    Double.valueOf(text4.getText()).doubleValue()>=state.frequency_minimum){
		    state.frequency=Double.valueOf(text4.getText()).doubleValue();
		    slider2.setValue((int)(ScrollMax*(state.frequency-state.frequency_minimum)/
					    (state.frequency_maximum-state.frequency_minimum)));
		}
		else if(Double.valueOf(text4.getText()).doubleValue()>state.frequency_maximum){
		    state.frequency = state.frequency_maximum;
		    text4.setText(""+state.frequency_maximum);
		    slider2.setValue(ScrollMax);
		}
		else if(Double.valueOf(text4.getText()).doubleValue()<state.frequency_minimum){
		    state.frequency = state.frequency_minimum;
		    text4.setText(""+state.frequency_minimum);
		    slider2.setValue(0);
		}
	    }
	    catch(NumberFormatException e){
		  state.frequency = 0.0; 
	    }
	    
	    try{
                if(Double.valueOf(text2.getText()).doubleValue() > 1.0){
                    state.taper_parameter = 1.0;
		    slider3.setValue(ScrollMax2-1);
                    text2.setText("1.0");
                }
                else if(Double.valueOf(text2.getText()).doubleValue()<0.0){
                    state.taper_parameter = 0.0;
		    slider3.setValue(0);
                    text2.setText("0.0");
                }
                else{
                    state.taper_parameter = Double.valueOf(text2.getText()).doubleValue();
		    slider3.setValue((int)((ScrollMax2-1)*(state.taper_parameter)));
                }
	    }
	    catch(NumberFormatException e){
		  state.taper_parameter = 0.0; 
	    }
           
        }
            //Click.setVisible(false);
            repaint();
	    state.ignition();
            state.scanField();
            state.scan_coefficients();
            
    }//End of actionPerformed()
    
    public void stateChanged(ChangeEvent evt){
	if(evt.getSource()==slider2){
	    if(slider2.getValue()>=ScrollMax){
		state.frequency=state.frequency_maximum;
		slider2.setValue((int)(ScrollMax*(state.frequency-state.frequency_minimum)
						    /(state.frequency_maximum-state.frequency_minimum)));
	    }
	    else{
		state.frequency = state.frequency_minimum + 
		    (state.frequency_maximum-state.frequency_minimum)*slider2.getValue()/ScrollMax;
	    }
	    
	    text4.setText(""+state.frequency);
	    
            //Click.setVisible(true);
            repaint();
            
            //state.ignition();
            //state.scanField();
            //state.scan_coefficients();
	    
	}
	//-----------------------------------------
	else if(evt.getSource()==slider1){
	  
	    if(slider1.getValue()>=ScrollMax){
		    state.a=state.a_maximum;
		    slider1.setValue((int)(ScrollMax*(state.a-state.a_minimum)
						    /(state.a_maximum-state.a_minimum)));
	    }
	    else{
	    state.a  = state.a_minimum + 
		(state.a_maximum-state.a_minimum)*slider1.getValue()/ScrollMax;
	    }
	    text1.setText(""+MaestroA.rounder(state.a,7));
            
            //Click.setVisible(true);
            repaint();
            
	    //state.ignition();
            //state.scanField();
            //state.scan_coefficients();
	}
	
	//------------------------------------------
	
        else if(evt.getSource()==slider3){
	    state.taper_parameter  = (double)slider3.getValue()/(double)(ScrollMax2-1);
	    text2.setText(""+MaestroA.rounder(state.taper_parameter,7));
            
            //Click.setVisible(true);
            repaint();
            
            state.ignition();
            //state.scanField();
            //state.scan_coefficients();
	}
        
        
        // Change angle theta
        else if(evt.getSource()==sliderT0){
	    if(sliderT.getValue()>=ScrollMax1){
		    state.theta_angle=state.theta_maximum;
		    sliderT.setValue((int)(ScrollMax1*(state.theta_angle-state.theta_minimum)
						    /(state.theta_maximum-state.theta_minimum)));
		    sliderT0.setValue(0);
	    }
	    else
	    {
	    state.theta_angle  = state.theta_minimum + 
		(state.theta_maximum-state.theta_minimum)*sliderT.getValue()/ScrollMax1 +
		(double)sliderT0.getValue()/(double)ScrollMax3;
	    }
	    textT.setText(""+MaestroA.rounder(state.theta_angle-90.0,7));
	    state.ignition();
	}
	
	//------------------------------------------
	else if(evt.getSource()==sliderT){
	  
	    if(sliderT.getValue()>=ScrollMax1){
		    state.theta_angle=state.theta_maximum;
		    sliderT.setValue((int)(ScrollMax1*(state.theta_angle-state.theta_minimum)
						    /(state.theta_maximum-state.theta_minimum)));
		    sliderT0.setValue(0);
	    }
	    else{
	    state.theta_angle  = state.theta_minimum + 
		(state.theta_maximum-state.theta_minimum)*sliderT.getValue()/ScrollMax1 +
		(double)sliderT0.getValue()/(double)ScrollMax3;
	    }
	    textT.setText(""+MaestroA.rounder(state.theta_angle-90.0,7));
	    state.ignition();
	}	
    }
    
    public void itemStateChanged(ItemEvent evt){
   
    }   
}
