diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs index 8a10e8bf..6f27ff29 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs @@ -2807,9 +2807,11 @@ namespace VEPROMS.CSLA.Library _MyHeader.Justify = ContentAlignment.MiddleCenter; _MyHeader.Text = (!FormatStepData.TabData.NoTrim)?tbformat.Replace("\\xA0"," ").Trim():tbformat.Replace("\\xA0"," "); _MyHeader.CleanText = StripRtfFormatting(_MyHeader.Text); - // if there is only step in the group - no bullet is used, if more that one replace the tab + // if there is only step in the group or we have a change in step type (caution/note) when there is + // use of the MixCautionsAndNotes format flag - no bullet is used, if more that one replace the tab // with a bullet. Also, if only one in group and tab text ends with 'S', remove it: - if (MyPrevious == null && NextItem == null) + bool mixCandN = MixCautionNotesDiffType(); + if ((MyPrevious == null && NextItem == null) || mixCandN) { if (_MyHeader.CleanText.ToUpper().EndsWith("S")) { @@ -2872,6 +2874,14 @@ namespace VEPROMS.CSLA.Library return tbformat; } + public bool MixCautionNotesDiffType() + { + if (!FormatStepData.MixCautionsAndNotes) return false; + if (IsNote && ((NextItem != null && NextItem.IsCaution) || (MyPrevious != null && MyPrevious.IsCaution))) return true; + if (IsCaution && ((NextItem != null && NextItem.IsNote) || (MyPrevious != null && MyPrevious.IsNote))) return true; + return false; + } + private bool TabToIdentBAdjustFont() { if ((FormatStepData.TabData.Font.Style & E_Style.Underline) > 0) diff --git a/PROMS/Volian.Print.Library/PromsPrinter.cs b/PROMS/Volian.Print.Library/PromsPrinter.cs index e74e73d4..9e49279e 100644 --- a/PROMS/Volian.Print.Library/PromsPrinter.cs +++ b/PROMS/Volian.Print.Library/PromsPrinter.cs @@ -316,20 +316,29 @@ namespace Volian.Print.Library } return PrintProcedureOrFoldout(myProcedure, null, outputFileName); } - // Find the last section that has a Final Message defined in its format - // Return that section's itemID or a -1 if the Final Message is not defined + + // See if the last non Foldout Section has a Final Message. private int GetFinalMessageSectionID(ProcedureInfo myProcedure, bool doingFoldout) { - int sectionID = -1; if (!doingFoldout) { - foreach (SectionInfo mySection in myProcedure.Sections) + // Work backwards because we don't want to include any foldouts. Find the last section that is not + // a foldout. If it has a final message, this is the 'last section' and should have a final message. + // If it doesn't have a final message, then none should be printed. + int cntSect = myProcedure.Sections.Count; + for (int i = cntSect - 1; i >= 0; i--) { - if (mySection.MyDocStyle.Final.Message != null && mySection.MyDocStyle.Final.Message.Length > 0) - sectionID = mySection.ItemID; + SectionInfo mySection = myProcedure.Sections[i] as SectionInfo; + if (!mySection.DisplayText.ToUpper().Contains("FOLDOUT")) + { + if (mySection.MyDocStyle.Final != null && mySection.MyDocStyle.Final.Message != null && mySection.MyDocStyle.Final.Message.Length > 0) + return mySection.ItemID; + else + return -1; + } } } - return sectionID; + return -1; } private bool _AllowAllWatermarks = false; public bool AllowAllWatermarks diff --git a/PROMS/Volian.Print.Library/vlnParagraph.cs b/PROMS/Volian.Print.Library/vlnParagraph.cs index e93aed20..fccf7d9e 100644 --- a/PROMS/Volian.Print.Library/vlnParagraph.cs +++ b/PROMS/Volian.Print.Library/vlnParagraph.cs @@ -33,8 +33,15 @@ namespace Volian.Print.Library int? bxIndex = null; vlnBox box = null; float yTop = yoff; + ItemInfo lastChild = null; foreach (ItemInfo childItemInfo in itemInfoList) { + // if the format has MatchUpRNOCautNote, then add a line to yoff, if not at top of rno column. + if (childItemInfo.FormatStepData.MatchUpRNO) + { + if (childItemInfo.MyParent != null && childItemInfo.MyParent.MyParent != null && !childItemInfo.MyParent.MyParent.IsHigh) + yoff += vlnPrintObject.SixLinesPerInch; + } // if this is a caution/note and it has a caution/note substep, do it before this caution/note, so that // it comes above it. if (childItemInfo.Cautions != null && (childItemInfo.IsCaution || childItemInfo.IsNote)) @@ -72,9 +79,10 @@ namespace Volian.Print.Library if (box != null) box.Height = yoff - box.YOffset; // new height, with children box = new vlnBox(); box.MyBox = formatInfo.PlantFormat.FormatData.BoxList[(int)bxIndx]; - box.YOffset = yoff; int ln = 1; // a format flag determines whether there is a space before the note/caution. if (childItemInfo.FormatStepData.OneLineBeforeTab) ln++; + if (childItemInfo.MixCautionNotesDiffType()) ln += 2; + box.YOffset = yoff + ((ln - 1) * vlnPrintObject.SixLinesPerInch); yoff += ln * vlnPrintObject.SixLinesPerInch; } bxIndex = bxIndx; @@ -99,11 +107,17 @@ namespace Volian.Print.Library box.Height = yoff - box.YOffset - (1.1F * vlnPrintObject.SixLinesPerInch); box = null; // if doing boxed steps, only do single sibling at a time. } + lastChild = childItemInfo; } if (box != null && box.MyBox != null) { box.Height = yoff - box.YOffset; // new height, with children yoff += 2 * vlnPrintObject.SixLinesPerInch; + if (lastChild != null && lastChild.FormatStepData.AlwaysUseExtraLines && (lastChild.IsCaution || lastChild.IsNote)) + { + if (!lastChild.MyParent.IsHigh) + yoff += lastChild.ActiveFormat.PlantFormat.FormatData.StepDataList[2].StepLayoutData.STExtraSpace ?? 0; + } } return yoff; } @@ -144,7 +158,11 @@ namespace Volian.Print.Library if (_PartsAbove != null && _PartsAbove.Count > 0) yPageStart = PartsAbove.ToPdf(cb, yPageStart, ref yTopMargin, ref yBottomMargin); if (MyItemInfo.IsHigh && MyItemInfo.MyDocStyle.SpecialStepsFoldout) yPageStart -= SixLinesPerInch; if (MyItemInfo.IsHigh && !MyItemInfo.ActiveFormat.MyStepSectionLayoutData.DoSTExtraAtTop && (yPageStart - YTopMost == yTopMargin)) + { yPageStart += ((MyItemInfo.FormatStepData == null) ? 0 : MyItemInfo.FormatStepData.StepLayoutData.STExtraSpace ?? 0); + if ((MyItemInfo.Cautions != null && MyItemInfo.Cautions[0].FormatStepData.AlwaysUseExtraLines) || (MyItemInfo.Notes != null && MyItemInfo.Notes[0].FormatStepData.AlwaysUseExtraLines)) + yPageStart -= ((MyItemInfo.FormatStepData == null) ? 0 : MyItemInfo.FormatStepData.StepLayoutData.STExtraSpace ?? 0); + } float yLocation = CalculateYOffset(yPageStart, yTopMargin); if (MyItemInfo.HasChangeBar && MyPageHelper.ChangeBarDefinition.MyChangeBarType != PrintChangeBar.Without) MyPageHelper.AddChangeBar(DoChangeBar(cb, MyItemInfo, MyPageHelper, XOffset, yLocation, MyPageHelper.MaxRNO, MyItemInfo.ActiveFormat), cbMess); float retval = yLocation; @@ -1061,6 +1079,12 @@ namespace Volian.Print.Library // Added check for UseSTExtraRealValue, if set, we want to use what is set for the specific step type if (!MyItemInfo.ActiveFormat.MyStepSectionLayoutData.UseSTExtraRealValue && MyItemInfo.IsHigh) addExtraSpace = MyItemInfo.ActiveFormat.PlantFormat.FormatData.StepDataList[2].StepLayoutData.STExtraSpace ?? 0; + // if this plant has the AlwaysUseExtraLines and there are notes/cautions above the hls, don't add in the + // extra space: + if (itemInfo.IsHigh && (itemInfo.Cautions != null || itemInfo.Notes != null)) + { + if ((itemInfo.Cautions != null && itemInfo.Cautions[0].FormatStepData.AlwaysUseExtraLines) || (itemInfo.Notes != null && itemInfo.Notes[0].FormatStepData.AlwaysUseExtraLines)) addExtraSpace = 0; + } if (addExtraSpace > 0) this.PartsAbove.Add(new vlnText(cb, this, " ", " ", 0, yoff, MyItemInfo.FormatStepData.Font)); yoff += addExtraSpace; @@ -1075,8 +1099,11 @@ namespace Volian.Print.Library } if (itemInfo.MyTab.AsteriskOffset != 0) { - // the '-24' was used for the SHE format to get the continuous HLS's asterisk to match 16bit. - vlnText myAsterisk = new vlnText(cb, this, "*", "*", mytab.XOffset - 24, YOffset, MyItemInfo.FormatStepData.TabData.Font); + + // 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: + 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); PartsLeft.Add(myAsterisk); } if (itemInfo.IsRNOPart) @@ -1492,9 +1519,10 @@ namespace Volian.Print.Library vlnParagraph hls1 = MyParent; while (hls1.MyParent != null && !hls1.MyItemInfo.IsHigh) hls1 = hls1.MyParent; float colR = float.Parse(formatInfo.MyStepSectionLayoutData.ColRTable.Split(",".ToCharArray())[itemInfo.ColumnMode]); - float xLowerLimit = hls1.PartsLeft != null && hls1.PartsLeft.Count > 0 ? hls1.PartsLeft[0].XOffset : hls1.XOffset; + float xLowerLimit = (aerTableOrFigure && hls1.PartsLeft != null && hls1.PartsLeft.Count > 0) ? hls1.PartsLeft[0].XOffset : hls1.XOffset; float xUpperLimit = 0; float pageWidth = ((float)itemInfo.MyActiveSection.MyDocStyle.Layout.PageWidth); + float leftMargin = ((float)itemInfo.MyActiveSection.MyDocStyle.Layout.LeftMargin); //* (float)MyItemInfo.FormatStepData.Font.CPI / 12; if (itemInfo.IsInRNO) // if in rno column, the upper limit is width of the page (right margin). Subtract off size of a character @@ -1504,16 +1532,9 @@ namespace Volian.Print.Library float TableCenterPos = float.Parse(formatInfo.MyStepSectionLayoutData.TableCenterPos.Split(",".ToCharArray())[itemInfo.ColumnMode]); if (formatInfo.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.TieTabToLevel) - { - float leftMargin = ((float)itemInfo.MyActiveSection.MyDocStyle.Layout.LeftMargin); //* (float)MyItemInfo.FormatStepData.Font.CPI / 12; XOffset = leftMargin + (pageWidth - leftMargin - Width) / 2; - } else { - // Determine center of hls - XOffset = hls1.XOffset + hls1.Width / 2; - // Determine left edge of the table by subtracting 1/2 of its width. - XOffset -= Width / 2; if (aerTableOrFigure || itemInfo.RNOLevel != 0) // AER or RNO XOffset = MyParent.XOffset + MyParent.Width / 2 - Width / 2; else if (TableCenterPos != 0) @@ -1523,8 +1544,13 @@ namespace Volian.Print.Library } else // Centered Table or Figure { + // Determine center of hls + XOffset = hls1.XOffset + hls1.Width / 2; + // Determine left edge of the table by subtracting 1/2 of its width. + XOffset -= Width / 2; // Add in 1/2 of the width of all RNO columns XOffset += (colR * itemInfo.ColumnMode) / 2; + if (!aerTableOrFigure) { // 05/14/12 - 16bit code adjusts the center depending upon the CPI of the table font. @@ -1541,7 +1567,6 @@ namespace Volian.Print.Library XOffset += (float)(itemInfo.FormatStepData.StepPrintData.PosAdjust ?? 0); } - // if the XOffset < High Level Step Text's XOffset, then align with the High Level Step Text if (XOffset < xLowerLimit && Width < (xUpperLimit - xLowerLimit)) XOffset = xLowerLimit; diff --git a/PROMS/fmtxml/AppendPlantSpecific.cs b/PROMS/fmtxml/AppendPlantSpecific.cs index a2987d70..6db6e9a5 100644 --- a/PROMS/fmtxml/AppendPlantSpecific.cs +++ b/PROMS/fmtxml/AppendPlantSpecific.cs @@ -859,10 +859,15 @@ namespace fmtxml fmtdata.StepData[2].TabData.RNOIdent = " ."; fmtdata.StepData[7].TabData.Ident = @" \ul NOTE\ulnone"; fmtdata.StepData[26].TabData.Ident = @" \ul NOTE\ulnone"; + fmtdata.StepData[6].MatchUpRNO = "False"; + fmtdata.StepData[6].MixCautionsAndNotes = "True"; + fmtdata.StepData[7].MatchUpRNO = "False"; + fmtdata.StepData[7].MixCautionsAndNotes = "True"; fmtdata.StepData[7].TabData.NoTrim = "True"; // need this field in stepdata/tabdata. fmtdata.StepData[9].TabData.Ident = "{asterisk} {numeric}."; fmtdata.StepData[18].TabData.Ident = null; fmtdata.StepData[18].TabData.RNOIdent = null; + fmtdata.StepData[23].MatchUpRNO = "True"; fmtdata.BoxData[2].TxtWidth = 432; } private void AddSHESSDfmt(ref FormatData fmtdata) @@ -926,9 +931,22 @@ namespace fmtxml pgstyles.PgStyles[2].Items[7].Col = 315; pgstyles.PgStyles[2].Items[8].Col = 315; pgstyles.PgStyles[2].Items[9].Col = 315; - pgstyles.PgStyles[3].Items[1].Col = 447; // Adjust columns on some PSI for cover page. - pgstyles.PgStyles[3].Items[2].Col = 447; - pgstyles.PgStyles[3].Items[3].Col = 447; + pgstyles.PgStyles[3].Items[4].Col = 477; // Adjust columns on some PSI for cover page. + pgstyles.PgStyles[3].Items[5].Col = 477; + pgstyles.PgStyles[3].Items[6].Col = 477; + pgstyles.PgStyles[3].Items[7].Col = 477; + pgstyles.PgStyles[3].Items[8].Col = 477; + pgstyles.PgStyles[3].Items[9].Col = 477; + pgstyles.PgStyles[3].Items[10].Col = 477; + pgstyles.PgStyles[3].Items[11].Col = 477; + pgstyles.PgStyles[3].Items[12].Col = 477; + pgstyles.PgStyles[3].Items[23].Col = 296; + pgstyles.PgStyles[3].Items[23].Style.CPI = "10"; + pgstyles.PgStyles[3].Items[24].Row = 426; + pgstyles.PgStyles[3].Items[24].Col = 270; + pgstyles.PgStyles[3].Items[24].Justify = "PSCenter"; + pgstyles.PgStyles[3].Items[24].Style.CPI = "10"; + } // NSP_ALL private void AddNSPPage(ref PageStyles pgstyles)