import primitives.frames.*;
import primitives.machines.*;
import java.awt.*;
import java.awt.event.*;
import primitives.geomtry.*;
public class TranslatorApplet extends Frames implements MouseMotionListener{
	FunctionalLinkage[] translators;
	public void init(){
		super.init();
		for(int i=0;i<frames.length;i++)
			frames[i].drawArea.addMouseMotionListener(this);
	}
	public void start()	{
			run = false;
		translators = new FunctionalLinkage[frames.length] ;
		Dimension d = frames[0].drawArea.getSize();
		int r = Math.min(d.width,d.height)/2-10;
		Point p = new Point(frames[0].getSize().width,frames[0].getSize().height);
		switch(getParam("appletTag",0)){
		case 0:translators[0] = new Translator1(new Point(p.x/2,p.y/2),new Coordinate(p.x/3,0));break;
		case 1:translators[0] = new ScalarMultiplier1(new Rectangle(0,0,p.x,p.y),2,true);break;
		case 2:translators[0] = new Adder(new Rectangle(0,0,p.x,p.y));break;
		case 3:translators[0] = new Inversor1(new Rectangle(p.x/2,p.y/2,p.x/2,p.y/2));break;
		case 4:translators[0] = new Multiplier(new Rectangle(p.x/4,p.y/4,p.x/2,p.y/2));
			frames[0].drawArea.setBackground(Color.lightGray);break;
		case 5:translators[0] = new ScalarMultiplier1(new Rectangle(0,0,p.x,p.y),0.5,true);
			translators[1] = new ScalarMultiplier1(new Rectangle(0,0,p.x,p.y),-1,true);
			frames[1].drawArea.setCurrentObject(translators[1]);break;
		case 6:translators[0] = new ScMultForZero(new Rectangle(p.x/8,p.y/8,p.x*3/4,p.y*3/4),2.0);break;
		}
		frames[0].drawArea.setCurrentObject(translators[0]);
		for(int i=0;i<labels.length;i++)
			labels[i].setText(translators[i].getActiveStr(-1));
	}
	int activeText;
	int oldText = -2;
        int laps = 0;
	public void mouseMoved(MouseEvent m){
	  CanvasArea canvas = (CanvasArea)(m.getComponent());
		int i=1;
		if (canvas==frames[0].drawArea)i=0;
		oldText = activeText;
		activeText = translators[i].mouseMoved(m);
		labels[i].setText(translators[i].getActiveStr(activeText));
		if(oldText!=activeText)frames[i].drawArea.repaint();
		if(laps>50) System.gc();
		laps = (laps+1)%50;
	}
	public void mouseDragged(MouseEvent m){
	        laps++;
		CanvasArea canvas = (CanvasArea)(m.getComponent());
		int i=1;
		if (canvas==frames[0].drawArea)i=0;
		try{
			translators[i].mouseDragged(m);
			frames[i].drawArea.repaint();
			labels[i].setText(translators[i].getActiveStr(activeText));
		}catch(MachineException e){}
	}
	public void stop(){
		translators = null;
		super.stop();
	}
}
