package javacodebook.gui.statenew;

import java.awt.*;
import java.awt.event.*;
import java.util.prefs.*;

/**
 * @author Benjamin Rusch
 * 
 * Das PreferencesFrame speichert vom Benutzer gesetzte Einstellungen über  
 * Preferences. Sie werden automatisch beim Programmende gespeichert, 
 * und beim erneuten Programmstart wieder geladen.
 */


public class PreferencesFrame  extends Frame {
	
	// Default Status der Applikation
	public static final boolean DEFAULT_MILK = false;
	public static final boolean DEFAULT_SUGAR = false;
	public static final String DEFAULT_SIZE = "normal";
	
	// Keys für die Persistenten Daten
	public static final String MILK_KEY = "milk";
	public static final String SUGAR_KEY = "sugar";
	public static final String SIZE_KEY = "size";
	
	// Komponenten des Frames
	private Checkbox milk = null;
        private Checkbox sugar = null;
        private Choice sizeChooser = new Choice();
    
        // Preferences-Objekt 
        private Preferences myPreferences  = null;
	
	/**
 	*	Konstruktor von PreferencesFrame.  
 	*/	
	public PreferencesFrame(String title) {
		
		super(title);
		
		setLayout(new FlowLayout());
	
		// Beim Klicken des Schließen-Buttons vom HauptFenster
		// wird die shutdown-Methode aufgerufen.
		this.addWindowListener(new WindowAdapter() {
		    public void windowClosing(WindowEvent we) {
				shutdown();}
		});
		
		
		// Komponenten werden gebaut und auf das Frame gelegt 
		milk = new Checkbox("Milch");
		sugar = new Checkbox("Zucker");
		sizeChooser.add("klein");
		sizeChooser.add("normal");
		sizeChooser.add("groß");	
		add(milk);
		add(sugar);	
		add(sizeChooser);
		
		// Alte bzw. Default Einstellungen werden gesetzt
		startup();
	}
	
	
	private void startup() {	
	
    	// Preferences-Obkect im User-Baum wird gebaut. 
    	myPreferences  = Preferences.userRoot();
  		
  		// Anfangsstatus der Application wird hergestellt, falls die Preferences 
  		// noch nicht gestzt waren, weren Defaulteinstellungen verwendet. 
  		milk.setState(myPreferences.getBoolean(MILK_KEY,DEFAULT_MILK));
		sugar.setState(myPreferences.getBoolean(SUGAR_KEY,DEFAULT_SUGAR));
   		sizeChooser.select(myPreferences.get(SIZE_KEY,DEFAULT_SIZE));	
	}
	
	private void shutdown() {
		// Aktueller Status wird in dem Preferences-Objekt abgelegt.
		myPreferences.putBoolean(MILK_KEY, milk.getState());
		myPreferences.putBoolean(SUGAR_KEY, sugar.getState());
		myPreferences.put(SIZE_KEY, sizeChooser.getSelectedItem());
		System.exit(0);
	}
}
