// Instructions.java

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;

public class Instructions extends Panel {
    private static final Color bgcolor = new Color(255,255,250);
    public TextField epsilon;
    private Paint paint;
    private Image im;
    private Graphics buf;
    public Button bupdate;
    DipoleAnt ant;
    
    private BufferedImage bullet;
    
    public Instructions(DipoleAnt ant){
	super();
        this.ant = ant;
	setLayout(null);
	
	getImages();
	setBackground(bgcolor);
	bupdate = new Button("CLOSE");
        bupdate.setFont(new Font("SanSerif",Font.BOLD,ant.font12));
        bupdate.setBackground(new Color(240,240,255));
	add(bupdate);
        //int buttonx = 410;
        //int buttony = 440;
        int buttonx = ant.s500;
        int buttony = ant.s300 + ant.s35;
        int buttonwide = ant.s70;
        int buttonheight = ant.s27;
        
        bupdate.setBounds(buttonx,buttony,buttonwide,buttonheight);	
        Panel ps7 = new Panel();
	    ps7.setBackground(Color.lightGray);
	    add(ps7);
	    ps7.setBounds(buttonx-1,buttony-1,buttonwide+2,buttonheight+2);
	    
	Panel ps8 = new Panel();
	    ps8.setBackground(Color.black);
	    add(ps8);
	    ps8.setBounds(buttonx-2,buttony-2,buttonwide+4,buttonheight+4);	
    }


    private void getImages() {
        // read in the bullet image, because CHEERPJ does not render this
	//  symbol in any font!  (java to javascript converter)
        try {
            //bullet = ImageIO.read(getClass().getResource("bullet.png"));
	    BufferedImage img =
		ImageIO.read(getClass().getResource("bullet.png"));
	    int targetWidth = (int) (ant.sfactor * img.getWidth());
	    int targetHeight = (int) (ant.sfactor * img.getHeight());
	    bullet =
		new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB);
	    Graphics2D graphics2D = bullet.createGraphics();
	    graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
					RenderingHints.VALUE_INTERPOLATION_BILINEAR);
	    graphics2D.drawImage(img, 0, 0, targetWidth, targetHeight, 0, 0,
				 img.getWidth(), img.getHeight(), null);
	    graphics2D.dispose();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public void paint(Graphics g){
            
	    if(im == null){
		im = createImage(getSize().width,getSize().height);
		buf = im.getGraphics();
		drawCanvas(buf);
	    }
	    else{
		drawCanvas(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 clear(){
	    this.getGraphics().clearRect(0,0,getSize().width,getSize().height);
	    repaint();
    }
    
    public void drawCanvas(Graphics g){
        FontMetrics fm;
        
        Graphics2D g2d = (Graphics2D)g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);        
        g.clearRect(0,0,getSize().width-1,getSize().height-1);
        g.setColor(Color.black);
        int xshift = ant.s150; //ant.s35;
        int xshift2 = ant.s150;
        
        g.setFont(new Font("SanSerif",Font.BOLD,ant.font16));
        g.drawString("Instructions", ant.s15,ant.s25);
        String s;
        g.setFont(new Font("SanSerif",Font.PLAIN,ant.font14));
        s = "This module  displays  the  far-field patterns  of  electric field  "+STR.BOLD+"E"+STR.ENDBOLD+"  and  power density  "+STR.BOLD+"S"+STR.ENDBOLD+STR.SUB+"av"+STR.ENDSUB;
        int nextX = STR.displayString(s,g,xshift2,ant.s25);
        
        s = "in elevation (\u03b8-plane)"+"  and azimuth (\u03c6-plane)  for a linear dipole oriented along the z-axis.  ";
        nextX = STR.displayString(s,g,xshift2,ant.s45);
        
        s = "Under far-field approximation, electric and magnetic field have the same radiation pattern.";
        nextX = STR.displayString(s,g,xshift2,ant.s65);

        int deltaY = ant.s20;
        int newY = ant.s100+deltaY;
        int myX = xshift;
        int newX = xshift + ant.s300+ant.s70;
        
        //INPUT
        g.setColor(Color.red);
        g.setFont(new Font("SanSerif",Font.BOLD,ant.font15));
        g.drawString("Input", myX,newY-ant.s10);
        
        g.setColor(Color.black);
        g.setFont(new Font("SanSerif",Font.PLAIN,ant.font14));
        fm = g.getFontMetrics();
        
        //s = "\u2022 Dipole length";
        //nextX = STR.displayString(s,g,myX,newY+deltaY);
	g.drawImage(bullet,myX,newY+deltaY-bullet.getHeight(),this);
        s = " Dipole length";
        nextX = STR.displayString(s,g,myX+bullet.getWidth(),newY+deltaY);
	
        //s = "\u2022 Maximum dipole current amplitude ";
        //nextX = STR.displayString(s,g,myX,newY+2*deltaY);
	g.drawImage(bullet,myX,newY+2*deltaY-bullet.getHeight(),this);
        s = " Maximum dipole current amplitude ";
        nextX = STR.displayString(s,g,myX+bullet.getWidth(),newY+2*deltaY);
	
        //int xx = fm.stringWidth(s) + 1;
	int xx = bullet.getWidth() + fm.stringWidth(s) + 1;
        
        g.setFont(new Font("Serif",Font.BOLD,ant.font16));
        s = ""+STR.BOLD+"I"+STR.ENDBOLD+STR.SUB+"0"+STR.ENDSUB;
        nextX = STR.displayString(s,g,myX+xx,newY+2*deltaY);
        
        //ASSUMPTIONS
        g.setColor(Color.red);
        g.setFont(new Font("SanSerif",Font.BOLD,ant.font15));
        g.drawString("Assumptions", myX,newY+4*deltaY);
        
        g.setColor(Color.black);
        g.setFont(new Font("SanSerif",Font.PLAIN,ant.font14));
        //s = "\u2022 Far-field approximation";
        //nextX = STR.displayString(s,g,myX,newY+5*deltaY);
	g.drawImage(bullet,myX,newY+5*deltaY-bullet.getHeight(),this);
        s = " Far-field approximation";
        nextX = STR.displayString(s,g,myX+bullet.getWidth(),newY+5*deltaY);
	
        //s = "\u2022 Free space propagation";
        //nextX = STR.displayString(s,g,myX,newY+6*deltaY);
	g.drawImage(bullet,myX,newY+6*deltaY-bullet.getHeight(),this);
        s = " Free space propagation";
        nextX = STR.displayString(s,g,myX+bullet.getWidth(),newY+6*deltaY);
	
        //s = "\u2022 Negligible gap between dipole wires";
        //nextX = STR.displayString(s,g,myX,newY+7*deltaY);
	g.drawImage(bullet,myX,newY+7*deltaY-bullet.getHeight(),this);
        s = " Negligible gap between dipole wires";
        nextX = STR.displayString(s,g,myX+bullet.getWidth(),newY+7*deltaY);
	
        //s = "\u2022 Ideal 1D thin wires";
        //nextX = STR.displayString(s,g,myX,newY+8*deltaY);
	g.drawImage(bullet,myX,newY+8*deltaY-bullet.getHeight(),this);
        s = " Ideal 1D thin wires";
        nextX = STR.displayString(s,g,myX+bullet.getWidth(),newY+8*deltaY);
	
        //s = "\u2022 Symmetric dipole ";
        //nextX = STR.displayString(s,g,myX,newY+9*deltaY);
	g.drawImage(bullet,myX,newY+9*deltaY-bullet.getHeight(),this);
        s = " Symmetric dipole ";
        nextX = STR.displayString(s,g,myX+bullet.getWidth(),newY+9*deltaY);
        
        //OUTPUT
        g.setColor(Color.red);
        g.setFont(new Font("SanSerif",Font.BOLD,ant.font15));
        g.drawString("Displayed Information", newX,newY-ant.s10);
        g.setColor(Color.black);
        
        g.setFont(new Font("SanSerif",Font.PLAIN,ant.font14));
        newY += ant.s20;
        //s = "\u2022 Radiation patterns";
        //nextX = STR.displayString(s,g,newX,newY);
	g.drawImage(bullet,newX,newY-bullet.getHeight(),this);
        s = " Radiation patterns";
        nextX = STR.displayString(s,g,newX+bullet.getWidth(),newY);
	
        //s = "\u2022 Total radiated power";
        //nextX = STR.displayString(s,g,newX,newY+deltaY);
	g.drawImage(bullet,newX,newY+deltaY-bullet.getHeight(),this);
        s = " Total radiated power";
        nextX = STR.displayString(s,g,newX+bullet.getWidth(),newY+deltaY);
	
        //s = "\u2022 Radiation resistance";
        //nextX = STR.displayString(s,g,newX,newY+2*deltaY);
	g.drawImage(bullet,newX,newY+2*deltaY-bullet.getHeight(),this);
        s = " Radiation resistance";
        nextX = STR.displayString(s,g,newX+bullet.getWidth(),newY+2*deltaY);
	
        //s = "\u2022 Directivity";
        //nextX = STR.displayString(s,g,newX,newY+3*deltaY);
	g.drawImage(bullet,newX,newY+3*deltaY-bullet.getHeight(),this);
        s = " Directivity";
        nextX = STR.displayString(s,g,newX+bullet.getWidth(),newY+3*deltaY);
	
        drawCopyRight(g);

        //MaestroG.useBiggerFont = saveOldFlag;

    }


    public void drawCopyRight(Graphics g) {
        int deltaY = ant.s20;
        int startingY = getSize().height - ant.s75;
        int startingX = 0;
        FontMetrics fm;
        g.setColor(Color.black);
        g.setColor(Color.black);
        //g.setFont(normalfont14);
        
        g.setFont(new Font("SanSerif",Font.PLAIN,ant.font14));
        fm = g.getFontMetrics();
        g.drawString("Application Design: Umberto Ravaioli",
                     startingX+ant.s15,startingY+deltaY+ant.s5);
        
        String s = "Interactive Java"+STR.SUP+"TM"+STR.ENDSUP+
            " platform:  www.amanogawa.com";
        int nextX = STR.displayString(s,g,startingX+ant.s15,startingY+2*deltaY+ant.s5);
        int lineLength = fm.stringWidth("Interactive JavaTM platform:  www.amanogawa.com");
        lineLength+= ant.s10;

        g.drawString("All Rights Reserved",startingX+ant.s15,startingY+3*deltaY+ant.s5);
        g.drawLine(startingX,startingY+ant.s5,
                   startingX+ant.s15+lineLength+ant.s10,startingY+ant.s5);
        g.drawLine(startingX+ant.s15+lineLength+ant.s10,startingY+ant.s5,
                   startingX+ant.s15+lineLength+ant.s10,startingY+4*deltaY);
    }

//----------------------------------------------------------------------------------------    
}//End
    

