/** * Create a new shape object used to create the escher records. * * @param hssfShape The simple shape this is based on. */ public static AbstractShape createShape(HSSFShape hssfShape, int shapeId) { AbstractShape shape; if (hssfShape instanceof HSSFComment) { shape = new CommentShape((HSSFComment) hssfShape, shapeId); } else if (hssfShape instanceof HSSFTextbox) { shape = new TextboxShape((HSSFTextbox) hssfShape, shapeId); } else if (hssfShape instanceof HSSFPolygon) { shape = new PolygonShape((HSSFPolygon) hssfShape, shapeId); } else if (hssfShape instanceof HSSFSimpleShape) { HSSFSimpleShape simpleShape = (HSSFSimpleShape) hssfShape; switch (simpleShape.getShapeType()) { case HSSFSimpleShape.OBJECT_TYPE_PICTURE: shape = new PictureShape(simpleShape, shapeId); break; case HSSFSimpleShape.OBJECT_TYPE_LINE: shape = new LineShape(simpleShape, shapeId); break; case HSSFSimpleShape.OBJECT_TYPE_OVAL: case HSSFSimpleShape.OBJECT_TYPE_RECTANGLE: shape = new SimpleFilledShape(simpleShape, shapeId); break; default: throw new IllegalArgumentException("Do not know how to handle this type of shape"); } } else { throw new IllegalArgumentException("Unknown shape type"); } EscherSpRecord sp = shape.getSpContainer().getChildById(EscherSpRecord.RECORD_ID); if (hssfShape.getParent() != null) sp.setFlags(sp.getFlags() | EscherSpRecord.FLAG_CHILD); return shape; }
/** * Add standard properties to the opt record. These properties effect all records. * * @param shape The user model shape. * @param opt The opt record to add the properties to. * @return The number of options added. */ protected int addStandardOptions(HSSFShape shape, EscherOptRecord opt) { opt.addEscherProperty( new EscherBoolProperty(EscherProperties.TEXT__SIZE_TEXT_TO_FIT_SHAPE, 0x080000)); // opt.addEscherProperty( new EscherBoolProperty( // EscherProperties.TEXT__SIZE_TEXT_TO_FIT_SHAPE, 0x080008 ) ); if (shape.isNoFill()) { // Wonderful... none of the spec's give any clue as to what these constants mean. opt.addEscherProperty( new EscherBoolProperty(EscherProperties.FILL__NOFILLHITTEST, 0x00110000)); } else { opt.addEscherProperty( new EscherBoolProperty(EscherProperties.FILL__NOFILLHITTEST, 0x00010000)); } opt.addEscherProperty( new EscherRGBProperty(EscherProperties.FILL__FILLCOLOR, shape.getFillColor())); opt.addEscherProperty(new EscherBoolProperty(EscherProperties.GROUPSHAPE__PRINT, 0x080000)); opt.addEscherProperty( new EscherRGBProperty(EscherProperties.LINESTYLE__COLOR, shape.getLineStyleColor())); int options = 5; if (shape.getLineWidth() != HSSFShape.LINEWIDTH_DEFAULT) { opt.addEscherProperty( new EscherSimpleProperty(EscherProperties.LINESTYLE__LINEWIDTH, shape.getLineWidth())); options++; } if (shape.getLineStyle() != HSSFShape.LINESTYLE_SOLID) { opt.addEscherProperty( new EscherSimpleProperty(EscherProperties.LINESTYLE__LINEDASHING, shape.getLineStyle())); opt.addEscherProperty( new EscherSimpleProperty(EscherProperties.LINESTYLE__LINEENDCAPSTYLE, 0)); if (shape.getLineStyle() == HSSFShape.LINESTYLE_NONE) opt.addEscherProperty( new EscherBoolProperty(EscherProperties.LINESTYLE__NOLINEDRAWDASH, 0x00080000)); else opt.addEscherProperty( new EscherBoolProperty(EscherProperties.LINESTYLE__NOLINEDRAWDASH, 0x00080008)); options += 3; } opt.sortProperties(); return options; // # options added }