/*********************************************************************
*
*      Copyright (C) 2003 Andrew Khan
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
***************************************************************************/

package jxl.write;

import java.nio.file.Path;
import jxl.biff.drawing.*;

/**
 * Allows an image to be created, or an existing image to be manipulated
 * Note that co-ordinates and dimensions are given in cells, so that if for
 * example the width or height of a cell which the image spans is altered,
 * the image will have a correspondign distortion
 */
public class WritableImage extends Drawing
{
  // Shadow these values from the superclass.  The only practical reason
  // for doing this is that they  appear nicely in the javadoc

  /**
   * Image anchor properties which will move and resize an image
   * along with the cells
   */
  public static ImageAnchorProperties MOVE_AND_SIZE_WITH_CELLS = 
    Drawing.MOVE_AND_SIZE_WITH_CELLS;

  /**
   * Image anchor properties which will move an image
   * when cells are inserted or deleted
   */
  public static ImageAnchorProperties MOVE_WITH_CELLS = 
    Drawing.MOVE_WITH_CELLS;

  /**
   * Image anchor properties which will leave an image unaffected when
   * other cells are inserted, removed or resized
   */
  public static ImageAnchorProperties NO_MOVE_OR_SIZE_WITH_CELLS = 
    Drawing.NO_MOVE_OR_SIZE_WITH_CELLS;

  /**
   * Constructor
   *
   * @param x the column number at which to position the image
   * @param y the row number at which to position the image
   * @param width the number of columns cells which the image spans
   * @param height the number of rows which the image spans
   * @param image the source image file
   */
  public WritableImage(double x, double y,
                       double width, double height,
                       Path image)
  {
    super(x, y, width, height, image);
  }

  /**
   * Constructor
   *
   * @param x the column number at which to position the image
   * @param y the row number at which to position the image
   * @param width the number of columns cells which the image spans
   * @param height the number of rows which the image spans
   * @param imageData the image data
   */
  public WritableImage(double x,
                       double y,
                       double width,
                       double height,
                       byte[] imageData)
  {
    super(x, y, width, height, imageData);
  }

  /**
   * Constructor, used when copying sheets
   *
   * @param d the image to copy
   * @param dg the drawing group
   */
  public WritableImage(DrawingGroupObject d, DrawingGroup dg)
  {
    super(d, dg);
  }

  /**
   * Accessor for the image position
   *
   * @return the column number at which the image is positioned
   */
  public double getColumn()
  {
    return super.getX();
  }

  /**
   * Accessor for the image position
   *
   * @param c the column number at which the image should be positioned
   */
  public void setColumn(double c)
  {
    super.setX(c);
  }

  /**
   * Accessor for the image position
   *
   * @return the row number at which the image is positions
   */
  public double getRow()
  {
    return super.getY();
  }

  /**
   * Accessor for the image position
   *
   * @param c the row number at which the image should be positioned
   */
  public void setRow(double c)
  {
    super.setY(c);
  }

  /**
   * Accessor for the image dimensions
   *
   * @return  the number of columns this image spans
   */
  public double getWidth()
  {
    return super.getWidth();
  }

  /**
   * Accessor for the image dimensions
   * Note that the actual size of the rendered image will depend on the
   * width of the columns it spans
   *
   * @param c the number of columns which this image spans
   */
  public void setWidth(double c)
  {
    super.setWidth(c);
  }

  /**
   * Accessor for the image dimensions
   *
   * @return the number of rows which this image spans
   */
  public double getHeight()
  {
    return super.getHeight();
  }

  /**
   * Accessor for the image dimensions
   * Note that the actual size of the rendered image will depend on the
   * height of the rows it spans
   *
   * @param c the number of rows which this image should span
   */
  public void setHeight(double c)
  {
    super.setHeight(c);
  }

  /**
   * Accessor for the image file
   *
   * @return the file which the image references
   */
  public Path getImageFile()
  {
    return super.getImageFile();
  }

  /**
   * Accessor for the image data
   *
   * @return the image data
   */
  public byte[] getImageData()
  {
    return super.getImageData();
  }

  /**
   * Accessor for the anchor properties
   */
  public void setImageAnchor(ImageAnchorProperties iap)
  {
    super.setImageAnchor(iap);
  }

  /**
   * Accessor for the anchor properties
   */
  public ImageAnchorProperties getImageAnchor()
  {
    return super.getImageAnchor();
  }
}
