Keep pagination code from going into an infinite loop.
Properly handle a Null WidthOverride. Properly handle a note or caution on a section. Remove returns from lists of data points.
This commit is contained in:
		@@ -378,6 +378,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
			while (((YSize - yTop) > ySpaceOnCurPage) || PageBreakOnStepList.Count > 0)
 | 
								while (((YSize - yTop) > ySpaceOnCurPage) || PageBreakOnStepList.Count > 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				ySpaceOnCurPage -= myBottomMsgSpace;
 | 
									ySpaceOnCurPage -= myBottomMsgSpace;
 | 
				
			||||||
 | 
									vlnParagraph lastBreak = paraBreak;
 | 
				
			||||||
				paraBreak = FindPageBreak(yStart, ySpaceOnCurPage, yLowerLimit, myList, paraBreak, yPageSize - (myTopMsgSpace + SixLinesPerInch) - myBottomMsgSpace);
 | 
									paraBreak = FindPageBreak(yStart, ySpaceOnCurPage, yLowerLimit, myList, paraBreak, yPageSize - (myTopMsgSpace + SixLinesPerInch) - myBottomMsgSpace);
 | 
				
			||||||
				if (paraBreak == null)
 | 
									if (paraBreak == null)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
@@ -385,6 +386,10 @@ namespace Volian.Print.Library
 | 
				
			|||||||
						, MyItemInfo.ItemID, MyItemInfo.MyDocVersion.MyFolder.Name, MyItemInfo.ShortPath);
 | 
											, MyItemInfo.ItemID, MyItemInfo.MyDocVersion.MyFolder.Name, MyItemInfo.ShortPath);
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
									if (lastBreak == paraBreak)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										throw (new Exception(string.Format("Pagination Infinite Loop {0}",lastBreak.MyItemInfo.ShortPath)));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				//paraBreak.ShowPageBreak(999, paraBreak.MyItemInfo.ShortPath, "Yes",paraBreak.YTop, paraBreak.YSize, paraBreak.Height, false);
 | 
									//paraBreak.ShowPageBreak(999, paraBreak.MyItemInfo.ShortPath, "Yes",paraBreak.YTop, paraBreak.YSize, paraBreak.Height, false);
 | 
				
			||||||
					//_MyLog.InfoFormat("Place to break\r\n==>'Place to Break',{0},'{1}','{2}'"
 | 
										//_MyLog.InfoFormat("Place to break\r\n==>'Place to Break',{0},'{1}','{2}'"
 | 
				
			||||||
						//, paraBreak.MyItemInfo.ItemID, paraBreak.MyItemInfo.MyDocVersion.MyFolder.Name, paraBreak.MyItemInfo.ShortPath);
 | 
											//, paraBreak.MyItemInfo.ItemID, paraBreak.MyItemInfo.MyDocVersion.MyFolder.Name, paraBreak.MyItemInfo.ShortPath);
 | 
				
			||||||
@@ -443,6 +448,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
						&& myPara.ChildrenRight[0].YSize <= fullPage && myPara.ChildrenRight[0].YSize > spaceOnPage)
 | 
											&& myPara.ChildrenRight[0].YSize <= fullPage && myPara.ChildrenRight[0].YSize > spaceOnPage)
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						//_MyLog.WarnFormat("\r\nMyParaBreak {0},{1},{2},{3},{4}", myPara, myPara.YSize, yUpperLimit, myPara.ChildrenRight[0].YSize, spaceOnPage);
 | 
											//_MyLog.WarnFormat("\r\nMyParaBreak {0},{1},{2},{3},{4}", myPara, myPara.YSize, yUpperLimit, myPara.ChildrenRight[0].YSize, spaceOnPage);
 | 
				
			||||||
 | 
											if(myPara != lastBreak)
 | 
				
			||||||
							return myPara;
 | 
												return myPara;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					// The following lines were added for Comanche Peak ECA-0.1A.SProcedure Steps.S17 (Printed as Step 12)
 | 
										// The following lines were added for Comanche Peak ECA-0.1A.SProcedure Steps.S17 (Printed as Step 12)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -370,7 +370,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
					if (doprint) retval = DrawText(cb, ref yPageStart, yTopMargin, yBottomMargin, ref yLocation);
 | 
										if (doprint) retval = DrawText(cb, ref yPageStart, yTopMargin, yBottomMargin, ref yLocation);
 | 
				
			||||||
				if (MyItemInfo.IsHigh)
 | 
									if (MyItemInfo.IsHigh)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					MyPageHelper.PageBookmarks.Add(MyItemInfo, (MyItemInfo.MyTab == null)?"":MyItemInfo.MyTab.CleanText + " " + MyItemInfo.DisplayText,
 | 
										MyPageHelper.PageBookmarks.Add(MyItemInfo, (MyItemInfo.MyTab == null) ? "" : MyItemInfo.MyTab.CleanText + " " + MyItemInfo.DisplayText,
 | 
				
			||||||
						new PdfDestination(PdfDestination.FITBH, yLocation + YVeryTop - YTopMost + SixLinesPerInch));
 | 
											new PdfDestination(PdfDestination.FITBH, yLocation + YVeryTop - YTopMost + SixLinesPerInch));
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -434,7 +434,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
				// just list the headers and the prefix can be 'empty'.
 | 
									// just list the headers and the prefix can be 'empty'.
 | 
				
			||||||
				if (ii.FormatStepData.Font.FontIsProportional())
 | 
									if (ii.FormatStepData.Font.FontIsProportional())
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					float yLocVertLine = yLocation + (lpi/2);
 | 
										float yLocVertLine = yLocation + (lpi / 2);
 | 
				
			||||||
					// Prefix, i.e. Top line:
 | 
										// Prefix, i.e. Top line:
 | 
				
			||||||
					Paragraph topLeftLine = new Paragraph(bx.BXULC, iSymblFont);
 | 
										Paragraph topLeftLine = new Paragraph(bx.BXULC, iSymblFont);
 | 
				
			||||||
					Rtf2Pdf.TextAt(cb, topLeftLine, float.Parse(vertPos[0]) + (float)ii.MyDocStyle.Layout.LeftMargin - csize, yLocVertLine, lWidth, 100, null, yBottomMargin);
 | 
										Rtf2Pdf.TextAt(cb, topLeftLine, float.Parse(vertPos[0]) + (float)ii.MyDocStyle.Layout.LeftMargin - csize, yLocVertLine, lWidth, 100, null, yBottomMargin);
 | 
				
			||||||
@@ -463,7 +463,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
					//countLine = (int)(this.Height / lpi);
 | 
										//countLine = (int)(this.Height / lpi);
 | 
				
			||||||
					Paragraph sideLeftLine = new Paragraph(bx.BXMLS, iSymblFont);
 | 
										Paragraph sideLeftLine = new Paragraph(bx.BXMLS, iSymblFont);
 | 
				
			||||||
					Rtf2Pdf.TextAt(cb, sideLeftLine, float.Parse(vertPos[0]) + (float)ii.MyDocStyle.Layout.LeftMargin - csize, yLocVertLine, lWidth, 100, null, yBottomMargin);
 | 
										Rtf2Pdf.TextAt(cb, sideLeftLine, float.Parse(vertPos[0]) + (float)ii.MyDocStyle.Layout.LeftMargin - csize, yLocVertLine, lWidth, 100, null, yBottomMargin);
 | 
				
			||||||
					Rtf2Pdf.TextAt(cb, sideLeftLine, float.Parse(vertPos[0]) + (float)ii.MyDocStyle.Layout.LeftMargin - csize, yLocVertLine-(2*lpi), lWidth, 100, null, yBottomMargin);
 | 
										Rtf2Pdf.TextAt(cb, sideLeftLine, float.Parse(vertPos[0]) + (float)ii.MyDocStyle.Layout.LeftMargin - csize, yLocVertLine - (2 * lpi), lWidth, 100, null, yBottomMargin);
 | 
				
			||||||
					Paragraph sideRightLine = new Paragraph(bx.BXMRS, iSymblFont);
 | 
										Paragraph sideRightLine = new Paragraph(bx.BXMRS, iSymblFont);
 | 
				
			||||||
					Rtf2Pdf.TextAt(cb, sideRightLine, float.Parse(vertPos[6]) + (float)ii.MyDocStyle.Layout.LeftMargin - csize, yLocVertLine, lWidth, 100, null, yBottomMargin);
 | 
										Rtf2Pdf.TextAt(cb, sideRightLine, float.Parse(vertPos[6]) + (float)ii.MyDocStyle.Layout.LeftMargin - csize, yLocVertLine, lWidth, 100, null, yBottomMargin);
 | 
				
			||||||
					Rtf2Pdf.TextAt(cb, sideRightLine, float.Parse(vertPos[6]) + (float)ii.MyDocStyle.Layout.LeftMargin - csize, yLocVertLine - (2 * lpi), lWidth, 100, null, yBottomMargin);
 | 
										Rtf2Pdf.TextAt(cb, sideRightLine, float.Parse(vertPos[6]) + (float)ii.MyDocStyle.Layout.LeftMargin - csize, yLocVertLine - (2 * lpi), lWidth, 100, null, yBottomMargin);
 | 
				
			||||||
@@ -479,7 +479,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
					// now do the vertical bar between header words and the column header words.
 | 
										// now do the vertical bar between header words and the column header words.
 | 
				
			||||||
					yLocVertLine -= lpi;
 | 
										yLocVertLine -= lpi;
 | 
				
			||||||
					string [] colHdrs = _MyItemInfo.FormatStepData.Suffix.Substring(_MyItemInfo.FormatStepData.Suffix.IndexOf(";")+1).Split(",".ToCharArray());
 | 
										string[] colHdrs = _MyItemInfo.FormatStepData.Suffix.Substring(_MyItemInfo.FormatStepData.Suffix.IndexOf(";") + 1).Split(",".ToCharArray());
 | 
				
			||||||
					iTextSharp.text.Font iHdrFont = Volian.Svg.Library.VolianPdf.GetFont(_MyItemInfo.FormatStepData.Font.WindowsFont);
 | 
										iTextSharp.text.Font iHdrFont = Volian.Svg.Library.VolianPdf.GetFont(_MyItemInfo.FormatStepData.Font.WindowsFont);
 | 
				
			||||||
					iHdrFont.Color = new iTextSharp.text.Color(PrintOverride.OverrideTextColor(System.Drawing.Color.Black));
 | 
										iHdrFont.Color = new iTextSharp.text.Color(PrintOverride.OverrideTextColor(System.Drawing.Color.Black));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -491,7 +491,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
						// do vertical line:
 | 
											// do vertical line:
 | 
				
			||||||
						Rtf2Pdf.TextAt(cb, paraVertLine, float.Parse(vertPos[i]) + (float)ii.MyDocStyle.Layout.LeftMargin - csize, yLocVertLine, lWidth, 100, null, yBottomMargin);
 | 
											Rtf2Pdf.TextAt(cb, paraVertLine, float.Parse(vertPos[i]) + (float)ii.MyDocStyle.Layout.LeftMargin - csize, yLocVertLine, lWidth, 100, null, yBottomMargin);
 | 
				
			||||||
						// do the column header text - center it:
 | 
											// do the column header text - center it:
 | 
				
			||||||
						if (i<colHdrs.Length)
 | 
											if (i < colHdrs.Length)
 | 
				
			||||||
						{
 | 
											{
 | 
				
			||||||
							Paragraph parColHdr = new Paragraph(colHdrs[i], iHdrFont);
 | 
												Paragraph parColHdr = new Paragraph(colHdrs[i], iHdrFont);
 | 
				
			||||||
							// find the center point of column header and subtract 1/2 width of the text to locate the text.
 | 
												// find the center point of column header and subtract 1/2 width of the text to locate the text.
 | 
				
			||||||
@@ -602,7 +602,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
					float ylocs = yPageStart - this.YBottomMost + 15;
 | 
										float ylocs = yPageStart - this.YBottomMost + 15;
 | 
				
			||||||
					for (int i = sublev; i < cntVertPos - 1; i++)
 | 
										for (int i = sublev; i < cntVertPos - 1; i++)
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						float hPos = float.Parse(vertPos[i])+csize;
 | 
											float hPos = float.Parse(vertPos[i]) + csize;
 | 
				
			||||||
						Rtf2Pdf.TextAt(cb, leftLine, float.Parse(vertPos[i]) + (float)ii.MyDocStyle.Layout.LeftMargin - csize, ylocs, lWidth, 100, null, yBottomMargin);
 | 
											Rtf2Pdf.TextAt(cb, leftLine, float.Parse(vertPos[i]) + (float)ii.MyDocStyle.Layout.LeftMargin - csize, ylocs, lWidth, 100, null, yBottomMargin);
 | 
				
			||||||
						while (hPos < float.Parse(vertPos[i + 1]))
 | 
											while (hPos < float.Parse(vertPos[i + 1]))
 | 
				
			||||||
						{
 | 
											{
 | 
				
			||||||
@@ -625,7 +625,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
			if (MyGrid.Height > (yTopMargin - yBottomMargin))
 | 
								if (MyGrid.Height > (yTopMargin - yBottomMargin))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				_MyLog.ErrorFormat("<<< ERROR >>> Table is too big to fit on page, expect pagination problems\r\n==>'Table Too Big',{0},'{1}','{2}',{3},{4}"
 | 
									_MyLog.ErrorFormat("<<< ERROR >>> Table is too big to fit on page, expect pagination problems\r\n==>'Table Too Big',{0},'{1}','{2}',{3},{4}"
 | 
				
			||||||
					, MyItemInfo.ItemID, MyItemInfo.MyDocVersion.MyFolder.Name, MyItemInfo.ShortPath, MyGrid.Height,(yTopMargin - yBottomMargin));
 | 
										, MyItemInfo.ItemID, MyItemInfo.MyDocVersion.MyFolder.Name, MyItemInfo.ShortPath, MyGrid.Height, (yTopMargin - yBottomMargin));
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			return retval;
 | 
								return retval;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -651,7 +651,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
			return retval;
 | 
								return retval;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		private static List<string> myAttributes =new List<string>();
 | 
							private static List<string> myAttributes = new List<string>();
 | 
				
			||||||
		private static void AddAttribute(string attr)
 | 
							private static void AddAttribute(string attr)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (myAttributes.Contains(attr))
 | 
								if (myAttributes.Contains(attr))
 | 
				
			||||||
@@ -742,7 +742,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
			get
 | 
								get
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				return string.Format("DebugID = {0}, ID={1} Type={2} TypeName='{3}' StepLevel={4} DBSequence={5} Width={6} Left={7}",
 | 
									return string.Format("DebugID = {0}, ID={1} Type={2} TypeName='{3}' StepLevel={4} DBSequence={5} Width={6} Left={7}",
 | 
				
			||||||
					DebugId, MyItemInfo.ItemID, MyItemInfo.FormatStepType, MyItemInfo.FormatStepData==null?"NoStepData":MyItemInfo.FormatStepData.Type, MyItemInfo.StepLevel, MyItemInfo.DBSequence, Width, XOffset);
 | 
										DebugId, MyItemInfo.ItemID, MyItemInfo.FormatStepType, MyItemInfo.FormatStepData == null ? "NoStepData" : MyItemInfo.FormatStepData.Type, MyItemInfo.StepLevel, MyItemInfo.DBSequence, Width, XOffset);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		private void ResetDocStyleAndValues(ref float yTopMargin, ref float yBottomMargin)
 | 
							private void ResetDocStyleAndValues(ref float yTopMargin, ref float yBottomMargin)
 | 
				
			||||||
@@ -933,7 +933,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
					// If there is a box, adjust the yTopMost to include it.
 | 
										// If there is a box, adjust the yTopMost to include it.
 | 
				
			||||||
					float yTopMost = YTopMost;
 | 
										float yTopMost = YTopMost;
 | 
				
			||||||
					//if (YVeryTop < yTopMost) Console.WriteLine("{0},{1},{2}", MyItemInfo.DBSequence, yTopMost, YVeryTop);
 | 
										//if (YVeryTop < yTopMost) Console.WriteLine("{0},{1},{2}", MyItemInfo.DBSequence, yTopMost, YVeryTop);
 | 
				
			||||||
					yTopMost = Math.Min(yTopMost,YVeryTop);
 | 
										yTopMost = Math.Min(yTopMost, YVeryTop);
 | 
				
			||||||
					yPageStart = yTopMargin + yTopMost;// -2 * SixLinesPerInch;
 | 
										yPageStart = yTopMargin + yTopMost;// -2 * SixLinesPerInch;
 | 
				
			||||||
					DoCheckOffHeader(cb, MyItemInfo, yLocation, yTopMargin, yPageStart);
 | 
										DoCheckOffHeader(cb, MyItemInfo, yLocation, yTopMargin, yPageStart);
 | 
				
			||||||
					if (EmptyTopMostPart) yPageStart += SixLinesPerInch;
 | 
										if (EmptyTopMostPart) yPageStart += SixLinesPerInch;
 | 
				
			||||||
@@ -1068,8 +1068,8 @@ namespace Volian.Print.Library
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
					if (myMsg.Contains("{Section Number}")) myMsg = myMsg.Replace("{Section Number}", MyItemInfo.ActiveSection.DisplayNumber);
 | 
										if (myMsg.Contains("{Section Number}")) myMsg = myMsg.Replace("{Section Number}", MyItemInfo.ActiveSection.DisplayNumber);
 | 
				
			||||||
					//jcb code
 | 
										//jcb code
 | 
				
			||||||
					if(myMsg.Contains("%-8s"))
 | 
										if (myMsg.Contains("%-8s"))
 | 
				
			||||||
						myMsg = myMsg.Replace("%-8s",MyItemInfo.MyProcedure.DisplayNumber.PadRight(8));
 | 
											myMsg = myMsg.Replace("%-8s", MyItemInfo.MyProcedure.DisplayNumber.PadRight(8));
 | 
				
			||||||
					//end jb code
 | 
										//end jb code
 | 
				
			||||||
					// center the message.
 | 
										// center the message.
 | 
				
			||||||
					float wtpm = (float)docstyle.Layout.PageWidth - (float)docstyle.Layout.LeftMargin;
 | 
										float wtpm = (float)docstyle.Layout.PageWidth - (float)docstyle.Layout.LeftMargin;
 | 
				
			||||||
@@ -1109,7 +1109,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			get
 | 
								get
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				if (ChildrenAbove.Count>0) return ChildrenAbove[0].TopMostChild;
 | 
									if (ChildrenAbove.Count > 0) return ChildrenAbove[0].TopMostChild;
 | 
				
			||||||
				return this;
 | 
									return this;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -1150,8 +1150,8 @@ namespace Volian.Print.Library
 | 
				
			|||||||
				if (_YVeryTop == -1)
 | 
									if (_YVeryTop == -1)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					_YVeryTop = YTop;
 | 
										_YVeryTop = YTop;
 | 
				
			||||||
					_YVeryTop = VeryTop(PartsAbove,_YVeryTop);
 | 
										_YVeryTop = VeryTop(PartsAbove, _YVeryTop);
 | 
				
			||||||
					_YVeryTop = VeryTop(PartsContainer,_YVeryTop);
 | 
										_YVeryTop = VeryTop(PartsContainer, _YVeryTop);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				return _YVeryTop;
 | 
									return _YVeryTop;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -1228,7 +1228,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
			if (ChildrenRight != null && ChildrenRight.Count > 0)
 | 
								if (ChildrenRight != null && ChildrenRight.Count > 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				foreach(vlnParagraph paraRight in ChildrenRight)
 | 
									foreach (vlnParagraph paraRight in ChildrenRight)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					vlnParagraph paraRightLast = paraRight.GetFirstPieceLastPart();
 | 
										vlnParagraph paraRightLast = paraRight.GetFirstPieceLastPart();
 | 
				
			||||||
					if (paraRightLast.YBottom > para.YBottom)
 | 
										if (paraRightLast.YBottom > para.YBottom)
 | 
				
			||||||
@@ -1249,10 +1249,10 @@ namespace Volian.Print.Library
 | 
				
			|||||||
			// the original list because list items cannot be removed in a
 | 
								// the original list because list items cannot be removed in a
 | 
				
			||||||
			// 'foreach'.
 | 
								// 'foreach'.
 | 
				
			||||||
			List<int> CleanupListStepLevel = new List<int>();
 | 
								List<int> CleanupListStepLevel = new List<int>();
 | 
				
			||||||
			foreach(int stepLevel in myList.Keys)
 | 
								foreach (int stepLevel in myList.Keys)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				List<float> CleanupListYLocation = new List<float>();
 | 
									List<float> CleanupListYLocation = new List<float>();
 | 
				
			||||||
				SortedList<float, float> AdjustYLocation = new SortedList<float,float>();
 | 
									SortedList<float, float> AdjustYLocation = new SortedList<float, float>();
 | 
				
			||||||
				foreach (float yLocation in myList[stepLevel].Keys)
 | 
									foreach (float yLocation in myList[stepLevel].Keys)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					if (-yLocation <= yTop)
 | 
										if (-yLocation <= yTop)
 | 
				
			||||||
@@ -1271,7 +1271,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
					// from the beginning of the step.
 | 
										// from the beginning of the step.
 | 
				
			||||||
					// Note that yLocation is negative to have items in descending
 | 
										// Note that yLocation is negative to have items in descending
 | 
				
			||||||
					// order so that adding yTop decrements their values.
 | 
										// order so that adding yTop decrements their values.
 | 
				
			||||||
					myList[stepLevel].Add(yTop-yLocation, para);
 | 
										myList[stepLevel].Add(yTop - yLocation, para);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				if (myList[stepLevel].Count == 0)
 | 
									if (myList[stepLevel].Count == 0)
 | 
				
			||||||
					CleanupListStepLevel.Add(stepLevel);
 | 
										CleanupListStepLevel.Add(stepLevel);
 | 
				
			||||||
@@ -1458,7 +1458,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
						Width -= (float)itemInfo.ActiveFormat.MyStepSectionLayoutData.SingleColumnRNOIndent;
 | 
											Width -= (float)itemInfo.ActiveFormat.MyStepSectionLayoutData.SingleColumnRNOIndent;
 | 
				
			||||||
					offset -= Width;
 | 
										offset -= Width;
 | 
				
			||||||
					float inc = offset - XOffset;
 | 
										float inc = offset - XOffset;
 | 
				
			||||||
					if(mytab != null)
 | 
										if (mytab != null)
 | 
				
			||||||
						mytab.XOffset += inc;// +(itemInfo.MyParent.IsHigh ? 6.8f : 0);
 | 
											mytab.XOffset += inc;// +(itemInfo.MyParent.IsHigh ? 6.8f : 0);
 | 
				
			||||||
					XOffset += inc;
 | 
										XOffset += inc;
 | 
				
			||||||
					adjustAgain = false;
 | 
										adjustAgain = false;
 | 
				
			||||||
@@ -1484,7 +1484,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
					if (adjusttab != 0) Width += (mytab.Width);
 | 
										if (adjusttab != 0) Width += (mytab.Width);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if(adjustAgain) 
 | 
								if (adjustAgain)
 | 
				
			||||||
				AdjustXOffsetForTab(itemInfo, maxRNO, formatInfo, mytab, xMetaAdj);
 | 
									AdjustXOffsetForTab(itemInfo, maxRNO, formatInfo, mytab, xMetaAdj);
 | 
				
			||||||
			if (UseTemplateWidthOrXOff(itemInfo)) XOffset = (float)itemInfo.MyDocStyle.Layout.LeftMargin + GetWidthOrStartFromTemplate(itemInfo, itemInfo.ActiveFormat, false);
 | 
								if (UseTemplateWidthOrXOff(itemInfo)) XOffset = (float)itemInfo.MyDocStyle.Layout.LeftMargin + GetWidthOrStartFromTemplate(itemInfo, itemInfo.ActiveFormat, false);
 | 
				
			||||||
			if (itemInfo.MyHeader != null && itemInfo.MyHeader.Text != null && !doSectTab)
 | 
								if (itemInfo.MyHeader != null && itemInfo.MyHeader.Text != null && !doSectTab)
 | 
				
			||||||
@@ -1518,8 +1518,8 @@ namespace Volian.Print.Library
 | 
				
			|||||||
			if (ChildrenAbove.StepDesignator != null)
 | 
								if (ChildrenAbove.StepDesignator != null)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				string pref = ChildrenAbove.StepDesignator;
 | 
									string pref = ChildrenAbove.StepDesignator;
 | 
				
			||||||
				float colOvrd = (float)(ChildrenAbove.StepDesignatorColumn??0);
 | 
									float colOvrd = (float)(ChildrenAbove.StepDesignatorColumn ?? 0);
 | 
				
			||||||
				float xPref = (colOvrd > 0)? colOvrd : mytab.XOffset - (pref.Length * (72 / (float)_MyItemInfo.FormatStepData.Font.CPI));
 | 
									float xPref = (colOvrd > 0) ? colOvrd : mytab.XOffset - (pref.Length * (72 / (float)_MyItemInfo.FormatStepData.Font.CPI));
 | 
				
			||||||
				PartsLeft.Add(new vlnText(cb, this, pref, pref, xPref, yoff, ChildrenAbove.StepDesignatorFont));
 | 
									PartsLeft.Add(new vlnText(cb, this, pref, pref, xPref, yoff, ChildrenAbove.StepDesignatorFont));
 | 
				
			||||||
				ChildrenAbove.StepDesignator = null;
 | 
									ChildrenAbove.StepDesignator = null;
 | 
				
			||||||
				ChildrenAbove.StepDesignatorColumn = null;
 | 
									ChildrenAbove.StepDesignatorColumn = null;
 | 
				
			||||||
@@ -1586,7 +1586,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
				// the '-24' in x-direction & '+4' in y-direction was used for the SHE format to get the continuous 
 | 
									// the '-24' in x-direction & '+4' in y-direction was used for the SHE format to get the continuous 
 | 
				
			||||||
				// HLS's asterisk to match 16bit.  The font size was set at 16 to make it match also:
 | 
									// HLS's asterisk to match 16bit.  The font size was set at 16 to make it match also:
 | 
				
			||||||
				VE_Font astFont = new VE_Font(MyItemInfo.FormatStepData.TabData.Font.Family, 16, E_Style.Bold, 10);
 | 
									VE_Font astFont = new VE_Font(MyItemInfo.FormatStepData.TabData.Font.Family, 16, E_Style.Bold, 10);
 | 
				
			||||||
				vlnText myAsterisk = new vlnText(cb, this, "*", "*", mytab.XOffset - 24, YOffset+4, astFont);
 | 
									vlnText myAsterisk = new vlnText(cb, this, "*", "*", mytab.XOffset - 24, YOffset + 4, astFont);
 | 
				
			||||||
				PartsLeft.Add(myAsterisk);
 | 
									PartsLeft.Add(myAsterisk);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (itemInfo.IsRNOPart && rnoLevel > maxRNO)
 | 
								if (itemInfo.IsRNOPart && rnoLevel > maxRNO)
 | 
				
			||||||
@@ -1791,7 +1791,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
			{
 | 
								{
 | 
				
			||||||
				// if this item's content is empty, and the flag is set to 'notonempty', don't print out the
 | 
									// if this item's content is empty, and the flag is set to 'notonempty', don't print out the
 | 
				
			||||||
				// checkoff - this was added for shearon harris:
 | 
									// checkoff - this was added for shearon harris:
 | 
				
			||||||
				if (!(co.NotOnEmpty && itemInfo.MyContent.Text.Replace(@"\u160?"," ").TrimEnd() == ""))
 | 
									if (!(co.NotOnEmpty && itemInfo.MyContent.Text.Replace(@"\u160?", " ").TrimEnd() == ""))
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					float xloc_co = (float)itemInfo.MyDocStyle.Layout.LeftMargin;
 | 
										float xloc_co = (float)itemInfo.MyDocStyle.Layout.LeftMargin;
 | 
				
			||||||
					// if the format has 'SkipSpaces', look at the tab, and back up the macros to the number of 
 | 
										// if the format has 'SkipSpaces', look at the tab, and back up the macros to the number of 
 | 
				
			||||||
@@ -1867,7 +1867,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
			yoff = Math.Max(yoff, yOffRight);
 | 
								yoff = Math.Max(yoff, yOffRight);
 | 
				
			||||||
			// TODO - use RNOSepAfterAER flag too:
 | 
								// TODO - use RNOSepAfterAER flag too:
 | 
				
			||||||
			string tmpRnoSepStr = formatInfo.MyStepSectionPrintData.RNOSepString;
 | 
								string tmpRnoSepStr = formatInfo.MyStepSectionPrintData.RNOSepString;
 | 
				
			||||||
			float tmpRnoSepLen = formatInfo.MyStepSectionPrintData.RNOSepLineLength??0;
 | 
								float tmpRnoSepLen = formatInfo.MyStepSectionPrintData.RNOSepLineLength ?? 0;
 | 
				
			||||||
			if (rnoLevel < maxRNO && itemInfo.RNOs != null && (tmpRnoSepStr != null || tmpRnoSepLen != 0))
 | 
								if (rnoLevel < maxRNO && itemInfo.RNOs != null && (tmpRnoSepStr != null || tmpRnoSepLen != 0))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				vlnParagraph rno = ChildrenRight[0];
 | 
									vlnParagraph rno = ChildrenRight[0];
 | 
				
			||||||
@@ -1967,7 +1967,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				mySubSectionInfo = (mySectionInfo.Sections == null)?null:mySectionInfo.Sections[0];
 | 
									mySubSectionInfo = (mySectionInfo.Sections == null) ? null : mySectionInfo.Sections[0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (mySectionInfo == mySubSectionInfo) mySubSectionInfo = null;
 | 
								if (mySectionInfo == mySubSectionInfo) mySubSectionInfo = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1983,11 +1983,11 @@ namespace Volian.Print.Library
 | 
				
			|||||||
			SectionInfo si = SectionInfo.Get(mySectionInfo.ItemID);
 | 
								SectionInfo si = SectionInfo.Get(mySectionInfo.ItemID);
 | 
				
			||||||
			int sindx = si.CheckOffHeadingIndex();
 | 
								int sindx = si.CheckOffHeadingIndex();
 | 
				
			||||||
			SectionInfo subi = mySubSectionInfo == null ? null : SectionInfo.Get(mySubSectionInfo.ItemID);
 | 
								SectionInfo subi = mySubSectionInfo == null ? null : SectionInfo.Get(mySubSectionInfo.ItemID);
 | 
				
			||||||
			int subindx = subi==null?-1:subi.CheckOffHeadingIndex();
 | 
								int subindx = subi == null ? -1 : subi.CheckOffHeadingIndex();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// if there is no subsections & the main section doesn't use a header OR
 | 
								// if there is no subsections & the main section doesn't use a header OR
 | 
				
			||||||
			// if there is a subsection, & it does not use a header... Return.
 | 
								// if there is a subsection, & it does not use a header... Return.
 | 
				
			||||||
			if ((subi==null&&sindx < 1) || (subi!=null&&subindx<1)) return;
 | 
								if ((subi == null && sindx < 1) || (subi != null && subindx < 1)) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// figure out location now:
 | 
								// figure out location now:
 | 
				
			||||||
			//	if step, it uses pagelist logic to locate it (this is a page break condition).
 | 
								//	if step, it uses pagelist logic to locate it (this is a page break condition).
 | 
				
			||||||
@@ -2008,7 +2008,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// grab the string from the format, depending on whether it should get it from the section or subsection.
 | 
								// grab the string from the format, depending on whether it should get it from the section or subsection.
 | 
				
			||||||
			string cohead = (mySubSectionInfo!=null)?mySubSectionInfo.SectionCheckOffHeader:mySectionInfo.SectionCheckOffHeader;
 | 
								string cohead = (mySubSectionInfo != null) ? mySubSectionInfo.SectionCheckOffHeader : mySectionInfo.SectionCheckOffHeader;
 | 
				
			||||||
			if (cohead == "" || cohead == null) return;
 | 
								if (cohead == "" || cohead == null) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// PageListCheckOffHeader is an svgtext - but really we only need the x/y location for this (pagelist support)
 | 
								// PageListCheckOffHeader is an svgtext - but really we only need the x/y location for this (pagelist support)
 | 
				
			||||||
@@ -2112,7 +2112,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
				// the amount of difference from a 10 CPI to a 12 CPI font.  See comment above.
 | 
									// the amount of difference from a 10 CPI to a 12 CPI font.  See comment above.
 | 
				
			||||||
				float posAdjust = (float)(itemInfo.FormatStepData.StepPrintData.PosAdjust ?? 0);
 | 
									float posAdjust = (float)(itemInfo.FormatStepData.StepPrintData.PosAdjust ?? 0);
 | 
				
			||||||
				if (itemInfo.FormatStepData != null && itemInfo.FormatStepData.StepPrintData != null &&
 | 
									if (itemInfo.FormatStepData != null && itemInfo.FormatStepData.StepPrintData != null &&
 | 
				
			||||||
					posAdjust>0)
 | 
										posAdjust > 0)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					if (Width < hls1.Width - posAdjust)
 | 
										if (Width < hls1.Width - posAdjust)
 | 
				
			||||||
						XOffset += posAdjust;
 | 
											XOffset += posAdjust;
 | 
				
			||||||
@@ -2185,11 +2185,11 @@ namespace Volian.Print.Library
 | 
				
			|||||||
			ChangeBarData cbd = formatInfo.PlantFormat.FormatData.ProcData.ChangeBarData;
 | 
								ChangeBarData cbd = formatInfo.PlantFormat.FormatData.ProcData.ChangeBarData;
 | 
				
			||||||
			float cols = formatInfo.MyStepSectionLayoutData.ColS ?? 0;
 | 
								float cols = formatInfo.MyStepSectionLayoutData.ColS ?? 0;
 | 
				
			||||||
			float colr = ToInt(formatInfo.MyStepSectionLayoutData.ColRTable, maxRNO);
 | 
								float colr = ToInt(formatInfo.MyStepSectionLayoutData.ColRTable, maxRNO);
 | 
				
			||||||
// FixedChangeColumn + - Column location for change bars 
 | 
								// FixedChangeColumn + - Column location for change bars 
 | 
				
			||||||
			// 0 - Separate AER and RNO change bars to the right of the text 
 | 
								// 0 - Separate AER and RNO change bars to the right of the text 
 | 
				
			||||||
			// -10 to -1 - Change bars on left (specify # of columns from the text) 
 | 
								// -10 to -1 - Change bars on left (specify # of columns from the text) 
 | 
				
			||||||
			// <-10 - AER change bars on the left and RNO change bars on the right.
 | 
								// <-10 - AER change bars on the left and RNO change bars on the right.
 | 
				
			||||||
// FixedAERChangeColumn	overrides the -5 default setting in chgbar.c, value is converted to a negative by the code
 | 
								// FixedAERChangeColumn	overrides the -5 default setting in chgbar.c, value is converted to a negative by the code
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			float col = (cbd.AbsoluteFixedChangeColumn) ?
 | 
								float col = (cbd.AbsoluteFixedChangeColumn) ?
 | 
				
			||||||
							((cbd.FixedAERChangeColumn ?? 0) > 0) ?
 | 
												((cbd.FixedAERChangeColumn ?? 0) > 0) ?
 | 
				
			||||||
@@ -2220,7 +2220,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
					|| (itemInfo.ActiveFormat.PlantFormat.FormatData.PrintData.RevDateWithForwardSlash && lRev.Contains("\\")))
 | 
										|| (itemInfo.ActiveFormat.PlantFormat.FormatData.PrintData.RevDateWithForwardSlash && lRev.Contains("\\")))
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					int indx = lRev.IndexOf(itemInfo.ActiveFormat.PlantFormat.FormatData.PrintData.DoRevDate ? '/' : '\\');
 | 
										int indx = lRev.IndexOf(itemInfo.ActiveFormat.PlantFormat.FormatData.PrintData.DoRevDate ? '/' : '\\');
 | 
				
			||||||
					cbMess = lRev.Substring(0, indx>-1?indx:lRev.Length);
 | 
										cbMess = lRev.Substring(0, indx > -1 ? indx : lRev.Length);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
					cbMess = lRev;
 | 
										cbMess = lRev;
 | 
				
			||||||
@@ -2321,7 +2321,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
			_RtfSB.Append(AddFontTable(myFont));
 | 
								_RtfSB.Append(AddFontTable(myFont));
 | 
				
			||||||
			_RtfSB.Append(vlntxt.StartText);
 | 
								_RtfSB.Append(vlntxt.StartText);
 | 
				
			||||||
			if (_MyItemInfo.IsStep && !itemInfo.FormatStepData.UseSmartTemplate && _MyItemInfo.FormatStepData.Suffix != null && _MyItemInfo.FormatStepData.Suffix != "")
 | 
								if (_MyItemInfo.IsStep && !itemInfo.FormatStepData.UseSmartTemplate && _MyItemInfo.FormatStepData.Suffix != null && _MyItemInfo.FormatStepData.Suffix != "")
 | 
				
			||||||
				_RtfSB.Append(_MyItemInfo.FormatStepData.Suffix.Replace("{ulnone}",@"\ulnone "));
 | 
									_RtfSB.Append(_MyItemInfo.FormatStepData.Suffix.Replace("{ulnone}", @"\ulnone "));
 | 
				
			||||||
			_RtfSB.Append("}");
 | 
								_RtfSB.Append("}");
 | 
				
			||||||
			string rtf = _RtfSB.ToString();
 | 
								string rtf = _RtfSB.ToString();
 | 
				
			||||||
			UnderlineTerminateList utl = MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.UnderlineTerminateList;
 | 
								UnderlineTerminateList utl = MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.UnderlineTerminateList;
 | 
				
			||||||
@@ -2374,7 +2374,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
				xoff = XOffset;												// XOffset has left margin included
 | 
									xoff = XOffset;												// XOffset has left margin included
 | 
				
			||||||
			vlnHeader myHeader = new vlnHeader(this, cb, itemInfo.MyHeader.Text, itemInfo.MyHeader.CleanText.TrimStart(" ".ToCharArray()), xoff, YOffset, itemInfo.MyHeader.MyFont);
 | 
								vlnHeader myHeader = new vlnHeader(this, cb, itemInfo.MyHeader.Text, itemInfo.MyHeader.CleanText.TrimStart(" ".ToCharArray()), xoff, YOffset, itemInfo.MyHeader.MyFont);
 | 
				
			||||||
			PartsAbove.Add(myHeader);
 | 
								PartsAbove.Add(myHeader);
 | 
				
			||||||
			return myHeader.Height + (!MyItemInfo.MyDocStyle.SpecialStepsFoldout || (MyItemInfo.MyDocStyle.ExtraLineHeader&&(MyItemInfo.IsCaution||MyItemInfo.IsNote)) ? SixLinesPerInch : 0);
 | 
								return myHeader.Height + (!MyItemInfo.MyDocStyle.SpecialStepsFoldout || (MyItemInfo.MyDocStyle.ExtraLineHeader && (MyItemInfo.IsCaution || MyItemInfo.IsNote)) ? SixLinesPerInch : 0);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		private float AdjustToCharPosition(float position, float? CPI)
 | 
							private float AdjustToCharPosition(float position, float? CPI)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -2587,7 +2587,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
						iilvl = iilvl.MyParent;
 | 
											iilvl = iilvl.MyParent;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					level = level <= 2 ? 1 : level - 1;
 | 
										level = level <= 2 ? 1 : level - 1;
 | 
				
			||||||
					if (level==1)
 | 
										if (level == 1)
 | 
				
			||||||
						XOffset = (float)itemInfo.MyDocStyle.Layout.LeftMargin + (level * (float)formatInfo.PlantFormat.FormatData.SectData.SectionHeader.Pos);
 | 
											XOffset = (float)itemInfo.MyDocStyle.Layout.LeftMargin + (level * (float)formatInfo.PlantFormat.FormatData.SectData.SectionHeader.Pos);
 | 
				
			||||||
					else
 | 
										else
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
@@ -2604,13 +2604,13 @@ namespace Volian.Print.Library
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			if (IsBackgroundStep())
 | 
								if (IsBackgroundStep())
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				if (myTab != null ) myTab.XOffset = XOffset;
 | 
									if (myTab != null) myTab.XOffset = XOffset;
 | 
				
			||||||
				XOffset += (itemInfo.FormatStepData.Font.CharsToTwips * 2);  // indent 2 characters for background steps
 | 
									XOffset += (itemInfo.FormatStepData.Font.CharsToTwips * 2);  // indent 2 characters for background steps
 | 
				
			||||||
				return;
 | 
									return;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else if (itemInfo.FormatStepData != null && itemInfo.FormatStepData.Type == "TitleWithTextBelow")
 | 
								else if (itemInfo.FormatStepData != null && itemInfo.FormatStepData.Type == "TitleWithTextBelow")
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				if ((colOvrd??0) != 0)
 | 
									if ((colOvrd ?? 0) != 0)
 | 
				
			||||||
					XOffset = (float)colOvrd;
 | 
										XOffset = (float)colOvrd;
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
					XOffset = (float)itemInfo.MyDocStyle.Layout.LeftMargin;
 | 
										XOffset = (float)itemInfo.MyDocStyle.Layout.LeftMargin;
 | 
				
			||||||
@@ -2618,7 +2618,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
			else if (itemInfo.MyParent.FormatStepData != null && itemInfo.MyParent.FormatStepData.Type == "TitleWithTextBelow")
 | 
								else if (itemInfo.MyParent.FormatStepData != null && itemInfo.MyParent.FormatStepData.Type == "TitleWithTextBelow")
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				float childindent = itemInfo.MyParent.FormatStepData.ChildIndent??0;
 | 
									float childindent = itemInfo.MyParent.FormatStepData.ChildIndent ?? 0;
 | 
				
			||||||
				if (myTab != null)
 | 
									if (myTab != null)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					float delta = childindent + MyParent.XOffset - myTab.XOffset;
 | 
										float delta = childindent + MyParent.XOffset - myTab.XOffset;
 | 
				
			||||||
@@ -2631,7 +2631,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
			else if (itemInfo.FormatStepData != null && itemInfo.FormatStepData.Type == "TitleWithTextRight")
 | 
								else if (itemInfo.FormatStepData != null && itemInfo.FormatStepData.Type == "TitleWithTextRight")
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				if ((colOvrd??0) != 0)
 | 
									if ((colOvrd ?? 0) != 0)
 | 
				
			||||||
					XOffset = (float)colOvrd;
 | 
										XOffset = (float)colOvrd;
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
					XOffset = (float)itemInfo.MyDocStyle.Layout.LeftMargin;
 | 
										XOffset = (float)itemInfo.MyDocStyle.Layout.LeftMargin;
 | 
				
			||||||
@@ -2647,7 +2647,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
			{
 | 
								{
 | 
				
			||||||
				float x = 0;
 | 
									float x = 0;
 | 
				
			||||||
				float xoff = 0;
 | 
									float xoff = 0;
 | 
				
			||||||
				if ((colOvrd??0)!=0)
 | 
									if ((colOvrd ?? 0) != 0)
 | 
				
			||||||
					x = (float)itemInfo.MyDocStyle.Layout.LeftMargin + (float)colOvrd;
 | 
										x = (float)itemInfo.MyDocStyle.Layout.LeftMargin + (float)colOvrd;
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
					x = (float)itemInfo.MyDocStyle.Layout.LeftMargin + (float)formatInfo.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.ColS;
 | 
										x = (float)itemInfo.MyDocStyle.Layout.LeftMargin + (float)formatInfo.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.ColS;
 | 
				
			||||||
@@ -2663,7 +2663,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
					float colsbylevel = (float)formatInfo.PlantFormat.FormatData.SectData.MetaSectionList[indxLevel % formatInfo.PlantFormat.FormatData.SectData.MetaSectionList.Count].ColSByLevel;
 | 
										float colsbylevel = (float)formatInfo.PlantFormat.FormatData.SectData.MetaSectionList[indxLevel % formatInfo.PlantFormat.FormatData.SectData.MetaSectionList.Count].ColSByLevel;
 | 
				
			||||||
					float seclvlindent = colsbylevel - (float)formatInfo.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.ColS;
 | 
										float seclvlindent = colsbylevel - (float)formatInfo.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.ColS;
 | 
				
			||||||
					float adjCols = (float)formatInfo.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.ColS + seclvlindent;
 | 
										float adjCols = (float)formatInfo.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.ColS + seclvlindent;
 | 
				
			||||||
					float xtabcol = adjCols - ((myTab==null||myTab.Text==null)?0:(myTab.Text.Length * 7.2f));
 | 
										float xtabcol = adjCols - ((myTab == null || myTab.Text == null) ? 0 : (myTab.Text.Length * 7.2f));
 | 
				
			||||||
					if (indxLevel > 1 && myTab != null) myTab.XOffset = (float)itemInfo.MyDocStyle.Layout.LeftMargin + xtabcol;
 | 
										if (indxLevel > 1 && myTab != null) myTab.XOffset = (float)itemInfo.MyDocStyle.Layout.LeftMargin + xtabcol;
 | 
				
			||||||
					else if (myTab != null) myTab.XOffset = (float)itemInfo.MyDocStyle.Layout.LeftMargin + colsbylevel;
 | 
										else if (myTab != null) myTab.XOffset = (float)itemInfo.MyDocStyle.Layout.LeftMargin + colsbylevel;
 | 
				
			||||||
					if (myTab != null)
 | 
										if (myTab != null)
 | 
				
			||||||
@@ -2823,7 +2823,8 @@ namespace Volian.Print.Library
 | 
				
			|||||||
			if (itemInfo.IsStep && itemInfo.MyHLS != null && UseTemplateWidthOrXOff(itemInfo) && (xwid = GetWidthOrStartFromTemplate(itemInfo, formatInfo, true)) > 0)
 | 
								if (itemInfo.IsStep && itemInfo.MyHLS != null && UseTemplateWidthOrXOff(itemInfo) && (xwid = GetWidthOrStartFromTemplate(itemInfo, formatInfo, true)) > 0)
 | 
				
			||||||
				widOvrd = xwid;
 | 
									widOvrd = xwid;
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				widOvrd = itemInfo.FormatStepData == null ? null : (float?)ToInt(itemInfo.FormatStepData.WidthOverride, maxRNO);
 | 
									widOvrd = itemInfo.FormatStepData == null ? null : itemInfo.FormatStepData.WidthOverride == null ? null : 
 | 
				
			||||||
 | 
										(float?)ToInt(itemInfo.FormatStepData.WidthOverride, maxRNO);
 | 
				
			||||||
			//widOvrd = itemInfo.FormatStepData == null ? null : itemInfo.FormatStepData.WidthOverride;
 | 
								//widOvrd = itemInfo.FormatStepData == null ? null : itemInfo.FormatStepData.WidthOverride;
 | 
				
			||||||
			// Don't adjust the RNO width if in single column mode:
 | 
								// Don't adjust the RNO width if in single column mode:
 | 
				
			||||||
			if (itemInfo.IsRNOPart && itemInfo.MyParent.IsHigh && itemInfo.MyActiveSection.ColumnMode != 0 && itemInfo.ActiveFormat.MyStepSectionLayoutData.RNOWidthAlt != null)
 | 
								if (itemInfo.IsRNOPart && itemInfo.MyParent.IsHigh && itemInfo.MyActiveSection.ColumnMode != 0 && itemInfo.ActiveFormat.MyStepSectionLayoutData.RNOWidthAlt != null)
 | 
				
			||||||
@@ -2833,7 +2834,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
				if (ovrd > 0)
 | 
									if (ovrd > 0)
 | 
				
			||||||
					widOvrd = ovrd; // + 6; // Change bars on RNO column (signoff line) would not line up with 16-bit without this - NSP Alarms
 | 
										widOvrd = ovrd; // + 6; // Change bars on RNO column (signoff line) would not line up with 16-bit without this - NSP Alarms
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if ((widOvrd??0) != 0)
 | 
								if ((widOvrd ?? 0) != 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				Width = (float)widOvrd;
 | 
									Width = (float)widOvrd;
 | 
				
			||||||
				// if there's a box, we may need to do an adjustment on the width, if the tab data was changed
 | 
									// if there's a box, we may need to do an adjustment on the width, if the tab data was changed
 | 
				
			||||||
@@ -2912,7 +2913,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
					Width = (float)formatInfo.MyStepSectionLayoutData.WidT - 6 - mycolT;
 | 
										Width = (float)formatInfo.MyStepSectionLayoutData.WidT - 6 - mycolT;
 | 
				
			||||||
				XOffset += mycolT; // adjust caution/note text position
 | 
									XOffset += mycolT; // adjust caution/note text position
 | 
				
			||||||
				if (PartsLeft != null)// adjust tab position
 | 
									if (PartsLeft != null)// adjust tab position
 | 
				
			||||||
					foreach(vlnPrintObject vpo in PartsLeft)
 | 
										foreach (vlnPrintObject vpo in PartsLeft)
 | 
				
			||||||
						vpo.XOffset += mycolT;
 | 
											vpo.XOffset += mycolT;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else if (itemInfo.IsSection)
 | 
								else if (itemInfo.IsSection)
 | 
				
			||||||
@@ -2960,11 +2961,12 @@ namespace Volian.Print.Library
 | 
				
			|||||||
		private bool UseTemplateWidthOrXOff(ItemInfo itemInfo)
 | 
							private bool UseTemplateWidthOrXOff(ItemInfo itemInfo)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (!itemInfo.IsStep) return false;
 | 
								if (!itemInfo.IsStep) return false;
 | 
				
			||||||
 | 
								if (itemInfo.MyHLS == null) return false;
 | 
				
			||||||
			if (itemInfo.MyHLS.FormatStepData.UseSmartTemplate) return false;
 | 
								if (itemInfo.MyHLS.FormatStepData.UseSmartTemplate) return false;
 | 
				
			||||||
			if (!itemInfo.MyDocStyle.ComponentList) return false;
 | 
								if (!itemInfo.MyDocStyle.ComponentList) return false;
 | 
				
			||||||
			if (itemInfo.MyHLS.FormatStepData.UseOldTemplate)
 | 
								if (itemInfo.MyHLS.FormatStepData.UseOldTemplate)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				ItemInfo useForTemplate = itemInfo.IsHigh?itemInfo:itemInfo.MyParent;
 | 
									ItemInfo useForTemplate = itemInfo.IsHigh ? itemInfo : itemInfo.MyParent;
 | 
				
			||||||
				int topIndx = useForTemplate.GetSmartTemplateTopLevelIndx();
 | 
									int topIndx = useForTemplate.GetSmartTemplateTopLevelIndx();
 | 
				
			||||||
				int tpIndx = useForTemplate.GetSmartTemplateIndex(topIndx, (int)useForTemplate.MyContent.Type);
 | 
									int tpIndx = useForTemplate.GetSmartTemplateIndex(topIndx, (int)useForTemplate.MyContent.Type);
 | 
				
			||||||
				if (tpIndx > -1) return true;
 | 
									if (tpIndx > -1) return true;
 | 
				
			||||||
@@ -3002,7 +3004,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
			// -1 below code, +1 for '.' and -2 for standard wid of tab
 | 
								// -1 below code, +1 for '.' and -2 for standard wid of tab
 | 
				
			||||||
			// standard wid of this tab is 2 (ex: '1.')
 | 
								// standard wid of this tab is 2 (ex: '1.')
 | 
				
			||||||
			// so adjust width if longer than normal
 | 
								// so adjust width if longer than normal
 | 
				
			||||||
			return (float)(sectTab.Length - 1) * 72/(float)MyItemInfo.FormatStepData.Font.CPI;
 | 
								return (float)(sectTab.Length - 1) * 72 / (float)MyItemInfo.FormatStepData.Font.CPI;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		private bool HasCheckOffHeading(ItemInfo itemInfo, FormatInfo formatInfo)
 | 
							private bool HasCheckOffHeading(ItemInfo itemInfo, FormatInfo formatInfo)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -3036,7 +3038,8 @@ namespace Volian.Print.Library
 | 
				
			|||||||
	/// </summary>
 | 
						/// </summary>
 | 
				
			||||||
	public class StepLevelList : SortedDictionary<int, SortedDictionary<float, vlnParagraph>>
 | 
						public class StepLevelList : SortedDictionary<int, SortedDictionary<float, vlnParagraph>>
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		public StepLevelList() : base()
 | 
							public StepLevelList()
 | 
				
			||||||
 | 
								: base()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		public void Add(int stepLevel, float yLocation, vlnParagraph para)
 | 
							public void Add(int stepLevel, float yLocation, vlnParagraph para)
 | 
				
			||||||
@@ -3060,7 +3063,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
			ParagraphLocation foundOverlap = FindOverlap(myParagraph);
 | 
								ParagraphLocation foundOverlap = FindOverlap(myParagraph);
 | 
				
			||||||
			if (foundOverlap == null)
 | 
								if (foundOverlap == null)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				this.Add(new ParagraphLocation(yTopMost,myParagraph));
 | 
									this.Add(new ParagraphLocation(yTopMost, myParagraph));
 | 
				
			||||||
				return;
 | 
									return;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			ParagraphLocation doubleOverlap = FindOverlap(foundOverlap);
 | 
								ParagraphLocation doubleOverlap = FindOverlap(foundOverlap);
 | 
				
			||||||
@@ -3101,7 +3104,7 @@ namespace Volian.Print.Library
 | 
				
			|||||||
					else
 | 
										else
 | 
				
			||||||
						level = 1;
 | 
											level = 1;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				myList.Add(level , paraLoc.YTop, paraLoc.MyParagraph);
 | 
									myList.Add(level, paraLoc.YTop, paraLoc.MyParagraph);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			return myList;
 | 
								return myList;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -3149,9 +3152,9 @@ namespace Volian.Print.Library
 | 
				
			|||||||
			get { return _MyParagraph; }
 | 
								get { return _MyParagraph; }
 | 
				
			||||||
			set { _MyParagraph = value; }
 | 
								set { _MyParagraph = value; }
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		public ParagraphLocation(float yTopMost,vlnParagraph myParagraph)
 | 
							public ParagraphLocation(float yTopMost, vlnParagraph myParagraph)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			MyParagraph =myParagraph;
 | 
								MyParagraph = myParagraph;
 | 
				
			||||||
			YTop = myParagraph.YVeryTop - yTopMost;
 | 
								YTop = myParagraph.YVeryTop - yTopMost;
 | 
				
			||||||
			YBottom = myParagraph.YBottom - yTopMost;
 | 
								YBottom = myParagraph.YBottom - yTopMost;
 | 
				
			||||||
			StepLevel = myParagraph.MyItemInfo.StepLevel;
 | 
								StepLevel = myParagraph.MyItemInfo.StepLevel;
 | 
				
			||||||
@@ -3160,8 +3163,8 @@ namespace Volian.Print.Library
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			if (Between(otherParagraph.YTop, YTop, YBottom)) return true;
 | 
								if (Between(otherParagraph.YTop, YTop, YBottom)) return true;
 | 
				
			||||||
			if (Between(otherParagraph.YBottom, YTop, YBottom)) return true;
 | 
								if (Between(otherParagraph.YBottom, YTop, YBottom)) return true;
 | 
				
			||||||
			if(Between(YTop,otherParagraph.YVeryTop,otherParagraph.YBottom)) return true;
 | 
								if (Between(YTop, otherParagraph.YVeryTop, otherParagraph.YBottom)) return true;
 | 
				
			||||||
			if(Between(YBottom,otherParagraph.YVeryTop,otherParagraph.YBottom)) return true;
 | 
								if (Between(YBottom, otherParagraph.YVeryTop, otherParagraph.YBottom)) return true;
 | 
				
			||||||
			return false;
 | 
								return false;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		public static bool Between(float x, float lower, float higher)
 | 
							public static bool Between(float x, float lower, float higher)
 | 
				
			||||||
@@ -3170,8 +3173,8 @@ namespace Volian.Print.Library
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			if (Between(otherParagraphLocation.YTop, YTop, YBottom)) return true; // The top is within the other
 | 
								if (Between(otherParagraphLocation.YTop, YTop, YBottom)) return true; // The top is within the other
 | 
				
			||||||
			if (Between(otherParagraphLocation.YBottom, YTop, YBottom)) return true; // The bottom is within the other
 | 
								if (Between(otherParagraphLocation.YBottom, YTop, YBottom)) return true; // The bottom is within the other
 | 
				
			||||||
			if(Between(YTop,otherParagraphLocation.YTop,otherParagraphLocation.YBottom)) return true; // the other top is within this one
 | 
								if (Between(YTop, otherParagraphLocation.YTop, otherParagraphLocation.YBottom)) return true; // the other top is within this one
 | 
				
			||||||
			if(Between(YBottom,otherParagraphLocation.YTop,otherParagraphLocation.YBottom)) return true;// I believe this is unnecessary
 | 
								if (Between(YBottom, otherParagraphLocation.YTop, otherParagraphLocation.YBottom)) return true;// I believe this is unnecessary
 | 
				
			||||||
			return false;
 | 
								return false;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		public void Merge(vlnParagraph otherParagraph)
 | 
							public void Merge(vlnParagraph otherParagraph)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -499,6 +499,7 @@ namespace XYPlots
 | 
				
			|||||||
				Buff = Buff.Substring(0, Buff.Length - 2) + "  \r\n\0x00"; // needs to end with null
 | 
									Buff = Buff.Substring(0, Buff.Length - 2) + "  \r\n\0x00"; // needs to end with null
 | 
				
			||||||
			else if (Buff.EndsWith(">")) // doesn't end with return chars...
 | 
								else if (Buff.EndsWith(">")) // doesn't end with return chars...
 | 
				
			||||||
				Buff = Buff.Substring(0, Buff.Length - 1) + " \r\n\0x00"; // needs to end with null
 | 
									Buff = Buff.Substring(0, Buff.Length - 1) + " \r\n\0x00"; // needs to end with null
 | 
				
			||||||
 | 
								Buff = Regex.Replace(Buff, @"([0-9])\r\n([0-9])", "$1 $2");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		private void CloseGraph()
 | 
							private void CloseGraph()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user