import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;

/** Diese Klasse ermoeglicht dem Benutzer (in Verbindung
  * mit dem Einstellungs-Dialog) das Setzen des
  * Darstellung (analog/digital + Farben).
  **/
public class SetzeDarstellung extends JPanel 
  implements Einstellungen.Einstellung
{
  
  /** Diese SwingUhr wird mit den Einstellungen beeinflusst */
  private SwingUhr uhr;

  /** Dieses Fenster muss beim Wechsel des Look and feel
    * aktualisiert werden.
    **/
  private Window uhrenFenster;

  /** RadioButton: analoge Anzeige */
  private JRadioButton analog;
  
  /** RadioButton: digitale Anzeige */
  private JRadioButton digital;
  
  /** ColorChooser fuer den Vordergrund */
  private JColorChooser foreground;
  
  /** ColorChooser fuer den Hintergrund */
  private JColorChooser background;

  /** Jeder RadioButton steht fuer ein Look and feel */
  private JRadioButton[] buttons;
  
  /** Konstruktor - hier wird das Layout gesetzt */
  public SetzeDarstellung(SwingUhr uhr,Window uhrenFenster) {
    // Initialisiere die Instanzvariablen.
    this.uhr = uhr;
    this.uhrenFenster = uhrenFenster;
    analog = new JRadioButton("analog");
    digital = new JRadioButton("digital");
    foreground = new JColorChooser(uhr.getForeground());
    background = new JColorChooser(uhr.getBackground());
    // Erzeuge ein inneres Panel fuer die RadioButtons
    JPanel buttons = new JPanel();
    buttons.setLayout(new GridLayout(1,2));
    buttons.add(analog);
    buttons.add(digital);
    ButtonGroup group = new ButtonGroup();
    group.add(analog);
    group.add(digital);
    if (uhr.isAnalog())
      analog.setSelected(true);
    else
      digital.setSelected(true);
    // Erzeuge ein JTabbedPane fuer die ColorChooser
    JTabbedPane colors = new JTabbedPane();
    colors.addTab("Vordergrund",foreground);
    colors.addTab("Hintergrund",background);
    // Fuege Rahmen um die inneren Panels ein
    buttons.setBorder(new TitledBorder("Darstellungsform"));
    colors.setBorder(new TitledBorder("Farbgebung"));
    // Fuege beide Panels in dieses Panel ein
    setLayout(new BorderLayout());
    add(buttons,BorderLayout.NORTH);
    add(colors,BorderLayout.CENTER);
  }
  
  /** Gibt die grafische Komponente zurueck, die im
    * Dialog dargestellt werden soll.
    **/
  public Component getComponent() {
    return this;
  }
  
  /** Gibt den Titel zurueck, unter dem die Komponente
    * dargestellt werden soll.
    **/
  public String getLabel() {
    return "Anzeige";
  }
  
  /** Diese Methode wird aufgerufen, wenn die Einstellungen
    * aus dem Dialog uebernommen werden sollen.
    **/
  public void anwenden() {
    // Analog oder digital?
    if (analog.isSelected())
      uhr.setAnalog();
    else
      uhr.setDigital();
    // Farbgebung
    uhr.setForeground(foreground.getColor());
    uhr.setBackground(background.getColor());
    // Groessenanpassungen
    if (uhrenFenster != null)
      uhrenFenster.pack();
  }
  
}
