public int Compare(object o1, object o2) { EscherProperty p1 = (EscherProperty)o1; EscherProperty p2 = (EscherProperty)o2; return(p1.PropertyNumber.CompareTo(p2.PropertyNumber)); }
public void RemoveEscherProperty(int num) { List <EscherProperty> toRemove = new List <EscherProperty>(); for (IEnumerator <EscherProperty> iterator = EscherProperties.GetEnumerator(); iterator.MoveNext();) { EscherProperty prop = iterator.Current; if (prop.PropertyNumber == num) { //iterator.Remove(); toRemove.Add(prop); } } foreach (EscherProperty e in toRemove) { EscherProperties.Remove(e); } }
/** * Set an escher property. If a property with given propId already * exists it is replaced. * * @param value the property to set. */ public void SetEscherProperty(EscherProperty value) { List <EscherProperty> toRemove = new List <EscherProperty>(); for (IEnumerator <EscherProperty> iterator = properties.GetEnumerator(); iterator.MoveNext();) { EscherProperty prop = iterator.Current; if (prop.Id == value.Id) { //iterator.Remove(); toRemove.Add(prop); } } foreach (EscherProperty e in toRemove) { EscherProperties.Remove(e); } properties.Add(value); SortProperties(); }
/// <summary> /// This method Serializes this escher record into a byte array /// </summary> /// <param name="offset">The offset into data /// to start writing the record data to.</param> /// <param name="data">The byte array to Serialize to.</param> /// <returns>The number of bytes written.</returns> public override int Serialize(int offset, byte[] data, EscherSerializationListener listener) { listener.BeforeRecordSerialize(offset, RecordId, this); LittleEndian.PutShort(data, offset, Options); LittleEndian.PutShort(data, offset + 2, RecordId); LittleEndian.PutInt(data, offset + 4, PropertiesSize); int pos = offset + 8; for (IEnumerator iterator = properties.GetEnumerator(); iterator.MoveNext();) { EscherProperty escherProperty = (EscherProperty)iterator.Current; pos += escherProperty.SerializeSimplePart(data, pos); } for (IEnumerator iterator = properties.GetEnumerator(); iterator.MoveNext();) { EscherProperty escherProperty = (EscherProperty)iterator.Current; pos += escherProperty.SerializeComplexPart(data, pos); } listener.AfterRecordSerialize(pos, RecordId, pos - offset, this); return(pos - offset); }
/// <summary> /// Create new properties from a byte array. /// </summary> /// <param name="data">The byte array containing the property</param> /// <param name="offset">The starting offset into the byte array</param> /// <param name="numProperties">The new properties</param> /// <returns></returns> public IList CreateProperties(byte[] data, int offset, short numProperties) { IList results = new ArrayList(); int pos = offset; // while ( bytesRemaining >= 6 ) for (int i = 0; i < numProperties; i++) { short propId; int propData; propId = LittleEndian.GetShort(data, pos); propData = LittleEndian.GetInt(data, pos + 2); short propNumber = (short)(propId & (short)0x3FFF); bool isComplex = (propId & unchecked ((short)0x8000)) != 0; bool isBlipId = (propId & (short)0x4000) != 0; byte propertyType = EscherProperties.GetPropertyType((short)propNumber); if (propertyType == EscherPropertyMetaData.TYPE_bool) { results.Add(new EscherBoolProperty(propId, propData)); } else if (propertyType == EscherPropertyMetaData.TYPE_RGB) { results.Add(new EscherRGBProperty(propId, propData)); } else if (propertyType == EscherPropertyMetaData.TYPE_SHAPEPATH) { results.Add(new EscherShapePathProperty(propId, propData)); } else { if (!isComplex) { results.Add(new EscherSimpleProperty(propId, propData)); } else { if (propertyType == EscherPropertyMetaData.TYPE_ARRAY) { results.Add(new EscherArrayProperty(propId, new byte[propData])); } else { results.Add(new EscherComplexProperty(propId, new byte[propData])); } } } pos += 6; // bytesRemaining -= 6 + complexBytes; } // Get complex data for (IEnumerator iterator = results.GetEnumerator(); iterator.MoveNext();) { EscherProperty p = (EscherProperty)iterator.Current; if (p is EscherComplexProperty) { if (p is EscherArrayProperty) { pos += ((EscherArrayProperty)p).SetArrayData(data, pos); } else { byte[] complexData = ((EscherComplexProperty)p).ComplexData; Array.Copy(data, pos, complexData, 0, complexData.Length); pos += complexData.Length; } } } return(results); }
public EscherPropertyTreeNode(EscherProperty ep) { this.Record = ep; this.Text = ep.Name; this.ImageKey = "Binary"; }
/** * Add a property to this record. */ public void AddEscherProperty(EscherProperty prop) { properties.Add(prop); }
protected void SetPropertyValue(EscherProperty property) { _optRecord.SetEscherProperty(property); }
/// <summary> /// Create new properties from a byte array. /// </summary> /// <param name="data">The byte array containing the property</param> /// <param name="offset">The starting offset into the byte array</param> /// <param name="numProperties">The new properties</param> /// <returns></returns> public List <EscherProperty> CreateProperties(byte[] data, int offset, short numProperties) { List <EscherProperty> results = new List <EscherProperty>(); int pos = offset; for (int i = 0; i < numProperties; i++) { short propId; int propData; propId = LittleEndian.GetShort(data, pos); propData = LittleEndian.GetInt(data, pos + 2); short propNumber = (short)(propId & (short)0x3FFF); bool isComplex = (propId & unchecked ((short)0x8000)) != 0; byte propertyType = EscherProperties.GetPropertyType((short)propNumber); if (propertyType == EscherPropertyMetaData.TYPE_BOOL) { results.Add(new EscherBoolProperty(propId, propData)); } else if (propertyType == EscherPropertyMetaData.TYPE_RGB) { results.Add(new EscherRGBProperty(propId, propData)); } else if (propertyType == EscherPropertyMetaData.TYPE_SHAPEPATH) { results.Add(new EscherShapePathProperty(propId, propData)); } else { if (!isComplex) { results.Add(new EscherSimpleProperty(propId, propData)); } else { if (propertyType == EscherPropertyMetaData.TYPE_ARRAY) { results.Add(new EscherArrayProperty(propId, new byte[propData])); } else { results.Add(new EscherComplexProperty(propId, new byte[propData])); } } } pos += 6; } // Get complex data for (IEnumerator iterator = results.GetEnumerator(); iterator.MoveNext();) { EscherProperty p = (EscherProperty)iterator.Current; if (p is EscherComplexProperty) { if (p is EscherArrayProperty) { pos += ((EscherArrayProperty)p).SetArrayData(data, pos); } else { byte[] complexData = ((EscherComplexProperty)p).ComplexData; int leftover = data.Length - pos; if (leftover < complexData.Length) { throw new InvalidOperationException("Could not read complex escher property, lenght was " + complexData.Length + ", but had only " + leftover + " bytes left"); } Array.Copy(data, pos, complexData, 0, complexData.Length); pos += complexData.Length; } } } return(results); }
/// <summary> /// Add a property to this record. /// </summary> /// <param name="prop">The prop.</param> public void AddEscherProperty(EscherProperty prop) { properties.Add(prop); }