/// <summary> /// Sets standard escher options for a comment. /// This method is responsible for Setting default background, /// shading and other comment properties. /// </summary> /// <param name="shape">The highlevel shape.</param> /// <param name="opt">The escher records holding the proerties</param> /// <returns>The number of escher options added</returns> protected override int AddStandardOptions(HSSFShape shape, EscherOptRecord opt) { base.AddStandardOptions(shape, opt); //Remove Unnecessary properties inherited from TextboxShape IList props = (IList)opt.EscherProperties.Clone(); for (IEnumerator iterator = props.GetEnumerator(); iterator.MoveNext();) { EscherProperty prop = (EscherProperty)iterator.Current; switch (prop.Id) { case EscherProperties.TEXT__TEXTLEFT: case EscherProperties.TEXT__TEXTRIGHT: case EscherProperties.TEXT__TEXTTOP: case EscherProperties.TEXT__TEXTBOTTOM: case EscherProperties.GROUPSHAPE__PRINT: case EscherProperties.Fill__FillBACKCOLOR: case EscherProperties.LINESTYLE__COLOR: opt.EscherProperties.Remove(prop); break; } } HSSFComment comment = (HSSFComment)shape; opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.GROUPSHAPE__PRINT, comment.Visible ? 0x000A0000 : 0x000A0002)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.SHADOWSTYLE__SHADOWOBSURED, 0x00030003)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.SHADOWSTYLE__COLOR, 0x00000000)); opt.SortProperties(); return(opt.EscherProperties.Count); // # options Added }
/** * Generates the escher shape records for this shape. */ private EscherContainerRecord CreateSpContainer(HSSFSimpleShape shape, int shapeId) { EscherContainerRecord spContainer = new EscherContainerRecord(); EscherSpRecord sp = new EscherSpRecord(); EscherOptRecord opt = new EscherOptRecord(); EscherClientDataRecord clientData = new EscherClientDataRecord(); spContainer.RecordId = (EscherContainerRecord.SP_CONTAINER); spContainer.Options = ((short)0x000F); sp.RecordId = (EscherSpRecord.RECORD_ID); sp.Options = ((short)((EscherAggregate.ST_HOSTCONTROL << 4) | 0x2)); sp.ShapeId = (shapeId); sp.Flags = (EscherSpRecord.FLAG_HAVEANCHOR | EscherSpRecord.FLAG_HASSHAPETYPE); opt.RecordId = (EscherOptRecord.RECORD_ID); opt.AddEscherProperty(new EscherBoolProperty(EscherProperties.PROTECTION__LOCKAGAINSTGROUPING, 17039620)); opt.AddEscherProperty(new EscherBoolProperty(EscherProperties.TEXT__SIZE_TEXT_TO_FIT_SHAPE, 0x00080008)); opt.AddEscherProperty(new EscherBoolProperty(EscherProperties.LINESTYLE__NOLINEDRAWDASH, 0x00080000)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.GROUPSHAPE__PRINT, 0x00020000)); HSSFClientAnchor userAnchor = (HSSFClientAnchor)shape.Anchor; userAnchor.AnchorType = 1; EscherRecord anchor = CreateAnchor(userAnchor); clientData.RecordId = (EscherClientDataRecord.RECORD_ID); clientData.Options = ((short)0x0000); spContainer.AddChildRecord(sp); spContainer.AddChildRecord(opt); spContainer.AddChildRecord(anchor); spContainer.AddChildRecord(clientData); return(spContainer); }
private void CheckSerializeSimple() { EscherOptRecord r = new EscherOptRecord(); r.Options = (short)0x0033; r.RecordId = unchecked ((short)0xF00B); EscherBoolProperty prop1 = new EscherBoolProperty(EscherProperties.TEXT__SIZE_TEXT_TO_FIT_SHAPE, 1); EscherRGBProperty prop2 = new EscherRGBProperty(EscherProperties.FILL__FILLCOLOR, 0x08000009); EscherRGBProperty prop3 = new EscherRGBProperty(EscherProperties.LINESTYLE__COLOR, 0x08000040); r.AddEscherProperty(prop1); r.AddEscherProperty(prop2); r.AddEscherProperty(prop3); byte[] data = new byte[26]; int bytesWritten = r.Serialize(0, data); string dataStr = "[33, 00, " + "0B, F0, " + "12, 00, 00, 00, " + "BF, 00, 01, 00, 00, 00, " + "81, 01, 09, 00, 00, 08, " + "C0, 01, 40, 00, 00, 08]"; Assert.AreEqual(dataStr, HexDump.ToHex(data)); Assert.AreEqual(26, bytesWritten); }
private void CheckSerializeComplex() { //Complex escher record EscherOptRecord r = new EscherOptRecord(); r.Options = (short)0x0033; r.RecordId = unchecked ((short)0xF00B); EscherBoolProperty prop1 = new EscherBoolProperty(EscherProperties.TEXT__SIZE_TEXT_TO_FIT_SHAPE, 1); EscherComplexProperty prop2 = new EscherComplexProperty((short)1, false, new byte[] { 0x01, 0x02 }); EscherBoolProperty prop3 = new EscherBoolProperty(EscherProperties.TEXT__SIZE_TEXT_TO_FIT_SHAPE, 1); r.AddEscherProperty(prop1); r.AddEscherProperty(prop2); r.AddEscherProperty(prop3); byte[] data = new byte[28]; int bytesWritten = r.Serialize(0, data); Assert.AreEqual(28, bytesWritten); string dataStr = "[33, 00, " + "0B, F0, " + "14, 00, 00, 00, " + "BF, 00, 01, 00, 00, 00, " + "01, 80, 02, 00, 00, 00, " + "BF, 00, 01, 00, 00, 00, " + "01, 02]"; Assert.AreEqual(dataStr, HexDump.ToHex(data)); }
/// <summary> /// Sets standard escher options for a comment. /// This method is responsible for Setting default background, /// shading and other comment properties. /// </summary> /// <param name="shape">The highlevel shape.</param> /// <param name="opt">The escher records holding the proerties</param> /// <returns>The number of escher options added</returns> protected override int AddStandardOptions(HSSFShape shape, EscherOptRecord opt) { base.AddStandardOptions(shape, opt); //Remove Unnecessary properties inherited from TextboxShape for (int i = 0; i < opt.EscherProperties.Count; i++) { EscherProperty prop = opt.EscherProperties[i]; switch (prop.Id) { case EscherProperties.TEXT__TEXTLEFT: case EscherProperties.TEXT__TEXTRIGHT: case EscherProperties.TEXT__TEXTTOP: case EscherProperties.TEXT__TEXTBOTTOM: case EscherProperties.GROUPSHAPE__PRINT: case EscherProperties.Fill__FillBACKCOLOR: case EscherProperties.LINESTYLE__COLOR: opt.EscherProperties.Remove(prop); i--; break; } } HSSFComment comment = (HSSFComment)shape; opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.GROUPSHAPE__PRINT, comment.Visible ? 0x000A0000 : 0x000A0002)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.SHADOWSTYLE__SHADOWOBSURED, 0x00030003)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.SHADOWSTYLE__COLOR, 0x00000000)); opt.SortProperties(); return(opt.EscherProperties.Count); // # options Added }
/** * 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) { base(); if(numrows < 1) throw new ArgumentException("The number of rows must be greater than 1"); if(numcols < 1) throw new ArgumentException("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.Count-1, opt); spCont.SetChildRecords(lst); }
protected override EscherContainerRecord CreateSpContainer() { EscherContainerRecord spgrContainer = new EscherContainerRecord(); EscherContainerRecord spContainer = new EscherContainerRecord(); EscherSpgrRecord spgr = new EscherSpgrRecord(); EscherSpRecord sp = new EscherSpRecord(); EscherOptRecord opt = new EscherOptRecord(); EscherRecord anchor; EscherClientDataRecord clientData = new EscherClientDataRecord(); spgrContainer.RecordId = (EscherContainerRecord.SPGR_CONTAINER); spgrContainer.Options = ((short)0x000F); spContainer.RecordId = (EscherContainerRecord.SP_CONTAINER); spContainer.Options = (short)0x000F; spgr.RecordId = (EscherSpgrRecord.RECORD_ID); spgr.Options = (short)0x0001; spgr.RectX1 = (0); spgr.RectY1 = (0); spgr.RectX2 = (1023); spgr.RectY2 = (255); sp.RecordId = (EscherSpRecord.RECORD_ID); sp.Options = (short)0x0002; if (this.Anchor is HSSFClientAnchor) { sp.Flags = (EscherSpRecord.FLAG_GROUP | EscherSpRecord.FLAG_HAVEANCHOR); } else { sp.Flags = (EscherSpRecord.FLAG_GROUP | EscherSpRecord.FLAG_HAVEANCHOR | EscherSpRecord.FLAG_CHILD); } opt.RecordId = (EscherOptRecord.RECORD_ID); opt.Options = ((short)0x0023); opt.AddEscherProperty(new EscherBoolProperty(EscherProperties.PROTECTION__LOCKAGAINSTGROUPING, 0x00040004)); opt.AddEscherProperty(new EscherBoolProperty(EscherProperties.GROUPSHAPE__PRINT, 0x00080000)); anchor = Anchor.GetEscherAnchor(); clientData.RecordId = (EscherClientDataRecord.RECORD_ID); clientData.Options = ((short)0x0000); spgrContainer.AddChildRecord(spContainer); spContainer.AddChildRecord(spgr); spContainer.AddChildRecord(sp); spContainer.AddChildRecord(opt); spContainer.AddChildRecord(anchor); spContainer.AddChildRecord(clientData); return(spgrContainer); }
/// <summary> /// Creates the lowerlevel escher records for this shape. /// </summary> /// <param name="hssfShape">The HSSF shape.</param> /// <param name="shapeId">The shape id.</param> /// <returns></returns> private EscherContainerRecord CreateSpContainer(HSSFTextbox hssfShape, int shapeId) { HSSFTextbox shape = hssfShape; EscherContainerRecord spContainer = new EscherContainerRecord(); EscherSpRecord sp = new EscherSpRecord(); EscherOptRecord opt = new EscherOptRecord(); EscherRecord anchor = new EscherClientAnchorRecord(); EscherClientDataRecord clientData = new EscherClientDataRecord(); escherTextbox = new EscherTextboxRecord(); spContainer.RecordId = EscherContainerRecord.SP_CONTAINER; spContainer.Options = (short)0x000F; sp.RecordId = EscherSpRecord.RECORD_ID; sp.Options = (short)((EscherAggregate.ST_TEXTBOX << 4) | 0x2); sp.ShapeId = shapeId; sp.Flags = EscherSpRecord.FLAG_HAVEANCHOR | EscherSpRecord.FLAG_HASSHAPETYPE; opt.RecordId = EscherOptRecord.RECORD_ID; // opt.AddEscherProperty( new EscherBoolProperty( EscherProperties.PROTECTION__LOCKAGAINSTGROUPING, 262144 ) ); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__TEXTID, 0)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__TEXTLEFT, shape.MarginLeft)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__TEXTRIGHT, shape.MarginRight)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__TEXTBOTTOM, shape.MarginBottom)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__TEXTTOP, shape.MarginTop)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__WRAPTEXT, 0)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__ANCHORTEXT, 0)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.GROUPSHAPE__PRINT, 0x00080000)); AddStandardOptions(shape, opt); HSSFAnchor userAnchor = shape.Anchor; // if (userAnchor.IsHorizontallyFlipped()) // sp.Flags(sp.Flags | EscherSpRecord.FLAG_FLIPHORIZ); // if (userAnchor.IsVerticallyFlipped()) // sp.Flags(sp.Flags | EscherSpRecord.FLAG_FLIPVERT); anchor = CreateAnchor(userAnchor); clientData.RecordId = EscherClientDataRecord.RECORD_ID; clientData.Options = (short)0x0000; escherTextbox.RecordId = EscherTextboxRecord.RECORD_ID; escherTextbox.Options = (short)0x0000; spContainer.AddChildRecord(sp); spContainer.AddChildRecord(opt); spContainer.AddChildRecord(anchor); spContainer.AddChildRecord(clientData); spContainer.AddChildRecord(escherTextbox); return(spContainer); }
/// <summary> /// Creates the lowerlevel escher records for this shape. /// </summary> /// <param name="hssfShape">The HSSF shape.</param> /// <param name="shapeId">The shape id.</param> /// <returns></returns> private EscherContainerRecord CreateSpContainer(HSSFSimpleShape hssfShape, int shapeId) { HSSFShape shape = hssfShape; EscherContainerRecord spContainer = new EscherContainerRecord(); EscherSpRecord sp = new EscherSpRecord(); EscherOptRecord opt = new EscherOptRecord(); EscherRecord anchor = new EscherClientAnchorRecord(); EscherClientDataRecord clientData = new EscherClientDataRecord(); spContainer.RecordId = EscherContainerRecord.SP_CONTAINER; spContainer.Options = (short)0x000F; sp.RecordId = EscherSpRecord.RECORD_ID; sp.Options = (short)((EscherAggregate.ST_LINE << 4) | 0x2); sp.ShapeId = shapeId; sp.Flags = EscherSpRecord.FLAG_HAVEANCHOR | EscherSpRecord.FLAG_HASSHAPETYPE; opt.RecordId = EscherOptRecord.RECORD_ID; opt.AddEscherProperty(new EscherShapePathProperty(EscherProperties.GEOMETRY__SHAPEPATH, EscherShapePathProperty.COMPLEX)); opt.AddEscherProperty(new EscherBoolProperty(EscherProperties.LINESTYLE__NOLINEDRAWDASH, 1048592)); AddStandardOptions(shape, opt); HSSFAnchor userAnchor = shape.Anchor; if (userAnchor.IsHorizontallyFlipped) { sp.Flags = sp.Flags | EscherSpRecord.FLAG_FLIPHORIZ; } if (userAnchor.IsVerticallyFlipped) { sp.Flags = sp.Flags | EscherSpRecord.FLAG_FLIPVERT; } anchor = CreateAnchor(userAnchor); clientData.RecordId = EscherClientDataRecord.RECORD_ID; clientData.Options = ((short)0x0000); spContainer.AddChildRecord(sp); spContainer.AddChildRecord(opt); spContainer.AddChildRecord(anchor); spContainer.AddChildRecord(clientData); return(spContainer); }
protected override EscherContainerRecord CreateSpContainer() { EscherContainerRecord spContainer = new EscherContainerRecord(); EscherSpRecord sp = new EscherSpRecord(); EscherOptRecord opt = new EscherOptRecord(); EscherClientDataRecord clientData = new EscherClientDataRecord(); EscherTextboxRecord escherTextbox = new EscherTextboxRecord(); spContainer.RecordId = (EscherContainerRecord.SP_CONTAINER); spContainer.Options = ((short)0x000F); sp.RecordId = (EscherSpRecord.RECORD_ID); sp.Options = ((short)((EscherAggregate.ST_TEXTBOX << 4) | 0x2)); sp.Flags = (EscherSpRecord.FLAG_HAVEANCHOR | EscherSpRecord.FLAG_HASSHAPETYPE); opt.RecordId = (EscherOptRecord.RECORD_ID); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__TEXTID, 0)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__WRAPTEXT, 0)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__ANCHORTEXT, 0)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.GROUPSHAPE__PRINT, 0x00080000)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__TEXTLEFT, 0)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__TEXTRIGHT, 0)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__TEXTTOP, 0)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__TEXTBOTTOM, 0)); opt.SetEscherProperty(new EscherSimpleProperty(EscherProperties.LINESTYLE__LINEDASHING, LINESTYLE_SOLID)); opt.SetEscherProperty(new EscherBoolProperty(EscherProperties.LINESTYLE__NOLINEDRAWDASH, 0x00080008)); opt.SetEscherProperty(new EscherSimpleProperty(EscherProperties.LINESTYLE__LINEWIDTH, LINEWIDTH_DEFAULT)); opt.SetEscherProperty(new EscherRGBProperty(EscherProperties.FILL__FILLCOLOR, FILL__FILLCOLOR_DEFAULT)); opt.SetEscherProperty(new EscherRGBProperty(EscherProperties.LINESTYLE__COLOR, LINESTYLE__COLOR_DEFAULT)); opt.SetEscherProperty(new EscherBoolProperty(EscherProperties.FILL__NOFILLHITTEST, NO_FILLHITTEST_FALSE)); opt.SetEscherProperty(new EscherBoolProperty(EscherProperties.GROUPSHAPE__PRINT, 0x080000)); EscherRecord anchor = Anchor.GetEscherAnchor(); clientData.RecordId = (EscherClientDataRecord.RECORD_ID); clientData.Options = ((short)0x0000); escherTextbox.RecordId = (EscherTextboxRecord.RECORD_ID); escherTextbox.Options = ((short)0x0000); spContainer.AddChildRecord(sp); spContainer.AddChildRecord(opt); spContainer.AddChildRecord(anchor); spContainer.AddChildRecord(clientData); spContainer.AddChildRecord(escherTextbox); return(spContainer); }
/** * Set an escher property for this shape. * * @param opt The opt record to Set the properties to. * @param propId The id of the property. One of the constants defined in EscherOptRecord. * @param value value of the property. If value = -1 then the property is Removed. */ public static void SetEscherProperty(EscherOptRecord opt, short propId, int value) { List <EscherProperty> props = opt.EscherProperties; for (List <EscherProperty> .Enumerator iterator = props.GetEnumerator(); iterator.MoveNext();) { EscherProperty prop = (EscherProperty)iterator.Current; if (prop.Id == propId) { props.Remove(iterator.Current); } } if (value != -1) { opt.AddEscherProperty(new EscherSimpleProperty(propId, value)); opt.SortProperties(); } }
public void TestEmptyArrayProperty() { EscherOptRecord r = new EscherOptRecord(); EscherArrayProperty p = new EscherArrayProperty(unchecked ((short)(EscherProperties.FILL__SHADECOLORS + 0x8000)), new byte[0]); Assert.AreEqual(0, p.NumberOfElementsInArray); r.AddEscherProperty(p); byte[] data1 = r.Serialize(); EscherOptRecord opt2 = new EscherOptRecord(); opt2.FillFields(data1, new DefaultEscherRecordFactory()); p = (EscherArrayProperty)opt2.EscherProperties[0]; Assert.AreEqual(0, p.NumberOfElementsInArray); byte[] data2 = opt2.Serialize(); Assert.IsTrue(Arrays.Equals(data1, data2)); }
/// <summary> /// Creates the lowerlevel escher records for this shape. /// </summary> /// <param name="hssfShape">The HSSF shape.</param> /// <param name="shapeId">The shape id.</param> /// <returns></returns> private EscherContainerRecord CreateSpContainer(HSSFSimpleShape hssfShape, int shapeId) { HSSFPicture shape = (HSSFPicture)hssfShape; EscherContainerRecord spContainer = new EscherContainerRecord(); EscherSpRecord sp = new EscherSpRecord(); EscherOptRecord opt = new EscherOptRecord(); EscherRecord anchor; EscherClientDataRecord clientData = new EscherClientDataRecord(); spContainer.RecordId = EscherContainerRecord.SP_CONTAINER; spContainer.Options = (short)0x000F; sp.RecordId = EscherSpRecord.RECORD_ID; sp.Options = (short)((EscherAggregate.ST_PICTUREFRAME << 4) | 0x2); sp.ShapeId = shapeId; sp.Flags = EscherSpRecord.FLAG_HAVEANCHOR | EscherSpRecord.FLAG_HASSHAPETYPE; opt.RecordId = EscherOptRecord.RECORD_ID; // opt.AddEscherProperty( new EscherBoolProperty( EscherProperties.PROTECTION__LOCKAGAINSTGROUPING, 0x00800080 ) ; opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.BLIP__BLIPTODISPLAY, false, true, shape.PictureIndex)); // opt.AddEscherProperty( new EscherComplexProperty( EscherProperties.BLIP__BLIPFILENAME, true, new byte[] { (byte)0x74, (byte)0x00, (byte)0x65, (byte)0x00, (byte)0x73, (byte)0x00, (byte)0x74, (byte)0x00, (byte)0x00, (byte)0x00 } ) ; // opt.AddEscherProperty( new EscherSimpleProperty( EscherProperties.Fill__FillTYPE, 0x00000003 ) ; AddStandardOptions(shape, opt); HSSFAnchor userAnchor = shape.Anchor; if (userAnchor.IsHorizontallyFlipped) { sp.Flags = sp.Flags | EscherSpRecord.FLAG_FLIPHORIZ; } if (userAnchor.IsVerticallyFlipped) { sp.Flags = sp.Flags | EscherSpRecord.FLAG_FLIPVERT; } anchor = CreateAnchor(userAnchor); clientData.RecordId = EscherClientDataRecord.RECORD_ID; clientData.Options = (short)0x0000; spContainer.AddChildRecord(sp); spContainer.AddChildRecord(opt); spContainer.AddChildRecord(anchor); spContainer.AddChildRecord(clientData); return(spContainer); }
public void TestToString() { String nl = Environment.NewLine; EscherOptRecord r = new EscherOptRecord(); r.Options = (short)0x000F; r.RecordId = EscherOptRecord.RECORD_ID; EscherProperty prop1 = new EscherBoolProperty((short)1, 1); r.AddEscherProperty(prop1); String expected = "EscherOptRecord:" + nl + " isContainer: True" + nl + " options: 0x0013" + nl + " recordId: 0x" + HexDump.ToHex(EscherOptRecord.RECORD_ID) + nl + " numchildren: 0" + nl + " properties:" + nl + " propNum: 1, RAW: 0x0001, propName: unknown, complex: False, blipId: False, value: 1 (0x00000001)" + nl; Assert.AreEqual(expected, r.ToString()); }
public void TestToString() { string nl = Environment.NewLine; EscherOptRecord r = new EscherOptRecord(); // don't try to shoot in foot, please -- vlsergey // r.setOptions((short)0x000F); r.RecordId = EscherOptRecord.RECORD_ID; EscherProperty prop1 = new EscherBoolProperty((short)1, 1); r.AddEscherProperty(prop1); string expected = "EscherOptRecord:" + nl + " isContainer: False" + nl + " version: 0x0003" + nl + " instance: 0x0001" + nl + " recordId: 0x" + HexDump.ToHex(EscherOptRecord.RECORD_ID) + nl + " numchildren: 0" + nl + " properties:" + nl + " propNum: 1, RAW: 0x0001, propName: unknown, complex: False, blipId: False, value: 1 (0x00000001)" + nl; Assert.AreEqual(expected, r.ToString()); }
/// <summary> /// Creates the lowerlevel escher records for this shape. /// </summary> /// <param name="hssfShape">The HSSF shape.</param> /// <param name="shapeId">The shape id.</param> /// <returns></returns> private EscherContainerRecord CreateSpContainer(HSSFPolygon hssfShape, int shapeId) { HSSFShape shape = hssfShape; EscherContainerRecord spContainer = new EscherContainerRecord(); EscherSpRecord sp = new EscherSpRecord(); EscherOptRecord opt = new EscherOptRecord(); EscherClientDataRecord clientData = new EscherClientDataRecord(); spContainer.RecordId = EscherContainerRecord.SP_CONTAINER; spContainer.Options = (short)0x000F; sp.RecordId = EscherSpRecord.RECORD_ID; sp.Options = (short)((EscherAggregate.ST_DONUT << 4) | 0x2); sp.ShapeId = shapeId; if (hssfShape.Parent == null) { sp.Flags = EscherSpRecord.FLAG_HAVEANCHOR | EscherSpRecord.FLAG_HASSHAPETYPE; } else { sp.Flags = EscherSpRecord.FLAG_CHILD | EscherSpRecord.FLAG_HAVEANCHOR | EscherSpRecord.FLAG_HASSHAPETYPE; } opt.RecordId = EscherOptRecord.RECORD_ID; opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.TRANSFORM__ROTATION, false, false, 0)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.GEOMETRY__RIGHT, false, false, hssfShape.DrawAreaWidth)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.GEOMETRY__BOTTOM, false, false, hssfShape.DrawAreaHeight)); opt.AddEscherProperty(new EscherShapePathProperty(EscherProperties.GEOMETRY__SHAPEPATH, EscherShapePathProperty.COMPLEX)); EscherArrayProperty verticesProp = new EscherArrayProperty(EscherProperties.GEOMETRY__VERTICES, false, new byte[0]); verticesProp.NumberOfElementsInArray = (hssfShape.XPoints.Length + 1); verticesProp.NumberOfElementsInMemory = (hssfShape.XPoints.Length + 1); verticesProp.SizeOfElements = unchecked ((short)0xFFF0); for (int i = 0; i < hssfShape.XPoints.Length; i++) { byte[] data = new byte[4]; LittleEndian.PutShort(data, 0, (short)hssfShape.XPoints[i]); LittleEndian.PutShort(data, 2, (short)hssfShape.YPoints[i]); verticesProp.SetElement(i, data); } int point = hssfShape.XPoints.Length; byte[] data1 = new byte[4]; LittleEndian.PutShort(data1, 0, (short)hssfShape.XPoints[0]); LittleEndian.PutShort(data1, 2, (short)hssfShape.YPoints[0]); verticesProp.SetElement(point, data1); opt.AddEscherProperty(verticesProp); EscherArrayProperty segmentsProp = new EscherArrayProperty(EscherProperties.GEOMETRY__SEGMENTINFO, false, null); segmentsProp.SizeOfElements = (0x0002); segmentsProp.NumberOfElementsInArray = (hssfShape.XPoints.Length * 2 + 4); segmentsProp.NumberOfElementsInMemory = (hssfShape.XPoints.Length * 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 < hssfShape.XPoints.Length; 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.NumberOfElementsInArray - 2, new byte[] { (byte)0x01, (byte)0x60 }); segmentsProp.SetElement(segmentsProp.NumberOfElementsInArray - 1, new byte[] { (byte)0x00, (byte)0x80 }); opt.AddEscherProperty(segmentsProp); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.GEOMETRY__FillOK, false, false, 0x00010001)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.LINESTYLE__LINESTARTARROWHEAD, false, false, 0x0)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.LINESTYLE__LINEENDARROWHEAD, false, false, 0x0)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.LINESTYLE__LINEENDCAPSTYLE, false, false, 0x0)); AddStandardOptions(shape, opt); EscherRecord anchor = CreateAnchor(shape.Anchor); clientData.RecordId = (EscherClientDataRecord.RECORD_ID); clientData.Options = (short)0x0000; spContainer.AddChildRecord(sp); spContainer.AddChildRecord(opt); spContainer.AddChildRecord(anchor); spContainer.AddChildRecord(clientData); return(spContainer); }
/// <summary> /// Add standard properties to the opt record. These properties effect /// all records. /// </summary> /// <param name="shape">The user model shape.</param> /// <param name="opt">The opt record to Add the properties to.</param> /// <returns>The number of options Added.</returns> protected virtual 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.FillColor)); opt.AddEscherProperty(new EscherBoolProperty(EscherProperties.GROUPSHAPE__PRINT, 0x080000)); opt.AddEscherProperty(new EscherRGBProperty(EscherProperties.LINESTYLE__COLOR, shape.LineStyleColor)); int options = 5; if (shape.LineWidth != HSSFShape.LINEWIDTH_DEFAULT) { opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.LINESTYLE__LINEWIDTH, shape.LineWidth)); options++; } if (shape.LineStyle != LineStyle.Solid) { opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.LINESTYLE__LINEDASHING, (int)shape.LineStyle)); opt.AddEscherProperty(new EscherSimpleProperty(EscherProperties.LINESTYLE__LINEENDCAPSTYLE, 0)); if (shape.LineStyle == 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 }
private void ConvertGroup(HSSFShapeGroup shape, EscherContainerRecord escherParent, Hashtable shapeToObj) { EscherContainerRecord spgrContainer = new EscherContainerRecord(); EscherContainerRecord spContainer = new EscherContainerRecord(); EscherSpgrRecord spgr = new EscherSpgrRecord(); EscherSpRecord sp = new EscherSpRecord(); EscherOptRecord opt = new EscherOptRecord(); EscherRecord anchor; EscherClientDataRecord clientData = new EscherClientDataRecord(); spgrContainer.RecordId = EscherContainerRecord.SPGR_CONTAINER; spgrContainer.Options = (short)0x000F; spContainer.RecordId = EscherContainerRecord.SP_CONTAINER; spContainer.Options = (short)0x000F; spgr.RecordId = EscherSpgrRecord.RECORD_ID; spgr.Options = (short)0x0001; spgr.RectX1 = shape.X1; spgr.RectY1 = shape.Y1; spgr.RectX2 = shape.X2; spgr.RectY2 = shape.Y2; sp.RecordId = EscherSpRecord.RECORD_ID; sp.Options = (short)0x0002; int shapeId = drawingManager.AllocateShapeId(drawingGroupId); sp.ShapeId = shapeId; if (shape.Anchor is HSSFClientAnchor) { sp.Flags = EscherSpRecord.FLAG_GROUP | EscherSpRecord.FLAG_HAVEANCHOR; } else { sp.Flags = EscherSpRecord.FLAG_GROUP | EscherSpRecord.FLAG_HAVEANCHOR | EscherSpRecord.FLAG_CHILD; } opt.RecordId = EscherOptRecord.RECORD_ID; opt.Options = (short)0x0023; opt.AddEscherProperty(new EscherBoolProperty(EscherProperties.PROTECTION__LOCKAGAINSTGROUPING, 0x00040004)); opt.AddEscherProperty(new EscherBoolProperty(EscherProperties.GROUPSHAPE__PRINT, 0x00080000)); anchor = ConvertAnchor.CreateAnchor(shape.Anchor); // clientAnchor.Col1( ( (HSSFClientAnchor) shape.Anchor ).Col1 ); // clientAnchor.Row1( (short) ( (HSSFClientAnchor) shape.Anchor ).Row1 ); // clientAnchor.Dx1( (short) shape.Anchor.Dx1 ); // clientAnchor.Dy1( (short) shape.Anchor.Dy1 ); // clientAnchor.Col2( ( (HSSFClientAnchor) shape.Anchor ).Col2 ); // clientAnchor.Row2( (short) ( (HSSFClientAnchor) shape.Anchor ).Row2 ); // clientAnchor.Dx2( (short) shape.Anchor.Dx2 ); // clientAnchor.Dy2( (short) shape.Anchor.Dy2 ); clientData.RecordId = (EscherClientDataRecord.RECORD_ID); clientData.Options = ((short)0x0000); spgrContainer.AddChildRecord(spContainer); spContainer.AddChildRecord(spgr); spContainer.AddChildRecord(sp); spContainer.AddChildRecord(opt); spContainer.AddChildRecord(anchor); spContainer.AddChildRecord(clientData); ObjRecord obj = new ObjRecord(); CommonObjectDataSubRecord cmo = new CommonObjectDataSubRecord(); cmo.ObjectType = CommonObjectType.GROUP; cmo.ObjectId = shapeId; cmo.IsLocked = true; cmo.IsPrintable = true; cmo.IsAutoFill = true; cmo.IsAutoline = true; GroupMarkerSubRecord gmo = new GroupMarkerSubRecord(); EndSubRecord end = new EndSubRecord(); obj.AddSubRecord(cmo); obj.AddSubRecord(gmo); obj.AddSubRecord(end); shapeToObj[clientData] = obj; escherParent.AddChildRecord(spgrContainer); ConvertShapes(shape, spgrContainer, shapeToObj); }