/// <summary> /// Loads the FlowChart document from a stream. /// </summary> public void LoadFromStream(Stream stream) { try { loading = true; SuspendLayout(); ClearAll(); PersistContext ctx = new PersistContext(stream, this); ctx.readHeader(); // read basic-type flowchart properties DocInfoVer1 docInfo1 = (DocInfoVer1)ctx.loadObject(); DocInfoVer2 docInfo2 = (DocInfoVer2)ctx.loadObject(); docInfo1.apply(this); docInfo2.apply(this); textFormat = ctx.loadStringFormat(); Font = ctx.loadFont(); BackgroundImage = ctx.loadImage(); // read diagram objects zOrder = (ChartObjectCollection)ctx.loadObject(); groups = (GroupCollection)ctx.loadObject(); selection = (Selection)ctx.loadObject(); ctx.loadReference(this); if (ctx.FileVersion > 2) { shapeTemplate = (ShapeTemplate)ctx.loadObject(); if (ctx.FileVersion > 3) { Brush.RestoreBrushes(this, new BinaryReader(stream), ctx); boxPen = (Pen)ctx.loadObject(); arrowPen = (Pen)ctx.loadObject(); tablePen = (Pen)ctx.loadObject(); ctx.loadReference(this); ctx.loadReference(this); ctx.loadReference(this); boxSelStyle = (HandlesStyle)ctx.reader.ReadInt32(); tableSelStyle = (HandlesStyle)ctx.reader.ReadInt32(); if (ctx.FileVersion > 4) { // new in save format 5 allowLinksRepeat = ctx.reader.ReadBoolean(); if (ctx.FileVersion > 5) { // new in save format 6 PolyTextLayout = ctx.reader.ReadBoolean(); ShapeOrientation = ctx.reader.ReadSingle(); if (ctx.FileVersion > 7) { // new in save format 8 routeArrows = ctx.reader.ReadBoolean(); arrowsRetainForm = ctx.reader.ReadBoolean(); arrowTextStyle = (ArrowTextStyle)ctx.reader.ReadInt32(); tableLinkStyle = (TableLinkStyle)ctx.reader.ReadInt32(); if (ctx.FileVersion >= 12) { // new in save format 12 measureUnit = (GraphicsUnit)ctx.reader.ReadInt32(); docExtentsMin = ctx.loadRectF(); if (ctx.FileVersion > 13) { // new in save format 14 expandBtnPos = (ExpandButtonPosition)ctx.reader.ReadInt32(); // not used anymore ctx.reader.ReadInt32(); ctx.reader.ReadInt32(); enableStyledText = ctx.reader.ReadBoolean(); usePolyTextLt = ctx.reader.ReadBoolean(); ctx.loadReference(this); // brush if (ctx.FileVersion > 16) { // new in save format 17 arrowText = ctx.reader.ReadString(); boxText = ctx.reader.ReadString(); arrowCrossings = (ArrowCrossings)ctx.reader.ReadInt32(); gridStyle = (GridStyle)ctx.reader.ReadInt32(); crossRadius = ctx.reader.ReadSingle(); if (ctx.FileVersion > 19) { // new in save format 20 ctx.loadReference(this); // exteriorBrush arrowsSnapToBorders = ctx.reader.ReadBoolean(); arrowSelStyle = (HandlesStyle)ctx.reader.ReadInt32(); if (ctx.FileVersion > 20) { // new in save format 21 Tag = null; bool tagAvailable = ctx.reader.ReadBoolean(); if (tagAvailable) Tag = ctx.loadTag(); if (ctx.FileVersion > 26) { // new in save format 27 roundedArrows = ctx.reader.ReadBoolean(); roundedArrowsRadius = ctx.reader.ReadSingle(); } } } } } } } } } } } // finish load ctx.loadRemainingObjects(); ctx.setReferences(); // add the objects to their specialized collections foreach (ChartObject obj in zOrder) addToObjColl(obj); foreach (Group group in groups) group.updateObjCol(); Brush.freeUnusedBrushes(); foreach (ChartObject obj in zOrder) obj.onLoad(); dirty = false; Invalidate(); } finally { loading = false; ResumeLayout(true); } }