FileDocCategorySizeDatePackage
Shape.javaAPI DocApache Poi 3.0.111204Thu May 31 18:45:28 BST 2007org.apache.poi.hslf.model

Shape

public abstract class Shape extends Object

Represents a Shape which is the elemental object that composes a drawing. This class is a wrapper around EscherSpContainer which holds all information about a shape in PowerPoint document.

When you add a shape, you usually specify the dimensions of the shape and the position of the upper�left corner of the bounding box for the shape relative to the upper�left corner of the page, worksheet, or slide. Distances in the drawing layer are measured in points (72 points = 1 inch).

author
Yegor Kozlov

Fields Summary
protected POILogger
logger
public static final int
EMU_PER_INCH
In Escher absolute distances are specified in English Metric Units (EMUs), occasionally referred to as A units; there are 360000 EMUs per centimeter, 914400 EMUs per inch, 12700 EMUs per point.
public static final int
EMU_PER_POINT
public static final int
EMU_PER_CENTIMETER
public static final int
MASTER_DPI
Master DPI (576 pixels per inch). Used by the reference coordinate system in PowerPoint.
public static final int
PIXEL_DPI
Pixels DPI (96 pixels per inch)
public static final int
POINT_DPI
Points DPI (72 pixels per inch)
protected EscherContainerRecord
_escherContainer
Either EscherSpContainer or EscheSpgrContainer record which holds information about this shape.
protected Shape
_parent
Parent of this shape. null for the topmost shapes.
protected Sheet
_sheet
The Sheet this shape belongs to
Constructors Summary
protected Shape(EscherContainerRecord escherRecord, Shape parent)
Create a Shape object. This constructor is used when an existing Shape is read from from a PowerPoint document.

param
escherRecord EscherSpContainer container which holds information about this shape
param
parent the parent of this Shape


                                                               
          
        _escherContainer = escherRecord;
        _parent = parent;
     
Methods Summary
protected voidafterInsert(org.apache.poi.hslf.model.Sheet sh)
Event which fires when a shape is inserted in the sheet. In some cases we need to propagate changes to upper level containers.
Default implementation does nothing.

param
sh - owning shape


    
protected abstract org.apache.poi.ddf.EscherContainerRecordcreateSpContainer(boolean isChild)
Creates the lowerlevel escher records for this shape.

public java.awt.RectanglegetAnchor()
Returns the anchor (the bounding box rectangle) of this shape. All coordinates are expressed in points (72 dpi).

return
the anchor of this shape

        EscherSpRecord spRecord = _escherContainer.getChildById(EscherSpRecord.RECORD_ID);
        int flags = spRecord.getFlags();
        java.awt.Rectangle anchor=null;
        if ((flags & EscherSpRecord.FLAG_CHILD) != 0){
            EscherChildAnchorRecord rec = (EscherChildAnchorRecord)getEscherChild(_escherContainer, EscherChildAnchorRecord.RECORD_ID);
            anchor = new java.awt.Rectangle();
            anchor.x = rec.getDx1()*POINT_DPI/MASTER_DPI;
            anchor.y = rec.getDy1()*POINT_DPI/MASTER_DPI;
            anchor.width = (rec.getDx2() - anchor.x)*POINT_DPI/MASTER_DPI;
            anchor.height = (rec.getDy2() - anchor.y)*POINT_DPI/MASTER_DPI;
        }
        else {
            EscherClientAnchorRecord rec = (EscherClientAnchorRecord)getEscherChild(_escherContainer, EscherClientAnchorRecord.RECORD_ID);
            anchor = new java.awt.Rectangle();
            anchor.y = rec.getFlag()*POINT_DPI/MASTER_DPI;
            anchor.x = rec.getCol1()*POINT_DPI/MASTER_DPI;
            anchor.width = (rec.getDx1() - rec.getCol1())*POINT_DPI/MASTER_DPI;
            anchor.height = (rec.getRow1() - rec.getFlag())*POINT_DPI/MASTER_DPI;
        }
        return anchor;
    
protected java.awt.ColorgetColor(int rgb)

        if (rgb >= 0x8000000) {
            int idx = rgb - 0x8000000;
            ColorSchemeAtom ca = getSheet().getColorScheme();
            if(idx >= 0 && idx <= 7) rgb = ca.getColor(idx);
        }
        Color tmp = new Color(rgb, true);
        return new Color(tmp.getBlue(), tmp.getGreen(), tmp.getRed());
    
public static org.apache.poi.ddf.EscherRecordgetEscherChild(org.apache.poi.ddf.EscherContainerRecord owner, int recordId)
Helper method to return escher child by record ID

return
escher record or null if not found.

        for ( Iterator iterator = owner.getChildRecords().iterator(); iterator.hasNext(); )
        {
            EscherRecord escherRecord = (EscherRecord) iterator.next();
            if (escherRecord.getRecordId() == recordId)
                return escherRecord;
        }
        return null;
    
public static org.apache.poi.ddf.EscherPropertygetEscherProperty(org.apache.poi.ddf.EscherOptRecord opt, int propId)
Returns escher property by id.

return
escher property or null if not found.

        for ( Iterator iterator = opt.getEscherProperties().iterator(); iterator.hasNext(); )
        {
            EscherProperty prop = (EscherProperty) iterator.next();
            if (prop.getId() == propId)
                return prop;
        }
        return null;
    
public org.apache.poi.hslf.model.FillgetFill()
Fill properties of this shape

return
fill properties of this shape

        return new Fill(this);
    
public org.apache.poi.hslf.model.HyperlinkgetHyperlink()
Returns the hyperlink assigned to this shape

return
the hyperlink assigned to this shape or null if not found.

        return Hyperlink.find(this);
    
public org.apache.poi.hslf.model.ShapegetParent()

return
the parent of this shape

        return _parent;
    
public java.lang.StringgetShapeName()

return
name of the shape.

        return ShapeTypes.typeName(getShapeType());
    
public intgetShapeType()

return
type of the shape.
see
org.apache.poi.hslf.record.RecordTypes

        EscherSpRecord spRecord = _escherContainer.getChildById(EscherSpRecord.RECORD_ID);
        return spRecord.getOptions() >> 4;
    
public org.apache.poi.hslf.model.SheetgetSheet()

return
the SlideShow this shape belongs to

        return _sheet;
    
public org.apache.poi.ddf.EscherContainerRecordgetSpContainer()

return
The shape container and it's children that can represent this shape.

        return _escherContainer;
    
public voidmoveTo(int x, int y)
Moves the top left corner of the shape to the specified point.

param
x the x coordinate of the top left corner of the shape
param
y the y coordinate of the top left corner of the shape

        java.awt.Rectangle anchor = getAnchor();
        anchor.setLocation(x, y);
        setAnchor(anchor);
    
public voidsetAnchor(java.awt.Rectangle anchor)
Sets the anchor (the bounding box rectangle) of this shape. All coordinates should be expressed in points (72 dpi).

param
anchor new anchor

        EscherSpRecord spRecord = _escherContainer.getChildById(EscherSpRecord.RECORD_ID);
        int flags = spRecord.getFlags();
        if ((flags & EscherSpRecord.FLAG_CHILD) != 0){
            EscherChildAnchorRecord rec = (EscherChildAnchorRecord)getEscherChild(_escherContainer, EscherChildAnchorRecord.RECORD_ID);
            rec.setDx1(anchor.x*MASTER_DPI/POINT_DPI);
            rec.setDy1(anchor.y*MASTER_DPI/POINT_DPI);
            rec.setDx2((anchor.width + anchor.x)*MASTER_DPI/POINT_DPI);
            rec.setDy2((anchor.height + anchor.y)*MASTER_DPI/POINT_DPI);
        }
        else {
            EscherClientAnchorRecord rec = (EscherClientAnchorRecord)getEscherChild(_escherContainer, EscherClientAnchorRecord.RECORD_ID);
            rec.setFlag((short)(anchor.y*MASTER_DPI/POINT_DPI));
            rec.setCol1((short)(anchor.x*MASTER_DPI/POINT_DPI));
            rec.setDx1((short)((anchor.width + anchor.x)*MASTER_DPI/POINT_DPI));
            rec.setRow1((short)((anchor.height + anchor.y)*MASTER_DPI/POINT_DPI));
        }

    
public static voidsetEscherProperty(org.apache.poi.ddf.EscherOptRecord opt, short propId, int value)
Set an escher property for this shape.

param
opt The opt record to set the properties to.
param
propId The id of the property. One of the constants defined in EscherOptRecord.
param
value value of the property. If value = -1 then the property is removed.

        java.util.List props = opt.getEscherProperties();
        for ( Iterator iterator = props.iterator(); iterator.hasNext(); ) {
            EscherProperty prop = (EscherProperty) iterator.next();
            if (prop.getId() == propId){
                iterator.remove();
            }
        }
        if (value != -1) {
            opt.addEscherProperty(new EscherSimpleProperty(propId, value));
            opt.sortProperties();
        }
    
public voidsetShapeType(int type)

param
type type of the shape.
see
org.apache.poi.hslf.record.RecordTypes

        EscherSpRecord spRecord = _escherContainer.getChildById(EscherSpRecord.RECORD_ID);
        spRecord.setOptions((short)(type << 4 | 0x2));
    
public voidsetSheet(org.apache.poi.hslf.model.Sheet sheet)
Assign the SlideShow this shape belongs to

param
sheet owner of this shape

        _sheet = sheet;