You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ye...@apache.org on 2008/04/19 13:16:58 UTC
svn commit: r649797 - in /poi/trunk/src/scratchpad:
src/org/apache/poi/hslf/model/ src/org/apache/poi/hslf/record/
testcases/org/apache/poi/hslf/model/
Author: yegor
Date: Sat Apr 19 04:16:53 2008
New Revision: 649797
URL: http://svn.apache.org/viewvc?rev=649797&view=rev
Log:
properly set shapeId for new shapes
Modified:
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Picture.java
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Shape.java
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Sheet.java
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Table.java
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/TextShape.java
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/PPDrawingGroup.java
poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/model/TestShapes.java
Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Picture.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Picture.java?rev=649797&r1=649796&r2=649797&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Picture.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Picture.java Sat Apr 19 04:16:53 2008
@@ -197,6 +197,7 @@
* By default set the orininal image size
*/
protected void afterInsert(Sheet sh){
+ super.afterInsert(sh);
java.awt.Rectangle anchor = getAnchor();
if (anchor.equals(new java.awt.Rectangle())){
setDefaultSize();
Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Shape.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Shape.java?rev=649797&r1=649796&r2=649797&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Shape.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Shape.java Sat Apr 19 04:16:53 2008
@@ -18,10 +18,11 @@
import org.apache.poi.ddf.*;
import org.apache.poi.hslf.record.ColorSchemeAtom;
+import org.apache.poi.hslf.record.PPDrawing;
import org.apache.poi.util.POILogger;
import org.apache.poi.util.POILogFactory;
-import java.util.Iterator;
+import java.util.*;
import java.awt.*;
import java.awt.geom.Rectangle2D;
@@ -324,7 +325,58 @@
* @param sh - owning shape
*/
protected void afterInsert(Sheet sh){
+ PPDrawing ppdrawing = sh.getPPDrawing();
+ EscherContainerRecord dgContainer = (EscherContainerRecord) ppdrawing.getEscherRecords()[0];
+
+ EscherDgRecord dg = (EscherDgRecord) Shape.getEscherChild(dgContainer, EscherDgRecord.RECORD_ID);
+
+ int id = allocateShapeId(dg);
+ setShapeId(id);
+ }
+
+ /**
+ * Allocates new shape id for the new drawing group id.
+ *
+ * @param dg EscherDgRecord of the sheet that owns the shape being created
+ *
+ * @return a new shape id.
+ */
+ protected int allocateShapeId(EscherDgRecord dg)
+ {
+ EscherDggRecord dgg = _sheet.getSlideShow().getDocumentRecord().getPPDrawingGroup().getEscherDggRecord();
+ if(dgg == null){
+ logger.log(POILogger.ERROR, "EscherDggRecord not found");
+ return 0;
+ }
+
+ 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() == dg.getDrawingGroupId() && c.getNumShapeIdsUsed() != 1024)
+ {
+ int result = c.getNumShapeIdsUsed() + (1024 * (i+1));
+ c.incrementShapeId();
+ dg.setNumShapes( dg.getNumShapes() + 1 );
+ dg.setLastMSOSPID( result );
+ if (result >= dgg.getShapeIdMax())
+ dgg.setShapeIdMax( result + 1 );
+ return result;
+ }
+ }
+
+ // Create new cluster
+ dgg.addCluster( dg.getDrawingGroupId(), 0 );
+ dgg.getFileIdClusters()[dgg.getFileIdClusters().length-1].incrementShapeId();
+ dg.setNumShapes( dg.getNumShapes() + 1 );
+ int result = (1024 * dgg.getFileIdClusters().length);
+ dg.setLastMSOSPID( result );
+ if (result >= dgg.getShapeIdMax())
+ dgg.setShapeIdMax( result + 1 );
+ return result;
}
/**
@@ -351,6 +403,24 @@
}
Color tmp = new Color(rgb, true);
return new Color(tmp.getBlue(), tmp.getGreen(), tmp.getRed(), alpha);
+ }
+
+ /**
+ * @return id for the shape.
+ */
+ public int getShapeId(){
+ EscherSpRecord spRecord = _escherContainer.getChildById(EscherSpRecord.RECORD_ID);
+ return spRecord == null ? 0 : spRecord.getShapeId();
+ }
+
+ /**
+ * Sets shape ID
+ *
+ * @param id of the shape
+ */
+ public void setShapeId(int id){
+ EscherSpRecord spRecord = _escherContainer.getChildById(EscherSpRecord.RECORD_ID);
+ if(spRecord != null) spRecord.setShapeId(id);
}
/**
Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Sheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Sheet.java?rev=649797&r1=649796&r2=649797&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Sheet.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Sheet.java Sat Apr 19 04:16:53 2008
@@ -247,14 +247,6 @@
EscherContainerRecord spgr = (EscherContainerRecord) Shape.getEscherChild(dgContainer, EscherContainerRecord.SPGR_CONTAINER);
spgr.addChildRecord(shape.getSpContainer());
- EscherDgRecord dg = (EscherDgRecord) Shape.getEscherChild(dgContainer, EscherDgRecord.RECORD_ID);
- dg.setNumShapes(dg.getNumShapes() + 1);
-
- int shapeId = dg.getLastMSOSPID()+1;
- dg.setLastMSOSPID(shapeId);
-
- EscherSpRecord sp = shape.getSpContainer().getChildById(EscherSpRecord.RECORD_ID);
- if(sp != null) sp.setShapeId(shapeId);
shape.setSheet(this);
shape.afterInsert(this);
Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Table.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Table.java?rev=649797&r1=649796&r2=649797&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Table.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Table.java Sat Apr 19 04:16:53 2008
@@ -112,6 +112,8 @@
}
protected void afterInsert(Sheet sh){
+ super.afterInsert(sh);
+
EscherContainerRecord spCont = (EscherContainerRecord) getSpContainer().getChild(0);
List lst = spCont.getChildRecords();
EscherOptRecord opt = (EscherOptRecord)lst.get(lst.size()-2);
Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/TextShape.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/TextShape.java?rev=649797&r1=649796&r2=649797&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/TextShape.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/TextShape.java Sat Apr 19 04:16:53 2008
@@ -184,6 +184,8 @@
* @param sh the sheet we are adding to
*/
protected void afterInsert(Sheet sh){
+ super.afterInsert(sh);
+
EscherTextboxWrapper _txtbox = getEscherTextboxWrapper();
if(_txtbox != null){
PPDrawing ppdrawing = sh.getPPDrawing();
Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/PPDrawingGroup.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/PPDrawingGroup.java?rev=649797&r1=649796&r2=649797&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/PPDrawingGroup.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/PPDrawingGroup.java Sat Apr 19 04:16:53 2008
@@ -37,6 +37,8 @@
private byte[] _header;
private EscherContainerRecord dggContainer;
+ //cached dgg
+ private EscherDggRecord dgg;
protected PPDrawingGroup(byte[] source, int start, int len) {
// Get the header
@@ -115,5 +117,18 @@
public EscherContainerRecord getDggContainer(){
return dggContainer;
+ }
+
+ public EscherDggRecord getEscherDggRecord(){
+ if(dgg == null){
+ for(Iterator it = dggContainer.getChildRecords().iterator(); it.hasNext();){
+ EscherRecord r = (EscherRecord) it.next();
+ if(r instanceof EscherDggRecord){
+ dgg = (EscherDggRecord)r;
+ break;
+ }
+ }
+ }
+ return dgg;
}
}
Modified: poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/model/TestShapes.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/model/TestShapes.java?rev=649797&r1=649796&r2=649797&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/model/TestShapes.java (original)
+++ poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/model/TestShapes.java Sat Apr 19 04:16:53 2008
@@ -307,4 +307,22 @@
sl = ppt.getSlides()[0];
assertEquals("expected 0 shaped in " + file, 0, sl.getShapes().length);
}
+
+ public void testShapeId() throws IOException {
+ SlideShow ppt = new SlideShow();
+ Slide slide = ppt.createSlide();
+ Shape shape;
+
+ shape = new Line();
+ assertEquals(0, shape.getShapeId());
+ slide.addShape(shape);
+ assertTrue(shape.getShapeId() > 0);
+
+ int shapeId = shape.getShapeId();
+
+ shape = new Line();
+ assertEquals(0, shape.getShapeId());
+ slide.addShape(shape);
+ assertEquals(shapeId + 1, shape.getShapeId());
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org