glens 2004/02/10 13:59:21
Modified: src/java/org/apache/poi/hssf/model Tag: REL_2_BRANCH
Sheet.java Workbook.java
Added: src/java/org/apache/poi/hssf/model Tag: REL_2_BRANCH
AbstractShape.java ConvertAnchor.java
DrawingManager.java LineShape.java
PolygonShape.java SimpleFilledShape.java
TextboxShape.java
Log:
Model for drawing format support
Revision Changes Path
No revision
No revision
1.31.2.10 +75 -14 jakarta-poi/src/java/org/apache/poi/hssf/model/Sheet.java
Index: Sheet.java
===================================================================
RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/model/Sheet.java,v
retrieving revision 1.31.2.9
retrieving revision 1.31.2.10
diff -u -r1.31.2.9 -r1.31.2.10
--- Sheet.java 9 Feb 2004 22:41:26 -0000 1.31.2.9
+++ Sheet.java 10 Feb 2004 21:59:21 -0000 1.31.2.10
@@ -55,16 +55,18 @@
package org.apache.poi.hssf.model;
-import java.util.List;
+import org.apache.poi.hssf.record.*;
+import org.apache.poi.hssf.record.aggregates.FormulaRecordAggregate;
+import org.apache.poi.hssf.record.aggregates.RowRecordsAggregate;
+import org.apache.poi.hssf.record.aggregates.ValueRecordsAggregate;
+import org.apache.poi.hssf.record.formula.Ptg;
+import org.apache.poi.util.IntList;
+import org.apache.poi.util.POILogFactory;
+import org.apache.poi.util.POILogger;
+
import java.util.ArrayList;
import java.util.Iterator;
-
-import org.apache.poi.hssf
- .record.*; // normally I don't do this, buy we literally mean ALL
-import org.apache.poi.hssf.record.formula.Ptg;
-import org.apache.poi.util.*;
-import org.apache.poi.hssf.record
- .aggregates.*; // normally I don't do this, buy we literally mean ALL
+import java.util.List;
/**
* Low level model implementation of a Sheet (one workbook contains many sheets)
@@ -795,12 +797,17 @@
// System.arraycopy(rec, 0, data, offset + pos, rec.length);
Record record = (( Record ) records.get(k));
- //uncomment to test record sizes
+ //// uncomment to test record sizes ////
+// System.out.println( record.getClass().getName() );
// byte[] data2 = new byte[record.getRecordSize()];
// record.serialize(0, data2 ); // rec.length;
// if (LittleEndian.getUShort(data2, 2) != record.getRecordSize() - 4
-// && record instanceof RowRecordsAggregate == false && record
instanceof ValueRecordsAggregate == false)
-// throw new RuntimeException("Blah!!!");
+// && record instanceof RowRecordsAggregate == false
+// && record instanceof ValueRecordsAggregate == false
+// && record instanceof EscherAggregate == false)
+// {
+// throw new RuntimeException("Blah!!! Size off by " + (
LittleEndian.getUShort(data2, 2) - record.getRecordSize() - 4) + " records.");
+// }
pos += record.serialize(pos + offset, data ); // rec.length;
@@ -2609,7 +2616,7 @@
* @return whether RowColHeadings are displayed
*/
public boolean isDisplayRowColHeadings() {
- return windowTwo.getDisplayRowColHeadings();
+ return windowTwo.getDisplayRowColHeadings();
}
/**
@@ -2620,9 +2627,63 @@
protected Margin[] getMargins() {
if (margins == null)
margins = new Margin[4];
- return margins;
+ return margins;
}
-
+
+ public int aggregateDrawingRecords(DrawingManager drawingManager)
+ {
+ int loc = findFirstRecordLocBySid(DrawingRecord.sid);
+ boolean noDrawingRecordsFound = loc == -1;
+ if (noDrawingRecordsFound)
+ {
+ EscherAggregate aggregate = new EscherAggregate( drawingManager );
+ loc = findFirstRecordLocBySid(EscherAggregate.sid);
+ if (loc == -1)
+ {
+ loc = findFirstRecordLocBySid( WindowTwoRecord.sid );
+ }
+ else
+ {
+ getRecords().remove(loc);
+ }
+ getRecords().add( loc, aggregate );
+ return loc;
+ }
+ else
+ {
+ List records = getRecords();
+ EscherAggregate r = EscherAggregate.createAggregate( records, loc,
drawingManager );
+ int startloc = loc;
+ while ( loc + 1 < records.size()
+ && records.get( loc ) instanceof DrawingRecord
+ && records.get( loc + 1 ) instanceof ObjRecord )
+ {
+ loc += 2;
+ }
+ int endloc = loc-1;
+ for(int i = 0; i < (endloc - startloc + 1); i++)
+ records.remove(startloc);
+ records.add(startloc, r);
+
+ return startloc;
+ }
+ }
+
+ /**
+ * Perform any work necessary before the sheet is about to be serialized.
+ * For instance the escher aggregates size needs to be calculated before
+ * serialization so that the dgg record (which occurs first) can be written.
+ */
+ public void preSerialize()
+ {
+ for ( Iterator iterator = getRecords().iterator(); iterator.hasNext(); )
+ {
+ Record r = (Record) iterator.next();
+ if (r instanceof EscherAggregate)
+ r.getRecordSize(); // Trigger flatterning of user model and
corresponding update of dgg record.
+ }
+ }
+
/**
* Shifts all the page breaks in the range "count" number of rows/columns
* @param breaks The page record to be shifted
1.29.2.7 +57 -3 jakarta-poi/src/java/org/apache/poi/hssf/model/Workbook.java
Index: Workbook.java
===================================================================
RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/model/Workbook.java,v
retrieving revision 1.29.2.6
retrieving revision 1.29.2.7
diff -u -r1.29.2.6 -r1.29.2.7
--- Workbook.java 9 Nov 2003 21:01:52 -0000 1.29.2.6
+++ Workbook.java 10 Feb 2004 21:59:21 -0000 1.29.2.7
@@ -58,8 +58,10 @@
import org.apache.poi.hssf.record.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.hssf.util.SheetReferences;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger;
+import org.apache.poi.ddf.*;
import java.util.ArrayList;
import java.util.Iterator;
@@ -91,7 +93,8 @@
* @version 1.0-pre
*/
-public class Workbook implements Model {
+public class Workbook implements Model
+{
private static final int DEBUG = POILogger.DEBUG;
// public static Workbook currentBook = null;
@@ -133,6 +136,7 @@
protected int numfonts = 0; // hold the number of font records
private short maxformatid = -1; // holds the max format id
private boolean uses1904datewindowing = false; // whether 1904
date windowing is being used
+ private DrawingManager drawingManager;
private static POILogger log = POILogFactory.getLogger(Workbook.class);
@@ -2080,7 +2084,57 @@
}
return palette;
}
-
-
+
+ /**
+ * Creates a drawing group record. If it already exists then it's left
+ * alone.
+ */
+ public void createDrawingGroup()
+ {
+ int dggLoc = findFirstRecordLocBySid(EscherContainerRecord.DGG_CONTAINER);
+ if (dggLoc == -1)
+ {
+ EscherContainerRecord dggContainer = new EscherContainerRecord();
+ EscherDggRecord dgg = new EscherDggRecord();
+ EscherOptRecord opt = new EscherOptRecord();
+ EscherSplitMenuColorsRecord splitMenuColors = new
EscherSplitMenuColorsRecord();
+
+ dggContainer.setRecordId((short) 0xF000);
+ dggContainer.setOptions((short) 0x000F);
+ dgg.setRecordId(EscherDggRecord.RECORD_ID);
+ dgg.setOptions((short)0x0000);
+ dgg.setShapeIdMax(1024);
+ dgg.setNumShapesSaved(0);
+ dgg.setDrawingsSaved(0);
+ dgg.setFileIdClusters(new EscherDggRecord.FileIdCluster[] {} );
+ drawingManager = new DrawingManager(dgg);
+ opt.setRecordId((short) 0xF00B);
+ opt.setOptions((short) 0x0033);
+ opt.addEscherProperty( new
EscherBoolProperty(EscherProperties.TEXT__SIZE_TEXT_TO_FIT_SHAPE, 524296) );
+ opt.addEscherProperty( new
EscherRGBProperty(EscherProperties.FILL__FILLCOLOR, 134217737) );
+ opt.addEscherProperty( new
EscherRGBProperty(EscherProperties.LINESTYLE__COLOR, 134217792) );
+ splitMenuColors.setRecordId((short) 0xF11E);
+ splitMenuColors.setOptions((short) 0x0040);
+ splitMenuColors.setColor1(0x0800000D);
+ splitMenuColors.setColor2(0x0800000C);
+ splitMenuColors.setColor3(0x08000017);
+ splitMenuColors.setColor4(0x100000F7);
+
+ dggContainer.addChildRecord(dgg);
+ dggContainer.addChildRecord(opt);
+ dggContainer.addChildRecord(splitMenuColors);
+
+ DrawingGroupRecord drawingGroup = new DrawingGroupRecord();
+ drawingGroup.addEscherRecord(dggContainer);
+ int loc = findFirstRecordLocBySid(CountryRecord.sid);
+ getRecords().add(loc+1, drawingGroup);
+ }
+ }
+
+ public DrawingManager getDrawingManager()
+ {
+ return drawingManager;
+ }
+
}
No revision
Index: Workbook.java
===================================================================
RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/model/Workbook.java,v
retrieving revision 1.29.2.6
retrieving revision 1.29.2.7
diff -u -r1.29.2.6 -r1.29.2.7
--- Workbook.java 9 Nov 2003 21:01:52 -0000 1.29.2.6
+++ Workbook.java 10 Feb 2004 21:59:21 -0000 1.29.2.7
@@ -58,8 +58,10 @@
import org.apache.poi.hssf.record.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.hssf.util.SheetReferences;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger;
+import org.apache.poi.ddf.*;
import java.util.ArrayList;
import java.util.Iterator;
@@ -91,7 +93,8 @@
* @version 1.0-pre
*/
-public class Workbook implements Model {
+public class Workbook implements Model
+{
private static final int DEBUG = POILogger.DEBUG;
// public static Workbook currentBook = null;
@@ -133,6 +136,7 @@
protected int numfonts = 0; // hold the number of font records
private short maxformatid = -1; // holds the max format id
private boolean uses1904datewindowing = false; // whether 1904
date windowing is being used
+ private DrawingManager drawingManager;
private static POILogger log = POILogFactory.getLogger(Workbook.class);
@@ -2080,7 +2084,57 @@
}
return palette;
}
-
-
+
+ /**
+ * Creates a drawing group record. If it already exists then it's left
+ * alone.
+ */
+ public void createDrawingGroup()
+ {
+ int dggLoc = findFirstRecordLocBySid(EscherContainerRecord.DGG_CONTAINER);
+ if (dggLoc == -1)
+ {
+ EscherContainerRecord dggContainer = new EscherContainerRecord();
+ EscherDggRecord dgg = new EscherDggRecord();
+ EscherOptRecord opt = new EscherOptRecord();
+ EscherSplitMenuColorsRecord splitMenuColors = new
EscherSplitMenuColorsRecord();
+
+ dggContainer.setRecordId((short) 0xF000);
+ dggContainer.setOptions((short) 0x000F);
+ dgg.setRecordId(EscherDggRecord.RECORD_ID);
+ dgg.setOptions((short)0x0000);
+ dgg.setShapeIdMax(1024);
+ dgg.setNumShapesSaved(0);
+ dgg.setDrawingsSaved(0);
+ dgg.setFileIdClusters(new EscherDggRecord.FileIdCluster[] {} );
+ drawingManager = new DrawingManager(dgg);
+ opt.setRecordId((short) 0xF00B);
+ opt.setOptions((short) 0x0033);
+ opt.addEscherProperty( new
EscherBoolProperty(EscherProperties.TEXT__SIZE_TEXT_TO_FIT_SHAPE, 524296) );
+ opt.addEscherProperty( new
EscherRGBProperty(EscherProperties.FILL__FILLCOLOR, 134217737) );
+ opt.addEscherProperty( new
EscherRGBProperty(EscherProperties.LINESTYLE__COLOR, 134217792) );
+ splitMenuColors.setRecordId((short) 0xF11E);
+ splitMenuColors.setOptions((short) 0x0040);
+ splitMenuColors.setColor1(0x0800000D);
+ splitMenuColors.setColor2(0x0800000C);
+ splitMenuColors.setColor3(0x08000017);
+ splitMenuColors.setColor4(0x100000F7);
+
+ dggContainer.addChildRecord(dgg);
+ dggContainer.addChildRecord(opt);
+ dggContainer.addChildRecord(splitMenuColors);
+
+ DrawingGroupRecord drawingGroup = new DrawingGroupRecord();
+ drawingGroup.addEscherRecord(dggContainer);
+ int loc = findFirstRecordLocBySid(CountryRecord.sid);
+ getRecords().add(loc+1, drawingGroup);
+ }
+ }
+
+ public DrawingManager getDrawingManager()
+ {
+ return drawingManager;
+ }
+
}
No revision
Index: Workbook.java
===================================================================
RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/model/Workbook.java,v
retrieving revision 1.29.2.6
retrieving revision 1.29.2.7
diff -u -r1.29.2.6 -r1.29.2.7
--- Workbook.java 9 Nov 2003 21:01:52 -0000 1.29.2.6
+++ Workbook.java 10 Feb 2004 21:59:21 -0000 1.29.2.7
@@ -58,8 +58,10 @@
import org.apache.poi.hssf.record.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.hssf.util.SheetReferences;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger;
+import org.apache.poi.ddf.*;
import java.util.ArrayList;
import java.util.Iterator;
@@ -91,7 +93,8 @@
* @version 1.0-pre
*/
-public class Workbook implements Model {
+public class Workbook implements Model
+{
private static final int DEBUG = POILogger.DEBUG;
// public static Workbook currentBook = null;
@@ -133,6 +136,7 @@
protected int numfonts = 0; // hold the number of font records
private short maxformatid = -1; // holds the max format id
private boolean uses1904datewindowing = false; // whether 1904
date windowing is being used
+ private DrawingManager drawingManager;
private static POILogger log = POILogFactory.getLogger(Workbook.class);
@@ -2080,7 +2084,57 @@
}
return palette;
}
-
-
+
+ /**
+ * Creates a drawing group record. If it already exists then it's left
+ * alone.
+ */
+ public void createDrawingGroup()
+ {
+ int dggLoc = findFirstRecordLocBySid(EscherContainerRecord.DGG_CONTAINER);
+ if (dggLoc == -1)
+ {
+ EscherContainerRecord dggContainer = new EscherContainerRecord();
+ EscherDggRecord dgg = new EscherDggRecord();
+ EscherOptRecord opt = new EscherOptRecord();
+ EscherSplitMenuColorsRecord splitMenuColors = new
EscherSplitMenuColorsRecord();
+
+ dggContainer.setRecordId((short) 0xF000);
+ dggContainer.setOptions((short) 0x000F);
+ dgg.setRecordId(EscherDggRecord.RECORD_ID);
+ dgg.setOptions((short)0x0000);
+ dgg.setShapeIdMax(1024);
+ dgg.setNumShapesSaved(0);
+ dgg.setDrawingsSaved(0);
+ dgg.setFileIdClusters(new EscherDggRecord.FileIdCluster[] {} );
+ drawingManager = new DrawingManager(dgg);
+ opt.setRecordId((short) 0xF00B);
+ opt.setOptions((short) 0x0033);
+ opt.addEscherProperty( new
EscherBoolProperty(EscherProperties.TEXT__SIZE_TEXT_TO_FIT_SHAPE, 524296) );
+ opt.addEscherProperty( new
EscherRGBProperty(EscherProperties.FILL__FILLCOLOR, 134217737) );
+ opt.addEscherProperty( new
EscherRGBProperty(EscherProperties.LINESTYLE__COLOR, 134217792) );
+ splitMenuColors.setRecordId((short) 0xF11E);
+ splitMenuColors.setOptions((short) 0x0040);
+ splitMenuColors.setColor1(0x0800000D);
+ splitMenuColors.setColor2(0x0800000C);
+ splitMenuColors.setColor3(0x08000017);
+ splitMenuColors.setColor4(0x100000F7);
+
+ dggContainer.addChildRecord(dgg);
+ dggContainer.addChildRecord(opt);
+ dggContainer.addChildRecord(splitMenuColors);
+
+ DrawingGroupRecord drawingGroup = new DrawingGroupRecord();
+ drawingGroup.addEscherRecord(dggContainer);
+ int loc = findFirstRecordLocBySid(CountryRecord.sid);
+ getRecords().add(loc+1, drawingGroup);
+ }
+ }
+
+ public DrawingManager getDrawingManager()
+ {
+ return drawingManager;
+ }
+
}
1.1.2.1 +126 -0
jakarta-poi/src/java/org/apache/poi/hssf/model/Attic/AbstractShape.java
1.1.2.1 +50 -0
jakarta-poi/src/java/org/apache/poi/hssf/model/Attic/ConvertAnchor.java
1.1.2.1 +136 -0
jakarta-poi/src/java/org/apache/poi/hssf/model/Attic/DrawingManager.java
1.1.2.1 +105 -0
jakarta-poi/src/java/org/apache/poi/hssf/model/Attic/LineShape.java
1.1.2.1 +143 -0
jakarta-poi/src/java/org/apache/poi/hssf/model/Attic/PolygonShape.java
1.1.2.1 +111 -0
jakarta-poi/src/java/org/apache/poi/hssf/model/Attic/SimpleFilledShape.java
1.1.2.1 +151 -0
jakarta-poi/src/java/org/apache/poi/hssf/model/Attic/TextboxShape.java
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]