package ClaimItGUI;
import java.awt.Component;

/**
 * Diese Klasse fasst eine Komponente und seine zugehörige relative Position innerhalb eines Containers zusammen. Wichtigste Eigenschaft ist,
 * das Objekte dieser Klasse für ihre Komponente speichern, wo sie ursprünglich vom Entwickler platziert wurden und welche Größe sie hatten.
 * Lediglich das Verhältnis zu Höhe und Breite der aufnehmenden Komponente wird hier gespeichert. Bei Größenänderungen der aufnehmenden Komponente
 * wird anhand dieser Werte eine neue Ausrichtung und Größe der eingebetteten Komponente ermittelt, dazu werden die neuen Abmessungen lediglich mit
 * dem Vorher gespeicherten Werten mutlipliziert und gerundet. 
 * Der LayoutManager übernimmt das Einpflegen der Werte in diese Struktur und liest sie ggf. aus, um für Container beliebiger Größe eine relative 
 * Anordnung der Elemente zu entwerfen, die der ursprünglichen Layout-Idee nahe kommen sollte.
 * 
 * @author Dirk Becker
 *
 */
public class LayoutManagerComponent 
{
	Component myComponent;							// Die Komponente, für die wir die relativen Werte speichern. 
	double relativeX, relativeY;					// Relative X und Y-Werte im Verhältnis zur ursprünglichen Größe der aufnehmenden Komponente.
	double relativeHeight, relativeWidth;			// Relative Höhe und Breite im Verhältnis zur ursprünglichen Größe der aufnehmenden Komponente.
	double relativeFontSize;						// Wir müssen auch die Größe der Schriften anpassen.
	
	/**
	 * Konstruktor: Übergeben wird die Komponente, für die die Seiten und Positionsverhältnisse verwaltet werden sollen.
	 * 
	 * @param comp Referenz der Komponente, für die die relative Position gespeichert werden soll. 
	 */
	public LayoutManagerComponent(Component comp)
	{
		myComponent = comp;
		relativeX = 0.0;							// Nur, wenn diese Werte != 0.0 sind, wird ein neuer Wert ermittelt. 
		relativeY = 0.0;							// Dadurch bleibt sichergestellt, das nur am Anfang einmal die relativen Werte 
		relativeHeight = 0.0;						// ausgelesen und gespeichert werden.
		relativeWidth = 0.0;
		relativeFontSize = 0.0;						// Auch die Schriftgröße muß ggf. angepaßt werden.
	}
	// Setters
	/**
	 * Über diese Methode läßt sich ein double speichern, aus dem später die X-Position errechnet wird. 
	 * 
	 * @param relativeX Relative X Koordinate.
	 */
	public void setRelativeX(double relativeX) 
	{
		this.relativeX = relativeX;
	}
	/**
	 * Über diese Methode läßt sich ein double speichern, aus dem später die Y-Position errechnet wird. 
	 * 
	 * @param relativeY Relative Y Koordinate.
	 */
	public void setRelativeY(double relativeY) 
	{
		this.relativeY = relativeY;
	}
	/**
	 * Über diese Methode läßt sich ein double speichern, aus dem später die Höhe errechnet wird. 
	 * 
	 * @param relativeHeight Relative Höhe in Relation zur umgebenden Komponente.
	 */
	public void setRelativeHeight(double relativeHeight) 
	{
		this.relativeHeight = relativeHeight;
	}
	/**
	 * Über diese Methode läßt sich ein double speichern, aus dem später die Breite errechnet wird. 
	 * 
	 * @param relativeWidth Relative Breite in Relation zur umgebenden Komponente.
	 */
	public void setRelativeWidth(double relativeWidth) 
	{
		this.relativeWidth = relativeWidth;
	}
	/**
	 * Über diese Methode läßt sich ein double speichern, aus dem später die Höhe der Schrift errechnet wird. 
	 * 
	 * @param relativeFontSize Relative Schriftgröße.
	 */
	public void setRelativeFontSize(double relativeFontSize)
	{
		this.relativeFontSize = relativeFontSize;
	}
	
	// Getters
	/**
	 * Über diese Methode läßt sich später eine Referenz auf die verwaltete Komponente beziehen, um sie innerhalb des Layoutmanagers zu bearbeiten
	 * und anzuzeigen.
	 * 
	 * @return Die Komponente, die hier verwatlet wird. 
	 */
	public Component getComponent() 
	{
		return myComponent;
	}
	/**
	 * Über diese Methode läßt sich die relative Position beziehen, um daraus die absolute X-Koordinate zu berechnen.  
	 * 
	 * @return relativeX Relative X-Position der verwalteten Komponente in Relation zur ursprünglichen Position der aufnehmenden Komponente.
	 */
	public double getRelativeX() 
	{
		return relativeX;
	}
	/**
	 * Über diese Methode läßt sich die relative Position beziehen, um daraus die absolute Y-Koordinate zu berechnen.  
	 * 
	 * @return relativeY Relative Y-Position der verwalteten Komponente in Relation zur ursprünglichen Position der aufnehmenden Komponente.
	 */
	public double getRelativeY() 
	{
		return relativeY;
	}
	/**
	 * Über diese Methode läßt sich die relative Höhe beziehen, um daraus die absolute Höhe zu berechnen.  
	 * 
	 * @return relativeHeight Relative Höhe der verwalteten Komponente in Relation zur ursprünglichen Höhe der aufnehmenden Komponente.
	 */
	public double getRelativeHeight() 
	{
		return relativeHeight;
	}
	/**
	 * Über diese Methode läßt sich die relative Breite beziehen, um daraus die absolute Breite zu berechnen.  
	 * 
	 * @return relativeWidth Relative Breite der verwalteten Komponente in Relation zur ursprünglichen Breite der aufnehmenden Komponente.
	 */
	public double getRelativeWidth() 
	{
		return relativeWidth;
	}
	public double getRelativeFontSize()
	{
		return relativeFontSize;
	}
}
