import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.net.URL;

//Author:H.Hakan GENÇ - 2001-2002 - Turkiye
//GSM: +905052610452, E-mail:hasanhakangenc@hotmail.com

public class diyot2 extends Applet implements Runnable, ItemExpandListener
{
	Image winBellek, mevcutResim, diyot,diyotacik,hareketliResim[] = new Image[11];
	Graphics gBellek;
	int sonsira;
	boolean ilk = true, acik_kapali = true;
	String zeminRenk, onRenk;
	
	AnahtarKomponenti anahtar=new AnahtarKomponenti();
	Slider kaydirac;
	
	Thread kosucu;
	
	public void init(){
		zeminRenk = getParameter("zeminrenk");
		onRenk = getParameter("onrenk");
		
		if ((zeminRenk == null) ||
			(onRenk == null))
		{
			zeminRenk = "f0f0f0";
			onRenk = "000000";
		}
		
		setLayout(new FlowLayout());
		setBackground(stringToColor(zeminRenk));
		setForeground(stringToColor(onRenk));
		
		for (int i=0;i<11;i++){
			hareketliResim[i] = getImage(getCodeBase(),"diyotyol" + (i+1) + ".jpg");
		}
		mevcutResim = hareketliResim[0];
		diyot = getImage(getCodeBase(),"diyotkapali.jpg");
		diyotacik = getImage(getCodeBase(),"diyotacik.jpg");
		winBellek = createImage(this.getSize().width, this.getSize().height);
		gBellek = winBellek.getGraphics();
		
		anahtar.addExpandListener(this);
		kaydirac = new Slider(5100,100,700,5100,anahtar);
		
		Panel kontrol = new Panel();
		
		kontrol.setLayout(new BorderLayout());
		kontrol.add(kaydirac,"North");
		
		setLayout(new BorderLayout());
		add(kontrol,"South");		
	}
	
	private Color stringToColor(String paramDeger)
	{
		int red;
		int green;
		int blue;

		red = (Integer.decode("0x" + paramDeger.substring(0,2))).intValue();
		green = (Integer.decode("0x" + paramDeger.substring(2,4))).intValue();
		blue = (Integer.decode("0x" + paramDeger.substring(4,6))).intValue();

		return new Color(red,green,blue);
	}
	
	public void itemExpandStateChanged(ItemExpandEvent event){
		ItemExpandable ie=event.getItemExpandable();
		Object[] items=ie.getExpandedItems();
	
		if(items!=null) acik_kapali = false;
		else acik_kapali = true;
	}
	
	public void start(){
		if (kosucu==null){	
			kosucu = new Thread(this);
			kosucu.start();
		}
	}
	
	public void stop(){
		kosucu = null;
	}
	
	public void run(){
		while(true){
			if((kaydirac.akisKontrol() && acik_kapali) || ilk){
				start();
				for(int i=0;i<11;i++){
					try{
						Thread.sleep(250);
					}
					
					catch(InterruptedException e){}
					mevcutResim = hareketliResim[i];
					if(!kaydirac.akisKontrol() || !acik_kapali){
						if(!kaydirac.akisKontrol() && acik_kapali){
							mevcutResim = diyot;
					
							stop();
						}
						else if(!kaydirac.akisKontrol() && !acik_kapali){
							mevcutResim = diyotacik;
				
							stop();
						}
						else if(!acik_kapali){
							mevcutResim = diyotacik;
						
							stop();
						}
					}
					repaint();
				}
			}
			else if(!kaydirac.akisKontrol() && !acik_kapali){
				mevcutResim = diyotacik;
				repaint();
			}
			ilk = false;
		}
	}
	
	public void paint(Graphics g){
		
		gBellek.draw3DRect(0,0,this.getSize().width,this.getSize().height,true);
		gBellek.setColor(this.getBackground());
		gBellek.drawImage(mevcutResim,0,0,this);
		g.drawImage(winBellek,0,0,this);
		
	}
	
	public final void update(Graphics g){
		paint(g);
	}
}

class CerceveliPanel extends Panel{
	public Insets getInsets(){
		return new Insets(2,2,2,2);
	}
	
	public Dimension getPreferredSize(){
		return new Dimension(200,140);
	}
	
	public void paint(Graphics g){
		setBackground(Color.lightGray);
		Dimension boyut = getSize();
		g.setColor(Color.black);
		g.drawRect(0,0,boyut.width-1,boyut.height-1);
		
		g.setColor(Color.lightGray);
		g.draw3DRect(1,1,boyut.width-3,boyut.height-3,true);
	}
}

class Slider extends CerceveliPanel implements ItemExpandListener{
	
	float gerilim,ilkDeger, akim, ilkAkim;
	String akimStringi, akimDizisi="";
	boolean akim_akisi = true;
	
	AnahtarKomponenti anahtar = new AnahtarKomponenti();
	
	Scrollbar scrollbar;
	Label akimDegeri,baslik,gerilimDegeri,baslik2;
	
	Panel panel1 = new Panel();
	Panel panel2 = new Panel();
	
	public Slider(int ilkDeger,int visible, int min, int max, AnahtarKomponenti anahtar){
		anahtar.addExpandListener(this);
		
		akim=5;
		baslik = new Label("Gerilim (Volts): ");
		baslik.setForeground(Color.red);
		
		baslik2 = new Label("Akım (miliAmpers): ");
		baslik2.setForeground(Color.red);
		
		gerilimDegeri=new Label("5.0  ");
		gerilimDegeri.setFont(new Font("TimesRoman",Font.BOLD,16));
		gerilimDegeri.setForeground(Color.getHSBColor((float)0.4,(float)0.5,(float)0.5));
		
		akimDegeri=new Label("5.0     ");
		akimDegeri.setFont(new Font("TimesRoman",Font.BOLD,16));
		akimDegeri.setForeground(Color.getHSBColor((float)0.4,(float)0.5,(float)0.5));
		
		scrollbar=new Scrollbar(Scrollbar.HORIZONTAL,ilkDeger,visible,min,max);
		
		panel1.setLayout(new FlowLayout(FlowLayout.LEFT));
		panel1.add(baslik);
		panel1.add(gerilimDegeri);
		
		panel2.setLayout(new FlowLayout(FlowLayout.LEFT));
		panel2.add(baslik2);
		panel2.add(akimDegeri);
		
		Panel anahtarPaneli = new Panel();
		anahtarPaneli.setLayout(new FlowLayout(FlowLayout.CENTER));
		anahtarPaneli.add(new Label("ANAHTAR"));
		anahtarPaneli.setFont(new Font("Courier",Font.BOLD,16));
		anahtarPaneli.setForeground(Color.red);
		anahtarPaneli.add(anahtar);
		
		Panel degerler = new Panel();
		degerler.add(panel1);
		degerler.add(panel2);
		
		Panel hepsi = new Panel();
		hepsi.setLayout(new BorderLayout());
		hepsi.add(degerler,"North");
		hepsi.add(anahtarPaneli,"Center");
		
		setBackground(Color.lightGray);
		setLayout(new BorderLayout());
		add(hepsi,"North");
		add(scrollbar,"Center");
		
		scrollbar.addAdjustmentListener(new AdjustmentListener(){
			public void adjustmentValueChanged(AdjustmentEvent olay){
				if(akim_akisi){
					gerilim = scrollbar.getValue();
					if((gerilim/1000) < 1.56){
						gerilimDegeri.setForeground(Color.red);
						akimDegeri.setForeground(Color.red);
					}
					else if((gerilim/1000) >= 1.56){
						gerilimDegeri.setForeground(Color.getHSBColor((float)0.4,(float)0.5,(float)0.5));
						akimDegeri.setForeground(Color.getHSBColor((float)0.4,(float)0.5,(float)0.5));
					}
					gerilimDegeri.setText(Double.toString(gerilim/1000));
					gerilimDegeri.setFont(new Font("TimesRoman",Font.BOLD,16));
					
					akim = (float)((gerilim/1000-0.7)/0.86);
					akimStringi = Float.toString(akim);
					akimDegeri.setText(akimStringi);
				}
				else{
					akim=0;
					if((gerilim/1000) < 1.56){
						gerilimDegeri.setForeground(Color.red);
						akimDegeri.setForeground(Color.red);
					}
					else if((gerilim/1000) >= 1.56){
						gerilimDegeri.setForeground(Color.getHSBColor((float)0.4,(float)0.5,(float)0.5));
						akimDegeri.setForeground(Color.getHSBColor((float)0.4,(float)0.5,(float)0.5));
					}
					gerilim = scrollbar.getValue();
					gerilimDegeri.setText(Double.toString(gerilim/1000));
					gerilimDegeri.setFont(new Font("TimesRoman",Font.BOLD,16));
				}
				akisKontrol();
			}
		});
		
	scrollbar.setBlockIncrement(100);
	scrollbar.setUnitIncrement(100);
	scrollbar.setMaximum(5100);
	scrollbar.setMinimum(700);
	}
	
	public boolean akisKontrol(){
		if (akim==0){
			return false;
		}
		else return true;
	}
	public void itemExpandStateChanged(ItemExpandEvent event){
		
		ItemExpandable ie=event.getItemExpandable();
		Object[] items=ie.getExpandedItems();
		if(items!=null){
			akimDegeri.setText("0.0  ");
			akim_akisi = false;
		}
		else{
	//		akimDizisi = "";
			akim_akisi = true;
			gerilim = scrollbar.getValue();
		if((gerilim/1000) < 1.56){
			gerilimDegeri.setForeground(Color.red);
			akimDegeri.setForeground(Color.red);
		}
		else if((gerilim/1000) >= 1.56){
			gerilimDegeri.setForeground(Color.getHSBColor((float)0.4,(float)0.5,(float)0.5));
			akimDegeri.setForeground(Color.getHSBColor((float)0.4,(float)0.5,(float)0.5));
		}
		akim = (float)((gerilim/1000-0.7)/0.86);
		akimStringi = Float.toString(akim);
		akimDegeri.setText(akimStringi);
		}
	}
}