/* ====================================================================
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
==================================================================== */

package org.apache.poi.ss.usermodel.charts;

import org.apache.poi.util.Beta;

/**
 * High level representation of chart element manual layout.
 *
 * @author Roman Kashitsyn
 */
@Beta
public interface ManualLayout {

	/**
	 * Sets the layout target.
	 * @param target new layout target.
	 */
	public void setTarget(LayoutTarget target);

	/**
	 * Returns current layout target.
	 * @return current layout target
	 */
	public LayoutTarget getTarget();

	/**
	 * Sets the x-coordinate layout mode.
	 * @param mode new x-coordinate layout mode.
	 */
	public void setXMode(LayoutMode mode);

	/**
	 * Returns current x-coordinnate layout mode.
	 * @return current x-coordinate layout mode.
	 */
	public LayoutMode getXMode();

	/**
	 * Sets the y-coordinate layout mode.
	 * @param mode new y-coordinate layout mode.
	 */
	public void setYMode(LayoutMode mode);

	/**
	 * Returns current y-coordinate layout mode.
	 * @return current y-coordinate layout mode.
	 */
	public LayoutMode getYMode();

	/**
	 * Returns the x location of the chart element.
	 * @return the x location (left) of the chart element or 0.0 if
	 *         not set.
	 */
	public double getX();

	/**
	 * Specifies the x location (left) of the chart element as a
	 * fraction of the width of the chart. If Left Mode is Factor,
	 * then the position is relative to the default position for the
	 * chart element.
	 */
	public void setX(double x);


	/**
	 * Returns current y location of the chart element.
	 * @return the y location (top) of the chart element or 0.0 if not
	 *         set.
	 */
	public double getY();

	/**
	 * Specifies the y location (top) of the chart element as a
	 * fraction of the height of the chart. If Top Mode is Factor,
	 * then the position is relative to the default position for the
	 * chart element.
	 */
	public void setY(double y);


	/**
	 * Specifies how to interpret the Width element for this manual
	 * layout.
	 * @param mode new width layout mode of this manual layout.
	 */
	public void setWidthMode(LayoutMode mode);


	/**
	 * Returns current width mode of this manual layout.
	 * @return width mode of this manual layout.
	 */
	public LayoutMode getWidthMode();

	/**
	 * Specifies how to interpret the Height element for this manual
	 * layout.
	 * @param mode new height mode of this manual layout.
	 */
	public void setHeightMode(LayoutMode mode);

	/**
	 * Returns current height mode of this 
	 * @return height mode of this manual layout.
	 */
	public LayoutMode getHeightMode();

	/**
	 * Specifies the width (if Width Mode is Factor) or right (if
	 * Width Mode is Edge) of the chart element as a fraction of the
	 * width of the chart.
	 * @param ratio a fraction of the width of the chart.
	 */
	public void setWidthRatio(double ratio);

	/**
	 * Returns current fraction of the width of the chart.
	 * @return fraction of the width of the chart or 0.0 if not set.
	 */
	public double getWidthRatio();

	/**
	 * Specifies the height (if Height Mode is Factor) or bottom (if
	 * Height Mode is edge) of the chart element as a fraction of the
	 * height of the chart.
	 * @param ratio a fraction of the height of the chart.
	 */
	public void setHeightRatio(double ratio);

	/**
	 * Returns current fraction of the height of the chart.
	 * @return fraction of the height of the chart or 0.0 if not set.
	 */
	public double getHeightRatio();

}
