FileDocCategorySizeDatePackage
DrawingManager2.javaAPI DocApache Poi 3.0.14179Mon Jan 01 12:39:36 GMT 2007org.apache.poi.hssf.model

DrawingManager2

public class DrawingManager2 extends Object
Provides utilities to manage drawing groups.
author
Glen Stampoultzis (glens at apache.org)

Fields Summary
EscherDggRecord
dgg
List
drawingGroups
Constructors Summary
public DrawingManager2(EscherDggRecord dgg)



        
    
        this.dgg = dgg;
    
Methods Summary
public intallocateShapeId(short drawingGroupId)
Allocates new shape id for the new drawing group id.

return
a new shape id.

        dgg.setNumShapesSaved( dgg.getNumShapesSaved() + 1 );

        // Add to existing cluster if space available
        for (int i = 0; i < dgg.getFileIdClusters().length; i++)
        {
            EscherDggRecord.FileIdCluster c = dgg.getFileIdClusters()[i];
            if (c.getDrawingGroupId() == drawingGroupId && c.getNumShapeIdsUsed() != 1024)
            {
                int result = c.getNumShapeIdsUsed() + (1024 * (i+1));
                c.incrementShapeId();
                EscherDgRecord dg = getDrawingGroup(drawingGroupId);
                dg.setNumShapes( dg.getNumShapes() + 1 );
                dg.setLastMSOSPID( result );
                if (result >= dgg.getShapeIdMax())
                    dgg.setShapeIdMax( result + 1 );
                return result;
            }
        }

        // Create new cluster
        dgg.addCluster( drawingGroupId, 0 );
        dgg.getFileIdClusters()[dgg.getFileIdClusters().length-1].incrementShapeId();
        EscherDgRecord dg = getDrawingGroup(drawingGroupId);
        dg.setNumShapes( dg.getNumShapes() + 1 );
        int result = (1024 * dgg.getFileIdClusters().length);
        dg.setLastMSOSPID( result );
        if (result >= dgg.getShapeIdMax())
            dgg.setShapeIdMax( result + 1 );
        return result;
    
public org.apache.poi.ddf.EscherDgRecordcreateDgRecord()

        EscherDgRecord dg = new EscherDgRecord();
        dg.setRecordId( EscherDgRecord.RECORD_ID );
        short dgId = findNewDrawingGroupId();
        dg.setOptions( (short) ( dgId << 4 ) );
        dg.setNumShapes( 0 );
        dg.setLastMSOSPID( -1 );
        drawingGroups.add(dg);
        dgg.addCluster( dgId, 0 );
        dgg.setDrawingsSaved( dgg.getDrawingsSaved() + 1 );
        return dg;
    
booleandrawingGroupExists(short dgId)

        for ( int i = 0; i < dgg.getFileIdClusters().length; i++ )
        {
            if ( dgg.getFileIdClusters()[i].getDrawingGroupId() == dgId )
                return true;
        }
        return false;
    
intfindFreeSPIDBlock()

        int max = dgg.getShapeIdMax();
        int next = ( ( max / 1024 ) + 1 ) * 1024;
        return next;
    
shortfindNewDrawingGroupId()

        short dgId = 1;
        while ( drawingGroupExists( dgId ) )
            dgId++;
        return dgId;
    
public org.apache.poi.ddf.EscherDggRecordgetDgg()

        return dgg;
    
org.apache.poi.ddf.EscherDgRecordgetDrawingGroup(int drawingGroupId)

        return (EscherDgRecord) drawingGroups.get(drawingGroupId-1);