B2020-081 better logic for steps with more than on RNO level to try and keep the RNO sub-step from breaking (where possible) and to see if the entire second RNO could also fit on the page
This commit is contained in:
parent
5922ddb3e6
commit
c1849897db
@ -1400,6 +1400,32 @@ namespace VEPROMS.CSLA.Library
|
||||
}
|
||||
return level;
|
||||
}
|
||||
// B2020-081 used in HasSecondRNOThatWillFit() in pagination.cs
|
||||
// Get the total number of RNO levels in the step
|
||||
public int GetMaxRNOLevels
|
||||
{
|
||||
get
|
||||
{
|
||||
return MyHLS.GetMaxRNOLevelsFromChildren;
|
||||
}
|
||||
}
|
||||
private int GetMaxRNOLevelsFromChildren
|
||||
{
|
||||
get
|
||||
{
|
||||
int maxRNOLevel = RNOLevel;
|
||||
if (MyContent.ContentParts != null)
|
||||
{
|
||||
foreach (PartInfo pi in MyContent.ContentParts)
|
||||
{
|
||||
foreach (ItemInfo ii in pi.MyItems)
|
||||
maxRNOLevel = Math.Max(maxRNOLevel, ii.GetMaxRNOLevelsFromChildren);
|
||||
}
|
||||
}
|
||||
return maxRNOLevel;
|
||||
}
|
||||
|
||||
}
|
||||
private bool ParentAndOr
|
||||
{
|
||||
get
|
||||
|
@ -1005,7 +1005,7 @@ namespace Volian.Print.Library
|
||||
{
|
||||
paraBreak = FindPageBreak(yStart, ySpaceOnCurPage - accountForCalvertAlarmConditionResponseFooter - yAccountForBottomMsg, yLowerLimit,
|
||||
myList, lastBreak, yPageSize - (myTopMsgSpace + SixLinesPerInch) - myBottomMsgSpace,
|
||||
myBottomMsgSpace, MyItemInfo.ActiveFormat.PlantFormat.FormatData.StepDataList[40].ContinueOnly);
|
||||
myBottomMsgSpace, MyItemInfo.ActiveFormat.PlantFormat.FormatData.StepDataList[40].ContinueOnly, yTop);
|
||||
// B2020-032 put in for Barakah EOPs 1T4-OP-EOP-XX-0100 Attachement 32 step 1.2.2a where a table was printing on a page by itself.
|
||||
// The following logic will walk up to each parent level to see try and get as many parent step levels on the same page
|
||||
// as the Table.
|
||||
@ -1072,7 +1072,7 @@ namespace Volian.Print.Library
|
||||
{
|
||||
vlnParagraph paraBreak2 = FindPageBreak(yStart, ySpaceOnCurPage - (SixLinesPerInch + accountForCalvertAlarmConditionResponseFooter), yLowerLimit,
|
||||
myList, lastBreak, yPageSize - (myTopMsgSpace + SixLinesPerInch) - myBottomMsgSpace,
|
||||
myBottomMsgSpace, MyItemInfo.ActiveFormat.PlantFormat.FormatData.StepDataList[40].ContinueOnly);
|
||||
myBottomMsgSpace, MyItemInfo.ActiveFormat.PlantFormat.FormatData.StepDataList[40].ContinueOnly, yTop);
|
||||
if (paraBreak2 != null && paraBreak != paraBreak2)
|
||||
{
|
||||
yLoc = ySpaceOnCurPage - (paraBreak2.YOffset - (YTopMost + yTop - paraBreak2.Height));
|
||||
@ -1093,7 +1093,7 @@ namespace Volian.Print.Library
|
||||
{
|
||||
vlnParagraph paraBreak3 = FindPageBreak(yStart, ySpaceOnCurPage - accountForCalvertAlarmConditionResponseFooter, yLowerLimit + 144,
|
||||
myList, lastBreak, yPageSize - (myTopMsgSpace + SixLinesPerInch) - myBottomMsgSpace,
|
||||
myBottomMsgSpace, MyItemInfo.ActiveFormat.PlantFormat.FormatData.StepDataList[40].ContinueOnly);
|
||||
myBottomMsgSpace, MyItemInfo.ActiveFormat.PlantFormat.FormatData.StepDataList[40].ContinueOnly, yTop);
|
||||
if (paraBreak3 != null)
|
||||
{
|
||||
float yLoc3 = ySpaceOnCurPage - (paraBreak3.YOffset - (YTopMost + yTop));
|
||||
@ -1153,7 +1153,7 @@ namespace Volian.Print.Library
|
||||
else if (!paraBreak.MyItemInfo.IsCautionPart && !paraBreak.MyItemInfo.IsNotePart && paraBreak.ParentHasCalvertMacro && accountForCalvertAlarmConditionResponseFooter == 0)
|
||||
{
|
||||
paraBreak = FindPageBreak(yStart, ySpaceOnCurPage - vlnPrintObject.SixLinesPerInch * 4, yLowerLimit, myList, lastBreak, yPageSize - (myTopMsgSpace + SixLinesPerInch) - myBottomMsgSpace,
|
||||
myBottomMsgSpace, MyItemInfo.ActiveFormat.PlantFormat.FormatData.StepDataList[40].ContinueOnly);
|
||||
myBottomMsgSpace, MyItemInfo.ActiveFormat.PlantFormat.FormatData.StepDataList[40].ContinueOnly, yTop);
|
||||
if (paraBreak.MyItemInfo.MyPrevious == null)
|
||||
if (paraBreak.MyParent.ChildrenAbove.Count > 0)
|
||||
paraBreak = paraBreak.MyParent.ChildrenAbove[0];
|
||||
@ -1246,7 +1246,7 @@ namespace Volian.Print.Library
|
||||
float ySpaceAt7LPI = ((ySpaceOnCurPage - accountForCalvertAlarmConditionResponseFooter) * SixLinesPerInch / _SevenLinesPerInch) - _SevenLinesPerInch;
|
||||
vlnParagraph paraBreak7 = FindPageBreak(yStart, ySpaceAt7LPI, yLowerLimit,
|
||||
myList, lastBreak, yPageSize - (myTopMsgSpace + SixLinesPerInch) - myBottomMsgSpace,
|
||||
myBottomMsgSpace, MyItemInfo.ActiveFormat.PlantFormat.FormatData.StepDataList[40].ContinueOnly);
|
||||
myBottomMsgSpace, MyItemInfo.ActiveFormat.PlantFormat.FormatData.StepDataList[40].ContinueOnly, yTop);
|
||||
if (paraBreak7 != null && paraBreak7.YOffset > paraBreak.YOffset && paraBreak.MyItemInfo.StepLevel >= paraBreak7.MyItemInfo.StepLevel)
|
||||
{
|
||||
paraBreak = paraBreak7;
|
||||
@ -1452,7 +1452,7 @@ namespace Volian.Print.Library
|
||||
/// <param name="myList"></param>
|
||||
/// <returns></returns>
|
||||
private static vlnParagraph FindPageBreak(float yStart, float yUpperLimit, float yLowerLimit, StepLevelList myList, vlnParagraph lastBreak, float fullPage,
|
||||
float myBottomMsgSpace,bool RNOContinueOnly)
|
||||
float myBottomMsgSpace,bool RNOContinueOnly, float yTop)
|
||||
{
|
||||
vlnParagraph minPara = null;
|
||||
//StringBuilder minBuff = new StringBuilder();
|
||||
@ -1588,8 +1588,13 @@ namespace Volian.Print.Library
|
||||
// B2020-013 premature break in RNO column - Callaway OTO-AC-00002 step 2
|
||||
// B2020-016 for Robinson AOP-010 step 27 was breaking too soon
|
||||
// B2020-073 was not keeping all of RNO sub-step together - Comanche Peak FRC-0.1 (unit 1) Step 14
|
||||
if ((-yLocation + yStart) >= yLowerLimit && !myPara.HasSecondRNOThatWillFit(yStart, yLowerLimit, yUpperLimit, myList, stepLevel)) // Only if it is more than the lower limit
|
||||
return myPara;
|
||||
// B2020-081 was breaking on an AER substep that has an long RNO - should keep AER substep and part of RNO on the page = D.C. Cook "Current (Post FLEX) U1 NOP NOT [EOPs]" set, ES-0.1 step 1.
|
||||
if ((-yLocation + yStart) >= yLowerLimit)
|
||||
{
|
||||
vlnParagraph rnoChild = myPara.HasSecondRNOThatWillFit(yStart, yLowerLimit, yUpperLimit, myList, stepLevel, yTop); // Only if it is more than the lower limit
|
||||
if (rnoChild != null)
|
||||
return rnoChild;
|
||||
}
|
||||
// B2019-103, B2019-114 Break at a step if the step will fit on a page by itself and it will
|
||||
// not fit in the current page
|
||||
float yAdjustLastSubStep = 0;
|
||||
@ -1637,35 +1642,53 @@ namespace Volian.Print.Library
|
||||
// B2020-013 premature break in RNO column - Callaway OTO-AC-00002 step 2
|
||||
// B2020-016 bad pagination on RNOs for Robinson AOP-010 step 27 , AOP-024 Step 10, EOP E-0 step 10, EOP ECA-2.1 step 28
|
||||
// B2020-073 was not keeping all of RNO sub-step together - Comanche Peak FRC-0.1 (unit 1) Step 14
|
||||
private bool HasSecondRNOThatWillFit(float yStart, float yLowerLimit, float yUpperLimit, StepLevelList myList, int stepLevel)
|
||||
// B2020-081 was breaking on an AER substep that has an long RNO - should keep AER substep and part of RNO on the page = D.C. Cook "Current (Post FLEX) U1 NOP NOT [EOPs]" set, ES-0.1 step 1.
|
||||
private vlnParagraph HasSecondRNOThatWillFit(float yStart, float yLowerLimit, float yUpperLimit, StepLevelList myList, int stepLevel, float yTop)
|
||||
{
|
||||
if (!MyItemInfo.IsInRNO || stepLevel+1 >= myList.Count)
|
||||
return false; // does not have second RNO
|
||||
// note: "this" is the myPara from where this method is called
|
||||
if (!MyItemInfo.IsInRNO || MyItemInfo.GetMaxRNOLevels <= 1) // GetMaxRNOLevels will get the greatest (lowest) RNO level in the step
|
||||
return this; // does not have second (more than one) RNO - break at the myPara
|
||||
|
||||
// see if there is a second RNO then see if it will fit on the page
|
||||
vlnParagraph tmp = this;
|
||||
// see there there is a second RNO then see if it will fit on the page
|
||||
while (!tmp.MyItemInfo.IsRNOPart) tmp = tmp.MyParent;
|
||||
if (tmp.MyItemInfo.RNOs != null && tmp.MyItemInfo.RNOs.Count > 0)
|
||||
{
|
||||
int maxLevel = 1;
|
||||
foreach (int lev in myList.Keys) // B2020-078 Don't include the highest step level
|
||||
maxLevel = Math.Max(lev, maxLevel);
|
||||
// B2020-077 This was changed from a standard for loop (for int i = 0 to myList.Count) since there can be
|
||||
// gaps in the list of step levels.
|
||||
foreach (int lev in myList.Keys) // loop thru the other step levels
|
||||
while (!tmp.MyItemInfo.IsRNOPart) tmp = tmp.MyParent; // if on a substep of an RNO, move up the substep's parent (RNO)
|
||||
vlnParagraph parent = tmp;
|
||||
while (parent.MyParent != null && !parent.MyParent.MyItemInfo.IsSection) parent = parent.MyParent; // this will take us to the High level step
|
||||
float yTopParent = parent.YTopMost; // this is where the HLS starts printing
|
||||
if (this.MyItemInfo.IsRNOPart && this.MyItemInfo.RNOLevel > 1)
|
||||
if ((this.YTopMost - yTopParent + yStart - yTop + this.YSize) > yUpperLimit)
|
||||
{
|
||||
if (lev > stepLevel && lev < maxLevel)// B2020-078 Don't include the highest step level
|
||||
{
|
||||
foreach (float yLocation in myList[lev].Keys) // loop thru yLocation from pagination list
|
||||
{
|
||||
if ((tmp != myList[lev][yLocation] && myList[lev][yLocation].MyItemInfo.IsRNOPart) ||
|
||||
(myList[lev][yLocation].MyParent != tmp) && myList[lev][yLocation].MyParent.MyItemInfo.IsRNOPart)
|
||||
return true; // has a second RNO that will fit
|
||||
}
|
||||
}
|
||||
foreach (vlnParagraph chld in parent.ChildrenBelow)
|
||||
if (YBottomMostExcludingRNO(chld) > this.YTopMost)
|
||||
return null; // the AER text overlaps the RNO text - DON'T use the myPara and keep looking instead
|
||||
return this; // myPara is an RNO and the entire RNO will fit
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
// check the children of the myPara and see if it has an RNO that will fit
|
||||
foreach (vlnParagraph chld in tmp.ChildrenBelow)
|
||||
if (chld.MyItemInfo.IsRNOPart)
|
||||
if ((chld.YTopMost + yStart + yTop - yTopParent) > yLowerLimit)
|
||||
if ((chld.YTopMost + yStart + yTop - yTopParent) < yUpperLimit)
|
||||
return chld; // second RNO will fit, use this instead of myPara
|
||||
|
||||
// check to see if there is AER substep children that would be spit if we pagination on the RNO
|
||||
foreach (vlnParagraph chld in parent.ChildrenBelow)
|
||||
if (YBottomMostExcludingRNO(chld) > this.YTopMost)
|
||||
return null; // the AER text positioning overlaps the RNO text positioning (caused AER sub-steps to be split onto next page (i.e. RO step) have pagination logic keep looking for place to break
|
||||
|
||||
return this; // current myPara is good
|
||||
}
|
||||
|
||||
// B2020-081 used in HasSecondRNOThatWillFit() get the size of the AER and its substeps
|
||||
private float YBottomMostExcludingRNO(vlnParagraph chld)
|
||||
{
|
||||
float maxBottomMost = chld.YBottom;
|
||||
foreach (vlnParagraph gChld in chld.ChildrenBelow)
|
||||
if (gChld.MyItemInfo.IsRNOPart == false)
|
||||
maxBottomMost = Math.Max(maxBottomMost, YBottomMostExcludingRNO(gChld));
|
||||
return maxBottomMost;
|
||||
}
|
||||
|
||||
private static bool StepWillFitOnBlankPageButNotOnCurrentPage(vlnParagraph myPara, float yLocation, float yStart,float fullPage)
|
||||
{
|
||||
// B2019-150 & B2019-151 Pagination Bugs Seen for Summer EOP4.1 Step 10 and
|
||||
|
Loading…
x
Reference in New Issue
Block a user