package stiftUndCo;

// EreignisAnwendung.java

import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;

/**
@author Georg Dick , Erg&auml;nzung spezialKlick/Mac Horst Hildebrecht
@version 25.8.98

 */
public  class EreignisAnwendung extends Anwendung implements
Ereignisbearbeitung,Runnable,KeyListener, MouseListener,
MouseMotionListener,WindowListener,ComponentListener{

	private Thread sonstigeEreignisse=null;
  private boolean istMac = System.getProperty("os.name").equals("Mac OS");

	public  EreignisAnwendung(){
		this(400,300,"");
	}

	public EreignisAnwendung (int breite, int hoehe, String s)
	{
	  	super(breite,hoehe,s);
      this.bildschirm().setzeEreignisbearbeitung(this);
	}

  public void fuehreAus(){
  	bildschirm.addMouseListener(this);
		bildschirm.addMouseMotionListener(this);
		bildschirm.addKeyListener(this);
		bildschirm.addWindowListener(this);
		bildschirm.addComponentListener(this);
		if (bildschirm.laeuftInApplet())
		{
			sonstigeEreignisse=new Thread(this);
		 	sonstigeEreignisse.start();
		}
		else
		{
			bildschirm.addAndereEreignisseListener(this);
		}
  }
	public void f\u00fchreAus()
	{
	   this.fuehreAus();
	}
	public void init(){}
	public  void bearbeiteAndereEreignisse(){}
	public  void bearbeiteMausBewegt(int pWohinH, int pWohinV){}
	public  void bearbeiteMausGezogen(int pWohinH, int pWohinV){}
	public  void bearbeiteMausDruck(int pWoH, int pWoV){}
	public  void bearbeiteMausDruckRechts(int pWoH, int pWoV){}
	public  void bearbeiteMausLos(int pWoH, int pWoV){}
	public  void bearbeiteMausLosRechts(int pWoH, int pWoV){}
	public  void bearbeiteMausKlick(int pWoH, int pWoV){}
	public  void bearbeiteSpezialKlick(int pWoH, int pWoV){}
	public void bearbeiteMausKlickRechts(int pWoH, int pWoV){}
	public void bearbeiteDoppelKlick(int pWoH, int pWoV){}
	public void bearbeiteTaste(char pZeichen){}
	public void bearbeiteFensterBewegt(){}
  public void bearbeiteFensterNeuGezeichnet(){}
	public void beenden()
	{
		this.gibFrei();
	}
	
	public void gibFrei()
	{	
		if (sonstigeEreignisse != null)
		{   
			sonstigeEreignisse.stop();
			sonstigeEreignisse=null;
		}
		super.gibFrei();
	}
	
	
	public void run()
	{
	 while (true){
				 try 
			{
				this.bearbeiteAndereEreignisse();
			}
			catch (Exception e)
			{}
		

		  try
		{
			sonstigeEreignisse.sleep(30);
		}
		catch (Exception e)
		{
		 sonstigeEreignisse.stop();
		}
		}
	}
	

    public void keyTyped(KeyEvent e) 	{}
	public void keyPressed(KeyEvent e)
	{ // Hier gegebenenfalls Puffer aufbauen !
	  char aktuellesZeichen= e.getKeyChar();

	 /*if ((aktuellesZeichen==KeyEvent.CHAR_UNDEFINED)
		 && (e.getKeyCode() != KeyEvent.VK_UNDEFINED))
	 {*/	  
		 switch (e.getKeyCode())
		 {
	      case 27:aktuellesZeichen=Zeichen.ESC;break;
	      case KeyEvent.VK_DOWN:aktuellesZeichen=Zeichen.PFEILUNTEN;break;	 
	      case KeyEvent.VK_END: aktuellesZeichen=Zeichen.ENDE	;break;
	      case KeyEvent.VK_F1: aktuellesZeichen=Zeichen.F1	;break;
	      case KeyEvent.VK_F2: aktuellesZeichen=Zeichen.F2	;break;
	      case KeyEvent.VK_F3: aktuellesZeichen=Zeichen.F3	;break;
	      case KeyEvent.VK_F4: aktuellesZeichen=Zeichen.F4	;break;
	      case KeyEvent.VK_F5: aktuellesZeichen=Zeichen.F5	;break;
	      case KeyEvent.VK_F6: aktuellesZeichen=Zeichen.F6	;break;
	      case KeyEvent.VK_F7: aktuellesZeichen=Zeichen.F7	;break;
	      case KeyEvent.VK_F8: aktuellesZeichen=Zeichen.F8	;break;
	      case KeyEvent.VK_F9: aktuellesZeichen=Zeichen.F9	;break;
	      case KeyEvent.VK_F10: aktuellesZeichen=Zeichen.F10	;break;
	      case KeyEvent.VK_F11: aktuellesZeichen=Zeichen.F11	;break;
	      case KeyEvent.VK_F12: aktuellesZeichen=Zeichen.F12	;break;
	      case KeyEvent.VK_HOME:aktuellesZeichen=Zeichen.POS1;break;	
	      case KeyEvent.VK_LEFT:aktuellesZeichen=Zeichen.PFEILLINKS;break;	
	      case KeyEvent.VK_PAGE_DOWN:aktuellesZeichen=Zeichen.BILDUNTEN;break;	
	      case KeyEvent.VK_PAGE_UP:aktuellesZeichen=Zeichen.BILDAUF;break;	
	      case KeyEvent.VK_RIGHT:aktuellesZeichen=Zeichen.PFEILRECHTS;break;	
	      case KeyEvent.VK_UP:aktuellesZeichen=Zeichen.PFEILOBEN;break;
		}
		 this.bearbeiteTaste(aktuellesZeichen);	
	}

    
    public void keyReleased(KeyEvent e){}
    public void mouseClicked(MouseEvent e){
		  if (! e.isMetaDown() ) {
			if (e.getClickCount()>1) {
				this.bearbeiteDoppelKlick(e.getX()-offsetx,e.getY()-offsety);
				if (istMac) this.bearbeiteSpezialKlick(e.getX()-offsetx,e.getY()-offsety);
				}
			else this.bearbeiteMausKlick(e.getX()-offsetx,e.getY()-offsety);}
		else
			{this.bearbeiteMausKlickRechts(e.getX()-offsetx,e.getY()-offsety);
			 this.bearbeiteSpezialKlick(e.getX()-offsetx,e.getY()-offsety);}
	}

    public void mousePressed(MouseEvent e){
		if (! e.isMetaDown() )
		{ this.bearbeiteMausDruck(e.getX()-offsetx,e.getY()-offsety);}
		else
		{ this.bearbeiteMausDruckRechts(e.getX()-offsetx,e.getY()-offsety);}
	}
 
     public void mouseReleased(MouseEvent e){
 		if (! e.isMetaDown() )
		{ this.bearbeiteMausLos(e.getX()-offsetx,e.getY()-offsety);
		}
		else
		{ this.bearbeiteMausLosRechts(e.getX()-offsetx,e.getY()-offsety);}
	}
   public void mouseEntered(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
    public void mouseDragged(MouseEvent e){
	  this.bearbeiteMausBewegt(e.getX()-offsetx,e.getY()-offsety);
	  this.bearbeiteMausGezogen(e.getX()-offsetx,e.getY()-offsety);

	}
    public void mouseMoved(MouseEvent e){
	this.bearbeiteMausBewegt(e.getX()-offsetx,e.getY()-offsety);
	}
	public void windowActivated (WindowEvent e) {}
	public void windowClosed(WindowEvent e)	{}
	public void windowDeactivated(WindowEvent e){}
	public void windowDeiconified(WindowEvent e){}
	public void windowIconified(WindowEvent e){}
	public void windowOpened(WindowEvent e){}
	public void windowClosing(WindowEvent e){}
	public void componentShown(ComponentEvent e){}
	public void componentResized(ComponentEvent e){}
	public void componentHidden(ComponentEvent e){}
	public void componentMoved(ComponentEvent e)
  	{this.bearbeiteFensterBewegt();}
	
}
