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]

Reply via email to