Search in sources :

Example 1 with EscherDgRecord

use of org.apache.poi.ddf.EscherDgRecord in project poi by apache.

the class PPDrawing method create.

/**
	 * Create the Escher records associated with a new PPDrawing
	 */
private void create() {
    EscherContainerRecord dgContainer = new EscherContainerRecord();
    dgContainer.setRecordId(EscherContainerRecord.DG_CONTAINER);
    dgContainer.setOptions((short) 15);
    dg = new EscherDgRecord();
    dg.setOptions((short) 16);
    dg.setNumShapes(1);
    dgContainer.addChildRecord(dg);
    EscherContainerRecord spgrContainer = new EscherContainerRecord();
    spgrContainer.setOptions((short) 15);
    spgrContainer.setRecordId(EscherContainerRecord.SPGR_CONTAINER);
    EscherContainerRecord spContainer = new EscherContainerRecord();
    spContainer.setOptions((short) 15);
    spContainer.setRecordId(EscherContainerRecord.SP_CONTAINER);
    EscherSpgrRecord spgr = new EscherSpgrRecord();
    spgr.setOptions((short) 1);
    spContainer.addChildRecord(spgr);
    EscherSpRecord sp = new EscherSpRecord();
    sp.setOptions((short) ((ShapeType.NOT_PRIMITIVE.nativeId << 4) + 2));
    sp.setFlags(EscherSpRecord.FLAG_PATRIARCH | EscherSpRecord.FLAG_GROUP);
    spContainer.addChildRecord(sp);
    spgrContainer.addChildRecord(spContainer);
    dgContainer.addChildRecord(spgrContainer);
    spContainer = new EscherContainerRecord();
    spContainer.setOptions((short) 15);
    spContainer.setRecordId(EscherContainerRecord.SP_CONTAINER);
    sp = new EscherSpRecord();
    sp.setOptions((short) ((ShapeType.RECT.nativeId << 4) + 2));
    sp.setFlags(EscherSpRecord.FLAG_BACKGROUND | EscherSpRecord.FLAG_HASSHAPETYPE);
    spContainer.addChildRecord(sp);
    EscherOptRecord opt = new EscherOptRecord();
    opt.setRecordId(EscherOptRecord.RECORD_ID);
    opt.addEscherProperty(new EscherRGBProperty(EscherProperties.FILL__FILLCOLOR, 134217728));
    opt.addEscherProperty(new EscherRGBProperty(EscherProperties.FILL__FILLBACKCOLOR, 134217733));
    opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.FILL__RECTRIGHT, 10064750));
    opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.FILL__RECTBOTTOM, 7778750));
    opt.addEscherProperty(new EscherBoolProperty(EscherProperties.FILL__NOFILLHITTEST, 1179666));
    opt.addEscherProperty(new EscherBoolProperty(EscherProperties.LINESTYLE__NOLINEDRAWDASH, 524288));
    opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.SHAPE__BLACKANDWHITESETTINGS, 9));
    opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.SHAPE__BACKGROUNDSHAPE, 65537));
    spContainer.addChildRecord(opt);
    dgContainer.addChildRecord(spContainer);
    childRecords.add(dgContainer);
}
Also used : EscherSpgrRecord(org.apache.poi.ddf.EscherSpgrRecord) EscherBoolProperty(org.apache.poi.ddf.EscherBoolProperty) EscherSimpleProperty(org.apache.poi.ddf.EscherSimpleProperty) EscherSpRecord(org.apache.poi.ddf.EscherSpRecord) EscherContainerRecord(org.apache.poi.ddf.EscherContainerRecord) EscherDgRecord(org.apache.poi.ddf.EscherDgRecord) EscherOptRecord(org.apache.poi.ddf.EscherOptRecord) EscherRGBProperty(org.apache.poi.ddf.EscherRGBProperty)

Example 2 with EscherDgRecord

use of org.apache.poi.ddf.EscherDgRecord in project poi by apache.

the class HSLFSlide method onCreate.

/**
     * Called by SlideShow ater a new slide is created.
     * <p>
     * For Slide we need to do the following:
     *  <li> set id of the drawing group.
     *  <li> set shapeId for the container descriptor and background
     * </p>
     */
@Override
public void onCreate() {
    //initialize drawing group id
    EscherDggRecord dgg = getSlideShow().getDocumentRecord().getPPDrawingGroup().getEscherDggRecord();
    EscherContainerRecord dgContainer = getSheetContainer().getPPDrawing().getDgContainer();
    EscherDgRecord dg = (EscherDgRecord) HSLFShape.getEscherChild(dgContainer, EscherDgRecord.RECORD_ID);
    int dgId = dgg.getMaxDrawingGroupId() + 1;
    dg.setOptions((short) (dgId << 4));
    dgg.setDrawingsSaved(dgg.getDrawingsSaved() + 1);
    dgg.setMaxDrawingGroupId(dgId);
    for (EscherContainerRecord c : dgContainer.getChildContainers()) {
        EscherSpRecord spr = null;
        switch(c.getRecordId()) {
            case EscherContainerRecord.SPGR_CONTAINER:
                EscherContainerRecord dc = (EscherContainerRecord) c.getChild(0);
                spr = dc.getChildById(EscherSpRecord.RECORD_ID);
                break;
            case EscherContainerRecord.SP_CONTAINER:
                spr = c.getChildById(EscherSpRecord.RECORD_ID);
                break;
            default:
                break;
        }
        if (spr != null) {
            spr.setShapeId(allocateShapeId());
        }
    }
    //PPT doen't increment the number of saved shapes for group descriptor and background
    dg.setNumShapes(1);
}
Also used : EscherSpRecord(org.apache.poi.ddf.EscherSpRecord) EscherContainerRecord(org.apache.poi.ddf.EscherContainerRecord) EscherDggRecord(org.apache.poi.ddf.EscherDggRecord) EscherDgRecord(org.apache.poi.ddf.EscherDgRecord)

Example 3 with EscherDgRecord

use of org.apache.poi.ddf.EscherDgRecord in project poi by apache.

the class DrawingManager method allocateShapeId.

/**
     * Allocates new shape id for the new drawing group id.
     *
     * @param drawingGroupId The drawing group id
     * @return a new shape id.
     */
public int allocateShapeId(short drawingGroupId) {
    // Get the last shape id for this drawing group.
    EscherDgRecord dg = dgMap.get(drawingGroupId);
    int lastShapeId = dg.getLastMSOSPID();
    // Have we run out of shapes for this cluster?
    int newShapeId = 0;
    if (lastShapeId % 1024 == 1023) {
        // Yes:
        // Find the starting shape id of the next free cluster
        newShapeId = findFreeSPIDBlock();
        // Create a new cluster in the dgg record.
        dgg.addCluster(drawingGroupId, 1);
    } else {
        // Find the cluster for this drawing group with free space.
        for (int i = 0; i < dgg.getFileIdClusters().length; i++) {
            EscherDggRecord.FileIdCluster c = dgg.getFileIdClusters()[i];
            if (c.getDrawingGroupId() == drawingGroupId) {
                if (c.getNumShapeIdsUsed() != 1024) {
                    // Increment the number of shapes used for this cluster.
                    c.incrementShapeId();
                }
            }
            // If the last shape id = -1 then we know to find a free block;
            if (dg.getLastMSOSPID() == -1) {
                newShapeId = findFreeSPIDBlock();
            } else {
                // The new shape id to be the last shapeid of this cluster + 1
                newShapeId = dg.getLastMSOSPID() + 1;
            }
        }
    }
    // Increment the total number of shapes used in the dgg.
    dgg.setNumShapesSaved(dgg.getNumShapesSaved() + 1);
    // Is the new shape id >= max shape id for dgg?
    if (newShapeId >= dgg.getShapeIdMax()) {
        // Yes:
        // Set the max shape id = new shape id + 1
        dgg.setShapeIdMax(newShapeId + 1);
    }
    // Set last shape id for this drawing group.
    dg.setLastMSOSPID(newShapeId);
    // Increased the number of shapes used for this drawing group.
    dg.incrementShapeCount();
    return newShapeId;
}
Also used : EscherDgRecord(org.apache.poi.ddf.EscherDgRecord) EscherDggRecord(org.apache.poi.ddf.EscherDggRecord)

Example 4 with EscherDgRecord

use of org.apache.poi.ddf.EscherDgRecord in project poi by apache.

the class EscherAggregate method setDgId.

/**
     * EscherDgContainer
     * -EscherSpgrContainer
     * -EscherDgRecord - set id for this record
     * set id for DgRecord of DgContainer
     * @param dgId - id which must be set
     */
public void setDgId(short dgId) {
    EscherContainerRecord dgContainer = getEscherContainer();
    EscherDgRecord dg = dgContainer.getChildById(EscherDgRecord.RECORD_ID);
    dg.setOptions((short) (dgId << 4));
}
Also used : EscherContainerRecord(org.apache.poi.ddf.EscherContainerRecord) EscherDgRecord(org.apache.poi.ddf.EscherDgRecord)

Example 5 with EscherDgRecord

use of org.apache.poi.ddf.EscherDgRecord in project poi by apache.

the class HSSFPatriarch method newShapeId.

/**
     * @return new unique shapeId
     */
int newShapeId() {
    DrawingManager2 dm = _sheet.getWorkbook().getWorkbook().getDrawingManager();
    EscherDgRecord dg = _boundAggregate.getEscherContainer().getChildById(EscherDgRecord.RECORD_ID);
    short drawingGroupId = dg.getDrawingGroupId();
    return dm.allocateShapeId(drawingGroupId, dg);
}
Also used : EscherDgRecord(org.apache.poi.ddf.EscherDgRecord) DrawingManager2(org.apache.poi.hssf.model.DrawingManager2)

Aggregations

EscherDgRecord (org.apache.poi.ddf.EscherDgRecord)18 EscherDggRecord (org.apache.poi.ddf.EscherDggRecord)7 EscherContainerRecord (org.apache.poi.ddf.EscherContainerRecord)5 EscherSpRecord (org.apache.poi.ddf.EscherSpRecord)5 EscherAggregate (org.apache.poi.hssf.record.EscherAggregate)3 Test (org.junit.Test)3 EscherOptRecord (org.apache.poi.ddf.EscherOptRecord)2 EscherSimpleProperty (org.apache.poi.ddf.EscherSimpleProperty)2 EscherSpgrRecord (org.apache.poi.ddf.EscherSpgrRecord)2 DrawingManager2 (org.apache.poi.hssf.model.DrawingManager2)2 EscherBSERecord (org.apache.poi.ddf.EscherBSERecord)1 EscherBoolProperty (org.apache.poi.ddf.EscherBoolProperty)1 EscherRGBProperty (org.apache.poi.ddf.EscherRGBProperty)1 EscherRecord (org.apache.poi.ddf.EscherRecord)1 HSLFLine (org.apache.poi.hslf.usermodel.HSLFLine)1 HSLFShape (org.apache.poi.hslf.usermodel.HSLFShape)1 HSLFSlide (org.apache.poi.hslf.usermodel.HSLFSlide)1 HSLFSlideShow (org.apache.poi.hslf.usermodel.HSLFSlideShow)1 RecordFormatException (org.apache.poi.util.RecordFormatException)1