示例#1
0
		/// <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);
			}
		}