package jp.co.cybec.laxide.layout;

import org.eclipse.draw2d.Polyline;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.PointList;

/**
 * レイアウト描画のための座標を提供するクラス
 * 
 * 
 * @author tokumaru
 */
public abstract class AbstractLayoutPoints {
	private static final int LINE_WIDTH = 1;
	public static final double REAL_ZIZE_RATE = 1.6; 
	
    /**
     * デザイナにレイアウトを描画するためのPointListクラスを返します。
     * 
     * @return PointListクラス
     */
    public abstract PointList getPointList();
    
    /**
     * レイアウト内のヘッダー領域のスタートポイントを返します。
     * レイアウトにヘッダーがない場合はnullを返します。
     * 
     * @return Pointクラス
     */
    public abstract Point getHeaderStartPoint();
    
    /**
     * レイアウト内のヘッダー領域のスタートポイントを返します。
     * レイアウトにヘッダーがない場合はnullを返します。
     * 
     * @return Pointクラス
     */
    public abstract Point getHeaderEndPoint();
    
    /**
     * レイアウト内のフッター領域のスタートポイントを返します。
     * レイアウトにフッターがない場合はnullを返します。
     * 
     * @return Pointクラス
     */
    public abstract Point getFooterStartPoint();
    
    /**
     * レイアウト内のフッター領域のスタートポイントを返します。
     * レイアウトにフッターがない場合はnullを返します。
     * 
     * @return Pointクラス
     */
    public abstract Point getFooterEndPoint();
    
    /**
     * レイアウト内のコンテンツ領域のスタートポイントを返します。
     * 
     * @return Pointクラス
     */
    public abstract Point getContentsStartPoint();
    
    /**
     * レイアウト内のコンテンツ領域のスタートポイントを返します。
     * 
     * @return Pointクラス
     */
    public abstract Point getContentsEndPoint();
    
    /**
     * レイアウト内の左側の領域のスタートポイントを返します。
     * レイアウトに左側の領域がない場合はnullを返します。
     * 
     * @return Pointクラス
     */
    public abstract Point getSideLeftStartPoint();
    
    /**
     * レイアウト内の左側の領域のスタートポイントを返します。
     * レイアウトに左側の領域がない場合はnullを返します。
     * 
     * @return Pointクラス
     */
    public abstract Point getSideLeftEndPoint();
    
    /**
     * レイアウト内の右側の領域のスタートポイントを返します。
     * レイアウトに右側の領域がない場合はnullを返します。
     * 
     * @return Pointクラス
     */
    public abstract Point getSideRightStartPoint();
    
    /**
     * レイアウト内の右側の領域のスタートポイントを返します。
     * レイアウトに右側の領域がない場合はnullを返します。
     * 
     * @return Pointクラス
     */
    public abstract Point getSideRightEndPoint();
    
    /**
     * レイアウトのラインを描画するためのPolyLineオブジェクトを返します。
     * 
     * @return Polyline
     */
    public Polyline getLayoutPolyLine() {
    	PointList points = getPointList();
    	Polyline line = new Polyline();
    	line.setPoints(points);
    	line.setLineWidth(LINE_WIDTH);
    	
    	return line;
    }
}
