using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace HH.WMS.Utils.ExcelLibrary.BinaryDrawingFormat
{
public partial class MsofbtDgg : EscherRecord
{
///
/// (DrawingGroupId, numShapeIdsUsed) pairs
///
public Dictionary GroupIdClusters = new Dictionary();
public override void Decode()
{
MemoryStream stream = new MemoryStream(Data);
BinaryReader reader = new BinaryReader(stream);
MaxShapeID = reader.ReadInt32();
NumIDClusters = reader.ReadInt32();
NumSavedShapes = reader.ReadInt32();
NumSavedDrawings = reader.ReadInt32();
IDClusters = new List();
while (stream.Position < stream.Length)
{
//IDClusters.Add(reader.ReadInt64());
int drawingGroupId = reader.ReadInt32();
int numShapeIdsUsed = reader.ReadInt32();
GroupIdClusters[drawingGroupId] = numShapeIdsUsed;
}
}
public override void Encode()
{
MemoryStream stream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(stream);
writer.Write(MaxShapeID);
writer.Write(GetNumIDClusters());
writer.Write(NumSavedShapes);
writer.Write(NumSavedDrawings);
List groupIds = new List(GroupIdClusters.Keys);
groupIds.Sort(); //In Excel the clusters are sorted but in PPT they are not
foreach (int groudID in groupIds)
{
writer.Write(groudID);
writer.Write(GroupIdClusters[groudID]);
}
this.Data = stream.ToArray();
this.Size = (UInt32)Data.Length;
base.Encode();
}
public int GetNumIDClusters()
{
// for some reason the number of clusters is actually the real number + 1
return GroupIdClusters.Count + 1;
}
}
}