Open Source Repository

Home /excel/jxl-2.6.12 | Repository Home



jxl/biff/drawing/ClientAnchor.java
/*********************************************************************
*
*      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.biff.drawing;

import jxl.common.Logger;

import jxl.biff.IntegerHelper;

/**
 * The client anchor record
 */
class ClientAnchor extends EscherAtom
{
  /**
   * The logger
   */
  private static final Logger logger = Logger.getLogger(ClientAnchor.class);

  /**
   * The binary data
   */
  private byte[] data;

  /**
   * The properties
   */
  private int properties;

  /**
   * The x1 position
   */
  private double x1;

  /**
   * The y1 position
   */
  private double y1;

  /**
   * The x2 position
   */
  private double x2;

  /**
   * The y2 position
   */
  private double y2;

  /**
   * Constructor
   *
   @param erd the escher record data
   */
  public ClientAnchor(EscherRecordData erd)
  {
    super(erd);
    byte[] bytes = getBytes();

    // The properties
    properties = IntegerHelper.getInt(bytes[0], bytes[1]);

    // The x1 cell
    int x1Cell = IntegerHelper.getInt(bytes[2], bytes[3]);
    int x1Fraction = IntegerHelper.getInt(bytes[4], bytes[5]);

    x1 = x1Cell + (doublex1Fraction / (double1024;

    // The y1 cell
    int y1Cell = IntegerHelper.getInt(bytes[6], bytes[7]);
    int y1Fraction = IntegerHelper.getInt(bytes[8], bytes[9]);

    y1 = y1Cell + (doubley1Fraction / (double256;

    // The x2 cell
    int x2Cell = IntegerHelper.getInt(bytes[10], bytes[11]);
    int x2Fraction = IntegerHelper.getInt(bytes[12], bytes[13]);

    x2 = x2Cell + (doublex2Fraction / (double1024;

    // The y1 cell
    int y2Cell = IntegerHelper.getInt(bytes[14], bytes[15]);
    int y2Fraction = IntegerHelper.getInt(bytes[16], bytes[17]);

    y2 = y2Cell + (doubley2Fraction / (double256;
  }

  /**
   * Constructor
   *
   @param x1 the x1 position
   @param y1 the y1 position
   @param x2 the x2 position
   @param y2 the y2 position
   @param props the anchor properties
   */
  public ClientAnchor(double x1, double y1, double x2, double y2, int props)
  {
    super(EscherRecordType.CLIENT_ANCHOR);
    this.x1 = x1;
    this.y1 = y1;
    this.x2 = x2;
    this.y2 = y2;
    properties = props;
  }

  /**
   * Gets the client anchor data
   *
   @return the data
   */
  byte[] getData()
  {
    data = new byte[18];
    IntegerHelper.getTwoBytes(properties, data, 0);

    // The x1 cell
    IntegerHelper.getTwoBytes((intx1, data, 2);

    // The x1 fraction into the cell 0-1024
    int x1fraction = (int) ((x1 - (intx11024);
    IntegerHelper.getTwoBytes(x1fraction, data, 4);

    // The y1 cell
    IntegerHelper.getTwoBytes((inty1, data, 6);

    // The y1 fraction into the cell 0-256
    int y1fraction = (int) ((y1 - (inty1256);
    IntegerHelper.getTwoBytes(y1fraction, data, 8);

    // The x2 cell
    IntegerHelper.getTwoBytes((intx2, data, 10);

    // The x2 fraction into the cell 0-1024
    int x2fraction = (int) ((x2 - (intx21024);
    IntegerHelper.getTwoBytes(x2fraction, data, 12);

    // The y2 cell
    IntegerHelper.getTwoBytes((inty2, data, 14);

    // The y2 fraction into the cell 0-256
    int y2fraction = (int) ((y2 - (inty2256);
    IntegerHelper.getTwoBytes(y2fraction, data, 16);

    return setHeaderData(data);
  }

  /**
   * Accessor for the x1 position
   *
   @return the x1 position
   */
  double getX1()
  {
    return x1;
  }

  /**
   * Accessor for the y1 position
   *
   @return the y1 position
   */
  double getY1()
  {
    return y1;
  }

  /**
   * Accessor for the x2 position
   *
   @return the x2 position
   */
  double getX2()
  {
    return x2;
  }

  /**
   * Accessor for the y2 position
   *
   @return the y2 position
   */
  double getY2()
  {
    return y2;
  }

  /** 
   * Accessor for the anchor properties
   */
  int getProperties()
  {
    return properties;
  }
}