Merge pull request 'C2025-036 - Cleaned up logic in PROMS code that generates the step/sub-step tabs to reduce un-needed processing in certain cases' (#569) from C2025-036_CleanupTabCode into Development

Looks good. Ready for QA testing.
This commit is contained in:
Matthew Schill 2025-06-18 09:29:10 -04:00
commit 49bc67a64f
2 changed files with 64 additions and 51 deletions

View File

@ -449,10 +449,9 @@ namespace VEPROMS.CSLA.Library
{ {
StringBuilder sret = new StringBuilder(); StringBuilder sret = new StringBuilder();
ItemInfo pitem = this; ItemInfo pitem = this;
while (!pitem.IsSection && !pitem.IsHigh) while (!pitem.IsSection && !pitem.IsHigh)
{ {
using (StepInfo stpinfo = StepInfo.Get(pitem.ItemID)) using (StepInfo stpinfo = StepInfo.Get(pitem.ItemID))
{ {
string thisTab = stpinfo.MyTab.CleanText; string thisTab = stpinfo.MyTab.CleanText;
@ -4655,43 +4654,50 @@ namespace VEPROMS.CSLA.Library
int localPrintLevel = PrintLevel; int localPrintLevel = PrintLevel;
StepSectionData sd = ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData; StepSectionData sd = ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData;
bool doMeta = false; bool doMeta = false;
if (sd.StepSectionLayoutData.TieTabToLevel && ActiveFormat.PlantFormat.FormatData.SectData.UseMetaSections) if (sd.StepSectionLayoutData.TieTabToLevel) // C2025-036 reduce un-needed processing
{ {
if (sd.StepSectionLayoutData.ShowSectionTitles if (ActiveFormat.PlantFormat.FormatData.SectData.UseMetaSections)
&& !MyDocStyle.CancelSectTitle {
&& !(MyDocStyle.SpecialStepsFoldout && MyDocStyle.UseColSByLevel)) if (sd.StepSectionLayoutData.ShowSectionTitles
localPrintLevel = PrintLevel + (((ActiveFormat.PlantFormat.FormatData.Express && IsSequential)) ? 0 : CurrentSectionLevel()); && !MyDocStyle.CancelSectTitle
if (!ActiveFormat.PlantFormat.FormatData.Express) doMeta = true; && !(MyDocStyle.SpecialStepsFoldout && MyDocStyle.UseColSByLevel))
} localPrintLevel = PrintLevel + (((ActiveFormat.PlantFormat.FormatData.Express && IsSequential)) ? 0 : CurrentSectionLevel());
if (sd.StepSectionLayoutData.TieTabToLevel && ActiveFormat.PlantFormat.FormatData.SectData.CountSubSectionsForLevel) if (!ActiveFormat.PlantFormat.FormatData.Express) doMeta = true;
if (SectionLevel() > 1) }
if (ActiveFormat.PlantFormat.FormatData.SectData.CountSubSectionsForLevel && (SectionLevel() > 1))
localPrintLevel += 1; localPrintLevel += 1;
}
SeqTabFmtList seqtabs = ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.SeqTabFmtList; SeqTabFmtList seqtabs = ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.SeqTabFmtList;
// Start with basic cases of alpha/numeric/seq: // Start with basic cases of alpha/numeric/seq:
// If we have metasections AND... // If we have metasections AND...
// If the seqtabs for this given level does not get a section number, use the seqtab rather than // If the seqtabs for this given level does not get a section number, use the seqtab rather than
// the ident of the step: // the ident of the step:
bool useSubStepTabs = false; bool useSubStepTabs = false;
if (doMeta && IsHigh if (doMeta) // C2025-036 reduce un-needed processing
&& !seqtabs[(localPrintLevel < 0 ? 0 : localPrintLevel) % seqtabs.MaxIndex].TabToken.Contains("{numericWpar}")
&& tbformat.Contains("{")) useSubStepTabs = true;
// Check to be sure the parent tab should be included... If this sequential is within a note
// or caution or equipment list, don't use parent tab AND always start the numbering as a numeric
if (doMeta && IsSequential && (InNote() || InCaution() ||
(MyParent.IsEquipmentList && !MyParent.FormatStepData.TabData.IdentPrint.Contains("{seq}"))))
{ {
// if immediate parent is note, caution or equip, use numeric, otherwise use alpha. if (IsHigh
localPrintLevel = 0; && !seqtabs[(localPrintLevel < 0 ? 0 : localPrintLevel) % seqtabs.MaxIndex].TabToken.Contains("{numericWpar}")
int lv = 0; && tbformat.Contains("{")) useSubStepTabs = true;
ItemInfo ii = MyParent;
while (!ii.IsCaution && !ii.IsNote && !ii.IsEquipmentList) // Check to be sure the parent tab should be included... If this sequential is within a note
// or caution or equipment list, don't use parent tab AND always start the numbering as a numeric
if (IsSequential && (InNote() || InCaution() ||
(MyParent.IsEquipmentList && !MyParent.FormatStepData.TabData.IdentPrint.Contains("{seq}"))))
{ {
lv++; // if immediate parent is note, caution or equip, use numeric, otherwise use alpha.
ii = ii.MyParent; localPrintLevel = 0;
int lv = 0;
ItemInfo ii = MyParent;
while (!ii.IsCaution && !ii.IsNote && !ii.IsEquipmentList)
{
lv++;
ii = ii.MyParent;
}
lv = lv % 2;
tbformat = (lv == 0) ? "{numeric}." : "{alpha}.";
} }
lv = lv % 2;
tbformat = (lv == 0) ? "{numeric}." : "{alpha}.";
} }
bool trimTabStart = false; bool trimTabStart = false;
bool dontTrimParentTabBeforeAppending = false; // B2019-011 for Barakah Alarm format bool dontTrimParentTabBeforeAppending = false; // B2019-011 for Barakah Alarm format
@ -4757,7 +4763,7 @@ namespace VEPROMS.CSLA.Library
PrintLevel = 0; PrintLevel = 0;
// If token includes 'Wpar', the parent tab prefix's the tab. // If token includes 'Wpar', the parent tab prefix's the tab.
if (localPrintLevel > 0 && (tbformat.IndexOf("{numericWpar}") > -1 || tbformat.IndexOf("{alphaWpar}") > -1 || tbformat.IndexOf("{ALPHAWpar}") > -1)) if (localPrintLevel > 0 && tbformat.Contains("Wpar}")) // C2025-036 reduce un-needed processing
{ {
string parentTab = null; string parentTab = null;
ItemInfo myparent = ActiveParent as ItemInfo; ItemInfo myparent = ActiveParent as ItemInfo;
@ -4872,18 +4878,21 @@ namespace VEPROMS.CSLA.Library
} }
string alpha = useLinked?LinkedTab.Trim():AlphabeticalNumbering(ordinal); string alpha = useLinked?LinkedTab.Trim():AlphabeticalNumbering(ordinal);
if (trimSeqValue) alpha = alpha.Trim(); // F2024-043 trim white around SEQ tab value (for sub-steps) if (trimSeqValue) alpha = alpha.Trim(); // F2024-043 trim white around SEQ tab value (for sub-steps)
// B2017-211 Roman High Level steps should be followed by Uppercase alpha substeps - This is being limited to Calvert SAMG Format if (tbformat.ToUpper().Contains("{ALPHA")) // C2025-036 reduce un-needed processing
if (_ActiveFormat.Name =="BGESAM1" &&MyParent != null && MyParent.IsHigh && MyParent.IsStep && MyParent.FormatStepData.TabData.IdentEdit.Contains("ROMAN")) {
tbformat = tbformat.Replace("{alpha}", alpha); // B2017-211 Roman High Level steps should be followed by Uppercase alpha substeps - This is being limited to Calvert SAMG Format
else if (_ActiveFormat.Name == "BGESAM1" && MyParent != null && MyParent.IsHigh && MyParent.IsStep && MyParent.FormatStepData.TabData.IdentEdit.Contains("ROMAN"))
tbformat = tbformat.Replace("{alpha}", alpha.ToLower()); tbformat = tbformat.Replace("{alpha}", alpha);
tbformat = tbformat.Replace("{alphaWpar}", alpha.ToLower()); else
if (ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvert && tbformat.Contains("{ALPHA}") && alpha.Length > 1) tbformat = tbformat.Replace("{alpha}", alpha.ToLower());
tbformat = tbformat.Replace("{ALPHA}. ", alpha + "."); // if double chars, remove one of the space for BGE tbformat = tbformat.Replace("{alphaWpar}", alpha.ToLower());
else if (ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvert && tbformat.Contains("{ALPHA}") && alpha.Length > 1)
tbformat = tbformat.Replace("{ALPHA}", alpha); tbformat = tbformat.Replace("{ALPHA}. ", alpha + "."); // if double chars, remove one of the space for BGE
else
tbformat = tbformat.Replace("{ALPHA}", alpha);
tbformat = tbformat.Replace("{ALPHAWpar}", alpha); tbformat = tbformat.Replace("{ALPHAWpar}", alpha);
}
if (tbformat.ToUpper().Contains("ROMAN")) if (tbformat.ToUpper().Contains("ROMAN"))
{ {
string roman = RomanNumbering(ordinal); string roman = RomanNumbering(ordinal);
@ -4891,15 +4900,18 @@ namespace VEPROMS.CSLA.Library
tbformat = tbformat.Replace("{ROMAN}", roman); tbformat = tbformat.Replace("{ROMAN}", roman);
tbformat = tbformat.Substring(0, tbformat.Length - ((roman.Length - 1) > 0 ? (roman.Length - 1) : 0)); tbformat = tbformat.Substring(0, tbformat.Length - ((roman.Length - 1) > 0 ? (roman.Length - 1) : 0));
} }
if (tbformat.Contains("{numeric}") && ((MyDocStyle.StructureStyle.Style & E_DocStructStyle.DSS_AddDotZeroStdHLS) == E_DocStructStyle.DSS_AddDotZeroStdHLS) && MyContent.Type == 20002) if (tbformat.Contains("{numeric}")) // C2025-036 reduce un-needed processing
{ {
tbformat = tbformat.Replace("{numeric}", ordinal.ToString().PadLeft(2) + ".0"); if (((MyDocStyle.StructureStyle.Style & E_DocStructStyle.DSS_AddDotZeroStdHLS) == E_DocStructStyle.DSS_AddDotZeroStdHLS) && MyContent.Type == 20002)
tbformat = tbformat.Substring(0, tbformat.Length - 2); {
} tbformat = tbformat.Replace("{numeric}", ordinal.ToString().PadLeft(2) + ".0");
if (tbformat.Contains("{numeric}") && (this.FormatStepData.AppendDotZero)) // F2018-022 Added step type flag to append a ".0" to the end of the high level step - put in for Westinghouse single column format (wst1) tbformat = tbformat.Substring(0, tbformat.Length - 2);
{ }
string numtxt = ordinal.ToString().PadLeft(2) + ".0"; if (this.FormatStepData.AppendDotZero) // F2018-022 Added step type flag to append a ".0" to the end of the high level step - put in for Westinghouse single column format (wst1)
tbformat = tbformat.Replace("{numeric}.", numtxt).Replace("{numeric}", numtxt); {
string numtxt = ordinal.ToString().PadLeft(2) + ".0";
tbformat = tbformat.Replace("{numeric}.", numtxt).Replace("{numeric}", numtxt);
}
} }
// if this is a wolf creek background, if the tbformat ends with a '.' don't add a space, // if this is a wolf creek background, if the tbformat ends with a '.' don't add a space,
// otherwise add a space. // otherwise add a space.

View File

@ -758,7 +758,7 @@ namespace Volian.Controls.Library
// clear tabs, clears then all so that next 'get' will calculate new. // clear tabs, clears then all so that next 'get' will calculate new.
public void SetAllTabs() public void SetAllTabs()
{ {
RefreshTab(); RefreshTab();
if (_MyAfterEditItems != null) _MyAfterEditItems[0].SetAllTabs(); // B2020-043: used to loop through all, but then recursion would redo. if (_MyAfterEditItems != null) _MyAfterEditItems[0].SetAllTabs(); // B2020-043: used to loop through all, but then recursion would redo.
if (_MyNextEditItem != null) _MyNextEditItem.SetAllTabs(); if (_MyNextEditItem != null) _MyNextEditItem.SetAllTabs();
@ -3994,7 +3994,8 @@ namespace Volian.Controls.Library
// TODO: Adjust top based upon format // TODO: Adjust top based upon format
// TODO: Remove Label and just output ident on the paint event // TODO: Remove Label and just output ident on the paint event
TabLeft = 20; TabLeft = 20;
SetupHeader(itemInfo); if (!itemInfo.IsStep) // C2025-036 reduce un-needed processing - this will prevent duplicat calls that generate step tabs when loading a procedure
SetupHeader(itemInfo);
SetupAlarmTableView(itemInfo); // C2021-018 display alarm point table information in the step editor (if the format flag is set) SetupAlarmTableView(itemInfo); // C2021-018 display alarm point table information in the step editor (if the format flag is set)
this.Paint += new PaintEventHandler(EditItem_Paint); this.Paint += new PaintEventHandler(EditItem_Paint);
this.BackColorChanged += new EventHandler(EditItem_BackColorChanged); this.BackColorChanged += new EventHandler(EditItem_BackColorChanged);