/*
 * "Grundkurs Programmieren in Java - Band 2 (2. Auflage, 2006)I"
 * 2003-2006, Carl Hanser Verlag
 * Loesungsvorschlag zu Aufgabe 9.6 (Version 2.0)
 * (c) 2003-2006 D. Ratz, J. Scheffler, D. Seese, J. Wiesenberger
 *
 */

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class DrehPanel2 extends JPanel {
  
  private JButton linksButton, rechtsButton, streckeButton, 
          dreieckButton, schwerDreieckButton;
          
  public static final double SCHRITTWEITE = Math.PI / 60.0;

  private GeoObjekt drehObjekt;
  
  public DrehPanel2() {
    drehObjekt = erzeugeStrecke();
    
    setLayout(new FlowLayout() );
    setOpaque(false);

    add(linksButton   = new JButton("Links"));
    add(rechtsButton  = new JButton("Rechts"));
    add(streckeButton = new JButton("Strecke"));
    add(dreieckButton = new JButton("Dreieck"));
    add(schwerDreieckButton = new JButton("Schwer-Dreieck") );
    
    // Event-Handler
    linksButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        drehObjekt.drehen(-SCHRITTWEITE);
        repaint();
      }
    });
    
    rechtsButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        drehObjekt.drehen(SCHRITTWEITE);
        repaint();
      }
    });
    
    streckeButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        drehObjekt = erzeugeStrecke();
        repaint();
      }
    });
    
    dreieckButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        drehObjekt = erzeugeDreieck();
        repaint();
      }
    });
    
    schwerDreieckButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        drehObjekt = erzeugeSchwerDreieck();
        repaint();
      }
    });
  } 
  
  public GeoObjekt erzeugeStrecke() {
    return new Strecke(new Punkt(0,0), new Punkt(100,0) );
  }
  
  public GeoObjekt erzeugeDreieck() {
    return new Dreieck(new Punkt(0,0), new Punkt(100,0), new Punkt(50, -66));
  }
  
  public GeoObjekt erzeugeSchwerDreieck() {
    return new SchwerDreieck(new Punkt(0, 0),
    new Punkt(130,0),
    new Punkt(65, -80) );
  }
  
  public void paintComponent(Graphics g) {
    super.paintComponent(g);
    drehObjekt.zeichnen(g, this.getWidth()/2, this.getHeight()/2);
  }
} 
