You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by jo...@apache.org on 2009/05/21 20:15:01 UTC

svn commit: r777204 [7/21] - in /poi/trunk/src/scratchpad: examples/src/org/apache/poi/hslf/examples/ examples/src/org/apache/poi/hwpf/ src/org/apache/poi/hdf/event/ src/org/apache/poi/hdf/extractor/ src/org/apache/poi/hdf/extractor/data/ src/org/apach...

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/PPFont.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/PPFont.java?rev=777204&r1=777203&r2=777204&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/PPFont.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/PPFont.java Thu May 21 18:12:22 2009
@@ -1,243 +1,243 @@
-/* ====================================================================
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-==================================================================== */
-
-package org.apache.poi.hslf.model;
-
-import org.apache.poi.hslf.record.FontEntityAtom;
-
-/**
- * Represents a Font used in a presenation.
- * <p>
- * In PowerPoint Font is a shared resource and can be shared among text object in the presentation.
- * </p>
- * Some commonly used fonts are predefined in static constants. 
- *
- * @author Yegor Kozlov
- */
-public class PPFont {
-    /**
-     * ANSI character set
-     */
-    public final static byte ANSI_CHARSET = 0;
-
-    /**
-     * Default character set.
-     */
-    public final static byte DEFAULT_CHARSET = 1;
-
-    /**
-     * Symbol character set
-     */
-    public final static byte SYMBOL_CHARSET = 2;
-
-
-    /**
-     * Constants for the pitch and family of the font.
-     * The two low-order bits specify the pitch of the font and can be one of the following values
-     */
-    public final static byte DEFAULT_PITCH  = 0;
-    public final static byte FIXED_PITCH    = 1;
-    public final static byte VARIABLE_PITCH = 2;
-
-    /**
-     * Don't care or don't know.
-     */
-    public final static byte FF_DONTCARE    = 0;
-    /**
-     * Fonts with variable stroke width (proportional) and with serifs. Times New Roman is an example.
-     */
-    public final static byte FF_ROMAN       = 16;
-    /**
-     * Fonts with variable stroke width (proportional) and without serifs. Arial is an example.
-     */
-    public final static byte FF_SWISS       = 32;
-    /**
-     * Fonts designed to look like handwriting. Script and Cursive are examples.
-     */
-    public final static byte FF_SCRIPT      = 64;
-    /**
-     * Fonts with constant stroke width (monospace), with or without serifs.
-     * Monospace fonts are usually modern. CourierNew is an example
-     */
-    public final static byte FF_MODERN      = 48;
-    /**
-     * Novelty fonts. Old English is an example
-     */
-    public final static byte FF_DECORATIVE  = 80;
-
-
-    protected int charset;
-    protected int type;
-    protected int flags;
-    protected int pitch;
-    protected String name;
-
-    /**
-     * Creates a new instance of PPFont
-     */
-    public PPFont(){
-
-    }
-
-    /**
-     * Creates a new instance of PPFont and initialize it from the supplied font atom
-     */
-    public PPFont(FontEntityAtom fontAtom){
-        name = fontAtom.getFontName();
-        charset = fontAtom.getCharSet();
-        type = fontAtom.getFontType();
-        flags = fontAtom.getFontFlags();
-        pitch = fontAtom.getPitchAndFamily();
-    }
-
-    /**
-     * set the name for the font (i.e. Arial)
-     *
-     * @param val  String representing the name of the font to use
-     */
-     public void setFontName(String val){
-        name = val;
-    }
-
-    /**
-     * get the name for the font (i.e. Arial)
-     *
-     * @return String representing the name of the font to use
-     */
-    public String getFontName(){
-        return name;
-    }
-
-    /**
-     * set the character set
-     *
-     * @param val - characterset
-     */
-    public void setCharSet(int val){
-        charset = val;
-    }
-
-    /**
-     * get the character set
-     *
-     * @return charset - characterset
-     */
-    public int getCharSet(){
-        return charset;
-    }
-
-    /**
-     * set the font flags
-     * Bit 1: If set, font is subsetted
-     *
-     * @param val - the font flags
-     */
-    public void setFontFlags(int val){
-        flags = val;
-    }
-
-    /**
-     * get the character set
-     * Bit 1: If set, font is subsetted
-     *
-     * @return the font flags
-     */
-    public int getFontFlags(){
-        return flags;
-    }
-
-    /**
-     * set the font type
-     * <p>
-     * Bit 1: Raster Font
-     * Bit 2: Device Font
-     * Bit 3: TrueType Font
-     * </p>
-     *
-     * @param val - the font type
-     */
-    public void setFontType(int val){
-        type = val;
-    }
-
-    /**
-     * get the font type
-     * <p>
-     * Bit 1: Raster Font
-     * Bit 2: Device Font
-     * Bit 3: TrueType Font
-     * </p>
-     *
-     * @return the font type
-     */
-    public int getFontType(){
-        return type;
-    }
-
-    /**
-     * set lfPitchAndFamily
-     *
-     *
-     * @param val - Corresponds to the lfPitchAndFamily field of the Win32 API LOGFONT structure
-     */
-    public void setPitchAndFamily(int val){
-        pitch = val;
-    }
-
-    /**
-     * get lfPitchAndFamily
-     *
-     * @return corresponds to the lfPitchAndFamily field of the Win32 API LOGFONT structure
-     */
-    public int getPitchAndFamily(){
-        return pitch;
-    }
-
-    public static final PPFont ARIAL;
-    public static final PPFont TIMES_NEW_ROMAN ;
-    public static final PPFont COURIER_NEW;
-    public static final PPFont WINGDINGS;
-    static {
-        ARIAL = new PPFont();
-        ARIAL.setFontName("Arial");
-        ARIAL.setCharSet(ANSI_CHARSET);
-        ARIAL.setFontType(4);
-        ARIAL.setFontFlags(0);
-        ARIAL.setPitchAndFamily(VARIABLE_PITCH | FF_SWISS);
-
-        TIMES_NEW_ROMAN = new PPFont();
-        TIMES_NEW_ROMAN.setFontName("Times New Roman");
-        TIMES_NEW_ROMAN.setCharSet(ANSI_CHARSET);
-        TIMES_NEW_ROMAN.setFontType(4);
-        TIMES_NEW_ROMAN.setFontFlags(0);
-        TIMES_NEW_ROMAN.setPitchAndFamily(VARIABLE_PITCH | FF_ROMAN);
-
-        COURIER_NEW = new PPFont();
-        COURIER_NEW.setFontName("Courier New");
-        COURIER_NEW.setCharSet(ANSI_CHARSET);
-        COURIER_NEW.setFontType(4);
-        COURIER_NEW.setFontFlags(0);
-        COURIER_NEW.setPitchAndFamily(FIXED_PITCH | FF_MODERN);
-
-        WINGDINGS = new PPFont();
-        WINGDINGS.setFontName("Wingdings");
-        WINGDINGS.setCharSet(SYMBOL_CHARSET);
-        WINGDINGS.setFontType(4);
-        WINGDINGS.setFontFlags(0);
-        WINGDINGS.setPitchAndFamily(VARIABLE_PITCH | FF_DONTCARE);
-    }
-}
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+
+package org.apache.poi.hslf.model;
+
+import org.apache.poi.hslf.record.FontEntityAtom;
+
+/**
+ * Represents a Font used in a presenation.
+ * <p>
+ * In PowerPoint Font is a shared resource and can be shared among text object in the presentation.
+ * </p>
+ * Some commonly used fonts are predefined in static constants.
+ *
+ * @author Yegor Kozlov
+ */
+public final class PPFont {
+    /**
+     * ANSI character set
+     */
+    public final static byte ANSI_CHARSET = 0;
+
+    /**
+     * Default character set.
+     */
+    public final static byte DEFAULT_CHARSET = 1;
+
+    /**
+     * Symbol character set
+     */
+    public final static byte SYMBOL_CHARSET = 2;
+
+
+    /**
+     * Constants for the pitch and family of the font.
+     * The two low-order bits specify the pitch of the font and can be one of the following values
+     */
+    public final static byte DEFAULT_PITCH  = 0;
+    public final static byte FIXED_PITCH    = 1;
+    public final static byte VARIABLE_PITCH = 2;
+
+    /**
+     * Don't care or don't know.
+     */
+    public final static byte FF_DONTCARE    = 0;
+    /**
+     * Fonts with variable stroke width (proportional) and with serifs. Times New Roman is an example.
+     */
+    public final static byte FF_ROMAN       = 16;
+    /**
+     * Fonts with variable stroke width (proportional) and without serifs. Arial is an example.
+     */
+    public final static byte FF_SWISS       = 32;
+    /**
+     * Fonts designed to look like handwriting. Script and Cursive are examples.
+     */
+    public final static byte FF_SCRIPT      = 64;
+    /**
+     * Fonts with constant stroke width (monospace), with or without serifs.
+     * Monospace fonts are usually modern. CourierNew is an example
+     */
+    public final static byte FF_MODERN      = 48;
+    /**
+     * Novelty fonts. Old English is an example
+     */
+    public final static byte FF_DECORATIVE  = 80;
+
+
+    protected int charset;
+    protected int type;
+    protected int flags;
+    protected int pitch;
+    protected String name;
+
+    /**
+     * Creates a new instance of PPFont
+     */
+    public PPFont(){
+
+    }
+
+    /**
+     * Creates a new instance of PPFont and initialize it from the supplied font atom
+     */
+    public PPFont(FontEntityAtom fontAtom){
+        name = fontAtom.getFontName();
+        charset = fontAtom.getCharSet();
+        type = fontAtom.getFontType();
+        flags = fontAtom.getFontFlags();
+        pitch = fontAtom.getPitchAndFamily();
+    }
+
+    /**
+     * set the name for the font (i.e. Arial)
+     *
+     * @param val  String representing the name of the font to use
+     */
+     public void setFontName(String val){
+        name = val;
+    }
+
+    /**
+     * get the name for the font (i.e. Arial)
+     *
+     * @return String representing the name of the font to use
+     */
+    public String getFontName(){
+        return name;
+    }
+
+    /**
+     * set the character set
+     *
+     * @param val - characterset
+     */
+    public void setCharSet(int val){
+        charset = val;
+    }
+
+    /**
+     * get the character set
+     *
+     * @return charset - characterset
+     */
+    public int getCharSet(){
+        return charset;
+    }
+
+    /**
+     * set the font flags
+     * Bit 1: If set, font is subsetted
+     *
+     * @param val - the font flags
+     */
+    public void setFontFlags(int val){
+        flags = val;
+    }
+
+    /**
+     * get the character set
+     * Bit 1: If set, font is subsetted
+     *
+     * @return the font flags
+     */
+    public int getFontFlags(){
+        return flags;
+    }
+
+    /**
+     * set the font type
+     * <p>
+     * Bit 1: Raster Font
+     * Bit 2: Device Font
+     * Bit 3: TrueType Font
+     * </p>
+     *
+     * @param val - the font type
+     */
+    public void setFontType(int val){
+        type = val;
+    }
+
+    /**
+     * get the font type
+     * <p>
+     * Bit 1: Raster Font
+     * Bit 2: Device Font
+     * Bit 3: TrueType Font
+     * </p>
+     *
+     * @return the font type
+     */
+    public int getFontType(){
+        return type;
+    }
+
+    /**
+     * set lfPitchAndFamily
+     *
+     *
+     * @param val - Corresponds to the lfPitchAndFamily field of the Win32 API LOGFONT structure
+     */
+    public void setPitchAndFamily(int val){
+        pitch = val;
+    }
+
+    /**
+     * get lfPitchAndFamily
+     *
+     * @return corresponds to the lfPitchAndFamily field of the Win32 API LOGFONT structure
+     */
+    public int getPitchAndFamily(){
+        return pitch;
+    }
+
+    public static final PPFont ARIAL;
+    public static final PPFont TIMES_NEW_ROMAN ;
+    public static final PPFont COURIER_NEW;
+    public static final PPFont WINGDINGS;
+    static {
+        ARIAL = new PPFont();
+        ARIAL.setFontName("Arial");
+        ARIAL.setCharSet(ANSI_CHARSET);
+        ARIAL.setFontType(4);
+        ARIAL.setFontFlags(0);
+        ARIAL.setPitchAndFamily(VARIABLE_PITCH | FF_SWISS);
+
+        TIMES_NEW_ROMAN = new PPFont();
+        TIMES_NEW_ROMAN.setFontName("Times New Roman");
+        TIMES_NEW_ROMAN.setCharSet(ANSI_CHARSET);
+        TIMES_NEW_ROMAN.setFontType(4);
+        TIMES_NEW_ROMAN.setFontFlags(0);
+        TIMES_NEW_ROMAN.setPitchAndFamily(VARIABLE_PITCH | FF_ROMAN);
+
+        COURIER_NEW = new PPFont();
+        COURIER_NEW.setFontName("Courier New");
+        COURIER_NEW.setCharSet(ANSI_CHARSET);
+        COURIER_NEW.setFontType(4);
+        COURIER_NEW.setFontFlags(0);
+        COURIER_NEW.setPitchAndFamily(FIXED_PITCH | FF_MODERN);
+
+        WINGDINGS = new PPFont();
+        WINGDINGS.setFontName("Wingdings");
+        WINGDINGS.setCharSet(SYMBOL_CHARSET);
+        WINGDINGS.setFontType(4);
+        WINGDINGS.setFontFlags(0);
+        WINGDINGS.setPitchAndFamily(VARIABLE_PITCH | FF_DONTCARE);
+    }
+}

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/PPGraphics2D.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/PPGraphics2D.java?rev=777204&r1=777203&r2=777204&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/PPGraphics2D.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/PPGraphics2D.java Thu May 21 18:12:22 2009
@@ -14,6 +14,7 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 ==================================================================== */
+
 package org.apache.poi.hslf.model;
 
 
@@ -37,7 +38,7 @@
  *
  * @author Yegor Kozlov
  */
-public class PPGraphics2D extends Graphics2D implements Cloneable {
+public final class PPGraphics2D extends Graphics2D implements Cloneable {
 
     protected POILogger log = POILogFactory.getLogger(this.getClass());
 

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=777204&r1=777203&r2=777204&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 Thu May 21 18:12:22 2009
@@ -1,19 +1,20 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements.  See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+
 package org.apache.poi.hslf.model;
 
 import org.apache.poi.ddf.*;
@@ -72,7 +73,7 @@
      * Windows DIB (BMP)
      */
     public static final byte DIB = 7;
-    
+
     /**
      * Create a new <code>Picture</code>
      *
@@ -143,7 +144,7 @@
     /**
      * Resize this picture to the default size.
      * For PNG and JPEG resizes the image to 100%,
-     * for other types sets the default size of 200x200 pixels.  
+     * for other types sets the default size of 200x200 pixels.
      */
     public void setDefaultSize(){
         PictureData pict = getPictureData();
@@ -151,10 +152,10 @@
             BufferedImage img = null;
             try {
                	img = ImageIO.read(new ByteArrayInputStream(pict.getData()));
-            } 
+            }
             catch (IOException e){}
         	catch (NegativeArraySizeException ne) {}
-        	
+
             if(img != null) {
             	// Valid image, set anchor from it
             	setAnchor(new java.awt.Rectangle(0, 0, img.getWidth()*POINT_DPI/PIXEL_DPI, img.getHeight()*POINT_DPI/PIXEL_DPI));
@@ -163,7 +164,7 @@
             	setAnchor(new java.awt.Rectangle(0, 0, 200, 200));
             }
         } else {
-            //default size of a metafile picture is 200x200 
+            //default size of a metafile picture is 200x200
             setAnchor(new java.awt.Rectangle(50, 50, 200, 200));
         }
     }

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Placeholder.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Placeholder.java?rev=777204&r1=777203&r2=777204&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Placeholder.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Placeholder.java Thu May 21 18:12:22 2009
@@ -29,7 +29,7 @@
  *
  * @author Yegor Kozlov
  */
-public class Placeholder extends TextBox {
+public final class Placeholder extends TextBox {
 
     protected Placeholder(EscherContainerRecord escherRecord, Shape parent){
         super(escherRecord, parent);

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Polygon.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Polygon.java?rev=777204&r1=777203&r2=777204&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Polygon.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Polygon.java Thu May 21 18:12:22 2009
@@ -1,160 +1,161 @@
-/* ====================================================================
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-==================================================================== */
-package org.apache.poi.hslf.model;
-
-import org.apache.poi.ddf.*;
-import org.apache.poi.util.LittleEndian;
-
-import java.awt.geom.Point2D;
-
-/**
- * A simple closed polygon shape
- *
- * @author Yegor Kozlov
- */
-public class Polygon extends AutoShape {
-    /**
-     * Create a Polygon object and initialize it from the supplied Record container.
-     *
-     * @param escherRecord       <code>EscherSpContainer</code> container which holds information about this shape
-     * @param parent    the parent of the shape
-     */
-   protected Polygon(EscherContainerRecord escherRecord, Shape parent){
-        super(escherRecord, parent);
-
-    }
-
-    /**
-     * Create a new Polygon. This constructor is used when a new shape is created.
-     *
-     * @param parent    the parent of this Shape. For example, if this text box is a cell
-     * in a table then the parent is Table.
-     */
-    public Polygon(Shape parent){
-        super(null, parent);
-        _escherContainer = createSpContainer(ShapeTypes.NotPrimitive, parent instanceof ShapeGroup);
-    }
-
-    /**
-     * Create a new Polygon. This constructor is used when a new shape is created.
-     *
-     */
-    public Polygon(){
-        this(null);
-    }
-
-    /**
-     * Set the polygon vertices
-     *
-     * @param xPoints
-     * @param yPoints
-     */
-    public void setPoints(float[] xPoints, float[] yPoints)
-    {
-        float right  = findBiggest(xPoints);
-        float bottom = findBiggest(yPoints);
-        float left   = findSmallest(xPoints);
-        float top    = findSmallest(yPoints);
-
-        EscherOptRecord opt = (EscherOptRecord)getEscherChild(_escherContainer, EscherOptRecord.RECORD_ID);
-        opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.GEOMETRY__RIGHT, (int)((right - left)*POINT_DPI/MASTER_DPI)));
-        opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.GEOMETRY__BOTTOM, (int)((bottom - top)*POINT_DPI/MASTER_DPI)));
-
-        for (int i = 0; i < xPoints.length; i++) {
-            xPoints[i] += -left;
-            yPoints[i] += -top;
-        }
-
-        int numpoints = xPoints.length;
-
-        EscherArrayProperty verticesProp = new EscherArrayProperty(EscherProperties.GEOMETRY__VERTICES, false, new byte[0] );
-        verticesProp.setNumberOfElementsInArray(numpoints+1);
-        verticesProp.setNumberOfElementsInMemory(numpoints+1);
-        verticesProp.setSizeOfElements(0xFFF0);
-        for (int i = 0; i < numpoints; i++)
-        {
-            byte[] data = new byte[4];
-            LittleEndian.putShort(data, 0, (short)(xPoints[i]*POINT_DPI/MASTER_DPI));
-            LittleEndian.putShort(data, 2, (short)(yPoints[i]*POINT_DPI/MASTER_DPI));
-            verticesProp.setElement(i, data);
-        }
-        byte[] data = new byte[4];
-        LittleEndian.putShort(data, 0, (short)(xPoints[0]*POINT_DPI/MASTER_DPI));
-        LittleEndian.putShort(data, 2, (short)(yPoints[0]*POINT_DPI/MASTER_DPI));
-        verticesProp.setElement(numpoints, data);
-        opt.addEscherProperty(verticesProp);
-
-        EscherArrayProperty segmentsProp = new EscherArrayProperty(EscherProperties.GEOMETRY__SEGMENTINFO, false, null );
-        segmentsProp.setSizeOfElements(0x0002);
-        segmentsProp.setNumberOfElementsInArray(numpoints * 2 + 4);
-        segmentsProp.setNumberOfElementsInMemory(numpoints * 2 + 4);
-        segmentsProp.setElement(0, new byte[] { (byte)0x00, (byte)0x40 } );
-        segmentsProp.setElement(1, new byte[] { (byte)0x00, (byte)0xAC } );
-        for (int i = 0; i < numpoints; i++)
-        {
-            segmentsProp.setElement(2 + i * 2, new byte[] { (byte)0x01, (byte)0x00 } );
-            segmentsProp.setElement(3 + i * 2, new byte[] { (byte)0x00, (byte)0xAC } );
-        }
-        segmentsProp.setElement(segmentsProp.getNumberOfElementsInArray() - 2, new byte[] { (byte)0x01, (byte)0x60 } );
-        segmentsProp.setElement(segmentsProp.getNumberOfElementsInArray() - 1, new byte[] { (byte)0x00, (byte)0x80 } );
-        opt.addEscherProperty(segmentsProp);
-
-        opt.sortProperties();
-    }
-
-    /**
-     * Set the polygon vertices
-     *
-     * @param points the polygon vertices
-     */
-      public void setPoints(Point2D[] points)
-     {
-        float[] xpoints = new float[points.length];
-        float[] ypoints = new float[points.length];
-        for (int i = 0; i < points.length; i++) {
-            xpoints[i] = (float)points[i].getX();
-            ypoints[i] = (float)points[i].getY();
-
-        }
-
-        setPoints(xpoints, ypoints);
-    }
-
-    private float findBiggest( float[] values )
-    {
-        float result = Float.MIN_VALUE;
-        for ( int i = 0; i < values.length; i++ )
-        {
-            if (values[i] > result)
-                result = values[i];
-        }
-        return result;
-    }
-
-    private float findSmallest( float[] values )
-    {
-        float result = Float.MAX_VALUE;
-        for ( int i = 0; i < values.length; i++ )
-        {
-            if (values[i] < result)
-                result = values[i];
-        }
-        return result;
-    }
-
-
-}
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+
+package org.apache.poi.hslf.model;
+
+import org.apache.poi.ddf.*;
+import org.apache.poi.util.LittleEndian;
+
+import java.awt.geom.Point2D;
+
+/**
+ * A simple closed polygon shape
+ *
+ * @author Yegor Kozlov
+ */
+public final class Polygon extends AutoShape {
+    /**
+     * Create a Polygon object and initialize it from the supplied Record container.
+     *
+     * @param escherRecord       <code>EscherSpContainer</code> container which holds information about this shape
+     * @param parent    the parent of the shape
+     */
+   protected Polygon(EscherContainerRecord escherRecord, Shape parent){
+        super(escherRecord, parent);
+
+    }
+
+    /**
+     * Create a new Polygon. This constructor is used when a new shape is created.
+     *
+     * @param parent    the parent of this Shape. For example, if this text box is a cell
+     * in a table then the parent is Table.
+     */
+    public Polygon(Shape parent){
+        super(null, parent);
+        _escherContainer = createSpContainer(ShapeTypes.NotPrimitive, parent instanceof ShapeGroup);
+    }
+
+    /**
+     * Create a new Polygon. This constructor is used when a new shape is created.
+     *
+     */
+    public Polygon(){
+        this(null);
+    }
+
+    /**
+     * Set the polygon vertices
+     *
+     * @param xPoints
+     * @param yPoints
+     */
+    public void setPoints(float[] xPoints, float[] yPoints)
+    {
+        float right  = findBiggest(xPoints);
+        float bottom = findBiggest(yPoints);
+        float left   = findSmallest(xPoints);
+        float top    = findSmallest(yPoints);
+
+        EscherOptRecord opt = (EscherOptRecord)getEscherChild(_escherContainer, EscherOptRecord.RECORD_ID);
+        opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.GEOMETRY__RIGHT, (int)((right - left)*POINT_DPI/MASTER_DPI)));
+        opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.GEOMETRY__BOTTOM, (int)((bottom - top)*POINT_DPI/MASTER_DPI)));
+
+        for (int i = 0; i < xPoints.length; i++) {
+            xPoints[i] += -left;
+            yPoints[i] += -top;
+        }
+
+        int numpoints = xPoints.length;
+
+        EscherArrayProperty verticesProp = new EscherArrayProperty(EscherProperties.GEOMETRY__VERTICES, false, new byte[0] );
+        verticesProp.setNumberOfElementsInArray(numpoints+1);
+        verticesProp.setNumberOfElementsInMemory(numpoints+1);
+        verticesProp.setSizeOfElements(0xFFF0);
+        for (int i = 0; i < numpoints; i++)
+        {
+            byte[] data = new byte[4];
+            LittleEndian.putShort(data, 0, (short)(xPoints[i]*POINT_DPI/MASTER_DPI));
+            LittleEndian.putShort(data, 2, (short)(yPoints[i]*POINT_DPI/MASTER_DPI));
+            verticesProp.setElement(i, data);
+        }
+        byte[] data = new byte[4];
+        LittleEndian.putShort(data, 0, (short)(xPoints[0]*POINT_DPI/MASTER_DPI));
+        LittleEndian.putShort(data, 2, (short)(yPoints[0]*POINT_DPI/MASTER_DPI));
+        verticesProp.setElement(numpoints, data);
+        opt.addEscherProperty(verticesProp);
+
+        EscherArrayProperty segmentsProp = new EscherArrayProperty(EscherProperties.GEOMETRY__SEGMENTINFO, false, null );
+        segmentsProp.setSizeOfElements(0x0002);
+        segmentsProp.setNumberOfElementsInArray(numpoints * 2 + 4);
+        segmentsProp.setNumberOfElementsInMemory(numpoints * 2 + 4);
+        segmentsProp.setElement(0, new byte[] { (byte)0x00, (byte)0x40 } );
+        segmentsProp.setElement(1, new byte[] { (byte)0x00, (byte)0xAC } );
+        for (int i = 0; i < numpoints; i++)
+        {
+            segmentsProp.setElement(2 + i * 2, new byte[] { (byte)0x01, (byte)0x00 } );
+            segmentsProp.setElement(3 + i * 2, new byte[] { (byte)0x00, (byte)0xAC } );
+        }
+        segmentsProp.setElement(segmentsProp.getNumberOfElementsInArray() - 2, new byte[] { (byte)0x01, (byte)0x60 } );
+        segmentsProp.setElement(segmentsProp.getNumberOfElementsInArray() - 1, new byte[] { (byte)0x00, (byte)0x80 } );
+        opt.addEscherProperty(segmentsProp);
+
+        opt.sortProperties();
+    }
+
+    /**
+     * Set the polygon vertices
+     *
+     * @param points the polygon vertices
+     */
+      public void setPoints(Point2D[] points)
+     {
+        float[] xpoints = new float[points.length];
+        float[] ypoints = new float[points.length];
+        for (int i = 0; i < points.length; i++) {
+            xpoints[i] = (float)points[i].getX();
+            ypoints[i] = (float)points[i].getY();
+
+        }
+
+        setPoints(xpoints, ypoints);
+    }
+
+    private float findBiggest( float[] values )
+    {
+        float result = Float.MIN_VALUE;
+        for ( int i = 0; i < values.length; i++ )
+        {
+            if (values[i] > result)
+                result = values[i];
+        }
+        return result;
+    }
+
+    private float findSmallest( float[] values )
+    {
+        float result = Float.MAX_VALUE;
+        for ( int i = 0; i < values.length; i++ )
+        {
+            if (values[i] < result)
+                result = values[i];
+        }
+        return result;
+    }
+
+
+}

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=777204&r1=777203&r2=777204&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 Thu May 21 18:12:22 2009
@@ -14,6 +14,7 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 ==================================================================== */
+
 package org.apache.poi.hslf.model;
 
 import org.apache.poi.ddf.*;

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeFactory.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeFactory.java?rev=777204&r1=777203&r2=777204&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeFactory.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeFactory.java Thu May 21 18:12:22 2009
@@ -14,6 +14,7 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 ==================================================================== */
+
 package org.apache.poi.hslf.model;
 
 import org.apache.poi.ddf.*;
@@ -29,12 +30,12 @@
  *
  * @author Yegor Kozlov
  */
-public class ShapeFactory {
+public final class ShapeFactory {
     // For logging
     protected static POILogger logger = POILogFactory.getLogger(ShapeFactory.class);
 
     /**
-     * Create a new shape from the data provided.  
+     * Create a new shape from the data provided.
      */
     public static Shape createShape(EscherContainerRecord spContainer, Shape parent){
         if (spContainer.getRecordId() == EscherContainerRecord.SPGR_CONTAINER){
@@ -96,7 +97,7 @@
                 } else if (oes != null){
                     shape = new OLEShape(spContainer, parent);
                 }
-                
+
                 if(shape == null) shape = new Picture(spContainer, parent);
                 break;
             }

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeGroup.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeGroup.java?rev=777204&r1=777203&r2=777204&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeGroup.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeGroup.java Thu May 21 18:12:22 2009
@@ -86,7 +86,7 @@
         		logger.log(POILogger.ERROR, "Shape contained non container escher record, was " + r.getClass().getName());
         	}
         }
-        
+
         // Put the shapes into an array, and return
         Shape[] shapes = shapeList.toArray(new Shape[shapeList.size()]);
         return shapes;

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeOutline.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeOutline.java?rev=777204&r1=777203&r2=777204&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeOutline.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeOutline.java Thu May 21 18:12:22 2009
@@ -1,27 +1,28 @@
-/* ====================================================================
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-==================================================================== */
-package org.apache.poi.hslf.model;
-
-/**
- * Date: Apr 17, 2008
- * 
- * @author Yegor Kozlov
- */
-public interface ShapeOutline {
-    java.awt.Shape getOutline(Shape shape);
-
-}
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+
+package org.apache.poi.hslf.model;
+
+/**
+ * Date: Apr 17, 2008
+ *
+ * @author Yegor Kozlov
+ */
+public interface ShapeOutline {
+    java.awt.Shape getOutline(Shape shape);
+
+}

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapePainter.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapePainter.java?rev=777204&r1=777203&r2=777204&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapePainter.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapePainter.java Thu May 21 18:12:22 2009
@@ -1,102 +1,103 @@
-/* ====================================================================
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-==================================================================== */
-package org.apache.poi.hslf.model;
-
-
-import org.apache.poi.util.POILogger;
-import org.apache.poi.util.POILogFactory;
-
-import java.awt.*;
-import java.awt.geom.Rectangle2D;
-
-/**
- * Paint a shape into java.awt.Graphics2D
- * 
- * @author Yegor Kozlov
- */
-public class ShapePainter {
-    protected static POILogger logger = POILogFactory.getLogger(ShapePainter.class);
-
-    public static void paint(SimpleShape shape, Graphics2D graphics){
-        Rectangle2D anchor = shape.getLogicalAnchor2D();
-        java.awt.Shape outline = shape.getOutline();
-
-        //flip vertical
-        if(shape.getFlipVertical()){
-            graphics.translate(anchor.getX(), anchor.getY() + anchor.getHeight());
-            graphics.scale(1, -1);
-            graphics.translate(-anchor.getX(), -anchor.getY());
-        }
-        //flip horizontal
-        if(shape.getFlipHorizontal()){
-            graphics.translate(anchor.getX() + anchor.getWidth(), anchor.getY());
-            graphics.scale(-1, 1);
-            graphics.translate(-anchor.getX() , -anchor.getY());
-        }
-
-        //rotate transform
-        double angle = shape.getRotation();
-
-        if(angle != 0){
-            double centerX = anchor.getX() + anchor.getWidth()/2;
-            double centerY = anchor.getY() + anchor.getHeight()/2;
-
-            graphics.translate(centerX, centerY);
-            graphics.rotate(Math.toRadians(angle));
-            graphics.translate(-centerX, -centerY);
-        }
-
-        //fill
-        Color fillColor = shape.getFill().getForegroundColor();
-        if (fillColor != null) {
-            //TODO: implement gradient and texture fill patterns
-            graphics.setPaint(fillColor);
-            graphics.fill(outline);
-        }
-
-        //border
-        Color lineColor = shape.getLineColor();
-        if (lineColor != null){
-            graphics.setPaint(lineColor);
-            float width = (float)shape.getLineWidth();
-            if(width == 0) width = 0.75f;
-
-            int dashing = shape.getLineDashing();
-            //TODO: implement more dashing styles
-            float[] dashptrn = null;
-            switch(dashing){
-                case Line.PEN_SOLID:
-                    dashptrn = null;
-                    break;
-                case Line.PEN_PS_DASH:
-                    dashptrn = new float[]{width, width};
-                    break;
-                case Line.PEN_DOTGEL:
-                    dashptrn = new float[]{width*4, width*3};
-                    break;
-               default:
-                    logger.log(POILogger.WARN, "unsupported dashing: " + dashing);
-                    dashptrn = new float[]{width, width};
-                    break;
-            }
-
-            Stroke stroke = new BasicStroke(width, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dashptrn, 0.0f);
-            graphics.setStroke(stroke);
-            graphics.draw(outline);
-        }
-    }
-}
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+
+package org.apache.poi.hslf.model;
+
+
+import org.apache.poi.util.POILogger;
+import org.apache.poi.util.POILogFactory;
+
+import java.awt.*;
+import java.awt.geom.Rectangle2D;
+
+/**
+ * Paint a shape into java.awt.Graphics2D
+ *
+ * @author Yegor Kozlov
+ */
+public final class ShapePainter {
+    protected static POILogger logger = POILogFactory.getLogger(ShapePainter.class);
+
+    public static void paint(SimpleShape shape, Graphics2D graphics){
+        Rectangle2D anchor = shape.getLogicalAnchor2D();
+        java.awt.Shape outline = shape.getOutline();
+
+        //flip vertical
+        if(shape.getFlipVertical()){
+            graphics.translate(anchor.getX(), anchor.getY() + anchor.getHeight());
+            graphics.scale(1, -1);
+            graphics.translate(-anchor.getX(), -anchor.getY());
+        }
+        //flip horizontal
+        if(shape.getFlipHorizontal()){
+            graphics.translate(anchor.getX() + anchor.getWidth(), anchor.getY());
+            graphics.scale(-1, 1);
+            graphics.translate(-anchor.getX() , -anchor.getY());
+        }
+
+        //rotate transform
+        double angle = shape.getRotation();
+
+        if(angle != 0){
+            double centerX = anchor.getX() + anchor.getWidth()/2;
+            double centerY = anchor.getY() + anchor.getHeight()/2;
+
+            graphics.translate(centerX, centerY);
+            graphics.rotate(Math.toRadians(angle));
+            graphics.translate(-centerX, -centerY);
+        }
+
+        //fill
+        Color fillColor = shape.getFill().getForegroundColor();
+        if (fillColor != null) {
+            //TODO: implement gradient and texture fill patterns
+            graphics.setPaint(fillColor);
+            graphics.fill(outline);
+        }
+
+        //border
+        Color lineColor = shape.getLineColor();
+        if (lineColor != null){
+            graphics.setPaint(lineColor);
+            float width = (float)shape.getLineWidth();
+            if(width == 0) width = 0.75f;
+
+            int dashing = shape.getLineDashing();
+            //TODO: implement more dashing styles
+            float[] dashptrn = null;
+            switch(dashing){
+                case Line.PEN_SOLID:
+                    dashptrn = null;
+                    break;
+                case Line.PEN_PS_DASH:
+                    dashptrn = new float[]{width, width};
+                    break;
+                case Line.PEN_DOTGEL:
+                    dashptrn = new float[]{width*4, width*3};
+                    break;
+               default:
+                    logger.log(POILogger.WARN, "unsupported dashing: " + dashing);
+                    dashptrn = new float[]{width, width};
+                    break;
+            }
+
+            Stroke stroke = new BasicStroke(width, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dashptrn, 0.0f);
+            graphics.setStroke(stroke);
+            graphics.draw(outline);
+        }
+    }
+}

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeTypes.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeTypes.java?rev=777204&r1=777203&r2=777204&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeTypes.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeTypes.java Thu May 21 18:12:22 2009
@@ -14,6 +14,7 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 ==================================================================== */
+
 package org.apache.poi.hslf.model;
 
 import org.apache.poi.hslf.exceptions.HSLFException;
@@ -26,7 +27,7 @@
  *
  * @author Yegor Kozlov
  */
-public class ShapeTypes implements org.apache.poi.sl.usermodel.ShapeTypes {
+public final class ShapeTypes implements org.apache.poi.sl.usermodel.ShapeTypes {
     /**
      * Return name of the shape by id
      * @param type  - the id of the shape, one of the static constants defined in this class

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=777204&r1=777203&r2=777204&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 Thu May 21 18:12:22 2009
@@ -15,7 +15,6 @@
    limitations under the License.
 ==================================================================== */
 
-
 package org.apache.poi.hslf.model;
 
 import org.apache.poi.ddf.*;
@@ -190,7 +189,7 @@
                     lst.toArray(recs);
                     trun._records = recs;
                     trun.setIndex(slwtIndex);
-                    
+
                     found.add(trun);
                     i++;
                 } else {
@@ -379,7 +378,7 @@
      * @param shape
      */
     protected void onAddTextShape(TextShape shape) {
-    
+
     }
 
     /**

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/SimpleShape.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/SimpleShape.java?rev=777204&r1=777203&r2=777204&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/SimpleShape.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/SimpleShape.java Thu May 21 18:12:22 2009
@@ -38,7 +38,7 @@
  *
  *  @author Yegor Kozlov
  */
-public class SimpleShape extends Shape {
+public abstract class SimpleShape extends Shape {
 
     /**
      * Records stored in EscherClientDataRecord

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Slide.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Slide.java?rev=777204&r1=777203&r2=777204&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Slide.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Slide.java Thu May 21 18:12:22 2009
@@ -1,4 +1,3 @@
-
 /* ====================================================================
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
@@ -15,8 +14,6 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 ==================================================================== */
-        
-
 
 package org.apache.poi.hslf.model;
 
@@ -32,7 +29,7 @@
 import org.apache.poi.ddf.EscherSpRecord;
 
 /**
- * This class represents a slide in a PowerPoint Document. It allows 
+ * This class represents a slide in a PowerPoint Document. It allows
  *  access to the text within, and the layout. For now, it only does
  *  the text side of things though
  *
@@ -40,7 +37,7 @@
  * @author Yegor Kozlov
  */
 
-public class Slide extends Sheet
+public final class Slide extends Sheet
 {
 	private int _slideNo;
 	private SlideAtomsSet _atomSet;
@@ -90,7 +87,7 @@
             _runs[i].setSheet(this);
 		}
 	}
-  
+
 	/**
 	* Create a new Slide instance
 	* @param sheetNumber The internal number of the sheet, as used by PersistPtrHolder
@@ -120,7 +117,7 @@
 			sa.setNotesID(notes._getSheetNumber());
 		}
 	}
-  
+
 	/**
 	* Changes the Slide's (external facing) page number.
 	* @see org.apache.poi.hslf.usermodel.SlideShow#reorderSlide(int, int)
@@ -128,7 +125,7 @@
 	public void setSlideNumber(int newSlideNumber) {
 		_slideNo = newSlideNumber;
 	}
-  
+
     /**
      * Called by SlideShow ater a new slide is created.
      * <p>
@@ -162,7 +159,7 @@
             if(spr != null) spr.setShapeId(allocateShapeId());
         }
 
-        //PPT doen't increment the number of saved shapes for group descriptor and background 
+        //PPT doen't increment the number of saved shapes for group descriptor and background
         dg.setNumShapes(1);
     }
 
@@ -207,7 +204,7 @@
 		}
 		return null;
 	}
-  
+
 	// Simple Accesser methods follow
 
 	/**
@@ -361,10 +358,10 @@
         }
         return super.getColorScheme();
     }
-    
+
     /**
      * Get the comment(s) for this slide.
-     * Note - for now, only works on PPT 2000 and 
+     * Note - for now, only works on PPT 2000 and
      *  PPT 2003 files. Doesn't work for PPT 97
      *  ones, as they do their comments oddly.
      */
@@ -393,7 +390,7 @@
     						count++;
     					}
     				}
-    				
+
     				// Now build
     				Comment[] comments = new Comment[count];
     				count = 0;
@@ -405,12 +402,12 @@
     						count++;
     					}
     				}
-    				
+
     				return comments;
     			}
     		}
     	}
-    	
+
     	// None found
     	return new Comment[0];
     }
@@ -433,7 +430,7 @@
     }
 
     /**
-     * Header / Footer settings for this slide.  
+     * Header / Footer settings for this slide.
      *
      * @return Header / Footer settings for this slide
      */

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/SlideMaster.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/SlideMaster.java?rev=777204&r1=777203&r2=777204&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/SlideMaster.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/SlideMaster.java Thu May 21 18:12:22 2009
@@ -29,7 +29,7 @@
  *
  * @author Yegor Kozlov
  */
-public class SlideMaster extends MasterSheet {
+public final class SlideMaster extends MasterSheet {
     private TextRun[] _runs;
 
     /**
@@ -64,7 +64,7 @@
 
     /**
      * Pickup a style attribute from the master.
-     * This is the "workhorse" which returns the default style attrubutes. 
+     * This is the "workhorse" which returns the default style attrubutes.
      */
     public TextProp getStyleAttribute(int txtype, int level, String name, boolean isCharacter) {
 
@@ -111,7 +111,7 @@
     /**
      * Assign SlideShow for this slide master.
      * (Used interanlly)
-     */ 
+     */
     public void setSlideShow(SlideShow ss) {
         super.setSlideShow(ss);
 

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=777204&r1=777203&r2=777204&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 Thu May 21 18:12:22 2009
@@ -1,343 +1,343 @@
-
-/* ====================================================================
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-==================================================================== */
-package org.apache.poi.hslf.model;
-
-import org.apache.poi.ddf.*;
-import org.apache.poi.util.LittleEndian;
-
-import java.util.*;
-import java.util.List;
-import java.awt.*;
-
-/**
- * Represents a table in a PowerPoint presentation
- * 
- * @author Yegor Kozlov
- */
-public class Table extends ShapeGroup {
-
-    protected static final int BORDER_TOP = 1;
-    protected static final int BORDER_RIGHT = 2;
-    protected static final int BORDER_BOTTOM = 3;
-    protected static final int BORDER_LEFT = 4;
-
-    protected static final int BORDERS_ALL = 5;
-    protected static final int BORDERS_OUTSIDE = 6;
-    protected static final int BORDERS_INSIDE = 7;
-    protected static final int BORDERS_NONE = 8;
-
-
-    protected TableCell[][] cells;
-
-    /**
-     * Create a new Table of the given number of rows and columns
-     *
-     * @param numrows the number of rows
-     * @param numcols the number of columns
-     */
-    public Table(int numrows, int numcols) {
-        super();
-
-        if(numrows < 1) throw new IllegalArgumentException("The number of rows must be greater than 1");
-        if(numcols < 1) throw new IllegalArgumentException("The number of columns must be greater than 1");
-
-        int x=0, y=0, tblWidth=0, tblHeight=0;
-        cells = new TableCell[numrows][numcols];
-        for (int i = 0; i < cells.length; i++) {
-            x = 0;
-            for (int j = 0; j < cells[i].length; j++) {
-                cells[i][j] = new TableCell(this);
-                Rectangle anchor = new Rectangle(x, y, TableCell.DEFAULT_WIDTH, TableCell.DEFAULT_HEIGHT);
-                cells[i][j].setAnchor(anchor);
-                x += TableCell.DEFAULT_WIDTH;
-            }
-            y += TableCell.DEFAULT_HEIGHT;
-        }
-        tblWidth = x;
-        tblHeight = y;
-        setAnchor(new Rectangle(0, 0, tblWidth, tblHeight));
-
-        EscherContainerRecord spCont = (EscherContainerRecord) getSpContainer().getChild(0);
-        EscherOptRecord opt = new EscherOptRecord();
-        opt.setRecordId((short)0xF122);
-        opt.addEscherProperty(new EscherSimpleProperty((short)0x39F, 1));
-        EscherArrayProperty p = new EscherArrayProperty((short)0x43A0, false, null);
-        p.setSizeOfElements(0x0004);
-        p.setNumberOfElementsInArray(numrows);
-        p.setNumberOfElementsInMemory(numrows);
-        opt.addEscherProperty(p);
-        List<EscherRecord> lst = spCont.getChildRecords();
-        lst.add(lst.size()-1, opt);
-        spCont.setChildRecords(lst);
-    }
-
-    /**
-     * Create a Table object and initilize it from the supplied Record container.
-     *
-     * @param escherRecord <code>EscherSpContainer</code> container which holds information about this shape
-     * @param parent       the parent of the shape
-     */
-    public Table(EscherContainerRecord escherRecord, Shape parent) {
-        super(escherRecord, parent);
-    }
-
-    /**
-     * Gets a cell
-     *
-     * @param row the row index (0-based)
-     * @param col the column index (0-based)
-     * @return the cell
-     */
-    public TableCell getCell(int row, int col) {
-        return cells[row][col];
-    }
-
-    public int getNumberOfColumns() {
-        return cells[0].length;
-    }
-    public int getNumberOfRows() {
-        return cells.length;
-    }
-
-    protected void afterInsert(Sheet sh){
-        super.afterInsert(sh);
-
-        EscherContainerRecord spCont = (EscherContainerRecord) getSpContainer().getChild(0);
-        List<EscherRecord> lst = spCont.getChildRecords();
-        EscherOptRecord opt = (EscherOptRecord)lst.get(lst.size()-2);
-        EscherArrayProperty p = (EscherArrayProperty)opt.getEscherProperty(1);
-        for (int i = 0; i < cells.length; i++) {
-            TableCell cell = cells[i][0];
-            int rowHeight = cell.getAnchor().height*MASTER_DPI/POINT_DPI;
-            byte[] val = new byte[4];
-            LittleEndian.putInt(val, rowHeight);
-            p.setElement(i, val);
-            for (int j = 0; j < cells[i].length; j++) {
-                TableCell c = cells[i][j];
-                addShape(c);
-
-                Line bt = c.getBorderTop();
-                if(bt != null) addShape(bt);
-
-                Line br = c.getBorderRight();
-                if(br != null) addShape(br);
-
-                Line bb = c.getBorderBottom();
-                if(bb != null) addShape(bb);
-
-                Line bl = c.getBorderLeft();
-                if(bl != null) addShape(bl);
-
-            }
-        }
-
-    }
-
-    protected void initTable(){
-        Shape[] sh = getShapes();
-        Arrays.sort(sh, new Comparator(){
-            public int compare( Object o1, Object o2 ) {
-                Rectangle anchor1 = ((Shape)o1).getAnchor();
-                Rectangle anchor2 = ((Shape)o2).getAnchor();
-                int delta = anchor1.y - anchor2.y;
-                if(delta == 0) delta = anchor1.x - anchor2.y;
-                return delta;
-            }
-        });
-        int y0 = -1;
-        int maxrowlen = 0;
-        ArrayList lst = new ArrayList();
-        ArrayList row = null;
-        for (int i = 0; i < sh.length; i++) {
-            if(sh[i] instanceof TextShape){
-                Rectangle anchor = sh[i].getAnchor();
-                if(anchor.y != y0){
-                    y0 = anchor.y;
-                    row = new ArrayList();
-                    lst.add(row);
-                }
-                row.add(sh[i]);
-                maxrowlen = Math.max(maxrowlen, row.size());
-            }
-        }
-        cells = new TableCell[lst.size()][maxrowlen];
-        for (int i = 0; i < lst.size(); i++) {
-            row = (ArrayList)lst.get(i);
-            for (int j = 0; j < row.size(); j++) {
-                TextShape tx = (TextShape)row.get(j);
-                cells[i][j] = new TableCell(tx.getSpContainer(), getParent());
-                cells[i][j].setSheet(tx.getSheet());
-            }
-        }
-    }
-
-    /**
-     * Assign the <code>SlideShow</code> this shape belongs to
-     *
-     * @param sheet owner of this shape
-     */
-    public void setSheet(Sheet sheet){
-        super.setSheet(sheet);
-        if(cells == null) initTable();
-    }
-
-    /**
-     * Sets the row height.
-     *
-     * @param row the row index (0-based)
-     * @param height the height to set (in pixels)
-     */
-    public void setRowHeight(int row, int height){
-        int currentHeight = cells[row][0].getAnchor().height;
-        int dy = height - currentHeight;
-
-        for (int i = row; i < cells.length; i++) {
-            for (int j = 0; j < cells[i].length; j++) {
-                Rectangle anchor = cells[i][j].getAnchor();
-                if(i == row) anchor.height = height;
-                else anchor.y += dy;
-                cells[i][j].setAnchor(anchor);
-            }
-        }
-        Rectangle tblanchor = getAnchor();
-        tblanchor.height += dy;
-        setAnchor(tblanchor);
-
-    }
-
-    /**
-     * Sets the column width.
-     *
-     * @param col the column index (0-based)
-     * @param width the width to set (in pixels)
-     */
-    public void setColumnWidth(int col, int width){
-        int currentWidth = cells[0][col].getAnchor().width;
-        int dx = width - currentWidth;
-        for (int i = 0; i < cells.length; i++) {
-            Rectangle anchor = cells[i][col].getAnchor();
-            anchor.width = width;
-            cells[i][col].setAnchor(anchor);
-
-            if(col < cells[i].length - 1) for (int j = col+1; j < cells[i].length; j++) {
-                anchor = cells[i][j].getAnchor();
-                anchor.x += dx;
-                cells[i][j].setAnchor(anchor);
-            }
-        }
-        Rectangle tblanchor = getAnchor();
-        tblanchor.width += dx;
-        setAnchor(tblanchor);
-    }
-
-    /**
-     * Format the table and apply the specified Line to all cell boundaries,
-     * both outside and inside
-     *
-     * @param line the border line
-     */
-    public void setAllBorders(Line line){
-        for (int i = 0; i < cells.length; i++) {
-            for (int j = 0; j < cells[i].length; j++) {
-                TableCell cell = cells[i][j];
-                cell.setBorderTop(cloneBorder(line));
-                cell.setBorderLeft(cloneBorder(line));
-                if(j == cells[i].length - 1) cell.setBorderRight(cloneBorder(line));
-                if(i == cells.length - 1) cell.setBorderBottom(cloneBorder(line));
-            }
-        }
-    }
-
-    /**
-     * Format the outside border using the specified Line object
-     *
-     * @param line the border line
-     */
-    public void setOutsideBorders(Line line){
-        for (int i = 0; i < cells.length; i++) {
-            for (int j = 0; j < cells[i].length; j++) {
-                TableCell cell = cells[i][j];
-
-                if(j == 0) cell.setBorderLeft(cloneBorder(line));
-                if(j == cells[i].length - 1) cell.setBorderRight(cloneBorder(line));
-                else {
-                    cell.setBorderLeft(null);
-                    cell.setBorderLeft(null);
-                }
-
-                if(i == 0) cell.setBorderTop(cloneBorder(line));
-                else if(i == cells.length - 1) cell.setBorderBottom(cloneBorder(line));
-                else {
-                    cell.setBorderTop(null);
-                    cell.setBorderBottom(null);
-                }
-            }
-        }
-    }
-
-    /**
-     * Format the inside border using the specified Line object
-     *
-     * @param line the border line
-     */
-    public void setInsideBorders(Line line){
-        for (int i = 0; i < cells.length; i++) {
-            for (int j = 0; j < cells[i].length; j++) {
-                TableCell cell = cells[i][j];
-
-                if(j != cells[i].length - 1)
-                    cell.setBorderRight(cloneBorder(line));
-                else {
-                    cell.setBorderLeft(null);
-                    cell.setBorderLeft(null);
-                }
-                if(i != cells.length - 1) cell.setBorderBottom(cloneBorder(line));
-                else {
-                    cell.setBorderTop(null);
-                    cell.setBorderBottom(null);
-                }
-            }
-        }
-    }
-
-    private Line cloneBorder(Line line){
-        Line border = createBorder();
-        border.setLineWidth(line.getLineWidth());
-        border.setLineStyle(line.getLineStyle());
-        border.setLineDashing(line.getLineDashing());
-        border.setLineColor(line.getLineColor());
-        return border;
-    }
-
-    /**
-     * Create a border to format this table
-     *
-     * @return the created border
-     */
-    public Line createBorder(){
-        Line line = new Line(this);
-
-        EscherOptRecord opt = (EscherOptRecord)getEscherChild(line.getSpContainer(), EscherOptRecord.RECORD_ID);
-        setEscherProperty(opt, EscherProperties.GEOMETRY__SHAPEPATH, -1);
-        setEscherProperty(opt, EscherProperties.GEOMETRY__FILLOK, -1);
-        setEscherProperty(opt, EscherProperties.SHADOWSTYLE__SHADOWOBSURED, 0x20000);
-        setEscherProperty(opt, EscherProperties.THREED__LIGHTFACE, 0x80000);
-
-        return line;
-    }
-}
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+
+package org.apache.poi.hslf.model;
+
+import org.apache.poi.ddf.*;
+import org.apache.poi.util.LittleEndian;
+
+import java.util.*;
+import java.util.List;
+import java.awt.*;
+
+/**
+ * Represents a table in a PowerPoint presentation
+ *
+ * @author Yegor Kozlov
+ */
+public final class Table extends ShapeGroup {
+
+    protected static final int BORDER_TOP = 1;
+    protected static final int BORDER_RIGHT = 2;
+    protected static final int BORDER_BOTTOM = 3;
+    protected static final int BORDER_LEFT = 4;
+
+    protected static final int BORDERS_ALL = 5;
+    protected static final int BORDERS_OUTSIDE = 6;
+    protected static final int BORDERS_INSIDE = 7;
+    protected static final int BORDERS_NONE = 8;
+
+
+    protected TableCell[][] cells;
+
+    /**
+     * Create a new Table of the given number of rows and columns
+     *
+     * @param numrows the number of rows
+     * @param numcols the number of columns
+     */
+    public Table(int numrows, int numcols) {
+        super();
+
+        if(numrows < 1) throw new IllegalArgumentException("The number of rows must be greater than 1");
+        if(numcols < 1) throw new IllegalArgumentException("The number of columns must be greater than 1");
+
+        int x=0, y=0, tblWidth=0, tblHeight=0;
+        cells = new TableCell[numrows][numcols];
+        for (int i = 0; i < cells.length; i++) {
+            x = 0;
+            for (int j = 0; j < cells[i].length; j++) {
+                cells[i][j] = new TableCell(this);
+                Rectangle anchor = new Rectangle(x, y, TableCell.DEFAULT_WIDTH, TableCell.DEFAULT_HEIGHT);
+                cells[i][j].setAnchor(anchor);
+                x += TableCell.DEFAULT_WIDTH;
+            }
+            y += TableCell.DEFAULT_HEIGHT;
+        }
+        tblWidth = x;
+        tblHeight = y;
+        setAnchor(new Rectangle(0, 0, tblWidth, tblHeight));
+
+        EscherContainerRecord spCont = (EscherContainerRecord) getSpContainer().getChild(0);
+        EscherOptRecord opt = new EscherOptRecord();
+        opt.setRecordId((short)0xF122);
+        opt.addEscherProperty(new EscherSimpleProperty((short)0x39F, 1));
+        EscherArrayProperty p = new EscherArrayProperty((short)0x43A0, false, null);
+        p.setSizeOfElements(0x0004);
+        p.setNumberOfElementsInArray(numrows);
+        p.setNumberOfElementsInMemory(numrows);
+        opt.addEscherProperty(p);
+        List<EscherRecord> lst = spCont.getChildRecords();
+        lst.add(lst.size()-1, opt);
+        spCont.setChildRecords(lst);
+    }
+
+    /**
+     * Create a Table object and initilize it from the supplied Record container.
+     *
+     * @param escherRecord <code>EscherSpContainer</code> container which holds information about this shape
+     * @param parent       the parent of the shape
+     */
+    public Table(EscherContainerRecord escherRecord, Shape parent) {
+        super(escherRecord, parent);
+    }
+
+    /**
+     * Gets a cell
+     *
+     * @param row the row index (0-based)
+     * @param col the column index (0-based)
+     * @return the cell
+     */
+    public TableCell getCell(int row, int col) {
+        return cells[row][col];
+    }
+
+    public int getNumberOfColumns() {
+        return cells[0].length;
+    }
+    public int getNumberOfRows() {
+        return cells.length;
+    }
+
+    protected void afterInsert(Sheet sh){
+        super.afterInsert(sh);
+
+        EscherContainerRecord spCont = (EscherContainerRecord) getSpContainer().getChild(0);
+        List<EscherRecord> lst = spCont.getChildRecords();
+        EscherOptRecord opt = (EscherOptRecord)lst.get(lst.size()-2);
+        EscherArrayProperty p = (EscherArrayProperty)opt.getEscherProperty(1);
+        for (int i = 0; i < cells.length; i++) {
+            TableCell cell = cells[i][0];
+            int rowHeight = cell.getAnchor().height*MASTER_DPI/POINT_DPI;
+            byte[] val = new byte[4];
+            LittleEndian.putInt(val, rowHeight);
+            p.setElement(i, val);
+            for (int j = 0; j < cells[i].length; j++) {
+                TableCell c = cells[i][j];
+                addShape(c);
+
+                Line bt = c.getBorderTop();
+                if(bt != null) addShape(bt);
+
+                Line br = c.getBorderRight();
+                if(br != null) addShape(br);
+
+                Line bb = c.getBorderBottom();
+                if(bb != null) addShape(bb);
+
+                Line bl = c.getBorderLeft();
+                if(bl != null) addShape(bl);
+
+            }
+        }
+
+    }
+
+    protected void initTable(){
+        Shape[] sh = getShapes();
+        Arrays.sort(sh, new Comparator(){
+            public int compare( Object o1, Object o2 ) {
+                Rectangle anchor1 = ((Shape)o1).getAnchor();
+                Rectangle anchor2 = ((Shape)o2).getAnchor();
+                int delta = anchor1.y - anchor2.y;
+                if(delta == 0) delta = anchor1.x - anchor2.y;
+                return delta;
+            }
+        });
+        int y0 = -1;
+        int maxrowlen = 0;
+        ArrayList lst = new ArrayList();
+        ArrayList row = null;
+        for (int i = 0; i < sh.length; i++) {
+            if(sh[i] instanceof TextShape){
+                Rectangle anchor = sh[i].getAnchor();
+                if(anchor.y != y0){
+                    y0 = anchor.y;
+                    row = new ArrayList();
+                    lst.add(row);
+                }
+                row.add(sh[i]);
+                maxrowlen = Math.max(maxrowlen, row.size());
+            }
+        }
+        cells = new TableCell[lst.size()][maxrowlen];
+        for (int i = 0; i < lst.size(); i++) {
+            row = (ArrayList)lst.get(i);
+            for (int j = 0; j < row.size(); j++) {
+                TextShape tx = (TextShape)row.get(j);
+                cells[i][j] = new TableCell(tx.getSpContainer(), getParent());
+                cells[i][j].setSheet(tx.getSheet());
+            }
+        }
+    }
+
+    /**
+     * Assign the <code>SlideShow</code> this shape belongs to
+     *
+     * @param sheet owner of this shape
+     */
+    public void setSheet(Sheet sheet){
+        super.setSheet(sheet);
+        if(cells == null) initTable();
+    }
+
+    /**
+     * Sets the row height.
+     *
+     * @param row the row index (0-based)
+     * @param height the height to set (in pixels)
+     */
+    public void setRowHeight(int row, int height){
+        int currentHeight = cells[row][0].getAnchor().height;
+        int dy = height - currentHeight;
+
+        for (int i = row; i < cells.length; i++) {
+            for (int j = 0; j < cells[i].length; j++) {
+                Rectangle anchor = cells[i][j].getAnchor();
+                if(i == row) anchor.height = height;
+                else anchor.y += dy;
+                cells[i][j].setAnchor(anchor);
+            }
+        }
+        Rectangle tblanchor = getAnchor();
+        tblanchor.height += dy;
+        setAnchor(tblanchor);
+
+    }
+
+    /**
+     * Sets the column width.
+     *
+     * @param col the column index (0-based)
+     * @param width the width to set (in pixels)
+     */
+    public void setColumnWidth(int col, int width){
+        int currentWidth = cells[0][col].getAnchor().width;
+        int dx = width - currentWidth;
+        for (int i = 0; i < cells.length; i++) {
+            Rectangle anchor = cells[i][col].getAnchor();
+            anchor.width = width;
+            cells[i][col].setAnchor(anchor);
+
+            if(col < cells[i].length - 1) for (int j = col+1; j < cells[i].length; j++) {
+                anchor = cells[i][j].getAnchor();
+                anchor.x += dx;
+                cells[i][j].setAnchor(anchor);
+            }
+        }
+        Rectangle tblanchor = getAnchor();
+        tblanchor.width += dx;
+        setAnchor(tblanchor);
+    }
+
+    /**
+     * Format the table and apply the specified Line to all cell boundaries,
+     * both outside and inside
+     *
+     * @param line the border line
+     */
+    public void setAllBorders(Line line){
+        for (int i = 0; i < cells.length; i++) {
+            for (int j = 0; j < cells[i].length; j++) {
+                TableCell cell = cells[i][j];
+                cell.setBorderTop(cloneBorder(line));
+                cell.setBorderLeft(cloneBorder(line));
+                if(j == cells[i].length - 1) cell.setBorderRight(cloneBorder(line));
+                if(i == cells.length - 1) cell.setBorderBottom(cloneBorder(line));
+            }
+        }
+    }
+
+    /**
+     * Format the outside border using the specified Line object
+     *
+     * @param line the border line
+     */
+    public void setOutsideBorders(Line line){
+        for (int i = 0; i < cells.length; i++) {
+            for (int j = 0; j < cells[i].length; j++) {
+                TableCell cell = cells[i][j];
+
+                if(j == 0) cell.setBorderLeft(cloneBorder(line));
+                if(j == cells[i].length - 1) cell.setBorderRight(cloneBorder(line));
+                else {
+                    cell.setBorderLeft(null);
+                    cell.setBorderLeft(null);
+                }
+
+                if(i == 0) cell.setBorderTop(cloneBorder(line));
+                else if(i == cells.length - 1) cell.setBorderBottom(cloneBorder(line));
+                else {
+                    cell.setBorderTop(null);
+                    cell.setBorderBottom(null);
+                }
+            }
+        }
+    }
+
+    /**
+     * Format the inside border using the specified Line object
+     *
+     * @param line the border line
+     */
+    public void setInsideBorders(Line line){
+        for (int i = 0; i < cells.length; i++) {
+            for (int j = 0; j < cells[i].length; j++) {
+                TableCell cell = cells[i][j];
+
+                if(j != cells[i].length - 1)
+                    cell.setBorderRight(cloneBorder(line));
+                else {
+                    cell.setBorderLeft(null);
+                    cell.setBorderLeft(null);
+                }
+                if(i != cells.length - 1) cell.setBorderBottom(cloneBorder(line));
+                else {
+                    cell.setBorderTop(null);
+                    cell.setBorderBottom(null);
+                }
+            }
+        }
+    }
+
+    private Line cloneBorder(Line line){
+        Line border = createBorder();
+        border.setLineWidth(line.getLineWidth());
+        border.setLineStyle(line.getLineStyle());
+        border.setLineDashing(line.getLineDashing());
+        border.setLineColor(line.getLineColor());
+        return border;
+    }
+
+    /**
+     * Create a border to format this table
+     *
+     * @return the created border
+     */
+    public Line createBorder(){
+        Line line = new Line(this);
+
+        EscherOptRecord opt = (EscherOptRecord)getEscherChild(line.getSpContainer(), EscherOptRecord.RECORD_ID);
+        setEscherProperty(opt, EscherProperties.GEOMETRY__SHAPEPATH, -1);
+        setEscherProperty(opt, EscherProperties.GEOMETRY__FILLOK, -1);
+        setEscherProperty(opt, EscherProperties.SHADOWSTYLE__SHADOWOBSURED, 0x20000);
+        setEscherProperty(opt, EscherProperties.THREED__LIGHTFACE, 0x80000);
+
+        return line;
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org