/*********************************************************************
*
* Copyright (C) 2002 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.biff;
import jxl.common.Logger;
import jxl.SheetSettings;
import jxl.biff.DoubleHelper;
import jxl.biff.IntegerHelper;
import jxl.biff.Type;
import jxl.biff.WritableRecordData;
import jxl.format.PageOrder;
import jxl.format.PageOrientation;
import jxl.format.PaperSize;
/**
* Stores the options and measurements from the Page Setup dialog box
*/
class SetupRecord extends WritableRecordData
{
/**
* The logger
*/
Logger logger = Logger.getLogger(SetupRecord.class);
/**
* The binary data for output to file
*/
private byte[] data;
/**
* The header margin
*/
private double headerMargin;
/**
* The footer margin
*/
private double footerMargin;
/**
* The page orientation
*/
private PageOrientation orientation;
/**
* The page order
*/
private PageOrder order;
/**
* The paper size
*/
private int paperSize;
/**
* The scale factor
*/
private int scaleFactor;
/**
* The page start
*/
private int pageStart;
/**
* The fit width
*/
private int fitWidth;
/**
* The fit height
*/
private int fitHeight;
/**
* The horizontal print resolution
*/
private int horizontalPrintResolution;
/**
* The vertical print resolution
*/
private int verticalPrintResolution;
/**
* The number of copies
*/
private int copies;
/**
* Indicates whether the setup data should be initiliazed in the setup
* box
*/
private boolean initialized;
/**
* Constructor, taking the sheet settings. This object just
* takes the various fields from the bean in which it is interested
*
* @param the sheet settings
*/
public SetupRecord(SheetSettings s)
{
super(Type.SETUP);
orientation = s.getOrientation();
order = s.getPageOrder();
headerMargin = s.getHeaderMargin();
footerMargin = s.getFooterMargin();
paperSize = s.getPaperSize().getValue();
horizontalPrintResolution = s.getHorizontalPrintResolution();
verticalPrintResolution = s.getVerticalPrintResolution();
fitWidth = s.getFitWidth();
fitHeight = s.getFitHeight();
pageStart = s.getPageStart();
scaleFactor = s.getScaleFactor();
copies = s.getCopies();
initialized = true;
}
/**
* Sets the orientation
*
* @param o the orientation
*/
public void setOrientation(PageOrientation o)
{
orientation = o;
}
/**
* Sets the page order
*
* @param o
*/
public void setOrder(PageOrder o)
{
order = o;
}
/**
* Sets the header and footer margins
*
* @param hm the header margin
* @param fm the footer margin
*/
public void setMargins(double hm, double fm)
{
headerMargin = hm;
footerMargin = fm;
}
/**
* Sets the paper size
*
* @param ps the paper size
*/
public void setPaperSize(PaperSize ps)
{
paperSize = ps.getValue();
}
/**
* Gets the binary data for output to file
*
* @return the binary data
*/
public byte[] getData()
{
data = new byte[34];
// Paper size
IntegerHelper.getTwoBytes(paperSize, data, 0);
// Scale factor
IntegerHelper.getTwoBytes(scaleFactor, data, 2);
// Page start
IntegerHelper.getTwoBytes(pageStart, data, 4);
// Fit width
IntegerHelper.getTwoBytes(fitWidth, data, 6);
// Fit height
IntegerHelper.getTwoBytes(fitHeight, data, 8);
// grbit
int options = 0;
if (order == PageOrder.RIGHT_THEN_DOWN)
{
options |= 0x01;
}
if (orientation == PageOrientation.PORTRAIT)
{
options |= 0x02;
}
if (pageStart != 0)
{
options |= 0x80;
}
if (!initialized)
{
options |= 0x04;
}
IntegerHelper.getTwoBytes(options, data, 10);
// print resolution
IntegerHelper.getTwoBytes(horizontalPrintResolution, data, 12);
// vertical print resolution
IntegerHelper.getTwoBytes(verticalPrintResolution, data, 14);
// header margin
DoubleHelper.getIEEEBytes(headerMargin, data, 16);
// footer margin
DoubleHelper.getIEEEBytes(footerMargin, data, 24);
// Number of copies
IntegerHelper.getTwoBytes(copies, data, 32);
return data;
}
}
|