/*********************************************************************
*
* 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;
import jxl.format.Colour;
import jxl.format.Font;
import jxl.format.ScriptStyle;
import jxl.format.UnderlineStyle;
import jxl.write.biff.WritableFontRecord;
/**
* A class which is instantiated when the user application wishes to specify
* the font for a particular cell
*/
public class WritableFont extends WritableFontRecord
{
/**
* Static inner class used for classifying the font names
*/
public static class FontName
{
/**
* The name
*/
String name;
/**
* Constructor
*
* @param s the font name
*/
FontName(String s)
{
name = s;
}
}
/**
* Static inner class used for the boldness of the fonts
*/
/*private*/ static class BoldStyle
{
/**
* The value
*/
public int value;
/**
* Constructor
*
* @param val the value
*/
BoldStyle(int val)
{
value = val;
}
}
/**
* Objects created with this font name will be rendered within Excel as ARIAL
* fonts
*/
public static final FontName ARIAL = new FontName("Arial");
/**
* Objects created with this font name will be rendered within Excel as TIMES
* fonts
*/
public static final FontName TIMES = new FontName("Times New Roman");
/**
* Objects created with this font name will be rendered within Excel as
* COURIER fonts
*/
public static final FontName COURIER = new FontName("Courier New");
/**
* Objects created with this font name will be rendered within Excel as
* TAHOMA fonts
*/
public static final FontName TAHOMA = new FontName("Tahoma");
// The bold styles
/**
* Indicates that this font should not be presented as bold
*/
public static final BoldStyle NO_BOLD = new BoldStyle(0x190);
/**
* Indicates that this font should be presented in a BOLD style
*/
public static final BoldStyle BOLD = new BoldStyle(0x2bc);
/**
* The default point size for all Fonts
*/
public static final int DEFAULT_POINT_SIZE = 10;
/**
* Creates a default font, vanilla font of the specified face and with
* default point size.
*
* @param fn the font name
*/
public WritableFont(FontName fn)
{
this(fn,
DEFAULT_POINT_SIZE,
NO_BOLD,
false,
UnderlineStyle.NO_UNDERLINE,
Colour.BLACK,
ScriptStyle.NORMAL_SCRIPT);
}
/**
* Publicly available copy constructor
*
* @param f the font to copy
*/
public WritableFont(Font f)
{
super(f);
}
/**
* Constructs of font of the specified face and of size given by the
* specified point size
*
* @param ps the point size
* @param fn the font name
*/
public WritableFont(FontName fn, int ps)
{
this(fn, ps, NO_BOLD, false,
UnderlineStyle.NO_UNDERLINE,
Colour.BLACK,
ScriptStyle.NORMAL_SCRIPT);
}
/**
* Creates a font of the specified face, point size and bold style
*
* @param ps the point size
* @param bs the bold style
* @param fn the font name
*/
public WritableFont(FontName fn, int ps, BoldStyle bs)
{
this(fn, ps, bs, false,
UnderlineStyle.NO_UNDERLINE,
Colour.BLACK,
ScriptStyle.NORMAL_SCRIPT);
}
/**
* Creates a font of the specified face, point size, bold weight and
* italicised option.
*
* @param ps the point size
* @param bs the bold style
* @param italic italic flag
* @param fn the font name
*/
public WritableFont(FontName fn, int ps, BoldStyle bs, boolean italic)
{
this(fn, ps, bs, italic,
UnderlineStyle.NO_UNDERLINE,
Colour.BLACK,
ScriptStyle.NORMAL_SCRIPT);
}
/**
* Creates a font of the specified face, point size, bold weight,
* italicisation and underline style
*
* @param ps the point size
* @param bs the bold style
* @param us the underline style
* @param fn the font name
* @param it italic flag
*/
public WritableFont(FontName fn,
int ps,
BoldStyle bs,
boolean it,
UnderlineStyle us)
{
this(fn, ps, bs, it, us, Colour.BLACK, ScriptStyle.NORMAL_SCRIPT);
}
/**
* Creates a font of the specified face, point size, bold style,
* italicisation, underline style and colour
*
* @param ps the point size
* @param bs the bold style
* @param us the underline style
* @param fn the font name
* @param it italic flag
* @param c the colour
*/
public WritableFont(FontName fn,
int ps,
BoldStyle bs,
boolean it,
UnderlineStyle us,
Colour c)
{
this(fn, ps, bs, it, us, c, ScriptStyle.NORMAL_SCRIPT);
}
/**
* Creates a font of the specified face, point size, bold style,
* italicisation, underline style, colour, and script
* style (superscript/subscript)
*
* @param ps the point size
* @param bs the bold style
* @param us the underline style
* @param fn the font name
* @param it the italic flag
* @param c the colour
* @param ss the script style
*/
public WritableFont(FontName fn,
int ps,
BoldStyle bs,
boolean it,
UnderlineStyle us,
Colour c,
ScriptStyle ss)
{
super(fn.name, ps, bs.value, it,
us.getValue(),
c.getValue(), ss.getValue());
}
/**
* Sets the point size for this font, if the font hasn't been initialized
*
* @param pointSize the point size
* @exception WriteException, if this font is already in use elsewhere
*/
public void setPointSize(int pointSize) throws WriteException
{
super.setPointSize(pointSize);
}
/**
* Sets the bold style for this font, if the font hasn't been initialized
*
* @param boldStyle the bold style
* @exception WriteException, if this font is already in use elsewhere
*/
public void setBoldStyle(BoldStyle boldStyle) throws WriteException
{
super.setBoldStyle(boldStyle.value);
}
/**
* Sets the italic indicator for this font, if the font hasn't been
* initialized
*
* @param italic the italic flag
* @exception WriteException, if this font is already in use elsewhere
*/
public void setItalic(boolean italic) throws WriteException
{
super.setItalic(italic);
}
/**
* Sets the underline style for this font, if the font hasn't been
* initialized
*
* @param us the underline style
* @exception WriteException, if this font is already in use elsewhere
*/
public void setUnderlineStyle(UnderlineStyle us) throws WriteException
{
super.setUnderlineStyle(us.getValue());
}
/**
* Sets the colour for this font, if the font hasn't been
* initialized
*
* @param colour the colour
* @exception WriteException, if this font is already in use elsewhere
*/
public void setColour(Colour colour) throws WriteException
{
super.setColour(colour.getValue());
}
/**
* Sets the script style (eg. superscript, subscript) for this font,
* if the font hasn't been initialized
*
* @param scriptStyle the colour
* @exception WriteException, if this font is already in use elsewhere
*/
public void setScriptStyle(ScriptStyle scriptStyle) throws WriteException
{
super.setScriptStyle(scriptStyle.getValue());
}
/**
* Accessor for the strike-out flag
*
* @return the strike-out flag
*/
public boolean isStruckout()
{
return super.isStruckout();
}
/**
* Sets Accessor for the strike-out flag
*
* @param struckout TRUE if this is a struckout font
* @return the strike-out flag
* @exception WriteException, if this font is already in use elsewhere
*/
public void setStruckout(boolean struckout) throws WriteException
{
super.setStruckout(struckout);
}
/**
* Factory method which creates the specified font name. This method
* should be used with care, since the string used to create the font
* name must be recognized by Excel's internal processing
*
* @param fontName the name of the Excel font
* @return the font name
*/
public static FontName createFont(String fontName)
{
return new FontName(fontName);
}
}
|