import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.util.CellReference;
+import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;
/**
// image as the size of the row/column is adjusted. This could easilly
// become another parameter passed to the method.
//anchor.setAnchorType(HSSFClientAnchor.DONT_MOVE_AND_RESIZE);
- anchor.setAnchorType(HSSFClientAnchor.MOVE_AND_RESIZE);
+ anchor.setAnchorType(AnchorType.MOVE_AND_RESIZE);
// Now, add the picture to the workbook. Note that the type is assumed
// to be a JPEG/JPG, this could easily (and should) be parameterised
package org.apache.poi.hssf.usermodel.examples;
import org.apache.poi.hssf.usermodel.*;
+import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;
import java.io.*;
HSSFClientAnchor anchor;
anchor = new HSSFClientAnchor(0,0,0,255,(short)2,2,(short)4,7);
- anchor.setAnchorType( 2 );
+ anchor.setAnchorType( AnchorType.MOVE_DONT_RESIZE );
patriarch.createPicture(anchor, loadPicture( "src/resources/logos/logoKarmokar4.png", wb ));
anchor = new HSSFClientAnchor(0,0,0,255,(short)4,2,(short)5,7);
- anchor.setAnchorType( 2 );
+ anchor.setAnchorType( AnchorType.MOVE_DONT_RESIZE );
patriarch.createPicture(anchor, loadPicture( "src/resources/logos/logoKarmokar4edited.png", wb ));
anchor = new HSSFClientAnchor(0,0,1023,255,(short)6,2,(short)8,7);
- anchor.setAnchorType( 2 );
+ anchor.setAnchorType( AnchorType.MOVE_DONT_RESIZE );
HSSFPicture picture = patriarch.createPicture(anchor, loadPicture( "src/resources/logos/logoKarmokar4s.png", wb ));
//Reset the image to the original size.
picture.resize();
import org.apache.poi.hssf.usermodel.HSSFWorkbook;\r
import org.apache.poi.hssf.usermodel.HSSFSheet;\r
import org.apache.poi.ss.usermodel.ClientAnchor;\r
+import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;\r
import org.apache.poi.ss.usermodel.Drawing;\r
import org.apache.poi.ss.usermodel.Row;\r
import org.apache.poi.ss.usermodel.Sheet;\r
anchor.setRow2(rowClientAnchorDetail.getToIndex());\r
\r
// For now, set the anchor type to do not move or resize the\r
- // image as the size of the row/column is adjusted. This could easilly\r
+ // image as the size of the row/column is adjusted. This could easily\r
// become another parameter passed to the method. Please read the note\r
// above regarding the behaviour of image resizing.\r
- anchor.setAnchorType(ClientAnchor.MOVE_AND_RESIZE);\r
+ anchor.setAnchorType(AnchorType.MOVE_AND_RESIZE);\r
\r
// Now, add the picture to the workbook. Note that unlike the similar\r
// method in the HSSF Examples section, the image type is checked. First,\r
}\r
\r
/**\r
- * Determines whether the sheets columns should be re-sized to accomodate\r
+ * Determines whether the sheets columns should be re-sized to accommodate\r
* the image, adjusts the columns width if necessary and creates then\r
* returns a ClientAnchorDetail object that facilitates construction of\r
* an ClientAnchor that will fix the image on the sheet and establish\r
* it's size.\r
*\r
* @param sheet A reference to the sheet that will 'contain' the image.\r
- * @param colNumber A primtive int that contains the index number of a\r
+ * @param colNumber A primitive int that contains the index number of a\r
* column on the sheet.\r
* @param reqImageWidthMM A primitive double that contains the required\r
* width of the image in millimetres\r
import org.apache.poi.ddf.*;
import org.apache.poi.hssf.record.*;
import org.apache.poi.hssf.usermodel.*;
+import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;
/**
* Represents a combobox shape.
opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.GROUPSHAPE__PRINT, 0x00020000));
HSSFClientAnchor userAnchor = (HSSFClientAnchor) shape.getAnchor();
- userAnchor.setAnchorType(1);
+ userAnchor.setAnchorType(AnchorType.DONT_MOVE_DO_RESIZE);
EscherRecord anchor = createAnchor(userAnchor);
clientData.setRecordId(EscherClientDataRecord.RECORD_ID);
clientData.setOptions((short) 0x0000);
EscherClientAnchorRecord anchor = new EscherClientAnchorRecord();
anchor.setRecordId( EscherClientAnchorRecord.RECORD_ID );
anchor.setOptions( (short) 0x0000 );
- anchor.setFlag( (short) a.getAnchorType() );
+ anchor.setFlag( a.getAnchorType().value );
anchor.setCol1( (short) Math.min(a.getCol1(), a.getCol2()) );
anchor.setDx1( (short) a.getDx1() );
anchor.setRow1( (short) Math.min(a.getRow1(), a.getRow2()) );
/**
* Gets the anchor type
- * <p/>
- * 0 = Move and size with Cells, 2 = Move but don't size with cells, 3 = Don't move or size with cells.
+ * @return the anchor type
*/
- public int getAnchorType() {
- return _escherClientAnchor.getFlag();
+ @Override
+ public AnchorType getAnchorType() {
+ return AnchorType.byId(_escherClientAnchor.getFlag());
}
/**
* Sets the anchor type
- * <p/>
- * 0 = Move and size with Cells, 2 = Move but don't size with cells, 3 = Don't move or size with cells.
+ * @param anchorType the anchor type to set
*/
- public void setAnchorType(int anchorType) {
- _escherClientAnchor.setFlag(Integer.valueOf(anchorType).shortValue());
+ @Override
+ public void setAnchorType(AnchorType anchorType) {
+ _escherClientAnchor.setFlag(anchorType.value);
}
private void checkRange(int value, int minRange, int maxRange, String varName) {
\r
import org.apache.poi.ddf.*;\r
import org.apache.poi.hssf.record.*;\r
+import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;\r
\r
/**\r
* \r
opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.GROUPSHAPE__PRINT, 0x00020000));\r
\r
HSSFClientAnchor userAnchor = (HSSFClientAnchor) getAnchor();\r
- userAnchor.setAnchorType(1);\r
+ userAnchor.setAnchorType(AnchorType.DONT_MOVE_DO_RESIZE);\r
EscherRecord anchor = userAnchor.getEscherAnchor();\r
clientData.setRecordId(EscherClientDataRecord.RECORD_ID);\r
clientData.setOptions((short) 0x0000);\r
import org.apache.poi.hssf.record.CommonObjectDataSubRecord;
import org.apache.poi.hssf.record.EscherAggregate;
import org.apache.poi.hssf.record.ObjRecord;
+import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;
import org.apache.poi.ss.usermodel.Picture;
import org.apache.poi.ss.util.ImageUtils;
import org.apache.poi.util.POILogFactory;
*/
public void resize(double scaleX, double scaleY) {
HSSFClientAnchor anchor = getClientAnchor();
- anchor.setAnchorType(2);
+ anchor.setAnchorType(AnchorType.MOVE_DONT_RESIZE);
HSSFClientAnchor pref = getPreferredSize(scaleX,scaleY);
* @author Yegor Kozlov
*/
public interface ClientAnchor {
+
/**
* Move and Resize With Anchor Cells
* <p>
* resize to maintain its row and column anchors (i.e. the
* object is anchored to the actual from and to row and column)
* </p>
+ * @deprecated since POI 3.14beta1 (circa 2015-11-24). Use {@link AnchorType.MOVE_AND_RESIZE} instead.
*/
- public static final int MOVE_AND_RESIZE = 0;
-
+ public static final AnchorType MOVE_AND_RESIZE = AnchorType.MOVE_AND_RESIZE;
+
/**
* Move With Cells but Do Not Resize
* <p>
* If additional rows/columns are added between the from and to locations of the drawing,
* the drawing shall move its to anchors as needed to maintain this same absolute size.
* </p>
+ * @deprecated since POI 3.14beta1 (circa 2015-11-24). Use {@link AnchorType.MOVE_DONT_RESIZE} instead.
*/
- public static final int MOVE_DONT_RESIZE = 2;
+ public static final AnchorType MOVE_DONT_RESIZE = AnchorType.MOVE_DONT_RESIZE;
/**
* Do Not Move or Resize With Underlying Rows/Columns
* drawing, the drawing shall move its anchors as needed
* to maintain this same absolute position.
* </p>
+ * @deprecated since POI 3.14beta1 (circa 2015-11-24). Use {@link AnchorType.DONT_MOVE_AND_RESIZE} instead.
*/
- public static final int DONT_MOVE_AND_RESIZE = 3;
-
+ public static final AnchorType DONT_MOVE_AND_RESIZE = AnchorType.DONT_MOVE_AND_RESIZE;
+
+ /**
+ * @since POI 3.14beta1
+ */
+ public static enum AnchorType {
+ /**
+ * Move and Resize With Anchor Cells (0)
+ * <p>
+ * Specifies that the current drawing shall move and
+ * resize to maintain its row and column anchors (i.e. the
+ * object is anchored to the actual from and to row and column)
+ * </p>
+ */
+ MOVE_AND_RESIZE(0),
+
+ /**
+ * Don't Move but do Resize With Anchor Cells (1)
+ * <p>
+ * Specifies that the current drawing shall not move with its
+ * row and column, but should be resized. This option is not normally
+ * used, but is included for completeness.
+ * </p>
+ */
+ DONT_MOVE_DO_RESIZE(1),
+
+ /**
+ * Move With Cells but Do Not Resize (2)
+ * <p>
+ * Specifies that the current drawing shall move with its
+ * row and column (i.e. the object is anchored to the
+ * actual from row and column), but that the size shall remain absolute.
+ * </p>
+ * <p>
+ * If additional rows/columns are added between the from and to locations of the drawing,
+ * the drawing shall move its to anchors as needed to maintain this same absolute size.
+ * </p>
+ */
+ MOVE_DONT_RESIZE(2),
+
+ /**
+ * Do Not Move or Resize With Underlying Rows/Columns (3)
+ * <p>
+ * Specifies that the current start and end positions shall
+ * be maintained with respect to the distances from the
+ * absolute start point of the worksheet.
+ * </p>
+ * <p>
+ * If additional rows/columns are added before the
+ * drawing, the drawing shall move its anchors as needed
+ * to maintain this same absolute position.
+ * </p>
+ */
+ DONT_MOVE_AND_RESIZE(3);
+
+ public final short value;
+ AnchorType(int value) {
+ this.value = (short) value;
+ }
+
+ public static AnchorType byId(int value) {
+ return values()[value];
+ }
+ }
+
/**
* Returns the column (0 based) of the first cell.
*
/**
* Sets the anchor type
- * <p>
- * 0 = Move and size with Cells, 2 = Move but don't size with cells, 3 = Don't move or size with cells.
- * </p>
- * @param anchorType the anchor type
- * @see #MOVE_AND_RESIZE
- * @see #MOVE_DONT_RESIZE
- * @see #DONT_MOVE_AND_RESIZE
+ * @param anchorType the anchor type to set
*/
- public void setAnchorType( int anchorType );
+ public void setAnchorType( AnchorType anchorType );
/**
* Gets the anchor type
- * <p>
- * 0 = Move and size with Cells, 2 = Move but don't size with cells, 3 = Don't move or size with cells.
- * </p>
* @return the anchor type
- * @see #MOVE_AND_RESIZE
- * @see #MOVE_DONT_RESIZE
- * @see #DONT_MOVE_AND_RESIZE
*/
- public int getAnchorType();
+ public AnchorType getAnchorType();
}
* @author Yegor Kozlov
*/
public final class XSSFClientAnchor extends XSSFAnchor implements ClientAnchor {
- private int anchorType;
+ private AnchorType DEFAULT_ANCHOR_TYPE = AnchorType.MOVE_AND_RESIZE;
+ private AnchorType anchorType;
/**
* Starting anchor point
* Creates a new client anchor and defaults all the anchor positions to 0.
*/
public XSSFClientAnchor() {
+ anchorType = DEFAULT_ANCHOR_TYPE;
cell1 = CTMarker.Factory.newInstance();
cell1.setCol(0);
cell1.setColOff(0);
* @param cell2 ending anchor point
*/
protected XSSFClientAnchor(CTMarker cell1, CTMarker cell2) {
+ anchorType = DEFAULT_ANCHOR_TYPE;
this.cell1 = cell1;
this.cell2 = cell2;
}
/**
* Sets the anchor type
- * <p>
- * 0 = Move and size with Cells, 2 = Move but don't size with cells, 3 = Don't move or size with cells.
+ * @param anchorType the anchor type to set
*/
- public void setAnchorType( int anchorType )
+ @Override
+ public void setAnchorType( AnchorType anchorType )
{
this.anchorType = anchorType;
}
/**
* Gets the anchor type
- * <p>
- * 0 = Move and size with Cells, 2 = Move but don't size with cells, 3 = Don't move or size with cells.
+ * @return the anchor type
*/
- public int getAnchorType()
+ @Override
+ public AnchorType getAnchorType()
{
return anchorType;
}
import org.apache.poi.ss.usermodel.ClientAnchor;
import org.apache.poi.ss.usermodel.Drawing;
import org.apache.poi.ss.util.CellAddress;
-import org.apache.poi.ss.util.CellReference;
import org.apache.poi.util.Internal;
import org.apache.poi.util.Units;
import org.apache.poi.xssf.model.CommentsTable;
anchor.setFrom(ctAnchor.getFrom());
STEditAs.Enum aditAs;
switch(anchor.getAnchorType()) {
- case ClientAnchor.DONT_MOVE_AND_RESIZE: aditAs = STEditAs.ABSOLUTE; break;
- case ClientAnchor.MOVE_AND_RESIZE: aditAs = STEditAs.TWO_CELL; break;
- case ClientAnchor.MOVE_DONT_RESIZE: aditAs = STEditAs.ONE_CELL; break;
+ case DONT_MOVE_AND_RESIZE: aditAs = STEditAs.ABSOLUTE; break;
+ case MOVE_AND_RESIZE: aditAs = STEditAs.TWO_CELL; break;
+ case MOVE_DONT_RESIZE: aditAs = STEditAs.ONE_CELL; break;
default: aditAs = STEditAs.ONE_CELL;
}
ctAnchor.setEditAs(aditAs);
import java.util.List;
import org.apache.poi.ss.usermodel.BaseTestPicture;
-import org.apache.poi.ss.usermodel.ClientAnchor;
+import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;
import org.apache.poi.util.LocaleUtil;
import org.apache.poi.xssf.XSSFITestDataProvider;
import org.apache.poi.xssf.XSSFTestDataSamples;
assertArrayEquals(jpegData, pictures.get(jpegIdx).getData());
XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, 1, 1, 10, 30);
- assertEquals(ClientAnchor.MOVE_AND_RESIZE, anchor.getAnchorType());
- anchor.setAnchorType(ClientAnchor.DONT_MOVE_AND_RESIZE);
- assertEquals(ClientAnchor.DONT_MOVE_AND_RESIZE, anchor.getAnchorType());
+ assertEquals(AnchorType.MOVE_AND_RESIZE, anchor.getAnchorType());
+ anchor.setAnchorType(AnchorType.DONT_MOVE_AND_RESIZE);
+ assertEquals(AnchorType.DONT_MOVE_AND_RESIZE, anchor.getAnchorType());
XSSFPicture shape = drawing.createPicture(anchor, jpegIdx);
assertTrue(anchor.equals(shape.getAnchor()));
import org.apache.poi.hssf.record.EscherAggregate;
import org.apache.poi.hssf.record.ObjRecord;
import org.apache.poi.hssf.usermodel.*;
+import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.util.HexDump;
HSSFPatriarch drawing = sheet.createDrawingPatriarch();
HSSFClientAnchor anchor = new HSSFClientAnchor(10, 10, 50, 50, (short) 2, 2, (short) 4, 4);
- anchor.setAnchorType(2);
- assertEquals(anchor.getAnchorType(), 2);
+ anchor.setAnchorType(AnchorType.MOVE_DONT_RESIZE);
+ assertEquals(AnchorType.MOVE_DONT_RESIZE, anchor.getAnchorType());
HSSFSimpleShape rectangle = drawing.createSimpleShape(anchor);
rectangle.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE);
import org.apache.poi.ddf.*;\r
import org.apache.poi.hssf.HSSFTestDataSamples;\r
import org.apache.poi.hssf.usermodel.*;\r
+import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;\r
\r
/**\r
* @author Evgeniy Berlog\r
\r
public void testDefaultValues(){\r
HSSFClientAnchor clientAnchor = new HSSFClientAnchor();\r
- assertEquals(clientAnchor.getAnchorType(), 0);\r
+ assertEquals(clientAnchor.getAnchorType(), AnchorType.MOVE_AND_RESIZE);\r
assertEquals(clientAnchor.getCol1(), 0);\r
assertEquals(clientAnchor.getCol2(), 0);\r
assertEquals(clientAnchor.getDx1(), 0);\r
assertEquals(clientAnchor.getRow2(), 0);\r
\r
clientAnchor = new HSSFClientAnchor(new EscherClientAnchorRecord());\r
- assertEquals(clientAnchor.getAnchorType(), 0);\r
+ assertEquals(clientAnchor.getAnchorType(), AnchorType.MOVE_AND_RESIZE);\r
assertEquals(clientAnchor.getCol1(), 0);\r
assertEquals(clientAnchor.getCol2(), 0);\r
assertEquals(clientAnchor.getDx1(), 0);\r
\r
HSSFPatriarch drawing = sheet.createDrawingPatriarch();\r
HSSFClientAnchor anchor = new HSSFClientAnchor(10, 10, 200, 200, (short)2, 2, (short)15, 15);\r
- anchor.setAnchorType(2);\r
+ anchor.setAnchorType(AnchorType.MOVE_DONT_RESIZE);\r
\r
HSSFSimpleShape rectangle = drawing.createSimpleShape(anchor);\r
rectangle.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE);\r
clientAnchor2.setRow2(7);\r
assertEquals(clientAnchor1, clientAnchor2);\r
\r
- clientAnchor2.setAnchorType(3);\r
+ clientAnchor2.setAnchorType(AnchorType.DONT_MOVE_AND_RESIZE);\r
assertNotSame(clientAnchor1, clientAnchor2);\r
- clientAnchor2.setAnchorType(0);\r
+ clientAnchor2.setAnchorType(AnchorType.MOVE_AND_RESIZE);\r
assertEquals(clientAnchor1, clientAnchor2);\r
\r
HSSFChildAnchor childAnchor1 = new HSSFChildAnchor(0, 1, 2, 3);\r
import org.apache.poi.ss.usermodel.BaseTestBugzillaIssues;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.ss.usermodel.Name;
assertNotNull("Did not find sheet", sheet);
HSSFPatriarch patriarch = (HSSFPatriarch) sheet.createDrawingPatriarch();
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) 1, 1, (short) 10, 22);
- anchor.setAnchorType(2);
+ anchor.setAnchorType(AnchorType.MOVE_DONT_RESIZE);
patriarch.createPicture(anchor, pict);
// Write out destination file
package org.apache.poi.hssf.usermodel;
import org.apache.poi.hssf.HSSFTestDataSamples;
+import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;
import junit.framework.AssertionFailedError;
import junit.framework.TestCase;
// 3. Use patriarch
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 600, 245, (short) 1, 1, (short) 1, 2);
- anchor.setAnchorType(3);
+ anchor.setAnchorType(AnchorType.DONT_MOVE_AND_RESIZE);
byte[] pictureData = HSSFTestDataSamples.getTestDataFileContent("logoKarmokar4.png");
int idx1 = wb.addPicture(pictureData, HSSFWorkbook.PICTURE_TYPE_PNG);
patr.createPicture(anchor, idx1);
import org.apache.poi.poifs.filesystem.DirectoryNode;
import org.apache.poi.poifs.filesystem.Ole10Native;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
-import org.apache.poi.ss.usermodel.ClientAnchor;
+import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.util.LocaleUtil;
import org.junit.Test;
CreationHelper ch = wb1.getCreationHelper();
HSSFClientAnchor anchor = (HSSFClientAnchor)ch.createClientAnchor();
anchor.setAnchor((short)(2+coloffset), 1+rowoffset, 0, 0, (short)(3+coloffset), 5+rowoffset, 0, 0);
- anchor.setAnchorType(ClientAnchor.DONT_MOVE_AND_RESIZE);
+ anchor.setAnchorType(AnchorType.DONT_MOVE_AND_RESIZE);
patriarch.createObjectData(anchor, pptIdx, imgPPT);
anchor = (HSSFClientAnchor)ch.createClientAnchor();
anchor.setAnchor((short)(5+coloffset), 1+rowoffset, 0, 0, (short)(6+coloffset), 5+rowoffset, 0, 0);
- anchor.setAnchorType(ClientAnchor.DONT_MOVE_AND_RESIZE);
+ anchor.setAnchorType(AnchorType.DONT_MOVE_AND_RESIZE);
patriarch.createObjectData(anchor, xlsIdx, imgIdx);
anchor = (HSSFClientAnchor)ch.createClientAnchor();
anchor.setAnchor((short)(3+coloffset), 10+rowoffset, 0, 0, (short)(5+coloffset), 11+rowoffset, 0, 0);
- anchor.setAnchorType(ClientAnchor.DONT_MOVE_AND_RESIZE);
+ anchor.setAnchorType(AnchorType.DONT_MOVE_AND_RESIZE);
patriarch.createObjectData(anchor, txtIdx, imgIdx);
anchor = (HSSFClientAnchor)ch.createClientAnchor();
anchor.setAnchor((short)(1+coloffset), -2+rowoffset, 0, 0, (short)(7+coloffset), 14+rowoffset, 0, 0);
- anchor.setAnchorType(ClientAnchor.DONT_MOVE_AND_RESIZE);
+ anchor.setAnchorType(AnchorType.DONT_MOVE_AND_RESIZE);
HSSFSimpleShape circle = patriarch.createSimpleShape(anchor);
circle.setShapeType(HSSFSimpleShape.OBJECT_TYPE_OVAL);