//PR.java
/* A Java class for
 * LossyWide.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.*;

public class PR extends Panel implements ActionListener{
	//protected static final Color bgcolor = new Color(180,147,112);
	//protected static final Color bgcolor = new Color(200,200,200);
	private static final Color bgcolor = new Color(236,236,236);
	private static final Color tinta = new Color(236,236,236);
	
	protected TextField text1[];
	protected Label lab1[], lab2[];
	public Label titlelabel;
	public Button b1;
	
	protected String titulo="Unknown Title";
	protected String[] nome;
	protected String[] unidade;
        public static Font newfont, newfont2, newfont3, labfont, titlefont, symbolfont, normalfont, smallfont;
        protected double[] DValue;
	protected int indexsize;
	//GridBagLayout gb = new GridBagLayout();
	//GridBagConstraints gbc = new GridBagConstraints();
	
        Trans_State state;
        private Image im;
	private Graphics buf;
        
	public PR(String titulo, String[] nome, String[] unidade, Trans_State state){
		super();
                this.state = state;
                
                newfont = new Font("SanSerif",Font.PLAIN,state.font11);
                newfont2 = new Font("SanSerif",Font.PLAIN,state.font10);
                newfont3 = new Font("Serif",Font.PLAIN,state.font12);
                titlefont = new Font("SanSerif",Font.BOLD,state.font14);
                
		setLayout(null);
		this.indexsize=nome.length;
		this.titulo=titulo;
		this.nome=new String[indexsize];
		this.unidade=new String[indexsize];
		this.DValue=new double[indexsize];
		this.text1=new TextField[indexsize];
		this.lab1=new Label[indexsize];
		this.lab2=new Label[indexsize];
		int i;
		
                titlelabel = new Label(titulo,Label.CENTER);
		titlelabel.setFont(titlefont);
                titlelabel.setForeground(Color.black);
		add(titlelabel);

		for(i=0;i<indexsize;i++){
			this.nome[i]=nome[i];
			this.unidade[i]=unidade[i];
			this.DValue[i]=0.0;

			this.text1[i]=new TextField("0.0",8);
                        this.text1[i].setFont(newfont);
                        
                        add(text1[i]);

			this.lab1[i]=new Label(nome[i],Label.RIGHT);
			this.lab2[i]=new Label(unidade[i],Label.LEFT);
			//this.lab1[i].setFont(labfont);
			//this.lab2[i].setFont(labfont);
                        this.lab1[i].setFont(newfont);
                        //this.lab2[i].setFont(newfont);
                        
                        add(lab1[i]);
                        add(lab2[i]);
		}
		
		setBackground(bgcolor);
		b1 = new Button("Update");
		b1.setBackground(new Color(220,220,210));
                b1.setFont(newfont);
		
                //Listeners
		b1.addActionListener(this);
                add(b1);
                
                titlelabel.setBounds(state.s5,state.s10,state.s268,state.s20);  

                /*
                text1[0].setBounds(130,45,80,20);
                text1[1].setBounds(130,70,80,20);
                text1[2].setBounds(130,95,80,20);
                text1[3].setBounds(130,120,80,20);
                text1[4].setBounds(130,145,80,20);
                
                lab2[0].setBounds(215,45,50,20);
                lab2[1].setBounds(215,70,50,20);
                lab2[2].setBounds(215,95,50,20);
                lab2[3].setBounds(215,120,50,20);
                lab2[4].setBounds(215,145,50,20);
                */
                // JAN'S NEW STUFF
                text1[0].setBounds(state.s130,state.s70,state.s80,state.s20);
                text1[1].setBounds(state.s130,state.s95,state.s80,state.s20);
                text1[2].setBounds(state.s130,state.s120,state.s80,state.s20);
                text1[3].setBounds(state.s130,state.s145,state.s80,state.s20);
                lab2[0].setBounds(state.s215,state.s70,state.s50,state.s20);
                lab2[1].setBounds(state.s215,state.s95,state.s50,state.s20);
                lab2[2].setBounds(state.s215,state.s120,state.s50,state.s20);
                lab2[3].setBounds(state.s215,state.s145,state.s50,state.s20);
                lab2[0].setFont(newfont3);
                lab2[1].setFont(newfont);
                lab2[3].setFont(newfont3);
                // END OF JAN'S NEW STUFF

                b1.setBounds(state.s130,state.s180,state.s80,state.s20);
	}
        
        public void paint(Graphics g){
	    if(im == null){
		im = createImage(getSize().width,getSize().height);
		buf = im.getGraphics();
		drawGraph(buf);
	    }
	    else{
		drawGraph(buf);
	    }
	    g.drawImage(im,0,0,null);
	}
	
	//Addition to reduce flicker new routine
	public void update(Graphics g){		// added to avoid clearing
	    paint(g);
	}
	
	public void drawGraph(Graphics g){
        //public void paint(Graphics g){
            
                Graphics2D g2d = (Graphics2D)g;
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
                
                //Font symbolfont=new Font("Symbol",Font.PLAIN,12);
                //Font normalfont=new Font("SanSerif",Font.PLAIN,12);
                //Font smallfont=new Font("SanSerif",Font.PLAIN,10);
            FontMetrics fm;
	
            String alpha, Ohm, lambda, infinity, Gamma, epsilon;
            g.setFont(symbolfont);
		alpha="\u03b1";
		lambda="\u03bb";
		Ohm="\u03a9";
		infinity="\u221e";
		Gamma="\u0393";
                epsilon ="\u03b5";
            g.setFont(normalfont);

	    g.clearRect(0,0,getSize().width,getSize().height);
	    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);
            
            g.setColor(Color.black);
            g.drawRect(0,0,getSize().width-1,getSize().height-1);
            
            g.setFont(normalfont);
            //g.drawString("= ",115,60);  JAN
            g.drawString("= ",state.s115,state.s85);
            g.drawString("= ",state.s115,state.s110);
            g.drawString("= ",state.s115,state.s135);
            g.drawString("= ",state.s115,state.s160);
            
            // JAN'S changes:
            //g.setFont(smallfont);
            //g.setColor(Color.blue.darker());
            //g.drawString("Characteristic",15,54);
            //g.drawString("Impedance",15,65);
            //MaestroG.subscripter("Z","0","",g,12,95,60);
            //
            //g.setFont(smallfont);
            //g.setColor(Color.red.darker());
            //g.drawString("Attenuation",15,85);
            //MaestroG.subscripterSymFirst2(""+alpha,"","",g,14,97,85);

            g.setFont(newfont2);
            g.setColor(Color.red.darker());
            g.drawString("Characteristic",state.s12,state.s79);
            g.drawString("Impedance",state.s12,state.s90);
            MaestroG.subscripter("Z","0","",g,state.font12,state.s95,state.s85);
            
            g.setFont(newfont2);
            g.setColor(Color.blue.darker());
            g.drawString("Frequency",state.s12,state.s110);
            //MaestroG.subscripterIT("f","o","",g,14,97,110);
            MaestroG.subscripterIT("f","","",g,state.font14,state.s97,state.s110);
            
            g.setFont(newfont2);
            g.setColor(Color.red.darker());
            g.drawString("Relative",state.s12,state.s129);
            g.drawString("Permittivity",state.s12,state.s140);
            MaestroG.subscripterSymFirst2(""+epsilon,"r","",g,state.font14,state.s97,state.s135);
            
            g.setFont(newfont2);
            g.setColor(Color.blue.darker());
            //g.setColor(Color.black);
            g.drawString("Line Length",state.s12,state.s160);
            MaestroG.subscripterIT("l","","",g,state.font16,state.s100,state.s160);  
            MaestroG.subscripterIT("l","","",g,state.font16,state.s100,state.s160); // repaint - washed out  
            g.setFont(newfont2);
            
            g.setColor(Color.red.darker());
            // Border bor text1[0]
            g.drawRect(state.s130-1,state.s70-1,state.s80+2,state.s20+2);
            // Border bor text1[1]
            g.drawRect(state.s130-1,state.s95-1,state.s80+2,state.s20+2);
            // Border bor text1[2]
            g.drawRect(state.s130-1,state.s120-1,state.s80+2,state.s20+2);
            // Border bor text1[3]
            g.drawRect(state.s130-1,state.s145-1,state.s80+2,state.s20+2);
            // Border bor b1
            g.drawRect(state.s130-1,state.s180-1,state.s80+2,state.s20+2);
            
            //g.drawRect(state.s127,state.s67,state.s85,state.s125);
                         
	}
	
	public void actionPerformed(ActionEvent evt){
		if(evt.getSource() == b1){
		  for(int i=0;i<indexsize;i++){
		  	DValue[i]=Double.valueOf(text1[i].getText()).doubleValue();
                  }
		}
	}
	
        public double getValue(int i){
		return DValue[i];	
        }

        public synchronized void setValue(double D,int i){
		text1[i].setText(String.valueOf(D));
	}
	
	public synchronized void setStrings(String nome[], String unidade[]){
		for(int i=0;i<nome.length;i++){
			this.nome[i]=nome[i];
			this.unidade[i]=unidade[i];
			lab1[i].setText(nome[i]);
			lab2[i].setText(unidade[i]);
		}
		
	}
	
}

