Merge pull request 'F2024-020' (#254) from F2024-020 into Development

Merging into Development.  No code review needed since formats are under development.
This commit is contained in:
Chris Glavan 2024-02-29 10:43:51 -05:00
commit e0faa6403f
10 changed files with 967 additions and 1079 deletions

Binary file not shown.

Binary file not shown.

View File

@ -18,14 +18,14 @@ namespace VEPROMS
{ {
public bool SaveLinks public bool SaveLinks
{ {
get get
{ {
return swtbtnPDFLinks.Value; return swtbtnPDFLinks.Value;
} }
} }
public int RemoveTrailingHardReturnsAndManualPageBreaks public int RemoveTrailingHardReturnsAndManualPageBreaks
{ {
get get
{ {
// C2021-010: Remove trailing returns/spaces & manual page breaks & allow save. // C2021-010: Remove trailing returns/spaces & manual page breaks & allow save.
// return values: 0=None; 1=Trailing; 2=ManualPgBrk; 3=Both. // return values: 0=None; 1=Trailing; 2=ManualPgBrk; 3=Both.
@ -33,7 +33,7 @@ namespace VEPROMS
if (!cbxRemoveManualPgBrk.Checked && !cbxRemoveTrailing.Checked) return 0; if (!cbxRemoveManualPgBrk.Checked && !cbxRemoveTrailing.Checked) return 0;
if (!cbxRemoveManualPgBrk.Checked && cbxRemoveTrailing.Checked) return 1; if (!cbxRemoveManualPgBrk.Checked && cbxRemoveTrailing.Checked) return 1;
if (cbxRemoveManualPgBrk.Checked && !cbxRemoveTrailing.Checked) return 2; if (cbxRemoveManualPgBrk.Checked && !cbxRemoveTrailing.Checked) return 2;
return 3; return 3;
} }
} }
private string _Prefix = ""; // RHM20150506 Multiline ItemID TextBox private string _Prefix = ""; // RHM20150506 Multiline ItemID TextBox
@ -59,10 +59,8 @@ namespace VEPROMS
get { return _Automatic; } get { return _Automatic; }
set { _Automatic = value; } set { _Automatic = value; }
} }
// C2024-003 parameter contains parent section, child section, issubsection flag. private int _prtSectID = -1;
// C2024-003 values needed to print section. public int PrtSectID
private int[] _prtSectID = new int[] { -1, -1, 0 };
public int[] PrtSectID
{ {
get { return _prtSectID; } get { return _prtSectID; }
set { _prtSectID = value; } set { _prtSectID = value; }
@ -75,8 +73,8 @@ namespace VEPROMS
public bool AllowDateTimePrefixSuffix public bool AllowDateTimePrefixSuffix
{ {
get { return _AllowDateTimePrefixSuffix; } get { return _AllowDateTimePrefixSuffix; }
set set
{ {
_AllowDateTimePrefixSuffix = value; _AllowDateTimePrefixSuffix = value;
swtbtnPDFdtPrefixSuffix.Value = swtbtnPDFdtPrefixSuffix.Enabled = _AllowDateTimePrefixSuffix; swtbtnPDFdtPrefixSuffix.Value = swtbtnPDFdtPrefixSuffix.Enabled = _AllowDateTimePrefixSuffix;
} }
@ -88,7 +86,7 @@ namespace VEPROMS
{ {
cbxDebugPagination.Checked = true; cbxDebugPagination.Checked = true;
cbxDebugText.Checked = true; cbxDebugText.Checked = true;
cbxMetaFile.Checked = true; // C2018-004 create meta file for baseline compares cbxMetaFile.Checked = true; // C2018-004 create meta file for baseline compares
_IncludeWordSecTextInMetafile = true; _IncludeWordSecTextInMetafile = true;
Application.DoEvents(); Application.DoEvents();
string[] parameters = System.Environment.CommandLine.Split(" ".ToCharArray()); string[] parameters = System.Environment.CommandLine.Split(" ".ToCharArray());
@ -103,7 +101,7 @@ namespace VEPROMS
cbxDebug.Checked = false; cbxDebug.Checked = false;
else if (parameter.ToUpper() == "/NM") else if (parameter.ToUpper() == "/NM")
cbxMetaFile.Checked = false; // C2018-004 turn off create meta file for baseline compares cbxMetaFile.Checked = false; // C2018-004 turn off create meta file for baseline compares
else if (parameter.ToUpper() == "/NW") else if (parameter.ToUpper() == "/NW")
_IncludeWordSecTextInMetafile = false; // C2018-023 turn off putting Word attachment text in the meta file for baseline compares _IncludeWordSecTextInMetafile = false; // C2018-023 turn off putting Word attachment text in the meta file for baseline compares
} }
CreatePDFs(); CreatePDFs();
@ -145,11 +143,10 @@ namespace VEPROMS
} }
public string PDFPath public string PDFPath
{ {
get get {// B2018-069 Revert to Temporary for Baseline testing
{// B2018-069 Revert to Temporary for Baseline testing
if (PromsPrinter.BaselineTesting) if (PromsPrinter.BaselineTesting)
return VlnSettings.TemporaryFolder; return VlnSettings.TemporaryFolder;
return txbPDFLocation.Text; return txbPDFLocation.Text;
} }
set { txbPDFLocation.Text = value; } set { txbPDFLocation.Text = value; }
} }
@ -193,7 +190,7 @@ namespace VEPROMS
if (_MyProcedure != null && _MyProcedure.ProcHasSupInfoData) if (_MyProcedure != null && _MyProcedure.ProcHasSupInfoData)
{ {
swtbtnBlankPgsForDuplex.Enabled = false; swtbtnBlankPgsForDuplex.Enabled = false;
tbBlankPage.Enabled = true; // C2019-004: Allow user to define duplex blank page text (similar changes throughout file are not commented) tbBlankPage.Enabled = true; // C2019-004: Allow user to define duplex blank page text (similar changes throughout file are not commented)
} }
btnCreatePDF.Text = "Create PDFs"; btnCreatePDF.Text = "Create PDFs";
HandleDocVersionSettings(); HandleDocVersionSettings();
@ -238,7 +235,7 @@ namespace VEPROMS
gpnlDebug.Visible = Volian.Base.Library.VlnSettings.DebugMode; gpnlDebug.Visible = Volian.Base.Library.VlnSettings.DebugMode;
swtbtnGeneratePlacekeeper.Value = false; swtbtnGeneratePlacekeeper.Value = false;
cbxGenerateConActSum.Checked = false; cbxGenerateConActSum.Checked = false;
swtbtnGeneratePlacekeeper.Visible = lblGeneratePlacekeeper.Visible = oneProcedure && swtbtnGeneratePlacekeeper.Visible = lblGeneratePlacekeeper.Visible = oneProcedure &&
((MyProcedure.ActiveFormat.PlantFormat.FormatData.PurchaseOptions & E_PurchaseOptions.AutoPlacekeeper) == E_PurchaseOptions.AutoPlacekeeper); ((MyProcedure.ActiveFormat.PlantFormat.FormatData.PurchaseOptions & E_PurchaseOptions.AutoPlacekeeper) == E_PurchaseOptions.AutoPlacekeeper);
// C2021-062 make visable the check box to assign rev number for all procedures being printed // C2021-062 make visable the check box to assign rev number for all procedures being printed
// also make visable the Rev Num entry field. // also make visable the Rev Num entry field.
@ -283,7 +280,7 @@ namespace VEPROMS
expPrnSetting.Expanded = swtbtnBlankPgsForDuplex.Value || swtbtnChgBar.Value || swtbtnGeneratePlacekeeper.Value || swtbtnPDFLinks.Value || swtbtnPROMSVersion.Value || swtbtnWaterMark.Value || swtbtnPDFdtPrefixSuffix.Value; expPrnSetting.Expanded = swtbtnBlankPgsForDuplex.Value || swtbtnChgBar.Value || swtbtnGeneratePlacekeeper.Value || swtbtnPDFLinks.Value || swtbtnPROMSVersion.Value || swtbtnWaterMark.Value || swtbtnPDFdtPrefixSuffix.Value;
} }
public DlgPrintProcedure(ProcedureInfo pi, bool automatic) // RHM20150506 Multiline ItemID TextBox public DlgPrintProcedure(ProcedureInfo pi, bool automatic) // RHM20150506 Multiline ItemID TextBox
{ {
InitializeComponent(); InitializeComponent();
Automatic = automatic; Automatic = automatic;
_AllProcedures = false; _AllProcedures = false;
@ -312,7 +309,7 @@ namespace VEPROMS
{ {
base.OnActivated(e); base.OnActivated(e);
if (Owner != null) if (Owner != null)
Location = new Point(Owner.Left + Owner.Width / 2 - Width / 2, Owner.Top + Owner.Height / 2 - Height / 2); Location = new Point(Owner.Left + Owner.Width / 2 - Width / 2, Owner.Top + Owner.Height/2 - Height/2);
} }
private void HandleDocVersionSettings() private void HandleDocVersionSettings()
{ {
@ -326,10 +323,10 @@ namespace VEPROMS
// if the default setting is 'SelectBeforePrinting', expand the Additional Print Settings panel // if the default setting is 'SelectBeforePrinting', expand the Additional Print Settings panel
if (_DocVersionConfig.Print_ChangeBar == PrintChangeBar.SelectBeforePrinting) if (_DocVersionConfig.Print_ChangeBar == PrintChangeBar.SelectBeforePrinting)
{ {
swtbtnChgBar.Value = false; swtbtnChgBar.Value = false;
cbxOvrrideDefChgBars.Checked = false; cbxOvrrideDefChgBars.Checked = false;
expPrnSetting.Expanded = true; expPrnSetting.Expanded = true;
} }
} }
private void GetDocVersionSettings() private void GetDocVersionSettings()
@ -344,14 +341,14 @@ namespace VEPROMS
cbxOpenAfterCreate2.Checked = _DocVersionConfig.Print_AlwaysViewPDFAfterCreate; cbxOpenAfterCreate2.Checked = _DocVersionConfig.Print_AlwaysViewPDFAfterCreate;
// Changebars on/off // Changebars on/off
if (_DocVersionConfig.Print_ChangeBar == PrintChangeBar.Without) if (_DocVersionConfig.Print_ChangeBar == PrintChangeBar.Without)
swtbtnChgBar.Value = false; swtbtnChgBar.Value = false;
else else
swtbtnChgBar.Value = true; swtbtnChgBar.Value = true;
// Watermark on/off // Watermark on/off
if (_DocVersionConfig.Print_Watermark == PrintWatermark.None) if (_DocVersionConfig.Print_Watermark == PrintWatermark.None)
swtbtnWaterMark.Value = false; swtbtnWaterMark.Value = false;
else else
swtbtnWaterMark.Value = true; swtbtnWaterMark.Value = true;
// Auto Duplexing on/off - Auto duplex was used only by Point Beach formats These buttons were removed from the dialog // Auto Duplexing on/off - Auto duplex was used only by Point Beach formats These buttons were removed from the dialog
// There was not print coding to support this format flag // There was not print coding to support this format flag
@ -376,7 +373,7 @@ namespace VEPROMS
// default to using OriginalPageBreaks (16bit page breaks) if App.config is set // default to using OriginalPageBreaks (16bit page breaks) if App.config is set
// to true: // to true:
//cbxOrPgBrk.Visible = VlnSettings.OriginalPageBreak && VlnSettings.DebugMode; //cbxOrPgBrk.Visible = VlnSettings.OriginalPageBreak && VlnSettings.DebugMode;
cbxOrPgBrk.Visible = false; //per Harry cbxOrPgBrk.Visible = false; //per Harry
cbxOrPgBrk.Checked = false; cbxOrPgBrk.Checked = false;
} }
@ -413,7 +410,7 @@ namespace VEPROMS
private Timer _MyTimer; private Timer _MyTimer;
public void SetupForProcedure() // RHM20150506 Multiline ItemID TextBox public void SetupForProcedure() // RHM20150506 Multiline ItemID TextBox
{ {
if (_DocVersionInfo == null) this.Text = "Create PDF for " + ProcNum; if(_DocVersionInfo == null)this.Text = "Create PDF for " + ProcNum;
// get list of previous pdf files // get list of previous pdf files
// if no previous pdf file, then get path from frmVersionProperties // if no previous pdf file, then get path from frmVersionProperties
// dlgSelectFile.InitialDirectory = pdf path from frmVersionProperties // dlgSelectFile.InitialDirectory = pdf path from frmVersionProperties
@ -422,20 +419,20 @@ namespace VEPROMS
//txbPDFLocation.Text = _PDFPath; //txbPDFLocation.Text = _PDFPath;
BuildPDFFileName(); BuildPDFFileName();
ProcedureConfig pc = _MyProcedure.MyConfig as ProcedureConfig; ProcedureConfig pc = _MyProcedure.MyConfig as ProcedureConfig;
if (SelectedSlave > 0) pc.SelectedSlave = SelectedSlave; if(SelectedSlave > 0) pc.SelectedSlave = SelectedSlave;
if (pc != null) if (pc != null)
{ {
//C2021-062 use the save rev number for all procedures if set, or just use the rev number in the current procedure config //C2021-062 use the save rev number for all procedures if set, or just use the rev number in the current procedure config
RevNum = (_NewRevForAllProcs == null) ? pc.Print_Rev : _NewRevForAllProcs; RevNum = (_NewRevForAllProcs == null) ? pc.Print_Rev : _NewRevForAllProcs;
RevDate = pc.Print_RevDate; //== null || pc.Print_RevDate=="" ? DateTime.Today : Convert.ToDateTime(pc.Print_RevDate); RevDate = pc.Print_RevDate; //== null || pc.Print_RevDate=="" ? DateTime.Today : Convert.ToDateTime(pc.Print_RevDate);
ReviewDate = pc.Print_ReviewDate; // == null ? DateTime.Today : Convert.ToDateTime(pc.Print_ReviewDate); ReviewDate = pc.Print_ReviewDate; // == null ? DateTime.Today : Convert.ToDateTime(pc.Print_ReviewDate);
//Now check the format flags to determine if/how the Rev string should be parsed. //Now check the format flags to determine if/how the Rev string should be parsed.
// This will covert the old way (16-bit) of setting a RevDate (appending it to the RevNumber) // This will covert the old way (16-bit) of setting a RevDate (appending it to the RevNumber)
// to the new way saving the RevNumber and RevDate in there own config fields // to the new way saving the RevNumber and RevDate in there own config fields
if ((_MyProcedure.ActiveFormat.PlantFormat.FormatData.PrintData.DoRevDate && RevNum.Contains("/")) if ((_MyProcedure.ActiveFormat.PlantFormat.FormatData.PrintData.DoRevDate && RevNum.Contains("/"))
|| (_MyProcedure.ActiveFormat.PlantFormat.FormatData.PrintData.RevDateWithForwardSlash && RevNum.Contains("\\"))) || (_MyProcedure.ActiveFormat.PlantFormat.FormatData.PrintData.RevDateWithForwardSlash && RevNum.Contains("\\")))
{ {
int indx = RevNum.IndexOf(_MyProcedure.ActiveFormat.PlantFormat.FormatData.PrintData.RevDateWithForwardSlash ? '\\' : '/'); int indx = RevNum.IndexOf(_MyProcedure.ActiveFormat.PlantFormat.FormatData.PrintData.RevDateWithForwardSlash ? '\\' : '/');
pc.Print_RevDate = RevDate = RevNum.Substring(indx + 1); pc.Print_RevDate = RevDate = RevNum.Substring(indx + 1);
pc.Print_Rev = RevNum = RevNum.Substring(0, indx); pc.Print_Rev = RevNum = RevNum.Substring(0, indx);
// save the RevNumber and RevDate to the procedure's config. // save the RevNumber and RevDate to the procedure's config.
@ -533,8 +530,8 @@ namespace VEPROMS
if (dtPre != PDFDTPrefix.None) PDFFilePrefix = ""; // incase user entered prefix text but then selected a date/time (in working draft properties) if (dtPre != PDFDTPrefix.None) PDFFilePrefix = ""; // incase user entered prefix text but then selected a date/time (in working draft properties)
if (dtSuf != PDFDTSuffix.None) PDFFileSuffix = ""; // incase user entered suffix text but then selected a date/time (in working draft properties) if (dtSuf != PDFDTSuffix.None) PDFFileSuffix = ""; // incase user entered suffix text but then selected a date/time (in working draft properties)
// B2020-062 control the toggle of date/time prefix/suffix on pdf file name // B2020-062 control the toggle of date/time prefix/suffix on pdf file name
// disable the date/time Prefix/Suffix switch if no date/time was selected // disable the date/time Prefix/Suffix switch if no date/time was selected
// This switch is does not affect the use of it if the user typed in text for prefix/suffix // This switch is does not affect the use of it if the user typed in text for prefix/suffix
if (!AllowDateTimePrefixSuffix || (dtPre == PDFDTPrefix.None && dtSuf == PDFDTSuffix.None)) if (!AllowDateTimePrefixSuffix || (dtPre == PDFDTPrefix.None && dtSuf == PDFDTSuffix.None))
{ {
swtbtnPDFdtPrefixSuffix.Value = false; swtbtnPDFdtPrefixSuffix.Value = false;
@ -610,7 +607,7 @@ namespace VEPROMS
private void swtbtnWaterMark_ValueChanged(object sender, EventArgs e) private void swtbtnWaterMark_ValueChanged(object sender, EventArgs e)
{ {
if (!swtbtnWaterMark.Value) // C2021-019: make both invisible if (!swtbtnWaterMark.Value) // C2021-019: make both invisible
{ {
cbxWaterMark.Visible = swtbtnWaterMark.Value; cbxWaterMark.Visible = swtbtnWaterMark.Value;
lblWaterMarkOvrd.Visible = swtbtnWaterMark.Value; lblWaterMarkOvrd.Visible = swtbtnWaterMark.Value;
@ -637,7 +634,7 @@ namespace VEPROMS
if (!Directory.Exists(PDFPath)) if (!Directory.Exists(PDFPath))
{ {
string msg = string.Format("'{0}' does not exist. \n\nCreate it?", PDFPath); string msg = string.Format("'{0}' does not exist. \n\nCreate it?", PDFPath);
DialogResult dr = MessageBox.Show(msg, "Folder Not Found", MessageBoxButtons.YesNo, MessageBoxIcon.Question); DialogResult dr= MessageBox.Show(msg, "Folder Not Found", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dr == DialogResult.Yes) if (dr == DialogResult.Yes)
{ {
try try
@ -671,7 +668,7 @@ namespace VEPROMS
public ProcedureInfo MyProcedure public ProcedureInfo MyProcedure
{ {
get { return _MyProcedure; } get { return _MyProcedure; }
set set
{ {
_MyProcedure = value; _MyProcedure = value;
// if procedure has supplemental information, the automatially check the add blank pages for duplex printing // if procedure has supplemental information, the automatially check the add blank pages for duplex printing
@ -733,11 +730,11 @@ namespace VEPROMS
int i = 0; int i = 0;
pbPDFsStatus.Maximum = n; pbPDFsStatus.Maximum = n;
pbPDFsStatus.Visible = true; pbPDFsStatus.Visible = true;
VlnSvgPageHelper.CountInApplProcs = 1; // B2021-127: BNPPalr - Auto set of serial #, skip Front Matter as per PAL 11/1/21 (set to 1 not 0) VlnSvgPageHelper.CountInApplProcs = 1; // B2021-127: BNPPalr - Auto set of serial #, skip Front Matter as per PAL 11/1/21 (set to 1 not 0)
this.Text = string.Format("Processing {0}", _DocVersionInfo.MyFolder.Name); this.Text = string.Format("Processing {0}", _DocVersionInfo.MyFolder.Name);
foreach (ProcedureInfo myProc in _DocVersionInfo.Procedures) foreach (ProcedureInfo myProc in _DocVersionInfo.Procedures)
{ {
string locpdfname = null; // get pdf file name for later merge code string locpdfname = null; // get pdf file name for later merge code
MyProcedure = myProc; MyProcedure = myProc;
// C2021-019: Override Watermark Text, 'waterMarkText' will have whatever watermark text should be printed // C2021-019: Override Watermark Text, 'waterMarkText' will have whatever watermark text should be printed
ProcedureConfig procConfig = MyProcedure.MyConfig as ProcedureConfig; ProcedureConfig procConfig = MyProcedure.MyConfig as ProcedureConfig;
@ -774,7 +771,7 @@ namespace VEPROMS
string myPDFPath = GetMultiunitPDFPath(); string myPDFPath = GetMultiunitPDFPath();
_MergedPdfPath = myPDFPath; // If Slave, need its subdirectory/unit path for merging _MergedPdfPath = myPDFPath; // If Slave, need its subdirectory/unit path for merging
// RHM 20120925 Overlay the bottom of the dialog so that cancel button is covered. // RHM 20120925 Overlay the bottom of the dialog so that cancel button is covered.
// B2021-102 put in the using for better memory management // B2021-102 put in the using for better memory management
using (frmPDFStatusForm frmStatus = new frmPDFStatusForm(MyProcedure, RevNumAndDate, waterMarkText, cbxDebug.Checked, cbxOrPgBrk.Checked, using (frmPDFStatusForm frmStatus = new frmPDFStatusForm(MyProcedure, RevNumAndDate, waterMarkText, cbxDebug.Checked, cbxOrPgBrk.Checked,
cbxOpenAfterCreate2.Checked, cbxOverwritePDF2.Checked, myPDFPath, cbd, txbPDFName.Text, new Point(Left, Bottom - 50), cbxOpenAfterCreate2.Checked, cbxOverwritePDF2.Checked, myPDFPath, cbd, txbPDFName.Text, new Point(Left, Bottom - 50),
@ -874,7 +871,7 @@ namespace VEPROMS
} }
} }
pbPDFsStatus.Visible = false; pbPDFsStatus.Visible = false;
if (!Automatic) if(!Automatic)
ShowDebugFiles(); ShowDebugFiles();
ProfileTimer.Pop(profileDepth); ProfileTimer.Pop(profileDepth);
ProfileTimer.ShowTimerTable(); ProfileTimer.ShowTimerTable();
@ -946,7 +943,7 @@ namespace VEPROMS
if (cbxDebugText.Checked) if (cbxDebugText.Checked)
Volian.Base.Library.DebugText.Show(); Volian.Base.Library.DebugText.Show();
if (cbxMetaFile.Checked)// C2018-004 create meta file for baseline compares if (cbxMetaFile.Checked)// C2018-004 create meta file for baseline compares
Volian.Base.Library.BaselineMetaFile.Show(); // baseline Volian.Base.Library.BaselineMetaFile.Show(); // baseline
} }
public void CreatePDF() // RHM20150506 Multiline ItemID TextBox public void CreatePDF() // RHM20150506 Multiline ItemID TextBox
{ {
@ -962,8 +959,8 @@ namespace VEPROMS
} }
MyProcedure.SelectedChildToPrint = SelectedSlave; // B2023-035 for BNPP Alarms save the number of the child selected to print MyProcedure.SelectedChildToPrint = SelectedSlave; // B2023-035 for BNPP Alarms save the number of the child selected to print
// B2021-127: BNPPalr - Auto set of serial #, skip Front Matter as per PAL 11/1/21 (set to 1 not 0) // B2021-127: BNPPalr - Auto set of serial #, skip Front Matter as per PAL 11/1/21 (set to 1 not 0)
// Only do if set has applicability, printing an individual procedure, need to determine // Only do if set has applicability, printing an individual procedure, need to determine
// applicability count. // applicability count.
if (MyProcedure.MyDocVersion.MultiUnitCount > 1) if (MyProcedure.MyDocVersion.MultiUnitCount > 1)
{ {
VlnSvgPageHelper.CountInApplProcs = 1; VlnSvgPageHelper.CountInApplProcs = 1;
@ -980,12 +977,12 @@ namespace VEPROMS
Volian.Print.Library.Rtf2Pdf.PdfDebug = cbxDebug.Checked; Volian.Print.Library.Rtf2Pdf.PdfDebug = cbxDebug.Checked;
// B2019-044 don't print the watermark if the watermark switch on the print dialog is turned off // B2019-044 don't print the watermark if the watermark switch on the print dialog is turned off
cbxWaterMark.Visible = true; cbxWaterMark.Visible = true;
string waterMarkText = (swtbtnWaterMark.Value) ? cbxWaterMark.Text : "None"; // B2018-124 use text of watermark form drop down list instead of enum value string waterMarkText = (swtbtnWaterMark.Value) ? cbxWaterMark.Text : "None" ; // B2018-124 use text of watermark form drop down list instead of enum value
string watermarkColor = "Blue"; // this is the default watermark color string watermarkColor = "Blue"; // this is the default watermark color
frmPDFStatusForm.SetUnitWatermark(MyProcedure, ref waterMarkText, ref watermarkColor); //C2022-004 Unit Designator Watermark frmPDFStatusForm.SetUnitWatermark(MyProcedure, ref waterMarkText, ref watermarkColor); //C2022-004 Unit Designator Watermark
ProcedureConfig procConfig = MyProcedure.MyConfig as ProcedureConfig; ProcedureConfig procConfig = MyProcedure.MyConfig as ProcedureConfig;
string waterMarkTextOverride = ""; string waterMarkTextOverride = "";
if (procConfig != null) waterMarkTextOverride = procConfig.GetValue("PSI", "WATERMARKOVERRIDE"); // C2021-019: override watermark text if (procConfig != null) waterMarkTextOverride = procConfig.GetValue("PSI", "WATERMARKOVERRIDE"); // C2021-019: override watermark text
if (swtbtnWaterMark.Value && waterMarkTextOverride != null && waterMarkTextOverride != "") waterMarkText = waterMarkTextOverride; if (swtbtnWaterMark.Value && waterMarkTextOverride != null && waterMarkTextOverride != "") waterMarkText = waterMarkTextOverride;
// Determine change bar settings. First get from config & then see if override from dialog. // Determine change bar settings. First get from config & then see if override from dialog.
// Also check that format allows override. // Also check that format allows override.
@ -1202,7 +1199,7 @@ namespace VEPROMS
grpDateSelector.Text = "Select Revision Date"; grpDateSelector.Text = "Select Revision Date";
grpDateSelector.Visible = calDateSelector.Visible = true; grpDateSelector.Visible = calDateSelector.Visible = true;
//C2021-007 position the calendar to the current RevDate or if no RevDate, position to today's date //C2021-007 position the calendar to the current RevDate or if no RevDate, position to today's date
DateTime initSelDate = (txbDate.Text != null && txbDate.Text.Length != 0) ? Convert.ToDateTime(txbDate.Text) : DateTime.Today; DateTime initSelDate =(txbDate.Text != null && txbDate.Text.Length != 0)? Convert.ToDateTime(txbDate.Text) : DateTime.Today;
calDateSelector.DisplayMonth = calDateSelector.SelectedDate = initSelDate; calDateSelector.DisplayMonth = calDateSelector.SelectedDate = initSelDate;
} }
@ -1301,11 +1298,11 @@ namespace VEPROMS
} }
private void expPrnSetting_ExpandedChanging(object sender, DevComponents.DotNetBar.ExpandedChangeEventArgs e) private void expPrnSetting_ExpandedChanging(object sender, DevComponents.DotNetBar.ExpandedChangeEventArgs e)
{ {
if (expPrnSetting.Expanded) if (expPrnSetting.Expanded)
//this.Size = new Size(this.Size.Width+(expPrnSetting.Size.Width-expPrnSetting.TitlePanel.Size.Height), this.Size.Height); //this.Size = new Size(this.Size.Width+(expPrnSetting.Size.Width-expPrnSetting.TitlePanel.Size.Height), this.Size.Height);
//else //else
this.Size = new Size(this.Size.Width - (expPrnSetting.Size.Width - expPrnSetting.TitlePanel.Size.Height), this.Size.Height); this.Size = new Size(this.Size.Width-(expPrnSetting.Size.Width-expPrnSetting.TitlePanel.Size.Height), this.Size.Height);
//Refresh(); //Refresh();
} }
@ -1337,12 +1334,12 @@ namespace VEPROMS
{ {
DateTime dtStart = DateTime.Now; DateTime dtStart = DateTime.Now;
_MergedPfd = new MergedPdf(PDFPath, _DocVersionInfo); _MergedPfd = new MergedPdf(PDFPath, _DocVersionInfo);
PromsPrinter.MergedLandscapePages = null; // B2019-152: MergedLandscapePages has data set when creating separate pdfs (DoCreatePDF) PromsPrinter.MergedLandscapePages = null; // B2019-152: MergedLandscapePages has data set when creating separate pdfs (DoCreatePDF)
DoCreatePDF(); // create indivitual pdfs DoCreatePDF(); // create indivitual pdfs
if (_MergedPdfPath != null && _MergedPdfPath != PDFPath) PDFPath = _MergedPfd.Folder = _MergedPdfPath; if (_MergedPdfPath != null && _MergedPdfPath != PDFPath) PDFPath = _MergedPfd.Folder = _MergedPdfPath;
// C2021-063 pass in whether to generate Alarm Point List text when a merge is done // C2021-063 pass in whether to generate Alarm Point List text when a merge is done
if (!_MergedPfd.DoTheMerge(PromsPrinter.MergedLandscapePages, cbxAlmPtTxt.Checked)) return; // merge them together. if (!_MergedPfd.DoTheMerge(PromsPrinter.MergedLandscapePages,cbxAlmPtTxt.Checked)) return; // merge them together.
// if the property to show the file after printing is set (on the version dialog), display it. Otherwise do a dialog to let user know it's done // if the property to show the file after printing is set (on the version dialog), display it. Otherwise do a dialog to let user know it's done
if (_DocVersionConfig.Print_MergedPdfsViewAfter) if (_DocVersionConfig.Print_MergedPdfsViewAfter)
{ {
if (_MergedPfd.MergedPdfs != null && _MergedPfd.MergedPdfs.Count > 0) if (_MergedPfd.MergedPdfs != null && _MergedPfd.MergedPdfs.Count > 0)

View File

@ -91,15 +91,13 @@ namespace VEPROMS
get { return _DidAll; } get { return _DidAll; }
set { _DidAll = value; } set { _DidAll = value; }
} }
// C2024-003 parameter contains parent section itemid, child section itemid, issubsection flag. private int _prtSectID = -1;
// C2024-003 values needed to print section. public int PrtSectID
private int[] _prtSectID = new int[] { -1, -1, 0 };
public int[] PrtSectID
{ {
get { return _prtSectID; } get { return _prtSectID; }
set { _prtSectID = value; } set { _prtSectID = value; }
} }
public frmPDFStatusForm(ItemInfo myItem, string rev, string watermark, bool debugOutput, bool origPgBrk, bool openPDF, bool overWrite, string pdfPath, ChangeBarDefinition cbd, string pdfFile, Point newLocation, bool insertBlankPages, bool allOrAuto, string prefix, bool saveLinks, int removeTrailingHardReturnsAndManualPageBreaks, bool showPROMSVer, bool didAll, string blankPageText, MergedPdf mergedPdf, string watermarkColor, int[] PrtSectID = null) public frmPDFStatusForm(ItemInfo myItem, string rev, string watermark, bool debugOutput, bool origPgBrk, bool openPDF, bool overWrite, string pdfPath, ChangeBarDefinition cbd, string pdfFile, Point newLocation, bool insertBlankPages, bool allOrAuto, string prefix, bool saveLinks, int removeTrailingHardReturnsAndManualPageBreaks, bool showPROMSVer, bool didAll, string blankPageText, MergedPdf mergedPdf, string watermarkColor, int PrtSectID = -1)
{ {
// B2021-088 moved this if/else from CreatePDF() so that the Approval logic will have access to this logic // B2021-088 moved this if/else from CreatePDF() so that the Approval logic will have access to this logic
ProcedureInfo MyProcedure = myItem as ProcedureInfo; ProcedureInfo MyProcedure = myItem as ProcedureInfo;
@ -109,7 +107,7 @@ namespace VEPROMS
if (MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave > 0 || MyProcedure.ActiveFormat.PlantFormat.FormatData.TransData.UseTransitionModifier || MyProcedure.ActiveFormat.PlantFormat.FormatData.TransData.UseSpecificTransitionModifier) if (MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave > 0 || MyProcedure.ActiveFormat.PlantFormat.FormatData.TransData.UseTransitionModifier || MyProcedure.ActiveFormat.PlantFormat.FormatData.TransData.UseSpecificTransitionModifier)
{ {
// B2023-035 Pass in the select child (selectedSlave) which may be different than docversionconfig's SelectedSlave // B2023-035 Pass in the select child (selectedSlave) which may be different than docversionconfig's SelectedSlave
MyProcedure = ProcedureInfo.GetItemAndChildrenByUnit(MyProcedure.ItemID, 0, MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave, allOrAuto, MyProcedure.SelectedChildToPrint); MyProcedure = ProcedureInfo.GetItemAndChildrenByUnit(MyProcedure.ItemID, 0, MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave, allOrAuto, MyProcedure.SelectedChildToPrint);
} }
else else
MyProcedure = ProcedureInfo.GetItemAndChildren(MyProcedure.ItemID, allOrAuto); MyProcedure = ProcedureInfo.GetItemAndChildren(MyProcedure.ItemID, allOrAuto);
@ -131,11 +129,11 @@ namespace VEPROMS
// if the version number of PROMS is 1.0, then we are running a Demo version. // if the version number of PROMS is 1.0, then we are running a Demo version.
// When running a Demo version, force a "Sample" watermark when printing. // When running a Demo version, force a "Sample" watermark when printing.
// B2020-022 append a ".pdf" extension if the file name does on have one. // B2020-022 append a ".pdf" extension if the file name does on have one.
MyPromsPrinter = new PromsPrinter(myItem, rev, (VlnSettings.ReleaseMode.Equals("DEMO")) ? "Sample" : watermark, debugOutput, origPgBrk, pdfPath + @"\Compare", false, overWrite, cbd, (pdfFile.ToUpper().EndsWith(".PDF")) ? pdfFile : pdfFile + ".pdf", insertBlankPages, allOrAuto, Prefix, saveLinks, removeTrailingHardReturnsAndManualPageBreaks, blankPageText, DidAll, mergedPdf, watermarkColor); MyPromsPrinter = new PromsPrinter(myItem, rev, (VlnSettings.ReleaseMode.Equals("DEMO")) ? "Sample" : watermark, debugOutput, origPgBrk, pdfPath + @"\Compare", false, overWrite, cbd, (pdfFile.ToUpper().EndsWith(".PDF"))?pdfFile:pdfFile+".pdf", insertBlankPages, allOrAuto,Prefix,saveLinks,removeTrailingHardReturnsAndManualPageBreaks, blankPageText, DidAll, mergedPdf, watermarkColor);
MyPromsPrinter.PromsVersion = (showPROMSVer) ? AboutVEPROMS.PROMSVersion : ""; //C2018-009 print PROMS version MyPromsPrinter.PromsVersion = (showPROMSVer) ? AboutVEPROMS.PROMSVersion : ""; //C2018-009 print PROMS version
PDFPath = pdfPath; PDFPath = pdfPath;
this.Text = "Creating PDF of " + myItem.DisplayNumber; this.Text = "Creating PDF of " + myItem.DisplayNumber;
_NewLocation = newLocation; _NewLocation = newLocation;
@ -298,8 +296,8 @@ namespace VEPROMS
} }
while (!MyPromsPrinter.MergeNotIncluded && _PdfFile == null && MessageBox.Show("Try Again?", "PDF Creation Failed", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes); while (!MyPromsPrinter.MergeNotIncluded && _PdfFile == null && MessageBox.Show("Try Again?", "PDF Creation Failed", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes);
if (_PdfFile == null) if (_PdfFile == null)
{ {
this.Close(); this.Close();
@ -320,7 +318,7 @@ namespace VEPROMS
DateTime tEnd = DateTime.Now; DateTime tEnd = DateTime.Now;
MyStatus = _PdfFile + " created."; MyStatus = _PdfFile + " created.";
MyStatus = string.Format("{0} created in {1:0.} milliseconds", _PdfFile, (TimeSpan.FromTicks(tEnd.Ticks - tStart.Ticks).TotalMilliseconds)); MyStatus = string.Format("{0} created in {1:0.} milliseconds", _PdfFile, (TimeSpan.FromTicks(tEnd.Ticks - tStart.Ticks).TotalMilliseconds));
if (OpenPDF) if (OpenPDF)
{ {
OpenPDFandPlacekeeper(_PdfFile); OpenPDFandPlacekeeper(_PdfFile);
@ -334,8 +332,8 @@ namespace VEPROMS
if (UserInfo.CanEdit(frmVEPROMS.SMyUserInfo, MyPromsPrinter.MyItem.MyDocVersion)) if (UserInfo.CanEdit(frmVEPROMS.SMyUserInfo, MyPromsPrinter.MyItem.MyDocVersion))
{ {
// C2023-018: Clarify message on temporary/permanent removal of returns/spaces & page breaks // C2023-018: Clarify message on temporary/permanent removal of returns/spaces & page breaks
if (FlexibleMessageBox.Show(this, "The procedure PDF file was created by temporarily removing certain hard returns,\r\ntrailing spaces, and/or manual page breaks that could affect the pagination\r\n" + if (FlexibleMessageBox.Show(this, "The procedure PDF file was created by temporarily removing certain hard returns,\r\ntrailing spaces, and/or manual page breaks that could affect the pagination\r\n"+
"of the procedure.\r\n\r\nAfter reviewing the PDF file, do you want to permanently remove the deleted hard returns, \r\nspaces and/or manual page breaks?\r\n\r\n" + "of the procedure.\r\n\r\nAfter reviewing the PDF file, do you want to permanently remove the deleted hard returns, \r\nspaces and/or manual page breaks?\r\n\r\n"+
"An annotation will be added to every location where data has been deleted. The locations \r\ncan be found by performing a Global Search for the \"Manual Pagination Issues\" annotation type.", "An annotation will be added to every location where data has been deleted. The locations \r\ncan be found by performing a Global Search for the \"Manual Pagination Issues\" annotation type.",
"Confirm Pagination Changes", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) "Confirm Pagination Changes", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{ {
@ -347,7 +345,7 @@ namespace VEPROMS
} }
btnOpenFolder.Visible = btnOpenPDF.Visible = true; btnOpenFolder.Visible = btnOpenPDF.Visible = true;
if (CloseWhenDone) if (CloseWhenDone)
{ {
OpenPDFandPlacekeeper(null); OpenPDFandPlacekeeper(null);
@ -424,7 +422,7 @@ namespace VEPROMS
} }
catch (Exception ex) catch (Exception ex)
{ {
string str = string.Format("{0} - {1} - {2}", pdffile, ex.GetType().Name, ex.Message); string str = string.Format("{0} - {1} - {2}",pdffile,ex.GetType().Name,ex.Message);
MessageBox.Show(str, "Error Opening PDFFile", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); MessageBox.Show(str, "Error Opening PDFFile", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
} }
} }

View File

@ -116,7 +116,7 @@ namespace VEPROMS
//added by jcb 20130718 to support create pdf button when multi-unit and user selects a unit //added by jcb 20130718 to support create pdf button when multi-unit and user selects a unit
pi.MyDocVersion.DocVersionConfig.SelectedSlave = pi.ProcedureConfig.SelectedSlave; pi.MyDocVersion.DocVersionConfig.SelectedSlave = pi.ProcedureConfig.SelectedSlave;
DlgPrintProcedure prnDlg = new DlgPrintProcedure(pi); DlgPrintProcedure prnDlg = new DlgPrintProcedure(pi);
//added by jcb 20130718 to support create pdf button when multi-unit and user selects a unit //added by jcb 20130718 to support create pdf button when multi-unit and user selects a unit
@ -356,12 +356,12 @@ namespace VEPROMS
cmbFont.SelectedIndex = -1; cmbFont.SelectedIndex = -1;
string[] parameters = System.Environment.CommandLine.Split(" ".ToCharArray()); string[] parameters = System.Environment.CommandLine.Split(" ".ToCharArray());
string db = Volian.Base.Library.VlnSettings.GetDB(); string db = Volian.Base.Library.VlnSettings.GetDB();
if (db != null) if (db != null)
Database.SelectedDatabase = db; Database.SelectedDatabase = db;
//B2018-129 Most Recently Used list was being cleared. Needed to remove a (string) type case in the IF statement //B2018-129 Most Recently Used list was being cleared. Needed to remove a (string) type case in the IF statement
if (!string.IsNullOrEmpty((string)Properties.Settings.Default["DefaultDB"])) if (!string.IsNullOrEmpty((string)Properties.Settings.Default["DefaultDB"]))
Database.LastDatabase = Properties.Settings.Default.DefaultDB; Database.LastDatabase = Properties.Settings.Default.DefaultDB;
// Setup the Context menu for DisplaySearch including the symbols // Setup the Context menu for DisplaySearch including the symbols
@ -400,7 +400,7 @@ namespace VEPROMS
// B2019-107 Error Log message for inconsistent PromsFixes // B2019-107 Error Log message for inconsistent PromsFixes
_MyLog.InfoFormat("\r\nSession Beginning\r\n<===={0}[SQL:{1:yyMM.ddHH}]====== User: {2}/{3} Started {4} ===============>{5}" _MyLog.InfoFormat("\r\nSession Beginning\r\n<===={0}[SQL:{1:yyMM.ddHH}]====== User: {2}/{3} Started {4} ===============>{5}"
, Application.ProductVersion, Database.RevDate, Environment.UserDomainName, Environment.UserName, DateTime.Now.ToString("dddd MMMM d, yyyy h:mm:ss tt"), FormatInfo.Failed ?? ""); , Application.ProductVersion, Database.RevDate, Environment.UserDomainName, Environment.UserName, DateTime.Now.ToString("dddd MMMM d, yyyy h:mm:ss tt"), FormatInfo.Failed ?? "");
// C2022-030 Notify the user if the stored procedure in the database are not update to date // C2022-030 Notify the user if the stored procedure in the database are not update to date
// with those in the PROMSFixes.sql delivered with the PROMS executable // with those in the PROMSFixes.sql delivered with the PROMS executable
string pfVersion = ExeInfo.GetAssocicatedPROMSFixesVersion(); string pfVersion = ExeInfo.GetAssocicatedPROMSFixesVersion();
@ -418,8 +418,8 @@ namespace VEPROMS
sbMsg.Append("\n\nPlease have your DBA update the database with the PROMSFixes.sql script file that was\ndelivered with this PROMS executable."); sbMsg.Append("\n\nPlease have your DBA update the database with the PROMSFixes.sql script file that was\ndelivered with this PROMS executable.");
sbMsg.Append("\n\nThe PROMSFixes.sql file is included with the PROMS installation download."); sbMsg.Append("\n\nThe PROMSFixes.sql file is included with the PROMS installation download.");
sbMsg.Append("\n\nIt can also be found in your PROMS executable folder:"); sbMsg.Append("\n\nIt can also be found in your PROMS executable folder:");
sbMsg.AppendFormat("\n\t{0}", ExeInfo.PROMSExecutableFolderPath()); sbMsg.AppendFormat("\n\t{0}",ExeInfo.PROMSExecutableFolderPath());
FlexibleMessageBox.Show(sbMsg.ToString(), "SQL Stored Procedures Version Difference"); FlexibleMessageBox.Show(sbMsg.ToString(),"SQL Stored Procedures Version Difference");
} }
foreach (string parameter in parameters) foreach (string parameter in parameters)
@ -527,7 +527,7 @@ namespace VEPROMS
tv.ViewPDF += new vlnTreeViewPdfEvent(tv_ViewPDF); tv.ViewPDF += new vlnTreeViewPdfEvent(tv_ViewPDF);
displayApplicability.ApplicabilityViewModeChanged += new DisplayApplicability.DisplayApplicabilityEvent(displayApplicability_ApplicabilityViewModeChanged); displayApplicability.ApplicabilityViewModeChanged += new DisplayApplicability.DisplayApplicabilityEvent(displayApplicability_ApplicabilityViewModeChanged);
tv.ExportImportProcedureSets += new vlnTreeViewEvent(tv_ExportImportProcedureSets); tv.ExportImportProcedureSets += new vlnTreeViewEvent(tv_ExportImportProcedureSets);
tv.PrintTransitionReport += new vlnTreeViewEvent(tv_PrintTransitionReport); tv.PrintTransitionReport += new vlnTreeViewEvent(tv_PrintTransitionReport);
tv.ProcessingComplete += tv_ProcessingComplete; tv.ProcessingComplete += tv_ProcessingComplete;
@ -690,7 +690,7 @@ namespace VEPROMS
else else
{ {
int ownerid = MySessionInfo.CheckOutItem(fi.FolderID, CheckOutType.Session); int ownerid = MySessionInfo.CheckOutItem(fi.FolderID, CheckOutType.Session);
dlgExportImport dlg = new dlgExportImport(args.Index == 0 ? "Export" : "Import", fi, this, (E_UCFImportOptions)Properties.Settings.Default.UCFImportOpt);//Added frmVEPROMS Parameter dlgExportImport dlg = new dlgExportImport(args.Index == 0 ? "Export" : "Import", fi, this, (E_UCFImportOptions)Properties.Settings.Default.UCFImportOpt);//Added frmVEPROMS Parameter
dlg.ShowDialog(this); dlg.ShowDialog(this);
@ -1139,7 +1139,7 @@ namespace VEPROMS
dvi.DocVersionConfig.SelectedSlave = 0; dvi.DocVersionConfig.SelectedSlave = 0;
} }
void tv_PrintProcedure(object sender, vlnTreeEventArgs args) void tv_PrintProcedure(object sender, vlnTreeEventArgs args)
{ {
ProcedureInfo pi = (args.Node as VETreeNode).VEObject as ProcedureInfo; ProcedureInfo pi = (args.Node as VETreeNode).VEObject as ProcedureInfo;
@ -1178,8 +1178,8 @@ namespace VEPROMS
pi.MyDocVersion.DocVersionConfig.SelectedSlave = 0; pi.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
} }
} }
catch (Exception ex) catch(Exception ex)
{ {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.AppendLine("Could not create PDF Print"); sb.AppendLine("Could not create PDF Print");
@ -1197,21 +1197,7 @@ namespace VEPROMS
{ {
//args.Node.Parent. //args.Node.Parent.
SectionInfo si2 = (args.Node as VETreeNode).VEObject as SectionInfo; SectionInfo si2 = (args.Node as VETreeNode).VEObject as SectionInfo;
int[] _prtSectID = new int[3]; // C2024-003 parameter contains parent section itemid, child section itemid, issubsection flag. int _prtSectID = si2.ItemID;
if (si2.IsSubsection == true)
{
// If section is a subsection. Assigned values are section and subsection.
_prtSectID[0] = si2.MyParent.ItemID; // section
_prtSectID[1] = si2.ItemID; // sub section
_prtSectID[2] = Convert.ToInt32(si2.IsSubsection); // IsSubSection flag
}
else
{
// If section is a regular section. assign values is section is not a subsection.
_prtSectID[0] = si2.ItemID; // section
_prtSectID[1] = -1; // sub section
_prtSectID[2] = Convert.ToInt32(si2.IsSubsection); // IsSubSection flag
}
if (si2 == null) return; if (si2 == null) return;
@ -1221,7 +1207,7 @@ namespace VEPROMS
using (DlgPrintProcedure prnDlg = new DlgPrintProcedure(si2.MyProcedure)) using (DlgPrintProcedure prnDlg = new DlgPrintProcedure(si2.MyProcedure))
{ {
prnDlg.PrtSectID = _prtSectID; // Assign Section print values to parameter used in print secetions / sub sections. prnDlg.PrtSectID = _prtSectID;
prnDlg.SelectedSlave = args.UnitIndex; prnDlg.SelectedSlave = args.UnitIndex;
prnDlg.MySessionInfo = MySessionInfo; prnDlg.MySessionInfo = MySessionInfo;
prnDlg.SetupForProcedure(); // Setup filename prnDlg.SetupForProcedure(); // Setup filename
@ -1655,11 +1641,11 @@ namespace VEPROMS
if (!_WeAreExitingPROMS && !ClosingWithError && tc.SelectedDisplayTabItem != null && tc._MyDisplayTabItems.Count > 0) if (!_WeAreExitingPROMS && !ClosingWithError && tc.SelectedDisplayTabItem != null && tc._MyDisplayTabItems.Count > 0)
{ {
// B2019-071 dialog to ask user if we are to close one tab or exit // B2019-071 dialog to ask user if we are to close one tab or exit
DlgCloseTabsOrExit dctoe = new DlgCloseTabsOrExit(MyParent == null, PROMSWindowForms.Count > 0); DlgCloseTabsOrExit dctoe = new DlgCloseTabsOrExit(MyParent == null, PROMSWindowForms.Count > 0);
dctoe.ShowDialog(); dctoe.ShowDialog();
// B2019-101 flag that we are exiting from PROMS main window (separate windows) // B2019-101 flag that we are exiting from PROMS main window (separate windows)
_WeAreExitingPROMS = (MyParent == null && dctoe.ExitPROMS); _WeAreExitingPROMS = (MyParent == null && dctoe.ExitPROMS);
if (dctoe.Cancel) // B2019-071 user decided to not close any tab and not exit PROMS - so do nothing and continue working if (dctoe.Cancel) // B2019-071 user decided to not close any tab and not exit PROMS - so do nothing and continue working
{ {
@ -1681,7 +1667,7 @@ namespace VEPROMS
tc.CloseTabItem(tc.SelectedDisplayTabItem); tc.CloseTabItem(tc.SelectedDisplayTabItem);
// B2019-071 close just the current tab and continue working // B2019-071 close just the current tab and continue working
if (!dctoe.ExitPROMS) if (!dctoe.ExitPROMS)
{ {
n = 0; n = 0;
e.Cancel = true; e.Cancel = true;
@ -1714,7 +1700,7 @@ namespace VEPROMS
} }
// This keeps PROMS from Hanging under certain circumstances // This keeps PROMS from Hanging under certain circumstances
tc.ShuttingDown = true; tc.ShuttingDown = true;
// B2019-161 When shutting down output the timing information (to the error log) // B2019-161 When shutting down output the timing information (to the error log)
if (VolianTimer.TimingsOn) if (VolianTimer.TimingsOn)
@ -1896,12 +1882,12 @@ namespace VEPROMS
private DevComponents.DotNetBar.ButtonItem btnUserControlOfFormatsExport; private DevComponents.DotNetBar.ButtonItem btnUserControlOfFormatsExport;
private DevComponents.DotNetBar.ButtonItem btnUserControlOfFormatsImport; private DevComponents.DotNetBar.ButtonItem btnUserControlOfFormatsImport;
private TabItemsToClose _MyCloseTabList = new TabItemsToClose(); private TabItemsToClose _MyCloseTabList = new TabItemsToClose();
public TabItemsToClose MyCloseTabList public TabItemsToClose MyCloseTabList
{ {
get { return _MyCloseTabList; } get { return _MyCloseTabList; }
} }
private bool _DisablePing = false; private bool _DisablePing = false;
public bool DisablePing public bool DisablePing
{ {
@ -2011,7 +1997,7 @@ namespace VEPROMS
if (ContentInfo.IsInCache(id)) if (ContentInfo.IsInCache(id))
{ {
ContentInfo ci = ContentInfo.Get(id); ContentInfo ci = ContentInfo.Get(id);
if (MySessionInfo.LastContentChange >= ci.LastChangedInt64) if (MySessionInfo.LastContentChange >= ci.LastChangedInt64)
{ {
using (Content c = Content.Get(id)) using (Content c = Content.Get(id))
@ -2035,7 +2021,7 @@ namespace VEPROMS
} }
} }
catch { } catch { }
//MySemaphore.Release(); //MySemaphore.Release();
//_MyLog.DebugFormat("{0},{1:X},{2:X},{3:X}", DateTime.Now.ToLongTimeString(), lastChanged, MySessionInfo.LastContentChange, MySessionInfo.LastChangedInt64); //_MyLog.DebugFormat("{0},{1:X},{2:X},{3:X}", DateTime.Now.ToLongTimeString(), lastChanged, MySessionInfo.LastContentChange, MySessionInfo.LastChangedInt64);
} }
@ -2106,7 +2092,7 @@ namespace VEPROMS
btnResetSecurity = new ButtonItem("btnResetSecurity", "Reset Security"); btnResetSecurity = new ButtonItem("btnResetSecurity", "Reset Security");
btnSecurity.SubItems.Add(btnResetSecurity); btnSecurity.SubItems.Add(btnResetSecurity);
btnResetSecurity.Click += new EventHandler(btnResetSecurity_Click); btnResetSecurity.Click += new EventHandler(btnResetSecurity_Click);
//batch refresh transitions //batch refresh transitions
btnAdministrativeTools = new ButtonItem("btnAdministrativeTools", "Administrative Tools"); btnAdministrativeTools = new ButtonItem("btnAdministrativeTools", "Administrative Tools");
btnAdministrativeTools.Click += new EventHandler(btnAdministrativeTools_Click); btnAdministrativeTools.Click += new EventHandler(btnAdministrativeTools_Click);
@ -2120,7 +2106,7 @@ namespace VEPROMS
this.superTooltip1.SetSuperTooltip(btnResetSecurity, new SuperTooltipInfo("Reset Security", null, null, null, null, eTooltipColor.Gray)); this.superTooltip1.SetSuperTooltip(btnResetSecurity, new SuperTooltipInfo("Reset Security", null, null, null, null, eTooltipColor.Gray));
this.superTooltip1.SetSuperTooltip(btnAdministrativeTools, new SuperTooltipInfo("Administrative Tools", null, null, null, null, eTooltipColor.Gray)); this.superTooltip1.SetSuperTooltip(btnAdministrativeTools, new SuperTooltipInfo("Administrative Tools", null, null, null, null, eTooltipColor.Gray));
this.superTooltip1.SetSuperTooltip(btnUpdateFormats, new SuperTooltipInfo("Update Formats", null, null, null, null, eTooltipColor.Gray)); this.superTooltip1.SetSuperTooltip(btnUpdateFormats, new SuperTooltipInfo("Update Formats", null, null, null, null, eTooltipColor.Gray));
try try
{ {
MyUserInfo = UserInfo.GetByUserID(VlnSettings.UserID); MyUserInfo = UserInfo.GetByUserID(VlnSettings.UserID);
@ -2167,7 +2153,7 @@ namespace VEPROMS
btnFormats.Visible = isVisible; btnFormats.Visible = isVisible;
btnSecurity.Visible = isVisible; btnSecurity.Visible = isVisible;
btnAdmin.Enabled = (isVisible || HasSetAdministrator(MyUserInfo)); btnAdmin.Enabled = (isVisible || HasSetAdministrator(MyUserInfo));
tmrCloseTabItems = new Timer(); tmrCloseTabItems = new Timer();
tmrCloseTabItems.Interval = 100; tmrCloseTabItems.Interval = 100;
tmrCloseTabItems.Tick += new EventHandler(tmrCloseTabItems_Tick); tmrCloseTabItems.Tick += new EventHandler(tmrCloseTabItems_Tick);
@ -2175,7 +2161,7 @@ namespace VEPROMS
CloseSessionsNoLongerActive(); CloseSessionsNoLongerActive();
MySessionInfo = SessionInfo.BeginSession(Environment.MachineName, System.Diagnostics.Process.GetCurrentProcess().Id); MySessionInfo = SessionInfo.BeginSession(Environment.MachineName, System.Diagnostics.Process.GetCurrentProcess().Id);
if (MySessionInfo == null) if (MySessionInfo == null)
{ {
MessageBox.Show("This database is locked by the Administrator. Please try again later", "PROMS is Locked"); MessageBox.Show("This database is locked by the Administrator. Please try again later", "PROMS is Locked");
@ -2219,7 +2205,7 @@ namespace VEPROMS
if (Settings.Default["Size"] != null) this.Size = Settings.Default.Size; if (Settings.Default["Size"] != null) this.Size = Settings.Default.Size;
//if (Settings.Default["WindowState"] != null) this.WindowState = Settings.Default.WindowState; //if (Settings.Default["WindowState"] != null) this.WindowState = Settings.Default.WindowState;
//if (Settings.Default.SaveTreeviewExpanded) epProcedures.Expanded = Settings.Default.TreeviewExpanded; //if (Settings.Default.SaveTreeviewExpanded) epProcedures.Expanded = Settings.Default.TreeviewExpanded;
// if the Procedures panel was left open from the last session, then open it // if the Procedures panel was left open from the last session, then open it
epProcedures.Expanded = Settings.Default.TreeviewExpanded; epProcedures.Expanded = Settings.Default.TreeviewExpanded;
if (Settings.Default["QATItems"] != null) ribbonControl1.QatLayout = Settings.Default.QATItems; if (Settings.Default["QATItems"] != null) ribbonControl1.QatLayout = Settings.Default.QATItems;
@ -2391,7 +2377,7 @@ namespace VEPROMS
TurnChangeManagerOn.Execute(); TurnChangeManagerOn.Execute();
} }
} }
// C2015-022 Separate Windows. This is a dictionary of child PROMS windows forms (frmVEPROMS) // C2015-022 Separate Windows. This is a dictionary of child PROMS windows forms (frmVEPROMS)
// //
Dictionary<int, frmVEPROMS> _PROMSWindowForms = null; Dictionary<int, frmVEPROMS> _PROMSWindowForms = null;
@ -2439,7 +2425,7 @@ namespace VEPROMS
while (!(_tn.VEObject is FolderInfo)) while (!(_tn.VEObject is FolderInfo))
{ {
// back up to the first folder tree node // back up to the first folder tree node
_tn = (VETreeNode)_tn.Parent; _tn = (VETreeNode)_tn.Parent;
} }
_tn.Nodes.Clear(); // remove the child nodes from main window - child window now has this part of the procedure tree _tn.Nodes.Clear(); // remove the child nodes from main window - child window now has this part of the procedure tree
@ -2536,7 +2522,7 @@ namespace VEPROMS
} }
DialogResult dr = System.Windows.Forms.DialogResult.Yes; DialogResult dr = System.Windows.Forms.DialogResult.Yes;
// RHM20150507 Table Scrunch // RHM20150507 Table Scrunch
Rtf2Pdf.AllowTableScrunching = cbScrunch.Checked ? _DefaultScrunchingRules : TableScrunching.None; Rtf2Pdf.AllowTableScrunching = cbScrunch.Checked ? _DefaultScrunchingRules : TableScrunching.None;
@ -2768,7 +2754,7 @@ namespace VEPROMS
tmrCloseTabItems.Enabled = false; tmrCloseTabItems.Enabled = false;
_TimeActivity1.Open(); _TimeActivity1.Open();
while (MyCloseTabList.CountDTI > 0) while (MyCloseTabList.CountDTI > 0)
{ {
DisplayTabItem dti = MyCloseTabList.PopDTI(); DisplayTabItem dti = MyCloseTabList.PopDTI();
@ -3880,7 +3866,7 @@ namespace VEPROMS
{ {
infoPanel.Expanded = true; infoPanel.Expanded = true;
infoTabs.SelectedTab = infotabRO; infoTabs.SelectedTab = infotabRO;
displayRO.ProgressBar = bottomProgBar; displayRO.ProgressBar = bottomProgBar;
displayRO.MyRTB = (SelectedStepTabPanel == null) ? null : displayRO.MyRTB = (SelectedStepTabPanel == null) ? null :
@ -4039,7 +4025,7 @@ namespace VEPROMS
// need this to update RO Tree after UpdateRofst (B2015-226) // need this to update RO Tree after UpdateRofst (B2015-226)
// B2022-026 RO Memory reduction coding (Jakes Merge) // B2022-026 RO Memory reduction coding (Jakes Merge)
displayRO.MyROFST = SelectedROFst; displayRO.MyROFST = SelectedROFst;
displayRO.LoadTree(); displayRO.LoadTree();
// resetting the MyROFSTLookup for the search & reports panels will refresh the RO trees after UpdateRofst in each of those panels (B2015-226) // resetting the MyROFSTLookup for the search & reports panels will refresh the RO trees after UpdateRofst in each of those panels (B2015-226)
@ -4082,7 +4068,7 @@ namespace VEPROMS
SetCaption(tv.SelectedNode as VETreeNode); SetCaption(tv.SelectedNode as VETreeNode);
displayApplicability.MyDisplayTabItem = tc.SelectedDisplayTabItem; displayApplicability.MyDisplayTabItem = tc.SelectedDisplayTabItem;
if (tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociationCount > 0) if (tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociationCount > 0)
{ {
displayRO.MyROFST = tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst; displayRO.MyROFST = tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst;
@ -4297,7 +4283,7 @@ namespace VEPROMS
// B2022-026 RO Memory reduction coding (Jakes Merge) // B2022-026 RO Memory reduction coding (Jakes Merge)
displayRO.ProgressBar = bottomProgBar; displayRO.ProgressBar = bottomProgBar;
displayRO.MyRTB = args.MyEditItem.MyStepRTB; displayRO.MyRTB = args.MyEditItem.MyStepRTB;
displayRO.LoadTree(); displayRO.LoadTree();
displayBookMarks.MyEditItem = args.MyEditItem; displayBookMarks.MyEditItem = args.MyEditItem;
displayHistory.MyEditItem = args.MyEditItem; displayHistory.MyEditItem = args.MyEditItem;
@ -4316,7 +4302,7 @@ namespace VEPROMS
displayRO.ROTypeFilter = SelectedStepTabPanel.MyStepPanel.SelectedEditItem is Volian.Controls.Library.GridItem && (SelectedStepTabPanel.MyStepPanel.SelectedEditItem as Volian.Controls.Library.GridItem).MyFlexGrid.IsRoTable ? displayRO.ROTypeFilter = SelectedStepTabPanel.MyStepPanel.SelectedEditItem is Volian.Controls.Library.GridItem && (SelectedStepTabPanel.MyStepPanel.SelectedEditItem as Volian.Controls.Library.GridItem).MyFlexGrid.IsRoTable ?
E_ROValueType.Table : (SelectedStepTabPanel.MyStepPanel.SelectedEditItem.MyItemInfo.IsFigure) ? E_ROValueType.Image : E_ROValueType.Text; E_ROValueType.Table : (SelectedStepTabPanel.MyStepPanel.SelectedEditItem.MyItemInfo.IsFigure) ? E_ROValueType.Image : E_ROValueType.Text;
if (_LastStepRTB.IsRoTable && _LastStepRTB.MyItemInfo.MyContent.ContentRoUsageCount > 0) if (_LastStepRTB.IsRoTable && _LastStepRTB.MyItemInfo.MyContent.ContentRoUsageCount > 0)
displayRO.CurROLink = _LastStepRTB.MyItemInfo.MyContent.ContentRoUsages[0]; displayRO.CurROLink = _LastStepRTB.MyItemInfo.MyContent.ContentRoUsages[0];
@ -4434,7 +4420,7 @@ namespace VEPROMS
displayRO.ROTypeFilter = SelectedStepTabPanel.MyStepPanel.SelectedEditItem is Volian.Controls.Library.GridItem && (SelectedStepTabPanel.MyStepPanel.SelectedEditItem as Volian.Controls.Library.GridItem).MyFlexGrid.IsRoTable ? displayRO.ROTypeFilter = SelectedStepTabPanel.MyStepPanel.SelectedEditItem is Volian.Controls.Library.GridItem && (SelectedStepTabPanel.MyStepPanel.SelectedEditItem as Volian.Controls.Library.GridItem).MyFlexGrid.IsRoTable ?
E_ROValueType.Table : (SelectedStepTabPanel.MyStepPanel.SelectedEditItem.MyItemInfo.IsFigure) ? E_ROValueType.Image : E_ROValueType.Text; E_ROValueType.Table : (SelectedStepTabPanel.MyStepPanel.SelectedEditItem.MyItemInfo.IsFigure) ? E_ROValueType.Image : E_ROValueType.Text;
displayRO.ProgressBar = bottomProgBar; displayRO.ProgressBar = bottomProgBar;
displayRO.MyRTB = SelectedStepTabPanel.MyStepPanel.SelectedEditItem.MyStepRTB; displayRO.MyRTB = SelectedStepTabPanel.MyStepPanel.SelectedEditItem.MyStepRTB;
displayRO.CurROLink = args.MyLinkText.MyRoUsageInfo; displayRO.CurROLink = args.MyLinkText.MyRoUsageInfo;
@ -4460,7 +4446,7 @@ namespace VEPROMS
if (!tv.Focused && tc.SelectedDisplayTabItem != null && tc.SelectedDisplayTabItem.SelectedItemInfo != null) if (!tv.Focused && tc.SelectedDisplayTabItem != null && tc.SelectedDisplayTabItem.SelectedItemInfo != null)
tv.AdjustTree(tc.SelectedDisplayTabItem.SelectedItemInfo); tv.AdjustTree(tc.SelectedDisplayTabItem.SelectedItemInfo);
VETreeNode vtn = tv.SelectedNode as VETreeNode; VETreeNode vtn = tv.SelectedNode as VETreeNode;
if (vtn == null) return; if (vtn == null) return;
StepInfo stpinf = vtn.VEObject as StepInfo; StepInfo stpinf = vtn.VEObject as StepInfo;
if (stpinf == null || !stpinf.IsRNOPart) //B2017-037 is this a RNO step type element - don't allow insert before/after if (stpinf == null || !stpinf.IsRNOPart) //B2017-037 is this a RNO step type element - don't allow insert before/after
@ -4898,7 +4884,7 @@ namespace VEPROMS
private void btnUpdateFormat_Click(object sender, EventArgs e) private void btnUpdateFormat_Click(object sender, EventArgs e)
{ {
UpdateFormats(null); UpdateFormats(null);
} }
private void UpdateFormats(string mypath) private void UpdateFormats(string mypath)
@ -4969,7 +4955,7 @@ namespace VEPROMS
try try
{ {
frmSendErrorLog frm = new frmSendErrorLog(Properties.Settings.Default.OutlookEmail, Properties.Settings.Default["SMTPServer"].ToString(), Properties.Settings.Default["SMTPUser"].ToString(), ErrorLogFileName); frmSendErrorLog frm = new frmSendErrorLog(Properties.Settings.Default.OutlookEmail, Properties.Settings.Default["SMTPServer"].ToString(), Properties.Settings.Default["SMTPUser"].ToString(), ErrorLogFileName);
if (frm.ShowDialog(this) == DialogResult.OK) if (frm.ShowDialog(this) == DialogResult.OK)
{ {
Properties.Settings.Default.OutlookEmail = frm.OutlookEmail; Properties.Settings.Default.OutlookEmail = frm.OutlookEmail;

File diff suppressed because it is too large Load Diff

View File

@ -64,18 +64,18 @@ namespace Volian.Print.Library
float yWithinMargins = CalculateYLocation(yLocation, yTopMargin) - yBottomMargin; // -SixLinesPerInch; float yWithinMargins = CalculateYLocation(yLocation, yTopMargin) - yBottomMargin; // -SixLinesPerInch;
if (MyItemInfo.IsSection && MyParent != null && MyParent.MyItemInfo.IsSection && (MyItemInfo as SectionInfo).IsSeparatePagination()) if (MyItemInfo.IsSection && MyParent != null && MyParent.MyItemInfo.IsSection && (MyItemInfo as SectionInfo).IsSeparatePagination())
{ {
ShowPageBreak(1, "Page Break between separate sections", "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak); ShowPageBreak(1, "Page Break between separate sections", "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak);
// if parent was continuous & this is separate, need to paginate to get subsection on // if parent was continuous & this is separate, need to paginate to get subsection on
// its own page. This occurred in BGE/OI3 set/OI-7 procedure/10.0 Attachments. // its own page. This occurred in BGE/OI3 set/OI-7 procedure/10.0 Attachments.
if (!(MyParent.MyItemInfo as SectionInfo).IsSeparatePagination()) return 1; if (!(MyParent.MyItemInfo as SectionInfo).IsSeparatePagination()) return 1;
if (MyItemInfo.ActiveFormat.PlantFormat.FormatData.PrintData.WCNTraining && (MyItemInfo as SectionInfo).IsSeparatePagination()) return 1; if (MyItemInfo.ActiveFormat.PlantFormat.FormatData.PrintData.WCNTraining && (MyItemInfo as SectionInfo).IsSeparatePagination()) return 1;
// B2017-273 added a check for Farley format, we don't want the subsection pagelist infor to appear on the parent section page - works with ToPDF() logic - (section has steps and a sub-section ex: FNP-2-EEP-0 Attachment 4) // B2017-273 added a check for Farley format, we don't want the subsection pagelist infor to appear on the parent section page - works with ToPDF() logic - (section has steps and a sub-section ex: FNP-2-EEP-0 Attachment 4)
if (MyItemInfo.ActiveFormat.Name.ToUpper().StartsWith("FNP") && (MyItemInfo as SectionInfo).IsSeparatePagination()) return 1; if (MyItemInfo.ActiveFormat.Name.ToUpper().StartsWith("FNP") && (MyItemInfo as SectionInfo).IsSeparatePagination()) return 1;
if (MyItemInfo.MyPrevious != null) // add if statement to fix Westinghouse print issue 3-21-2014 if (MyItemInfo.MyPrevious != null) // add if statement to fix Westinghouse print issue 3-21-2014
return 1; return 1;
} }
if (MyItemInfo.IsSection && _ChildrenBelow == null && YSize > (yLocation - yBottomMargin)) if (MyItemInfo.IsSection && _ChildrenBelow == null && YSize > (yLocation-yBottomMargin))
{ {
ShowPageBreak(1, "Page Break before empty section", "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak); ShowPageBreak(1, "Page Break before empty section", "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak);
return 1; return 1;
@ -171,7 +171,7 @@ namespace Volian.Print.Library
// line above the end message, thus 2 not 3. This change was made on July 20, 2011 by RHM & KBR. The // line above the end message, thus 2 not 3. This change was made on July 20, 2011 by RHM & KBR. The
// procedure in questions was VEWCNEMG\EMGAPP.PRC, ES-01, Step 8. // procedure in questions was VEWCNEMG\EMGAPP.PRC, ES-01, Step 8.
//float yEndMsg = !_skipEndMessage && !MyItemInfo.IsSection && MyItemInfo.MyHLS != null && MyItemInfo.MyHLS.NextItem == null && (MyItemInfo.MyDocStyle.End.Message ?? "") != "" ? 2 * SixLinesPerInch : 0; //float yEndMsg = !_skipEndMessage && !MyItemInfo.IsSection && MyItemInfo.MyHLS != null && MyItemInfo.MyHLS.NextItem == null && (MyItemInfo.MyDocStyle.End.Message ?? "") != "" ? 2 * SixLinesPerInch : 0;
float yEndMsg = (!_skipEndMessage && !MyItemInfo.IsSection && MyItemInfo.MyHLS != null && MyItemInfo.MyHLS.NextItem == null) ? GetEndMessageHeight(MyItemInfo.MyDocStyle) : 0; // B2018-068 account for mult-line End Messages float yEndMsg = (!_skipEndMessage && !MyItemInfo.IsSection && MyItemInfo.MyHLS != null && MyItemInfo.MyHLS.NextItem == null)? GetEndMessageHeight(MyItemInfo.MyDocStyle) : 0; // B2018-068 account for mult-line End Messages
// also consider if there is a phone list at the bottom of the page, add the amount of space the phone // also consider if there is a phone list at the bottom of the page, add the amount of space the phone
// list requires onto yEndMsg to make it easier to figure out pagination (include an extra line for the // list requires onto yEndMsg to make it easier to figure out pagination (include an extra line for the
@ -191,7 +191,7 @@ namespace Volian.Print.Library
//float yEndMsg = !MyItemInfo.IsSection && MyItemInfo.MyHLS.NextItem == null && (MyItemInfo.MyDocStyle.End.Message ?? "") != "" ? ((2 * SixLinesPerInch) - yEndsWithBlankLine) : 0; //float yEndMsg = !MyItemInfo.IsSection && MyItemInfo.MyHLS.NextItem == null && (MyItemInfo.MyDocStyle.End.Message ?? "") != "" ? ((2 * SixLinesPerInch) - yEndsWithBlankLine) : 0;
bool isFirstChild = MyItemInfo.MyPrevious == null; bool isFirstChild = MyItemInfo.MyPrevious == null;
bool nearTheTop = (yWithinMargins < yPageSize) && (yWithinMargins > (yPageSize - 5 * SixLinesPerInch)); bool nearTheTop = (yWithinMargins < yPageSize) && (yWithinMargins > (yPageSize - 5 * SixLinesPerInch));
// if step is breaking over a number of pages, determine if the current step is the // if step is breaking over a number of pages, determine if the current step is the
// location of a pagebreak. ParaBreaks contains the paragraphs that break within a step. // location of a pagebreak. ParaBreaks contains the paragraphs that break within a step.
if (MyPageHelper.ParaBreaks.Count > 0) if (MyPageHelper.ParaBreaks.Count > 0)
@ -202,8 +202,8 @@ namespace Volian.Print.Library
{ {
MyPageHelper.ParaBreaks.RemoveAt(0); MyPageHelper.ParaBreaks.RemoveAt(0);
reason = AddReason("Partial Step - Case 1"); reason = AddReason("Partial Step - Case 1");
ShowPageBreak(1, reason, "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak); ShowPageBreak(1,reason, "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak);
return 2; // break on this item within a step return 2; // break on this item within a step
} }
// check for rnos: // check for rnos:
else if (MyPageHelper.ParaBreaks[0].CheckAlternates(this)) else if (MyPageHelper.ParaBreaks[0].CheckAlternates(this))
@ -211,7 +211,7 @@ namespace Volian.Print.Library
MyPageHelper.ParaBreaks.RemoveAt(0); MyPageHelper.ParaBreaks.RemoveAt(0);
reason = AddReason("Partial Step - Case 2"); reason = AddReason("Partial Step - Case 2");
ShowPageBreak(1, reason, "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak); ShowPageBreak(1, reason, "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak);
return 2; // break on this item within a step return 2; // break on this item within a step
} }
/////////////////// ///////////////////
// The following else ifs are reached if something previously went wrong in pagination & this code tries to account for it. // The following else ifs are reached if something previously went wrong in pagination & this code tries to account for it.
@ -224,7 +224,7 @@ namespace Volian.Print.Library
MyPageHelper.ParaBreaks.RemoveAt(0); MyPageHelper.ParaBreaks.RemoveAt(0);
reason = AddReason("Partial Step - Case 3"); reason = AddReason("Partial Step - Case 3");
ShowPageBreak(1, reason, "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak); ShowPageBreak(1, reason, "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak);
return 2; // break on this item within a step return 2; // break on this item within a step
} }
// B2018-015 Pagination Issue VCS EOP-15.0 Step 15 - Handle when RNO is exactly aligned with the AER column // B2018-015 Pagination Issue VCS EOP-15.0 Step 15 - Handle when RNO is exactly aligned with the AER column
// B2018-065 Calvert's continue message was not including the substep number in AOP-1A Attachment 1, added AERandRNO check // B2018-065 Calvert's continue message was not including the substep number in AOP-1A Attachment 1, added AERandRNO check
@ -240,12 +240,12 @@ namespace Volian.Print.Library
//} //}
reason = AddReason("Partial Step - Case 4"); reason = AddReason("Partial Step - Case 4");
ShowPageBreak(1, reason, "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak); ShowPageBreak(1, reason, "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak);
return 2; // break on this item within a step return 2; // break on this item within a step
} }
return 0; // this is not an item with a break return 0; // this is not an item with a break
} }
float mySize = YSize * MyPageHelper.YMultiplier; float mySize = YSize * MyPageHelper.YMultiplier;
vlnParagraph firstChild = ChildrenBelow.Count > 0 ? ChildrenBelow[0] : null; vlnParagraph firstChild = ChildrenBelow.Count > 0 ? ChildrenBelow[0] : null;
// Steps that have the smart template (the WCNCKL format for example), always include two children. // Steps that have the smart template (the WCNCKL format for example), always include two children.
if (MyItemInfo.IsHigh && MyItemInfo.FormatStepData.UseSmartTemplate) // if (MyItemInfo.IsHigh && MyItemInfo.FormatStepData.UseSmartTemplate) //
{ {
@ -277,8 +277,8 @@ namespace Volian.Print.Library
// on that first step. // on that first step.
StepConfig sc = firstChild.MyItemInfo.MyConfig as StepConfig; StepConfig sc = firstChild.MyItemInfo.MyConfig as StepConfig;
ManualPageBreak = MyPageHelper.OriginalPageBreak ? (sc == null ? false : sc.Step_ManualPagebreak) : ManualPageBreak = MyPageHelper.OriginalPageBreak ? (sc == null ? false : sc.Step_ManualPagebreak) :
sc == null ? false : sc == null ? false :
(MyPageHelper.MyPromsPrinter.RemoveManualPageBreaks == null) ? sc.Step_NewManualPagebreak : false; (MyPageHelper.MyPromsPrinter.RemoveManualPageBreaks == null)? sc.Step_NewManualPagebreak : false;
// C2021-010: Remove trailing returns/spaces & manual page breaks & allow save. // C2021-010: Remove trailing returns/spaces & manual page breaks & allow save.
if (sc != null && sc.Step_NewManualPagebreak && MyPageHelper.MyPromsPrinter.RemoveManualPageBreaks != null && if (sc != null && sc.Step_NewManualPagebreak && MyPageHelper.MyPromsPrinter.RemoveManualPageBreaks != null &&
!MyPageHelper.MyPromsPrinter.RemoveManualPageBreaks.Contains(firstChild.MyItemInfo.ItemID)) MyPageHelper.MyPromsPrinter.RemoveManualPageBreaks.Add(firstChild.MyItemInfo.ItemID); !MyPageHelper.MyPromsPrinter.RemoveManualPageBreaks.Contains(firstChild.MyItemInfo.ItemID)) MyPageHelper.MyPromsPrinter.RemoveManualPageBreaks.Add(firstChild.MyItemInfo.ItemID);
@ -309,7 +309,7 @@ namespace Volian.Print.Library
float ySizeIncludingFirstStep = firstStepChild.YSize + (firstStepChild.YTopMost - YTopMost); float ySizeIncludingFirstStep = firstStepChild.YSize + (firstStepChild.YTopMost - YTopMost);
float ySizeBtmCtnMess = GetBottomContinueMessageSize(MyItemInfo.MyDocStyle); float ySizeBtmCtnMess = GetBottomContinueMessageSize(MyItemInfo.MyDocStyle);
float ySizeBtmEndMess = GetBottomEndMessageSize(MyItemInfo.MyDocStyle); float ySizeBtmEndMess = GetBottomEndMessageSize(MyItemInfo.MyDocStyle);
bool firstSubstepExceedsSpaceAvailable = ySizeIncludingFirstStep > (yWithinMargins - ySizeBtmCtnMess - ySizeBtmEndMess); bool firstSubstepExceedsSpaceAvailable = ySizeIncludingFirstStep > (yWithinMargins - ySizeBtmCtnMess -ySizeBtmEndMess);
if (KeepStepsOnPage && firstSubstepExceedsSpaceAvailable && !isFirstChild) if (KeepStepsOnPage && firstSubstepExceedsSpaceAvailable && !isFirstChild)
KeepStepsOnPage = false; KeepStepsOnPage = false;
if (ySizeIncludingFirst == YSize) KeepStepsOnPage = false; if (ySizeIncludingFirst == YSize) KeepStepsOnPage = false;
@ -365,13 +365,13 @@ namespace Volian.Print.Library
//C2019-042 Section_IsFoldout checks Section Number, Section Title, and use of check box //C2019-042 Section_IsFoldout checks Section Number, Section Title, and use of check box
if ((MyItemInfo.MyActiveSection.MyConfig as SectionConfig).Section_IsFoldout == "Y" if ((MyItemInfo.MyActiveSection.MyConfig as SectionConfig).Section_IsFoldout == "Y"
&& MyItemInfo.ActiveFormat.MyStepSectionLayoutData.CompressSteps && MyItemInfo.ActiveFormat.MyStepSectionLayoutData.CompressSteps
&& mySize > yPageSize && mySize > yPageSize
&& mySize <= yPageSize * SixLinesPerInch / _SevenLinesPerInch) && mySize <= yPageSize * SixLinesPerInch / _SevenLinesPerInch)
CompressFoldout = true; CompressFoldout = true;
return 0; // Don't Paginate (page break) on a Step Section if it's first thing on page return 0; // Don't Paginate (page break) on a Step Section if it's first thing on page
} }
if (!MyItemInfo.IsHigh) return 0; // Don't Paginate on a Substep level if (!MyItemInfo.IsHigh) return 0; // Don't Paginate on a Substep level
bool doSectionTitleContinued = false; bool doSectionTitleContinued = false;
if (MyPageHelper.NotesToFootNotes != null && MyPageHelper.NotesToFootNotes.Count > 0) if (MyPageHelper.NotesToFootNotes != null && MyPageHelper.NotesToFootNotes.Count > 0)
{ {
float vpHeight = SixLinesPerInch; float vpHeight = SixLinesPerInch;
@ -396,11 +396,11 @@ namespace Volian.Print.Library
// if this step contains Cautions or Notes page breaks have to be added for those. // if this step contains Cautions or Notes page breaks have to be added for those.
if (TopMostChild != this) PageBreakOnStep = true; if (TopMostChild != this) PageBreakOnStep = true;
BuildPageBreakList(yPageSize, yPageSize, KeepStepsOnPage, yEndMsg, doSectionTitleContinued & SectionShowTitles, true); // Case 1 :Works for ES05 Step 15 SubStep 7 BuildPageBreakList(yPageSize, yPageSize, KeepStepsOnPage, yEndMsg, doSectionTitleContinued & SectionShowTitles, true); // Case 1 :Works for ES05 Step 15 SubStep 7
ShowPageBreak(1, "Page Break on Steps, Cautions or Notes", "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak); ShowPageBreak(1, "Page Break on Steps, Cautions or Notes", "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak);
return 1; return 1;
} }
//MyPageHelper.HLSText = MyItemInfo.DisplayText; // save the High Level Step Text //MyPageHelper.HLSText = MyItemInfo.DisplayText; // save the High Level Step Text
//Console.WriteLine("{0} Paginate", MyPageHelper.HLSText); //Console.WriteLine("{0} Paginate", MyPageHelper.HLSText);
StepConfig sc1 = MyItemInfo.MyConfig as StepConfig; StepConfig sc1 = MyItemInfo.MyConfig as StepConfig;
@ -445,16 +445,16 @@ namespace Volian.Print.Library
if (BreakHighLevelStepWithSection) KeepWithHeader = true; if (BreakHighLevelStepWithSection) KeepWithHeader = true;
// for a HLS that has an asterisk box with the rno separator IN the box, adjust the size by 2 lines to account for box. // for a HLS that has an asterisk box with the rno separator IN the box, adjust the size by 2 lines to account for box.
if (MyItemInfo.IsStep && MyItemInfo.MyHLS.FormatStepData.StepLayoutData.STBoxindex != null && MyItemInfo.MyHLS.FormatStepData.StepLayoutData.STBoxindex >= 0 && if (MyItemInfo.IsStep && MyItemInfo.MyHLS.FormatStepData.StepLayoutData.STBoxindex != null && MyItemInfo.MyHLS.FormatStepData.StepLayoutData.STBoxindex >= 0 &&
(MyItemInfo.RNOs == null || MyItemInfo.RNOs.Count == 0)) (MyItemInfo.RNOs==null ||MyItemInfo.RNOs.Count==0))
mySize += (2 * SixLinesPerInch); mySize += (2*SixLinesPerInch);
// mySize is the size of this step and includes an extra blank line. For HLS, if this is the last step in section & there is room in footer to keep // mySize is the size of this step and includes an extra blank line. For HLS, if this is the last step in section & there is room in footer to keep
// step on the page, do so by eliminating the blank line before doing the test to see if it fits. // step on the page, do so by eliminating the blank line before doing the test to see if it fits.
// B2017-254 Fixed Pagination Logic when checking to see if the current item is the last high level step // B2017-254 Fixed Pagination Logic when checking to see if the current item is the last high level step
if (MyItemInfo.IsHigh && mySize >= (2 * SixLinesPerInch) && MyItemInfo.MyDocStyle.Layout.FooterLength > 0 && (MyItemInfo.MyDocStyle.End.Message == null || MyItemInfo.MyDocStyle.End.Message == "") && MyItemInfo.NextItem == null && (MyItemInfo.Steps == null || MyItemInfo.Steps.Count == 0) && (MyItemInfo.RNOs == null || MyItemInfo.RNOs.Count == 0)) if (MyItemInfo.IsHigh && mySize >= (2 * SixLinesPerInch) && MyItemInfo.MyDocStyle.Layout.FooterLength > 0 && (MyItemInfo.MyDocStyle.End.Message == null || MyItemInfo.MyDocStyle.End.Message == "") && MyItemInfo.NextItem == null && (MyItemInfo.Steps == null || MyItemInfo.Steps.Count == 0) && (MyItemInfo.RNOs == null || MyItemInfo.RNOs.Count == 0))
mySize -= SixLinesPerInch; mySize -= SixLinesPerInch;
//// Account for extra lines in the end message (flag < 0) //// Account for extra lines in the end message (flag < 0)
float adjMsgY = 0; float adjMsgY = 0;
if (MyItemInfo.IsHigh && MyItemInfo.NextItem == null && MyItemInfo.MyDocStyle.End.Flag < 0) // Adjust this many lines down the page. if (MyItemInfo.IsHigh && MyItemInfo.NextItem == null && MyItemInfo.MyDocStyle.End.Flag < 0) // Adjust this many lines down the page.
{ {
adjMsgY = (float)-MyItemInfo.MyDocStyle.End.Flag * SixLinesPerInch; adjMsgY = (float)-MyItemInfo.MyDocStyle.End.Flag * SixLinesPerInch;
if (yEndMsg != 0) yEndMsg += adjMsgY; if (yEndMsg != 0) yEndMsg += adjMsgY;
@ -486,7 +486,7 @@ namespace Volian.Print.Library
// 888 888 888 o oo .d8P `888'`888' 888 888 888 888 888 888 . // 888 888 888 o oo .d8P `888'`888' 888 888 888 888 888 888 .
// o888o o888o o888ooooood8 8""88888P' `8' `8' o888o o888o o888o o888o o888o "888" // o888o o888o o888ooooood8 8""88888P' `8' `8' o888o o888o o888o o888o o888o "888"
//Console.WriteLine("'PageBreak',1,'No','HLS will fit on page',{0},{1},{2}, {3}, {4},'{5}'", MyItemInfo.ItemID, YSize, yPageSize, yWithinMargins, (int)(100 * yWithinMargins / yPageSize), MyItemInfo.ShortPath); //Console.WriteLine("'PageBreak',1,'No','HLS will fit on page',{0},{1},{2}, {3}, {4},'{5}'", MyItemInfo.ItemID, YSize, yPageSize, yWithinMargins, (int)(100 * yWithinMargins / yPageSize), MyItemInfo.ShortPath);
ShowPageBreak(-1, "HLS will fit on page", firstStep, YSize, yPageSize, yWithinMargins, ManualPageBreak); ShowPageBreak(-1, "HLS will fit on page", firstStep, YSize, yPageSize, yWithinMargins,ManualPageBreak);
return 0; return 0;
} }
// !MyItemInfo.IsHigh - if (MyItemInfo.IsRNOPart && MyParent.XOffset < XOffset) return 0; // Don't paginate on an RNO to the right // !MyItemInfo.IsHigh - if (MyItemInfo.IsRNOPart && MyParent.XOffset < XOffset) return 0; // Don't paginate on an RNO to the right
@ -500,7 +500,7 @@ namespace Volian.Print.Library
// this next page size is the same as current page size. // this next page size is the same as current page size.
float yPageSizeNextPage = yPageSize; float yPageSizeNextPage = yPageSize;
mySize = YSize; // reset in case mySize changed for current page is compressed mySize = YSize; // reset in case mySize changed for current page is compressed
// for a HLS that has an asterisk box with the rno separator IN the box, adjust the size by 2 lines to account for box. // for a HLS that has an asterisk box with the rno separator IN the box, adjust the size by 2 lines to account for box.
if (MyItemInfo.IsStep && MyItemInfo.MyHLS.FormatStepData.StepLayoutData.STBoxindex != null && MyItemInfo.MyHLS.FormatStepData.StepLayoutData.STBoxindex >= 0 && if (MyItemInfo.IsStep && MyItemInfo.MyHLS.FormatStepData.StepLayoutData.STBoxindex != null && MyItemInfo.MyHLS.FormatStepData.StepLayoutData.STBoxindex >= 0 &&
(MyItemInfo.RNOs == null || MyItemInfo.RNOs.Count == 0)) (MyItemInfo.RNOs == null || MyItemInfo.RNOs.Count == 0))
mySize += (2 * SixLinesPerInch); mySize += (2 * SixLinesPerInch);
@ -509,18 +509,18 @@ namespace Volian.Print.Library
if (MyPageHelper.DidFirstPageDocStyle && MyItemInfo.ActiveSection != null && (MyItemInfo.ActiveSection.MyDocStyle.StructureStyle.Where & E_DocStyleUse.UseOnAllButFirstPage) > 0)// C2018-003 fixed use of getting the active section if (MyPageHelper.DidFirstPageDocStyle && MyItemInfo.ActiveSection != null && (MyItemInfo.ActiveSection.MyDocStyle.StructureStyle.Where & E_DocStyleUse.UseOnAllButFirstPage) > 0)// C2018-003 fixed use of getting the active section
yPageSizeNextPage = GetYPageSizeUseOnAllButFirstPage(); yPageSizeNextPage = GetYPageSizeUseOnAllButFirstPage();
if (KeepStepsOnPage if (KeepStepsOnPage
&& !MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.PaginateOnLowerStepLevel && !MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.PaginateOnLowerStepLevel
&& YSize == ySizeIncludingFirst && YSize == ySizeIncludingFirst
&& YSize + yEndMsg > yWithinMargins) && YSize + yEndMsg > yWithinMargins)
{ {
// If the first step is the size of the entire step and the step has an end message then don't try to break the step // If the first step is the size of the entire step and the step has an end message then don't try to break the step
KeepStepsOnPage = false; KeepStepsOnPage = false;
//_MyLog.WarnFormat("Kick Step to Next Page {0},{1}", MyItemInfo.ItemID, MyItemInfo.ShortPath); //_MyLog.WarnFormat("Kick Step to Next Page {0},{1}", MyItemInfo.ItemID, MyItemInfo.ShortPath);
} }
if (yWithinMargins < SixLinesPerInch) KeepStepsOnPage = false; // if there is no room to print, don't keep steps on the page if (yWithinMargins < SixLinesPerInch) KeepStepsOnPage = false; // if there is no room to print, don't keep steps on the page
// The following was added for IP2 background printing. There were situations where there was a HLS and its paragraph was // The following was added for IP2 background printing. There were situations where there was a HLS and its paragraph was
// put on next page (IP2 bck: E-3/References), and a paragraph was writing into the footer (FR-H.1 step 2.2.3.1. KBR 10/14/14) // put on next page (IP2 bck: E-3/References), and a paragraph was writing into the footer (FR-H.1 step 2.2.3.1. KBR 10/14/14)
if (KeepStepsOnPage if (KeepStepsOnPage
&& MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.PaginateOnLowerStepLevel && MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.PaginateOnLowerStepLevel
&& YSize == ySizeIncludingFirst && YSize == ySizeIncludingFirst
@ -560,7 +560,7 @@ namespace Volian.Print.Library
float ySizeBtmCtnMess1 = GetBottomContinueMessageSize(MyItemInfo.MyDocStyle); float ySizeBtmCtnMess1 = GetBottomContinueMessageSize(MyItemInfo.MyDocStyle);
float ySizeBtmEndMess1 = GetBottomEndMessageSize(MyItemInfo.MyDocStyle); float ySizeBtmEndMess1 = GetBottomEndMessageSize(MyItemInfo.MyDocStyle);
// B2017-154 Don't leave an orphan on the next page if the high level step and first sub-step will fit on the current page // B2017-154 Don't leave an orphan on the next page if the high level step and first sub-step will fit on the current page
if (MyItemInfo.ActiveFormat.MyStepSectionLayoutData.NoOrphans1 && KeepStepsOnPage && ChildrenBelow.Count == 2)// Handle Orphans when there are two sub-steps and only one will fit. if (MyItemInfo.ActiveFormat.MyStepSectionLayoutData.NoOrphans1 && KeepStepsOnPage && ChildrenBelow.Count == 2)// Handle Orphans when there are two sub-steps and only one will fit.
{ {
vlnParagraph orphan = ChildrenBelow[1];// Verify that the orphan has no children vlnParagraph orphan = ChildrenBelow[1];// Verify that the orphan has no children
if (orphan.ChildrenBelow.Count == 0 && orphan.ChildrenAbove.Count == 0 && orphan.ChildrenLeft.Count == 0 && orphan.ChildrenRight.Count == 0) if (orphan.ChildrenBelow.Count == 0 && orphan.ChildrenAbove.Count == 0 && orphan.ChildrenLeft.Count == 0 && orphan.ChildrenRight.Count == 0)
@ -571,13 +571,13 @@ namespace Volian.Print.Library
} }
if (KeepStepsOnPage && ySizeIncludingFirst > (yWithinMargins - ySizeBtmCtnMess1 - ySizeBtmEndMess1)) if (KeepStepsOnPage && ySizeIncludingFirst > (yWithinMargins - ySizeBtmCtnMess1 - ySizeBtmEndMess1))
{ {
// B2023-116: Vogtle alarm pagination - sub-steps are separating from their HLS even if there is room for some (not all). // B2023-116: Vogtle alarm pagination - sub-steps are separating from their HLS even if there is room for some (not all).
// See comment above for setting of 'alarmPageKeepHighWithSubs'. // See comment above for setting of 'alarmPageKeepHighWithSubs'.
if (alarmPageKeepHighWithSubs) if (alarmPageKeepHighWithSubs)
{ {
// F2024-006: Vogtle Alarms pagination - compare the size of the step and its first sub-step with what we think we have left on the // F2024-006: Vogtle Alarms pagination - compare the size of the step and its first sub-step with what we think we have left on the
// page. if not enough room with a continue message then set KeepStepsOnPage to start this step on its own page. // page. if not enough room with a continue message then set KeepStepsOnPage to start this step on its own page.
// This solved an issue where the last line of step text was printing on top of the bottom continue message // This solved an issue where the last line of step text was printing on top of the bottom continue message
float myFirstPieceSize = GetFirstPieceSize(true); float myFirstPieceSize = GetFirstPieceSize(true);
if (myFirstPieceSize > yWithinMargins) if (myFirstPieceSize > yWithinMargins)
KeepStepsOnPage = false; KeepStepsOnPage = false;
@ -585,7 +585,7 @@ namespace Volian.Print.Library
else else
KeepStepsOnPage = false; KeepStepsOnPage = false;
} }
if (!KeepWithHeader && !KeepStepsOnPage && mySize - SixLinesPerInch + yEndMsg - tableSpaceAvailable <= yPageSizeNextPage) // if the entire step can fit on one page, do a page break if (!KeepWithHeader && !KeepStepsOnPage && mySize - SixLinesPerInch + yEndMsg - tableSpaceAvailable <= yPageSizeNextPage) // if the entire step can fit on one page, do a page break
{ {
// Don't want extra line before step // Don't want extra line before step
//Console.WriteLine("'PageBreak',2,'Yes','HLS will fit on 1 Page',{0},{1},{2}, {3}, {4},'{5}'", MyItemInfo.ItemID, YSize, yPageSize, yWithinMargins, (int)(100 * yWithinMargins / yPageSize), MyItemInfo.ShortPath); //Console.WriteLine("'PageBreak',2,'Yes','HLS will fit on 1 Page',{0},{1},{2}, {3}, {4},'{5}'", MyItemInfo.ItemID, YSize, yPageSize, yWithinMargins, (int)(100 * yWithinMargins / yPageSize), MyItemInfo.ShortPath);
@ -602,8 +602,8 @@ namespace Volian.Print.Library
} }
// TODO - yEndMsg - compressed size? // TODO - yEndMsg - compressed size?
// ySize7LPI includes a blank line after the step which we don't want to include in the page break test. // ySize7LPI includes a blank line after the step which we don't want to include in the page break test.
else if (!KeepStepsOnPage && MyItemInfo.ActiveFormat.MyStepSectionLayoutData.CompressSteps else if (!KeepStepsOnPage && MyItemInfo.ActiveFormat.MyStepSectionLayoutData.CompressSteps
//&& (mySize7LPI - SixLinesPerInch + yEndMsg - tableSpaceAvailable) < (yPageSizeNextPage * SixLinesPerInch / _SevenLinesPerInch))// RHM20150525 - Table Scrunch //&& (mySize7LPI - SixLinesPerInch + yEndMsg - tableSpaceAvailable) < (yPageSizeNextPage * SixLinesPerInch / _SevenLinesPerInch))// RHM20150525 - Table Scrunch
// if this is the first step, then the step has to fit in the space that remains on the page // if this is the first step, then the step has to fit in the space that remains on the page
// otherwise it needs to fit on a blank page // otherwise it needs to fit on a blank page
@ -628,7 +628,7 @@ namespace Volian.Print.Library
else // The entire step cannot fit on a blank page or KeepStepsOnPage is true. else // The entire step cannot fit on a blank page or KeepStepsOnPage is true.
{ {
// if there is more than half a page left, then start to print on the current page // if there is more than half a page left, then start to print on the current page
float myFirstPieceSize = GetFirstPieceSize(); //Case 0 float myFirstPieceSize = GetFirstPieceSize(); //Case 0
if (_Match16BitPagination) myFirstPieceSize += 2 * SixLinesPerInch; if (_Match16BitPagination) myFirstPieceSize += 2 * SixLinesPerInch;
// TODO: Put this line back to case 0, i.e. previous line. This fixes a 16-bit vs 32-bit pagination diff in EO30 Step 20. // TODO: Put this line back to case 0, i.e. previous line. This fixes a 16-bit vs 32-bit pagination diff in EO30 Step 20.
//float myFirstPieceSize = GetFirstPieceSize() + 2 * SixLinesPerInch; //Case 10 - this is to match 16bit //float myFirstPieceSize = GetFirstPieceSize() + 2 * SixLinesPerInch; //Case 10 - this is to match 16bit
@ -662,19 +662,19 @@ namespace Volian.Print.Library
// if the HLS is part of a Smart Template (i.e. WCNCKL table), don't add in an extra line because // if the HLS is part of a Smart Template (i.e. WCNCKL table), don't add in an extra line because
// that makes pagination work incorrectly because the Smart Template has a 'table' line after the // that makes pagination work incorrectly because the Smart Template has a 'table' line after the
// text. // text.
float ySpaceOnFirstPage = yWithinMargins + (MyItemInfo.FormatStepData.UseSmartTemplate ? 0 : SixLinesPerInch); float ySpaceOnFirstPage = yWithinMargins + (MyItemInfo.FormatStepData.UseSmartTemplate ? 0 : SixLinesPerInch);
if (firstStep == "Yes") if (firstStep == "Yes")
//{ //{
ySpaceOnFirstPage = yWithinMargins; // Accounts for Section Title Line ySpaceOnFirstPage = yWithinMargins; // Accounts for Section Title Line
//ShowPageBreak(8, CheckForCompression("First HLS has to split on current page"), firstStep, YSize, yPageSizeNextPage, yWithinMargins, ManualPageBreak); //ShowPageBreak(8, CheckForCompression("First HLS has to split on current page"), firstStep, YSize, yPageSizeNextPage, yWithinMargins, ManualPageBreak);
//} //}
//else //else
// ShowPageBreak(6, CheckForCompression("HLS will have to split on current page"), "Special", YSize, yPageSizeNextPage, yWithinMargins, ManualPageBreak); // ShowPageBreak(6, CheckForCompression("HLS will have to split on current page"), "Special", YSize, yPageSizeNextPage, yWithinMargins, ManualPageBreak);
//BuildPageBreakList(yWithinMargins + SixLinesPerInch, yPageSizeNextPage + yExtra2, KeepStepsOnPage); // Case 5 - Determine items where page break(s) occur //BuildPageBreakList(yWithinMargins + SixLinesPerInch, yPageSizeNextPage + yExtra2, KeepStepsOnPage); // Case 5 - Determine items where page break(s) occur
// B2020-027: adjust for lines that may print on first page of section only, added MyPageHelper.PrintedSectionPage // B2020-027: adjust for lines that may print on first page of section only, added MyPageHelper.PrintedSectionPage
// B2020-108: The bug itself was related to keeping a table with its parent. However compression for some pages was // B2020-108: The bug itself was related to keeping a table with its parent. However compression for some pages was
// not working because onnewpage was always false in the next BuildPageBreakList call. onnewpage is used to determine compression // not working because onnewpage was always false in the next BuildPageBreakList call. onnewpage is used to determine compression
// (has to be on a new page to compress page). Use calculated value rather than always false in this case. // (has to be on a new page to compress page). Use calculated value rather than always false in this case.
bool onnewpage = MyItemInfo.MyPrevious == null && (MyItemInfo.MyActiveSection as SectionInfo) != null bool onnewpage = MyItemInfo.MyPrevious == null && (MyItemInfo.MyActiveSection as SectionInfo) != null
&& (MyItemInfo.MyActiveSection as SectionInfo).IsSeparatePagination(); && (MyItemInfo.MyActiveSection as SectionInfo).IsSeparatePagination();
// B2020-123: Missing section continue message, onnewpage needs to be set to true: // B2020-123: Missing section continue message, onnewpage needs to be set to true:
@ -683,16 +683,16 @@ namespace Volian.Print.Library
onnewpage = true; onnewpage = true;
MyParent.CalvertPrintedSubSectTitle = false; MyParent.CalvertPrintedSubSectTitle = false;
} }
BuildPageBreakList(ySpaceOnFirstPage, yPageSize + yExtra2 + MyPageHelper.PrintedSectionPage, KeepStepsOnPage, yEndMsg, doSectionTitleContinued & SectionShowTitles, onnewpage); // Case 5 - Determine items where page break(s) occur BuildPageBreakList(ySpaceOnFirstPage, yPageSize + yExtra2 + MyPageHelper.PrintedSectionPage, KeepStepsOnPage, yEndMsg, doSectionTitleContinued & SectionShowTitles, onnewpage); // Case 5 - Determine items where page break(s) occur
// ooooo ooooo ooooo .oooooo..o .oooooo..o oooo o8o . .oooooo. . // ooooo ooooo ooooo .oooooo..o .oooooo..o oooo o8o . .oooooo. .
// `888' `888' `888' d8P' `Y8 d8P' `Y8 `888 `"' .o8 d8P' `Y8b .o8 // `888' `888' `888' d8P' `Y8 d8P' `Y8 `888 `"' .o8 d8P' `Y8b .o8
// 888 888 888 Y88bo. Y88bo. oo.ooooo. 888 oooo .o888oo 888 oooo oooo oooo d8b oooo d8b .ooooo. ooo. .oo. .o888oo // 888 888 888 Y88bo. Y88bo. oo.ooooo. 888 oooo .o888oo 888 oooo oooo oooo d8b oooo d8b .ooooo. ooo. .oo. .o888oo
// 888ooooo888 888 `"Y8888o. `"Y8888o. 888' `88b 888 `888 888 888 `888 `888 `888""8P `888""8P d88' `88b `888P"Y88b 888 // 888ooooo888 888 `"Y8888o. `"Y8888o. 888' `88b 888 `888 888 888 `888 `888 `888""8P `888""8P d88' `88b `888P"Y88b 888
// 888 888 888 `"Y88b `"Y88b 888 888 888 888 888 888 888 888 888 888 888ooo888 888 888 888 // 888 888 888 `"Y88b `"Y88b 888 888 888 888 888 888 888 888 888 888 888ooo888 888 888 888
// 888 888 888 o oo .d8P oo .d8P 888 888 888 888 888 . `88b ooo 888 888 888 888 888 .o 888 888 888 . // 888 888 888 o oo .d8P oo .d8P 888 888 888 888 888 . `88b ooo 888 888 888 888 888 .o 888 888 888 .
// o888o o888o o888ooooood8 8""88888P' 8""88888P' 888bod8P' o888o o888o "888" `Y8bood8P' `V88V"V8P' d888b d888b `Y8bod8P' o888o o888o "888" // o888o o888o o888ooooood8 8""88888P' 8""88888P' 888bod8P' o888o o888o "888" `Y8bood8P' `V88V"V8P' d888b d888b `Y8bod8P' o888o o888o "888"
// 888 // 888
// o888o // o888o
if (firstStep == "Yes") if (firstStep == "Yes")
{ {
//ySpaceOnFirstPage = yWithinMargins; // Accounts for Section Title Line //ySpaceOnFirstPage = yWithinMargins; // Accounts for Section Title Line
@ -701,10 +701,10 @@ namespace Volian.Print.Library
else else
ShowPageBreak(6, CheckForFirstCompression("HLS will have to split on current page"), "Special", YSize, yPageSizeNextPage, yWithinMargins, ManualPageBreak); ShowPageBreak(6, CheckForFirstCompression("HLS will have to split on current page"), "Special", YSize, yPageSizeNextPage, yWithinMargins, ManualPageBreak);
// B2018-081 - Fix pagination when a Step and it's substeps are so complicated that the high level step is separated from its high level RNO // B2018-081 - Fix pagination when a Step and it's substeps are so complicated that the high level step is separated from its high level RNO
if (this.MyItemInfo.IsHigh && MyPageHelper.ParaBreaks.Count > 0 && MyPageHelper.ParaBreaks[0].MyItemInfo.IsHigh) if(this.MyItemInfo.IsHigh && MyPageHelper.ParaBreaks.Count > 0 && MyPageHelper.ParaBreaks[0].MyItemInfo.IsHigh)
{ {
MyPageHelper.ParaBreaks.Clear(); MyPageHelper.ParaBreaks.Clear();
BuildPageBreakList(yPageSize + yExtra, yPageSizeNextPage + yExtra2, KeepStepsOnPage, yEndMsg, doSectionTitleContinued & SectionShowTitles, true); // Case 1 :Works for ES05 Step 15 SubStep 7 BuildPageBreakList(yPageSize + yExtra, yPageSizeNextPage + yExtra2, KeepStepsOnPage, yEndMsg, doSectionTitleContinued & SectionShowTitles, true); // Case 1 :Works for ES05 Step 15 SubStep 7
ShowPageBreak(6, CheckForFirstCompression("HLS will have to split on next page"), "Special", YSize, yPageSizeNextPage, yWithinMargins, ManualPageBreak); ShowPageBreak(6, CheckForFirstCompression("HLS will have to split on next page"), "Special", YSize, yPageSizeNextPage, yWithinMargins, ManualPageBreak);
return 1; return 1;
} }
@ -714,7 +714,7 @@ namespace Volian.Print.Library
&& ChildrenRight[0].YSize <= yPageSizeNextPage && ChildrenRight[0].YSize > yWithinMargins) && ChildrenRight[0].YSize <= yPageSizeNextPage && ChildrenRight[0].YSize > yWithinMargins)
{ {
MyPageHelper.ParaBreaks.Clear(); MyPageHelper.ParaBreaks.Clear();
BuildPageBreakList(yPageSize + yExtra, yPageSizeNextPage + yExtra2, KeepStepsOnPage, yEndMsg, doSectionTitleContinued & SectionShowTitles, true); // Case 1 :Works for ES05 Step 15 SubStep 7 BuildPageBreakList(yPageSize + yExtra, yPageSizeNextPage + yExtra2, KeepStepsOnPage, yEndMsg, doSectionTitleContinued & SectionShowTitles, true); // Case 1 :Works for ES05 Step 15 SubStep 7
ShowPageBreak(6, CheckForFirstCompression("HLS with RNO will have to split on next page"), "Special", YSize, yPageSizeNextPage, yWithinMargins, ManualPageBreak); ShowPageBreak(6, CheckForFirstCompression("HLS with RNO will have to split on next page"), "Special", YSize, yPageSizeNextPage, yWithinMargins, ManualPageBreak);
return 1; return 1;
} }
@ -727,7 +727,7 @@ namespace Volian.Print.Library
ShowPageBreak(6, CheckForFirstCompression("HLS with Separate Pagination for SubSection"), "Special", YSize, yPageSizeNextPage, yWithinMargins, ManualPageBreak); ShowPageBreak(6, CheckForFirstCompression("HLS with Separate Pagination for SubSection"), "Special", YSize, yPageSizeNextPage, yWithinMargins, ManualPageBreak);
return 1; return 1;
} }
return 0; // Stay on this page return 0; // Stay on this page
} }
// Less than half a page left, start printing on a new page. // Less than half a page left, start printing on a new page.
@ -738,21 +738,21 @@ namespace Volian.Print.Library
// Pagination Fix Break1LineShort2 // Pagination Fix Break1LineShort2
//BuildPageBreakList(yPageSize + yExtra, yPageSize); // Case 1 :Works for ES05 Step 15 SubStep 7 //BuildPageBreakList(yPageSize + yExtra, yPageSize); // Case 1 :Works for ES05 Step 15 SubStep 7
// Pagination Fix Break1LineShort4 // Pagination Fix Break1LineShort4
BuildPageBreakList(yPageSize + yExtra, yPageSizeNextPage + yExtra2, KeepStepsOnPage, yEndMsg, doSectionTitleContinued & SectionShowTitles, true); // Case 1 :Works for ES05 Step 15 SubStep 7 BuildPageBreakList(yPageSize + yExtra, yPageSizeNextPage + yExtra2, KeepStepsOnPage, yEndMsg, doSectionTitleContinued & SectionShowTitles, true); // Case 1 :Works for ES05 Step 15 SubStep 7
// ooooo ooooo ooooo .oooooo..o .oooooo..o oooo o8o . ooooo ooo // ooooo ooooo ooooo .oooooo..o .oooooo..o oooo o8o . ooooo ooo
// `888' `888' `888' d8P' `Y8 d8P' `Y8 `888 `"' .o8 `888b. `8' // `888' `888' `888' d8P' `Y8 d8P' `Y8 `888 `"' .o8 `888b. `8'
// 888 888 888 Y88bo. Y88bo. oo.ooooo. 888 oooo .o888oo 8 `88b. 8 .ooooo. oooo oooo ooo // 888 888 888 Y88bo. Y88bo. oo.ooooo. 888 oooo .o888oo 8 `88b. 8 .ooooo. oooo oooo ooo
// 888ooooo888 888 `"Y8888o. `"Y8888o. 888' `88b 888 `888 888 8 `88b. 8 d88' `88b `88. `88. .8' // 888ooooo888 888 `"Y8888o. `"Y8888o. 888' `88b 888 `888 888 8 `88b. 8 d88' `88b `88. `88. .8'
// 888 888 888 `"Y88b `"Y88b 888 888 888 888 888 8 `88b.8 888ooo888 `88..]88..8' // 888 888 888 `"Y88b `"Y88b 888 888 888 888 888 8 `88b.8 888ooo888 `88..]88..8'
// 888 888 888 o oo .d8P oo .d8P 888 888 888 888 888 . 8 `888 888 .o `888'`888' // 888 888 888 o oo .d8P oo .d8P 888 888 888 888 888 . 8 `888 888 .o `888'`888'
// o888o o888o o888ooooood8 8""88888P' 8""88888P' 888bod8P' o888o o888o "888" o8o `8 `Y8bod8P' `8' `8' // o888o o888o o888ooooood8 8""88888P' 8""88888P' 888bod8P' o888o o888o "888" o8o `8 `Y8bod8P' `8' `8'
// 888 // 888
// o888o // o888o
if (firstStep == "Yes") if (firstStep == "Yes")
ShowPageBreak(9, CheckForFirstCompression("First HLS will have to split on new page"), "Yes", YSize, yPageSizeNextPage, yWithinMargins, ManualPageBreak); ShowPageBreak(9, CheckForFirstCompression("First HLS will have to split on new page"), "Yes", YSize, yPageSizeNextPage, yWithinMargins, ManualPageBreak);
else else
ShowPageBreak(3, CheckForFirstCompression("HLS will have to split on new page"), "Yes", YSize, yPageSizeNextPage, yWithinMargins, ManualPageBreak); ShowPageBreak(3, CheckForFirstCompression("HLS will have to split on new page"), "Yes", YSize, yPageSizeNextPage, yWithinMargins, ManualPageBreak);
return 1; // Paginate on High Level Steps return 1; // Paginate on High Level Steps
} }
//if (yWithinMargins > yPageSize / 2) //if (yWithinMargins > yPageSize / 2)
//{ //{
@ -773,7 +773,7 @@ namespace Volian.Print.Library
bool hasRNO = false; bool hasRNO = false;
if (itemInfo1.IsInRNO) hasRNO |= true; if (itemInfo1.IsInRNO) hasRNO |= true;
else else
hasAER |= true; hasAER |=true;
if (itemInfo2.IsInRNO) hasRNO |= true; if (itemInfo2.IsInRNO) hasRNO |= true;
else else
hasAER |= true; hasAER |= true;
@ -787,14 +787,14 @@ namespace Volian.Print.Library
if (endmsg != "") if (endmsg != "")
{ {
string[] splitOn = { "\\par" }; // B2018-058 account for RTF newlines ( used for V.C. Summer End messages) string[] splitOn = { "\\par" }; // B2018-058 account for RTF newlines ( used for V.C. Summer End messages)
EndMsgHeight = (endmsg.Split(splitOn, StringSplitOptions.RemoveEmptyEntries).Length + 1) * SixLinesPerInch; EndMsgHeight = (endmsg.Split(splitOn,StringSplitOptions.RemoveEmptyEntries).Length + 1) * SixLinesPerInch;
} }
return EndMsgHeight; return EndMsgHeight;
} }
private float GetBottomEndMessageSize(DocStyle docstyle) private float GetBottomEndMessageSize(DocStyle docstyle)
{ {
float myBottomMsgSpace = 0; float myBottomMsgSpace = 0;
if (MyItemInfo.IsHigh && MyItemInfo.NextItem == null && MyItemInfo.MyDocStyle.End.Flag < 0) // Adjust this many lines down the page. if (MyItemInfo.IsHigh && MyItemInfo.NextItem == null && MyItemInfo.MyDocStyle.End.Flag < 0) // Adjust this many lines down the page.
{ {
docstyle = MyItemInfo.MyDocStyle; docstyle = MyItemInfo.MyDocStyle;
string myBottomMsg = docstyle.End.Message; string myBottomMsg = docstyle.End.Message;
@ -876,7 +876,7 @@ namespace Volian.Print.Library
// B2020-159: If forced pagination errors occurred, add a description to be placed on a dialog after printing. // B2020-159: If forced pagination errors occurred, add a description to be placed on a dialog after printing.
if (PromsPrinter.ForcedPaginations == null) PromsPrinter.ForcedPaginations = new List<string>(); if (PromsPrinter.ForcedPaginations == null) PromsPrinter.ForcedPaginations = new List<string>();
string path = MyItemInfo.Path.Replace(MyItemInfo.MyProcedure.DisplayText, "").Replace(MyItemInfo.MyProcedure.DisplayNumber, "").TrimStart(" ,".ToCharArray()); string path = MyItemInfo.Path.Replace(MyItemInfo.MyProcedure.DisplayText, "").Replace(MyItemInfo.MyProcedure.DisplayNumber, "").TrimStart(" ,".ToCharArray());
PromsPrinter.ForcedPaginations.Add(string.Format("{0}\t{1}\t{2}", MyPromsPrinter.PDFFile.Substring(0, MyPromsPrinter.PDFFile.IndexOf(".")), path, MyItemInfo.PageNumber)); PromsPrinter.ForcedPaginations.Add(string.Format("{0}\t{1}\t{2}", MyPromsPrinter.PDFFile.Substring(0,MyPromsPrinter.PDFFile.IndexOf(".")), path, MyItemInfo.PageNumber));
} }
if (MyPromsPrinter.SupInfoPrintType == E_SupInfoPrintType.Merge && MyPageHelper.CreatingSupInfoPage) if (MyPromsPrinter.SupInfoPrintType == E_SupInfoPrintType.Merge && MyPageHelper.CreatingSupInfoPage)
@ -888,18 +888,18 @@ namespace Volian.Print.Library
if (breakOrNot != "No") if (breakOrNot != "No")
{ {
bool hasBox = MyItemInfo.IsStep && MyItemInfo.MyHLS.FormatStepData.StepLayoutData.STBoxindex != null && MyItemInfo.MyHLS.FormatStepData.StepLayoutData.STBoxindex >= 0; bool hasBox = MyItemInfo.IsStep && MyItemInfo.MyHLS.FormatStepData.StepLayoutData.STBoxindex != null && MyItemInfo.MyHLS.FormatStepData.StepLayoutData.STBoxindex >= 0;
bool rnoSepIn = (MyItemInfo.RNOs == null || MyItemInfo.RNOs.Count == 0); bool rnoSepIn = (MyItemInfo.RNOs==null ||MyItemInfo.RNOs.Count==0);
// DebugPagination.WriteLine("{0}", MyItemInfo.DBSequence); //,instance); // DebugPagination.WriteLine("{0}", MyItemInfo.DBSequence); //,instance);
if (DebugPagination.IsOpen) DebugPagination.WriteLine("{0:D6},'{1}',{2},'{3}','{4}',{5},{6},{7},{8},{9},{10},{11}", if (DebugPagination.IsOpen) DebugPagination.WriteLine("{0:D6},'{1}',{2},'{3}','{4}',{5},{6},{7},{8},{9},{10},{11}",
MyPageHelper.MyPdfContentByte.PdfWriter.CurrentPageNumber - (breakOrNot == "Yes" ? 0 : 1), MyPageHelper.MyPdfContentByte.PdfWriter.CurrentPageNumber - (breakOrNot == "Yes" ? 0 : 1),
MyItemInfo.ShortPath, instance, MyItemInfo.ShortPath, instance,
(manualPageBreak ? "Manual " : "") + message, breakOrNot, (manualPageBreak ? "Manual " : "") + message, breakOrNot,
MyItemInfo.ItemID, YSize, yPageSize, yWithinMargins, (int)(100 * yWithinMargins / yPageSize), MyItemInfo.ItemID, YSize, yPageSize, yWithinMargins, (int)(100 * yWithinMargins / yPageSize),
hasBox, rnoSepIn hasBox, rnoSepIn
); );
//C2018-015 add debug pagination to meta file //C2018-015 add debug pagination to meta file
if (BaselineMetaFile.IsOpen) BaselineMetaFile.WriteLine("!! {0:D6},'{1}',{2},'{3}','{4}',{5},{6},{7},{8},{9},{10},{11}", if (BaselineMetaFile.IsOpen) BaselineMetaFile.WriteLine("!! {0:D6},'{1}',{2},'{3}','{4}',{5},{6},{7},{8},{9},{10},{11}",
MyPageHelper.MyPdfContentByte.PdfWriter.CurrentPageNumber - (breakOrNot == "Yes" ? 0 : 1), MyPageHelper.MyPdfContentByte.PdfWriter.CurrentPageNumber - (breakOrNot == "Yes" ? 0 : 1),
MyItemInfo.ShortPath, instance, MyItemInfo.ShortPath, instance,
(manualPageBreak ? "Manual " : "") + message, breakOrNot, (manualPageBreak ? "Manual " : "") + message, breakOrNot,
MyItemInfo.ItemID, YSize, yPageSize, yWithinMargins, (int)(100 * yWithinMargins / yPageSize), MyItemInfo.ItemID, YSize, yPageSize, yWithinMargins, (int)(100 * yWithinMargins / yPageSize),
@ -920,11 +920,11 @@ namespace Volian.Print.Library
private List<vlnParagraph> _AlternateBreaks = null; private List<vlnParagraph> _AlternateBreaks = null;
public List<vlnParagraph> AlternateBreaks public List<vlnParagraph> AlternateBreaks
{ {
get get
{ {
if (_AlternateBreaks == null) if (_AlternateBreaks == null)
_AlternateBreaks = new List<vlnParagraph>(); _AlternateBreaks = new List<vlnParagraph>();
return _AlternateBreaks; return _AlternateBreaks;
} }
} }
private void AddAlternateBreak(vlnParagraph vp) private void AddAlternateBreak(vlnParagraph vp)
@ -934,10 +934,10 @@ namespace Volian.Print.Library
private bool CheckAlternates(vlnParagraph vpBrk) private bool CheckAlternates(vlnParagraph vpBrk)
{ {
if (_AlternateBreaks == null) return false; if (_AlternateBreaks == null) return false;
foreach (vlnParagraph vp in AlternateBreaks) foreach(vlnParagraph vp in AlternateBreaks)
if (vp.MyItemInfo.ItemID == vpBrk.MyItemInfo.ItemID) if (vp.MyItemInfo.ItemID == vpBrk.MyItemInfo.ItemID)
{ {
// _MyLog.WarnFormat("alternate used '{0}'-'{1}'",vpBrk.MyItemInfo.ShortPath,vp.MyItemInfo.ShortPath); // _MyLog.WarnFormat("alternate used '{0}'-'{1}'",vpBrk.MyItemInfo.ShortPath,vp.MyItemInfo.ShortPath);
return true; return true;
} }
return false; return false;
@ -993,13 +993,13 @@ namespace Volian.Print.Library
yLowerLimit = yStart + 2 * SixLinesPerInch; yLowerLimit = yStart + 2 * SixLinesPerInch;
} }
// Make sure that the FirstPiece (Caution Note HLS and First Substeps) fit // Make sure that the FirstPiece (Caution Note HLS and First Substeps) fit
float myFirstPieceSize = GetFirstPieceSize(); //Case 0 float myFirstPieceSize = GetFirstPieceSize(); //Case 0
// the following logic was added to fix Pagination for VCS BDMG1 Step 4 // the following logic was added to fix Pagination for VCS BDMG1 Step 4
if (ChildrenRight.Count > 0 && ChildrenRight[0].YOffset == YOffset) if (ChildrenRight.Count > 0 && ChildrenRight[0].YOffset == YOffset)
{ {
float myFirstPieceRNOSize = 0; float myFirstPieceRNOSize = 0;
myFirstPieceRNOSize = ChildrenRight[0].GetFirstPieceSize(); myFirstPieceRNOSize = ChildrenRight[0].GetFirstPieceSize();
if (myFirstPieceRNOSize < ySpaceOnCurPage) if(myFirstPieceRNOSize < ySpaceOnCurPage)
if (ChildrenBelow.Count > 0) if (ChildrenBelow.Count > 0)
{ {
float myFirstPieceAERSize = ChildrenBelow[0].GetFirstPieceSize() + ChildrenBelow[0].YOffset - YOffset; float myFirstPieceAERSize = ChildrenBelow[0].GetFirstPieceSize() + ChildrenBelow[0].YOffset - YOffset;
@ -1014,12 +1014,12 @@ namespace Volian.Print.Library
float myBottomMsgSpace = GetBottomContinueMessageSize(docstyle); float myBottomMsgSpace = GetBottomContinueMessageSize(docstyle);
switch (docstyle.Continue.Bottom.Location) switch (docstyle.Continue.Bottom.Location)
{ {
case E_ContBottomLoc.BottomOfPage: // place continue message at bottom of page case E_ContBottomLoc.BottomOfPage: // place continue message at bottom of page
// The following format flag was added for FNP, without the flag (which stops the reset of BottomMsgSpace) // The following format flag was added for FNP, without the flag (which stops the reset of BottomMsgSpace)
// a number of FNP procedures had overwritten steps/bottom continue message. An example can be // a number of FNP procedures had overwritten steps/bottom continue message. An example can be
// found in FNP = SAMGS;FNP-1-SACRG-2, step 1. // found in FNP = SAMGS;FNP-1-SACRG-2, step 1.
if (!docstyle.Continue.Bottom.NoOverrideSpace) if (!docstyle.Continue.Bottom.NoOverrideSpace)
myBottomMsgSpace = 0; myBottomMsgSpace = 0;
break; break;
} }
// also account for phonelist for locating bottom continue message: // also account for phonelist for locating bottom continue message:
@ -1089,7 +1089,7 @@ namespace Volian.Print.Library
// to have page breaks. As each of these are processed (after this code) the topmost item in PageBreakOnStepList is removed. // to have page breaks. As each of these are processed (after this code) the topmost item in PageBreakOnStepList is removed.
// The following checks if the entire step will fit for these types of steps and if so return the next break, i.e. [0], from the PageBreakOnStepList. // The following checks if the entire step will fit for these types of steps and if so return the next break, i.e. [0], from the PageBreakOnStepList.
// The if was changed to fix B2017-161. // The if was changed to fix B2017-161.
bool DidPreferredPageBreak = false; bool DidPreferredPageBreak = false;
if (PageBreakOnStepList.Count > 0 && (PageBreakOnStepList[0].YTop - (lastBreak == null ? ((TopMostChild != null) ? TopMostChild.YTop : 0) : lastBreak.YTop) <= ySpaceOnCurPage)) if (PageBreakOnStepList.Count > 0 && (PageBreakOnStepList[0].YTop - (lastBreak == null ? ((TopMostChild != null) ? TopMostChild.YTop : 0) : lastBreak.YTop) <= ySpaceOnCurPage))
paraBreak = PageBreakOnStepList[0]; paraBreak = PageBreakOnStepList[0];
else else
@ -1115,10 +1115,10 @@ namespace Volian.Print.Library
// B2017-109: for supplemental information, if there is a preferred page break, account for it. // B2017-109: for supplemental information, if there is a preferred page break, account for it.
// B2018-033 VCS SAG-6 Steps 3 and 9 and SACRG1 Step 13 // B2018-033 VCS SAG-6 Steps 3 and 9 and SACRG1 Step 13
// Break after table if it's the only item left and there is enough space // Break after table if it's the only item left and there is enough space
if (paraBreak != null && paraBreak.MyGrid != null && ItemsLeft(myList) == 1 && if (paraBreak != null && paraBreak.MyGrid != null && ItemsLeft(myList) == 1 &&
((YSize - yTop) <= (paraBreak.MyGrid.SpaceAvailable + ySpaceOnCurPage - (accountForCalvertAlarmConditionResponseFooter + yEndMsg)))) ((YSize - yTop) <= (paraBreak.MyGrid.SpaceAvailable + ySpaceOnCurPage - (accountForCalvertAlarmConditionResponseFooter + yEndMsg))))
break; break;
if (myPreferredBreaks != null && myPreferredBreaks.Count > 0 && myPreferredBreaks.Keys[0] < paraBreak.YOffset) if (myPreferredBreaks != null && myPreferredBreaks.Count > 0 && myPreferredBreaks.Keys[0] < paraBreak.YOffset)
{ {
// B2017-122: don't use preferred break if the last break was before this break // B2017-122: don't use preferred break if the last break was before this break
vlnParagraph prefBreak = myPreferredBreaks[myPreferredBreaks.Keys[0]]; vlnParagraph prefBreak = myPreferredBreaks[myPreferredBreaks.Keys[0]];
@ -1199,9 +1199,9 @@ namespace Volian.Print.Library
} }
if (MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.WolfcreekCKLFormat) if (MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.WolfcreekCKLFormat)
{ {
if (!paraBreak.MyItemInfo.IsHigh // not a high level step if (!paraBreak.MyItemInfo.IsHigh // not a high level step
&& paraBreak.MyParent.MyItemInfo.IsHigh // my parent is a hls && paraBreak.MyParent.MyItemInfo.IsHigh // my parent is a hls
&& paraBreak.MyItemInfo.MyPrevious == null // first substep && paraBreak.MyItemInfo.MyPrevious == null // first substep
&& paraBreak.MyParent.MyItemInfo.FormatStepData.UseSmartTemplate) // my parent has the checklist header && paraBreak.MyParent.MyItemInfo.FormatStepData.UseSmartTemplate) // my parent has the checklist header
{ {
if (DebugPagination.IsOpen) DebugPagination.WriteLine("Breaking at parent of {0}", paraBreak.MyItemInfo.DisplayText); if (DebugPagination.IsOpen) DebugPagination.WriteLine("Breaking at parent of {0}", paraBreak.MyItemInfo.DisplayText);
@ -1375,7 +1375,7 @@ namespace Volian.Print.Library
// | Flags compression for 1st page | // | Flags compression for 1st page |
// | (1st page doesn't use paraBreak) | // | (1st page doesn't use paraBreak) |
// //
if (lastBreak != null) // not on first page of step if (lastBreak != null) // not on first page of step
{ {
lastBreak.PageBreakReason = "More of Step at 7 LPI"; lastBreak.PageBreakReason = "More of Step at 7 LPI";
lastBreak.CompressPartOfStep = true; lastBreak.CompressPartOfStep = true;
@ -1424,7 +1424,7 @@ namespace Volian.Print.Library
RemoveProcessedParagraphs(myList, yTopNew - yTop); RemoveProcessedParagraphs(myList, yTopNew - yTop);
yTop = yTopNew; yTop = yTopNew;
MyPageHelper.ParaBreaks.Add(paraBreak); MyPageHelper.ParaBreaks.Add(paraBreak);
ySpaceOnNextPage1 -= paraBreak.GetSectionTopMessageSize(); // B2016-134: Account for wcntraining section top continue on substep containers (notes/cautions) ySpaceOnNextPage1 -= paraBreak.GetSectionTopMessageSize(); // B2016-134: Account for wcntraining section top continue on substep containers (notes/cautions)
SectionConfig sch = MyItemInfo.ActiveSection.MyConfig as SectionConfig; SectionConfig sch = MyItemInfo.ActiveSection.MyConfig as SectionConfig;
// B2016-266 Only set SectionTitleContinued1 if the format supports section continue messages // B2016-266 Only set SectionTitleContinued1 if the format supports section continue messages
bool doSectionTitleContinued1 = (sch == null || sch.Section_PrintHdr == "Y") && !MyItemInfo.MyDocStyle.CancelSectTitle && MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.ContinueSectionHeader; bool doSectionTitleContinued1 = (sch == null || sch.Section_PrintHdr == "Y") && !MyItemInfo.MyDocStyle.CancelSectTitle && MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.ContinueSectionHeader;
@ -1435,9 +1435,9 @@ namespace Volian.Print.Library
doSectionTitleContinued1 = false; doSectionTitleContinued1 = false;
} }
if (doSectionTitleContinued1) ySpaceOnNextPage1 -= 2 * SixLinesPerInch; // B2016-195: Account for Section Continue Message if (doSectionTitleContinued1) ySpaceOnNextPage1 -= 2 * SixLinesPerInch; // B2016-195: Account for Section Continue Message
// B2017-161: unnecessary PageBreak for background documents: use the 'usedPageBreakOnStepList' flag when using the PageBreakOnStepList, don't adjust space on page to account // B2017-161: unnecessary PageBreak for background documents: use the 'usedPageBreakOnStepList' flag when using the PageBreakOnStepList, don't adjust space on page to account
// for continue message, if there is not one. // for continue message, if there is not one.
// B2017-252 Pagination Fix - RNP was not paginating correctly. Added logic to set ySPaceOnCurPage if ySpaceOnNextPage was larger // B2017-252 Pagination Fix - RNP was not paginating correctly. Added logic to set ySPaceOnCurPage if ySpaceOnNextPage was larger
if (!usedPageBreakOnStepList || ySpaceOnNextPage1 > ySpaceOnCurPage) ySpaceOnCurPage = ySpaceOnNextPage1; if (!usedPageBreakOnStepList || ySpaceOnNextPage1 > ySpaceOnCurPage) ySpaceOnCurPage = ySpaceOnNextPage1;
//ySpaceOnCurPage = yPageSize - (myTopMsgSpace + SixLinesPerInch); // Allow for continue message and blank line. //ySpaceOnCurPage = yPageSize - (myTopMsgSpace + SixLinesPerInch); // Allow for continue message and blank line.
@ -1465,7 +1465,7 @@ namespace Volian.Print.Library
} }
float ySpaceAt7LPI = (adjustedCurPageYSpace - (accountForCalvertAlarmConditionResponseFooter + yEndMsg)) * SixLinesPerInch / _SevenLinesPerInch; float ySpaceAt7LPI = (adjustedCurPageYSpace - (accountForCalvertAlarmConditionResponseFooter + yEndMsg)) * SixLinesPerInch / _SevenLinesPerInch;
if ((YSize - yTop) > (adjustedCurPageYSpace - (accountForCalvertAlarmConditionResponseFooter + yEndMsg)) if ((YSize - yTop) > (adjustedCurPageYSpace - (accountForCalvertAlarmConditionResponseFooter + yEndMsg))
&& (YSize - yTop) < ySpaceAt7LPI) && (YSize - yTop) < ySpaceAt7LPI )
{ {
// Compress Rest of Step // Compress Rest of Step
// .oooooo. ooooooooo. . // .oooooo. ooooooooo. .
@ -1492,8 +1492,8 @@ namespace Volian.Print.Library
private int ItemsLeft(StepLevelList myList) private int ItemsLeft(StepLevelList myList)
{ {
int retval = 0; int retval = 0;
foreach (int stepLevel in myList.Keys) // loop thru StepLevels, starting with lowest. foreach (int stepLevel in myList.Keys) // loop thru StepLevels, starting with lowest.
foreach (float yLocation in myList[stepLevel].Keys) // loop thru yLocation foreach (float yLocation in myList[stepLevel].Keys) // loop thru yLocation
retval++; retval++;
return retval; return retval;
} }
@ -1507,9 +1507,9 @@ namespace Volian.Print.Library
// C2023-018: Remove the supplemental info & alarm check, doing the possible page breaks on sub-steps // C2023-018: Remove the supplemental info & alarm check, doing the possible page breaks on sub-steps
//if (!MyItemInfo.MyDocStyle.SupplementalInformation && !MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.AlarmPagination) return null; //if (!MyItemInfo.MyDocStyle.SupplementalInformation && !MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.AlarmPagination) return null;
SortedList<float, vlnParagraph> sdpara = null; SortedList<float, vlnParagraph> sdpara = null;
foreach (int stepLevel in myList.Keys) // loop thru StepLevels, starting with lowest. foreach (int stepLevel in myList.Keys) // loop thru StepLevels, starting with lowest.
{ {
foreach (float yLocation in myList[stepLevel].Keys) // loop thru yLocation foreach (float yLocation in myList[stepLevel].Keys) // loop thru yLocation
{ {
vlnParagraph myPara = myList[stepLevel][yLocation]; vlnParagraph myPara = myList[stepLevel][yLocation];
StepConfig sci = myPara.MyItemInfo.MyConfig as StepConfig; StepConfig sci = myPara.MyItemInfo.MyConfig as StepConfig;
@ -1596,13 +1596,13 @@ namespace Volian.Print.Library
/// <param name="myList"></param> /// <param name="myList"></param>
/// <returns></returns> /// <returns></returns>
private static vlnParagraph FindPageBreak1(float yStart, float yUpperLimit, float yLowerLimit, StepLevelList myList, vlnParagraph lastBreak, float fullPage, private static vlnParagraph FindPageBreak1(float yStart, float yUpperLimit, float yLowerLimit, StepLevelList myList, vlnParagraph lastBreak, float fullPage,
float myBottomMsgSpace, bool RNOContinueOnly, float yTop) float myBottomMsgSpace,bool RNOContinueOnly, float yTop)
{ {
vlnParagraph minPara = null; vlnParagraph minPara = null;
//StringBuilder minBuff = new StringBuilder(); //StringBuilder minBuff = new StringBuilder();
float? yLocationMin = null; float? yLocationMin=null;
vlnParagraph minPara2 = null; vlnParagraph minPara2 = null;
float? yLocationMin2 = null; float? yLocationMin2=null;
float yAddForBtmMsg = 0; float yAddForBtmMsg = 0;
// useful for debugging pagination issues, lastbreak gets the paragraph at the top of the previous page, shows all // useful for debugging pagination issues, lastbreak gets the paragraph at the top of the previous page, shows all
// of the locations within 'range' on the next page. // of the locations within 'range' on the next page.
@ -1626,9 +1626,9 @@ namespace Volian.Print.Library
// } // }
// } // }
//} //}
foreach (int stepLevel in myList.Keys) // loop thru StepLevels, starting with lowest. foreach (int stepLevel in myList.Keys) // loop thru StepLevels, starting with lowest.
{ {
foreach (float yLocation in myList[stepLevel].Keys) // loop thru yLocation foreach (float yLocation in myList[stepLevel].Keys) // loop thru yLocation
{ {
float spaceOnPage = yUpperLimit + yLocation; float spaceOnPage = yUpperLimit + yLocation;
vlnParagraph myPara = myList[stepLevel][yLocation]; vlnParagraph myPara = myList[stepLevel][yLocation];
@ -1651,11 +1651,11 @@ namespace Volian.Print.Library
// The following lines were added for Comanche Peak ECA-TP-11-001A.SProcedure Steps.S17 (Printed as Step 12) // The following lines were added for Comanche Peak ECA-TP-11-001A.SProcedure Steps.S17 (Printed as Step 12)
if (spaceOnPage > 0 && myPara.YSize > fullPage && myPara.ChildrenRight != null && myPara.ChildrenRight.Count > 0 if (spaceOnPage > 0 && myPara.YSize > fullPage && myPara.ChildrenRight != null && myPara.ChildrenRight.Count > 0
&& myPara.ChildrenRight[0].YSize <= fullPage && myPara.ChildrenRight[0].YSize > spaceOnPage && myPara.ChildrenRight[0].YSize <= fullPage && myPara.ChildrenRight[0].YSize > spaceOnPage
// B2018-104: don't return if my parent is a high level - a top continue message was printing // B2018-104: don't return if my parent is a high level - a top continue message was printing
// Was not complete, i.e. caused other pagination problems and was put back in: B2019-170: VCS page break causes printing of step on top of next page. // Was not complete, i.e. caused other pagination problems and was put back in: B2019-170: VCS page break causes printing of step on top of next page.
// Note that this bug fix for WCN was commented out. Harry Julian wanted this on 11/15/19. A new bug will be written for the WCN error. // Note that this bug fix for WCN was commented out. Harry Julian wanted this on 11/15/19. A new bug will be written for the WCN error.
// B2019-173 reintroduced this line: // B2019-173 reintroduced this line:
&& !myPara.MyItemInfo.IsHigh) && !myPara.MyItemInfo.IsHigh)
{ {
//_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) if (myPara != lastBreak)
@ -1739,10 +1739,10 @@ namespace Volian.Print.Library
//while (myPara.MyParent.YTop == myPara.YTop) myPara = myPara.MyParent; //while (myPara.MyParent.YTop == myPara.YTop) myPara = myPara.MyParent;
while (myPara.MyParent != null && myPara.MyParent.YTop == myPara.YTop) myPara = myPara.MyParent; while (myPara.MyParent != null && myPara.MyParent.YTop == myPara.YTop) myPara = myPara.MyParent;
int everyNLines = myPara.MyItemInfo.MyPrevious != null && myPara.MyItemInfo.FormatStepData == null ? 1 : myPara.MyItemInfo.FormatStepData.StepLayoutData.EveryNLines ?? 1; int everyNLines = myPara.MyItemInfo.MyPrevious != null && myPara.MyItemInfo.FormatStepData == null ? 1 : myPara.MyItemInfo.FormatStepData.StepLayoutData.EveryNLines ?? 1;
bool inSameBox = InSameBox(myPara, minPara2); // if this note/caution is in same box as the break, don't break within the notes/cautions in the same box bool inSameBox = InSameBox(myPara, minPara2); // if this note/caution is in same box as the break, don't break within the notes/cautions in the same box
if (!inSameBox && myPara.ChildrenAbove.Count == 0 && wcnChkLstBorder - yLocation < yUpperLimit + yAddForBtmMsg || (everyNLines != 99 && (wcnChkLstBorder - yLocation == yUpperLimit + yAddForBtmMsg))) // Fix for OFN-RJ-23 if (!inSameBox && myPara.ChildrenAbove.Count == 0 && wcnChkLstBorder - yLocation < yUpperLimit + yAddForBtmMsg || (everyNLines != 99 && (wcnChkLstBorder - yLocation == yUpperLimit + yAddForBtmMsg))) // Fix for OFN-RJ-23
//if (-yLocation < yUpperLimit) // Before //if (-yLocation < yUpperLimit) // Before
//if (-yLocation < yWithinMargins && myList[stepLevel][yLocation].MyItemInfo.MyPrevious != null) //if (-yLocation < yWithinMargins && myList[stepLevel][yLocation].MyItemInfo.MyPrevious != null)
{ {
//ItemInfo prev = myList[stepLevel][yLocation].MyItemInfo.MyPrevious; //ItemInfo prev = myList[stepLevel][yLocation].MyItemInfo.MyPrevious;
//if (myList[stepLevel][yLocation].MyItemInfo.ItemID == 5609) Console.WriteLine("aer"); //if (myList[stepLevel][yLocation].MyItemInfo.ItemID == 5609) Console.WriteLine("aer");
@ -1768,7 +1768,7 @@ namespace Volian.Print.Library
} }
} }
// B2019-103, B2019-114 Break at a step if the step will fit on a page by itself and it will // 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 // not fit in the current page
float yAdjustLastSubStep = 0; float yAdjustLastSubStep = 0;
if ((myPara.MyItemInfo.ActiveParent as ItemInfo).IsHigh && myPara.MyItemInfo.NextItem == null) if ((myPara.MyItemInfo.ActiveParent as ItemInfo).IsHigh && myPara.MyItemInfo.NextItem == null)
{ {
@ -1779,8 +1779,8 @@ namespace Volian.Print.Library
_MyLog.WarnFormat("Last Substep will fit on page by itself {0}", myPara.MyItemInfo.ShortPath); // add information in the error log _MyLog.WarnFormat("Last Substep will fit on page by itself {0}", myPara.MyItemInfo.ShortPath); // add information in the error log
} }
if (StepWillFitOnBlankPageButNotOnCurrentPage(myPara, yLocation, yStart, fullPage + yAdjustLastSubStep)) if (StepWillFitOnBlankPageButNotOnCurrentPage(myPara, yLocation, yStart, fullPage + yAdjustLastSubStep))
if (myPara != lastBreak) if (myPara != lastBreak)
return myPara; return myPara;
// If this item will not fit on the current page, put a page break // If this item will not fit on the current page, put a page break
if (myPara.YBottom - myPara.YTop > (yUpperLimit + yLocation)) if (myPara.YBottom - myPara.YTop > (yUpperLimit + yLocation))
if (myPara != lastBreak) if (myPara != lastBreak)
@ -1800,7 +1800,7 @@ namespace Volian.Print.Library
} }
} }
//DebugPagination.Write(minBuff.ToString()); //DebugPagination.Write(minBuff.ToString());
if (-yLocationMin > yUpperLimit && minPara2 != null) minPara = null; if (-yLocationMin > yUpperLimit && minPara2 != null) minPara = null;
// if breaking at a note/caution - don't break within the same box. Clear minPara (like code above) // if breaking at a note/caution - don't break within the same box. Clear minPara (like code above)
// so that minPara2 is used. // so that minPara2 is used.
@ -1816,7 +1816,7 @@ namespace Volian.Print.Library
DebugPagination.WriteLine("B2020-148 {0}", minPara2); DebugPagination.WriteLine("B2020-148 {0}", minPara2);
_MyLog.WarnFormat("\r\n+++ Paginagion Change B2020-148 {0}", minPara2); _MyLog.WarnFormat("\r\n+++ Paginagion Change B2020-148 {0}", minPara2);
} }
return minPara ?? minPara2; return minPara ?? minPara2;
} }
// B2020-013 premature break in RNO column - Callaway OTO-AC-00002 step 2 // B2020-013 premature break in RNO column - Callaway OTO-AC-00002 step 2
@ -1824,7 +1824,7 @@ namespace Volian.Print.Library
// B2020-073 was not keeping all of RNO sub-step together - Comanche Peak FRC-0.1 (unit 1) Step 14 // B2020-073 was not keeping all of RNO sub-step together - Comanche Peak FRC-0.1 (unit 1) Step 14
// 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. // 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.
// B2020-085 was breaking first child of second RNO (third IF in RNO) - should break on second child of second RNO - D.C. Cook AOP Unit 1 002-020 Step 15 // B2020-085 was breaking first child of second RNO (third IF in RNO) - should break on second child of second RNO - D.C. Cook AOP Unit 1 002-020 Step 15
// B2020-099 was breaking on last sub-step of previous RNO - Calvert Approved Procedures; Abnormal Procedures <20> Unit 2; AOP-2A; Section VII; Step 11.RNO.11.1.c // B2020-099 was breaking on last sub-step of previous RNO - Calvert Approved Procedures; Abnormal Procedures Unit 2; AOP-2A; Section VII; Step 11.RNO.11.1.c
private vlnParagraph HasSecondRNOThatWillFit(float yStart, float yLowerLimit, float yUpperLimit, StepLevelList myList, int stepLevel, float yTop) private vlnParagraph HasSecondRNOThatWillFit(float yStart, float yLowerLimit, float yUpperLimit, StepLevelList myList, int stepLevel, float yTop)
{ {
// B2020-120: for calvert alarms/condition response table, don't run code for second rno // B2020-120: for calvert alarms/condition response table, don't run code for second rno
@ -1836,7 +1836,7 @@ namespace Volian.Print.Library
return this; return this;
// see if there is a second RNO then see if it will fit on the page // see if there is a second RNO then see if it will fit on the page
vlnParagraph tmp = this; vlnParagraph tmp = this;
while (!tmp.MyItemInfo.IsRNOPart && tmp.MyParent != null) tmp = tmp.MyParent; // if on a substep of an RNO, move up the substep's parent (RNO) while (!tmp.MyItemInfo.IsRNOPart && tmp.MyParent!=null) tmp = tmp.MyParent; // if on a substep of an RNO, move up the substep's parent (RNO)
vlnParagraph parent = tmp; vlnParagraph parent = tmp;
while (parent.MyParent != null && !parent.MyParent.MyItemInfo.IsSection) parent = parent.MyParent; // this will take us to the High level step 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 float yTopParent = parent.YTopMost; // this is where the HLS starts printing
@ -1875,13 +1875,13 @@ namespace Volian.Print.Library
return maxBottomMost; return maxBottomMost;
} }
private static bool StepWillFitOnBlankPageButNotOnCurrentPage(vlnParagraph myPara, float yLocation, float yStart, float fullPage) 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 // B2019-150 & B2019-151 Pagination Bugs Seen for Summer EOP4.1 Step 10 and
// SAG Step 9. Added format flag to limit when this logic would be used. // SAG Step 9. Added format flag to limit when this logic would be used.
if (myPara.MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.PaginateOnStepThatWillFitOnBlankPage == false) if (myPara.MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.PaginateOnStepThatWillFitOnBlankPage == false)
return false; return false;
float spaceOnCurrentPage = fullPage - (-yLocation + yStart); float spaceOnCurrentPage = fullPage - (-yLocation+yStart);
// B2019-124 - Pagination - if substep will fit on a blank page but will not fit on the current page // B2019-124 - Pagination - if substep will fit on a blank page but will not fit on the current page
// And is not the first substep then break // And is not the first substep then break
// B2019-130 - in Calvert data (FSG-1 Appendix 1 Unit 1 Actions, step E.1.g) the THEN sub step was placed on the next page // B2019-130 - in Calvert data (FSG-1 Appendix 1 Unit 1 Actions, step E.1.g) the THEN sub step was placed on the next page
@ -1927,7 +1927,7 @@ namespace Volian.Print.Library
if (myPara.MyItemInfo.ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvertPagination) if (myPara.MyItemInfo.ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvertPagination)
return (myPara.YOffset <= myParaBreak.YOffset && return (myPara.YOffset <= myParaBreak.YOffset &&
(myPara.YOffset + myPara.Height) >= myParaBreak.YOffset); (myPara.YOffset + myPara.Height) >= myParaBreak.YOffset);
return (myPara.YOffset == myParaBreak.YOffset); return(myPara.YOffset == myParaBreak.YOffset);
} }
private bool HasAncestor(vlnParagraph myParaBreak) private bool HasAncestor(vlnParagraph myParaBreak)
{ {
@ -1982,7 +1982,7 @@ namespace Volian.Print.Library
tsa = MyGrid.SpaceAvailable + MyGrid.LeadingSpaceAvailable; tsa = MyGrid.SpaceAvailable + MyGrid.LeadingSpaceAvailable;
if (btmRight != 0) if (btmRight != 0)
{ {
//_MyLog.WarnFormat("Item={00}, B={1} BR={2} T={3} TR={4}",MyItemInfo.ItemID , btm, btmRight, tsa, tsaRight); //_MyLog.WarnFormat("Item={00}, B={1} BR={2} T={3} TR={4}",MyItemInfo.ItemID , btm, btmRight, tsa, tsaRight);
if (btm < btmRight) if (btm < btmRight)
tsa = tsaRight; tsa = tsaRight;
} }
@ -1992,7 +1992,7 @@ namespace Volian.Print.Library
} }
public partial class VlnSvgPageHelper : SvgPageHelper public partial class VlnSvgPageHelper : SvgPageHelper
{ {
private bool _OriginalPageBreak; // use 16bit page breaks. private bool _OriginalPageBreak; // use 16bit page breaks.
public bool OriginalPageBreak public bool OriginalPageBreak
{ {
get { return _OriginalPageBreak; } get { return _OriginalPageBreak; }

View File

@ -179,10 +179,8 @@ namespace Volian.Print.Library
get { return _PDFFile; } get { return _PDFFile; }
set { _PDFFile = value; } set { _PDFFile = value; }
} }
// C2024-003 parameter contains parent section itemid, child section itemid, issubsection flag. private int _prtSectID = -1;
// C2024-003 values needed to print individual sections. public int PrtSectID
private int[] _prtSectID = new int[] { -1, -1, 0 };
public int[] PrtSectID
{ {
get { return _prtSectID; } get { return _prtSectID; }
set { _prtSectID = value; } set { _prtSectID = value; }
@ -325,7 +323,7 @@ namespace Volian.Print.Library
set { _MergedPdf = value; } set { _MergedPdf = value; }
} }
public PromsPrinter(ItemInfo myItem, string rev, string watermark, bool debugOutput, bool origPgBrk, string backgroundFolder, bool openPDF, bool overWrite, public PromsPrinter(ItemInfo myItem, string rev, string watermark, bool debugOutput, bool origPgBrk, string backgroundFolder, bool openPDF, bool overWrite,
ChangeBarDefinition cbd, String pdfFile, bool insertBlankPages, bool batchPrint, string prefix, bool saveLinks, int removeTrailngHardReturnsAndManualPageBreaks, string blankPageText, bool didAll, MergedPdf mergedPdf, string watermarkColor, int[] PrtSectID = null) ChangeBarDefinition cbd, String pdfFile, bool insertBlankPages, bool batchPrint, string prefix, bool saveLinks, int removeTrailngHardReturnsAndManualPageBreaks, string blankPageText, bool didAll, MergedPdf mergedPdf, string watermarkColor, int PrtSectID = -1)
{ {
Prefix = prefix; // RHM20150506 Multiline ItemID TextBox Prefix = prefix; // RHM20150506 Multiline ItemID TextBox
_MyItem = myItem; _MyItem = myItem;
@ -343,8 +341,6 @@ namespace Volian.Print.Library
_BatchPrint = batchPrint; _BatchPrint = batchPrint;
_MyReaderHelper = new ReaderHelper(this); _MyReaderHelper = new ReaderHelper(this);
_SaveLinks = saveLinks; _SaveLinks = saveLinks;
// C2024-003 parameter contains parent section itemid, child section itemid, issubsection flag.
_prtSectID = PrtSectID;
// C2021-010: Remove trailing returns/spaces & manual page breaks & allow save. // C2021-010: Remove trailing returns/spaces & manual page breaks & allow save.
if (removeTrailngHardReturnsAndManualPageBreaks == 1 || removeTrailngHardReturnsAndManualPageBreaks == 3) RemoveTrailingHardReturnsAndSpaces = new List<int>(); if (removeTrailngHardReturnsAndManualPageBreaks == 1 || removeTrailngHardReturnsAndManualPageBreaks == 3) RemoveTrailingHardReturnsAndSpaces = new List<int>();
if (removeTrailngHardReturnsAndManualPageBreaks == 2 || removeTrailngHardReturnsAndManualPageBreaks == 3) RemoveManualPageBreaks = new List<int>(); if (removeTrailngHardReturnsAndManualPageBreaks == 2 || removeTrailngHardReturnsAndManualPageBreaks == 3) RemoveManualPageBreaks = new List<int>();
@ -352,7 +348,8 @@ namespace Volian.Print.Library
_DidAll = didAll; _DidAll = didAll;
_MergeNotIncluded = false; _MergeNotIncluded = false;
_MergedPdf = mergedPdf; _MergedPdf = mergedPdf;
_prtSectID = PrtSectID;
//_MyReaderHelper.LoadTree(myItem);
} }
// Pass 1 PDF Name // Pass 1 PDF Name
private string _BeforePageNumberPdf = null; private string _BeforePageNumberPdf = null;
@ -371,11 +368,11 @@ namespace Volian.Print.Library
// B2019-152: MergedLandscapePages is a dictionary whose key is the pdf file name & values are all of the page numbers // B2019-152: MergedLandscapePages is a dictionary whose key is the pdf file name & values are all of the page numbers
// in that pdf that should have landscaped page numbers. These are added when the page is finished (onEndPage) // in that pdf that should have landscaped page numbers. These are added when the page is finished (onEndPage)
public static Dictionary<string, List<int>> MergedLandscapePages = null; public static Dictionary<string, List<int>> MergedLandscapePages = null;
public string Print(string pdfFolder, bool makePlacekeeper, bool makeContinuousActionSummary, bool makeTimeCriticalActionSummary, int[] PrtSectID = null) public string Print(string pdfFolder, bool makePlacekeeper, bool makeContinuousActionSummary, bool makeTimeCriticalActionSummary, int PrtSectID = -1)
{ {
if (_MyItem is ProcedureInfo) if (_MyItem is ProcedureInfo)
{ {
_prtSectID = PrtSectID; // C2024-003 parameter contains parent section itemid, child section itemid, issubsection flag. _prtSectID = PrtSectID;
ProcedureConfig pcfg = (ProcedureConfig)(_MyItem as ProcedureInfo).MyConfig; ProcedureConfig pcfg = (ProcedureConfig)(_MyItem as ProcedureInfo).MyConfig;
if (DidAll && pcfg.Print_NotInMergeAll) // will be merging a pdf, so don't print this procedure if user set that on procedure propertures if (DidAll && pcfg.Print_NotInMergeAll) // will be merging a pdf, so don't print this procedure if user set that on procedure propertures
{ {
@ -807,46 +804,23 @@ namespace Volian.Print.Library
VlnItextFont.RegisterFontFolder(); //B2019-174 register the font folder so that symbols will display on auto TOC VlnItextFont.RegisterFontFolder(); //B2019-174 register the font folder so that symbols will display on auto TOC
if (myProcedure.Sections != null) if (myProcedure.Sections != null)
{ {
SectionInfo CurSection = null; // C2024-003 detrimine if the user in printing a sub section.
if (Convert.ToBoolean(PrtSectID[2])) // If section is a CurSection retrieved the CurSection.
{
foreach (SectionInfo si2 in myProcedure.Sections)
{
if (si2.ItemID == PrtSectID[0])
{
foreach (SectionInfo subsi in si2.Sections) // Find Parent Section
{
if (subsi.ItemID == PrtSectID[1]) // Find sub section
{
CurSection = subsi; // Assign the subsection object to CurSection.
}
}
}
}
}
int cnt = 0; int cnt = 0;
foreach (SectionInfo mySection in myProcedure.Sections) foreach (SectionInfo mySection in myProcedure.Sections)
{ {
if (PrtSectID[0] == -1 || (PrtSectID[0] > -1 && mySection.ItemID == PrtSectID[0])) // C2024-003 check if the user is printing a section if (PrtSectID == -1 || (PrtSectID > -1 && mySection.ItemID == PrtSectID))
{ {
if (!mySection.MyDocStyle.IsStepSection && !mySection.IsAutoTOCSection)
if (!Convert.ToBoolean(PrtSectID[2])) // If section is not a Sub Section assign the iteration variable to CurSection. CurSection contains any type of section.
{ {
CurSection = mySection; // if section is not a sub section. VEPROMS.CSLA.Library.Document.ConvertWordSectionToDOCX((ItemInfo)mySection); // B2023-093 Convert a Word section to the DOCX Word format if needed before printing
}
if (!CurSection.MyDocStyle.IsStepSection && !CurSection.IsAutoTOCSection)
{
VEPROMS.CSLA.Library.Document.ConvertWordSectionToDOCX((ItemInfo)CurSection); // B2023-093 Convert a Word section to the DOCX Word format if needed before printing
} }
//C2019-042 Section_IsFoldout checks Section Number, Section Title, and use of check box //C2019-042 Section_IsFoldout checks Section Number, Section Title, and use of check box
if ((myProcedure.ActiveFormat.PlantFormat.FormatData.PrintData.SectionLevelFoldouts && (CurSection.MyConfig as SectionConfig).Section_IsFoldout == "Y") if ((myProcedure.ActiveFormat.PlantFormat.FormatData.PrintData.SectionLevelFoldouts && (mySection.MyConfig as SectionConfig).Section_IsFoldout == "Y")
|| (myProcedure.ActiveFormat.PlantFormat.FormatData.PrintData.AlternateFloatingFoldout && (CurSection.MyConfig as SectionConfig).Section_IsFoldout == "Y")) || (myProcedure.ActiveFormat.PlantFormat.FormatData.PrintData.AlternateFloatingFoldout && (mySection.MyConfig as SectionConfig).Section_IsFoldout == "Y"))
{ {
// if floating foldouts, need a list of sections & foldoutreaders. Just do first for now. // if floating foldouts, need a list of sections & foldoutreaders. Just do first for now.
_MyFoldoutSection.Add(CurSection); _MyFoldoutSection.Add(mySection);
string foldoutPdf = PrintProcedureOrFoldout(myProcedure, CurSection, Volian.Base.Library.VlnSettings.TemporaryFolder + @"\Foldout" + cnt.ToString() + @".pdf", false, false, false); string foldoutPdf = PrintProcedureOrFoldout(myProcedure, mySection, Volian.Base.Library.VlnSettings.TemporaryFolder + @"\Foldout" + cnt.ToString() + @".pdf", false, false, false);
_MyFoldoutReader.Add(foldoutPdf != null ? new PdfReader(foldoutPdf) : null); _MyFoldoutReader.Add(foldoutPdf != null ? new PdfReader(foldoutPdf) : null);
cnt++; cnt++;
} }
@ -977,67 +951,44 @@ namespace Volian.Print.Library
string clr = pc.GetValue("PSI", "WATERMARKOVERRIDECLR"); string clr = pc.GetValue("PSI", "WATERMARKOVERRIDECLR");
if (clr != null && clr != "") WatermarkOverrideColor = clr.ToUpper().Contains("DEFAULT") ? "BLUE" : clr; if (clr != null && clr != "") WatermarkOverrideColor = clr.ToUpper().Contains("DEFAULT") ? "BLUE" : clr;
} }
SectionInfo CurSection = null; // C2024-003 detrimine if the user is printing a sub section.1639
if (Convert.ToBoolean(PrtSectID[2]))
{
foreach (SectionInfo si2 in myProcedure.Sections) // Find parent section.
{
if (si2.ItemID == PrtSectID[0])
{
foreach (SectionInfo subsi in si2.Sections) // Find selected sub section.
{
if (subsi.ItemID == PrtSectID[1])
{
CurSection = subsi; // Assign sub section object to CurSection.
}
}
}
}
}
foreach (SectionInfo mySection in myProcedure.Sections) foreach (SectionInfo mySection in myProcedure.Sections)
{ {
if (PrtSectID[0] == -1 || (PrtSectID[0] > -1 && mySection.ItemID == PrtSectID[0])) if(PrtSectID == -1 || (PrtSectID > -1 && mySection.ItemID == PrtSectID) )
{ {
if (!Convert.ToBoolean(PrtSectID[2])) // If section is not a Sub Section assign the iteration variable to CurSection // B2020-115 Calculate maximum available space on a page for figures
{ vlnParagraph.hMax = ((float)mySection.MyDocStyle.Layout.PageLength);
CurSection = mySection; vlnParagraph.wMax = ((float)mySection.MyDocStyle.Layout.PageWidth) - ((float)mySection.MyDocStyle.Layout.LeftMargin - 12);
}
// B2020-115 Calculate maximum available space on a page for figures
vlnParagraph.hMax = ((float)CurSection.MyDocStyle.Layout.PageLength);
vlnParagraph.wMax = ((float)CurSection.MyDocStyle.Layout.PageWidth) - ((float)CurSection.MyDocStyle.Layout.LeftMargin - 12);
NeedSupInfoBreak = true; NeedSupInfoBreak = true;
bool isFoldoutSection = (CurSection.MyConfig as SectionConfig).Section_IsFoldout == "Y"; //C2019-042 Section_IsFoldout checks Section Number, Section Title, and use of check box bool isFoldoutSection = (mySection.MyConfig as SectionConfig).Section_IsFoldout == "Y"; //C2019-042 Section_IsFoldout checks Section Number, Section Title, and use of check box
if (((isFoldoutSection && myProcedure.ActiveFormat.PlantFormat.FormatData.PrintData.SectionLevelFoldouts) if (((isFoldoutSection && myProcedure.ActiveFormat.PlantFormat.FormatData.PrintData.SectionLevelFoldouts)
|| (myProcedure.ActiveFormat.PlantFormat.FormatData.PrintData.AlternateFloatingFoldout && isFoldoutSection)) || (myProcedure.ActiveFormat.PlantFormat.FormatData.PrintData.AlternateFloatingFoldout && isFoldoutSection))
!= doingFoldout) continue; != doingFoldout) continue;
if (myFoldoutSection != null && myFoldoutSection.ItemID != CurSection.ItemID) continue; if (myFoldoutSection != null && myFoldoutSection.ItemID != mySection.ItemID) continue;
PrintOverride.CompressSuper = CurSection.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.CompressHPSuper; PrintOverride.CompressSuper = mySection.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.CompressHPSuper;
PrintOverride.CompressSub = CurSection.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.CompressHPSub; PrintOverride.CompressSub = mySection.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.CompressHPSub;
PrintOverride.CompressPropSubSup = CurSection.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.CompressPropSubSup; PrintOverride.CompressPropSubSup = mySection.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.CompressPropSubSup;
OnStatusChanged((CurSection.DisplayNumber ?? "") == "" ? CurSection.DisplayText : CurSection.DisplayNumber, PromsPrinterStatusType.Progress, progress++); OnStatusChanged((mySection.DisplayNumber ?? "") == "" ? mySection.DisplayText : mySection.DisplayNumber, PromsPrinterStatusType.Progress, progress++);
// Set up Helper for the particular Section // Set up Helper for the particular Section
if (_MyHelper == null) if (_MyHelper == null)
{ {
LastFmtName = CurSection.ActiveFormat.Name; LastFmtName = mySection.ActiveFormat.Name;
lastDocStyle = (int)CurSection.MyDocStyle.Index; lastDocStyle = (int)mySection.MyDocStyle.Index;
string hlsText = ""; string hlsText = "";
int hlsItemId = 0; int hlsItemId = 0;
if (CurSection.IsStepSection && CurSection.Steps != null && CurSection.Steps.Count > 0) if (mySection.IsStepSection && mySection.Steps != null && mySection.Steps.Count > 0)
{ {
hlsItemId = CurSection.Steps[0].ItemID; hlsItemId = mySection.Steps[0].ItemID;
hlsText = CurSection.Steps[0].DisplayText; // save the High level step text for use in the page list hlsText = mySection.Steps[0].DisplayText; // save the High level step text for use in the page list
} }
cb.PdfWriter.PageEvent = _MyHelper = new VlnSvgPageHelper(CurSection, this, hlsText, hlsItemId, PrtSectID); cb.PdfWriter.PageEvent = _MyHelper = new VlnSvgPageHelper(mySection, this, hlsText, hlsItemId, PrtSectID);
_MyHelper.AllowAllWatermarks = AllowAllWatermarks; _MyHelper.AllowAllWatermarks = AllowAllWatermarks;
_MyHelper.MyPdfWriter = cb.PdfWriter; _MyHelper.MyPdfWriter = cb.PdfWriter;
_MyHelper.CreatingFoldoutPage = doingFoldout; _MyHelper.CreatingFoldoutPage = doingFoldout;
_MyHelper.CreatingSupInfoPage = false; _MyHelper.CreatingSupInfoPage = false;
_MyHelper.MyPdfContentByte = cb; _MyHelper.MyPdfContentByte = cb;
if (!CurSection.IsStepSection) _MyHelper.PageBookmarks.Add((ItemInfo)CurSection, ((CurSection.DisplayNumber ?? "") == "" ? "" : CurSection.DisplayNumber + " - ") + CurSection.DisplayText, null); if (!mySection.IsStepSection) _MyHelper.PageBookmarks.Add((ItemInfo)mySection, ((mySection.DisplayNumber ?? "") == "" ? "" : mySection.DisplayNumber + " - ") + mySection.DisplayText, null);
if (DebugOutput) if (DebugOutput)
{ {
// 16-bit background // 16-bit background
@ -1048,7 +999,7 @@ namespace Volian.Print.Library
_MyHelper.BackgroundFile = procedureFileName; _MyHelper.BackgroundFile = procedureFileName;
float x = 0; float x = 0;
float y = 0; float y = 0;
if (!(CurSection.ActiveFormat.Name.ToUpper().StartsWith("WST") || _MyHelper.Back32BitPROMS)) // compare folder contains PROMS generated PDF if (!(mySection.ActiveFormat.Name.ToUpper().StartsWith("WST") || _MyHelper.Back32BitPROMS)) // compare folder contains PROMS generated PDF
{ {
// X value below = 16-bit pdf OverrideLeftMargin = -2 characters at the plant format's default Font's // X value below = 16-bit pdf OverrideLeftMargin = -2 characters at the plant format's default Font's
// characters per inch. // characters per inch.
@ -1084,29 +1035,29 @@ namespace Volian.Print.Library
{ {
//added by jcb to reset mygaps when changing a section. found old section gaps were carrying over to new section //added by jcb to reset mygaps when changing a section. found old section gaps were carrying over to new section
_MyHelper.MyGaps.Clear(); _MyHelper.MyGaps.Clear();
//Console.WriteLine("'{0}' PromsPrinter", CurSection.DisplayText); //Console.WriteLine("'{0}' PromsPrinter", mySection.DisplayText);
// if pagination is separate or we've changed the format, we have not done the first page // if pagination is separate or we've changed the format, we have not done the first page
// (if this format has the useonfirst page docstyle flag) // (if this format has the useonfirst page docstyle flag)
if (LastFmtName != CurSection.ActiveFormat.Name || lastDocStyle != (int)CurSection.MyDocStyle.Index || CurSection.SectionConfig.Section_Pagination == SectionConfig.SectionPagination.Separate) if (LastFmtName != mySection.ActiveFormat.Name || lastDocStyle != (int)mySection.MyDocStyle.Index || mySection.SectionConfig.Section_Pagination == SectionConfig.SectionPagination.Separate)
{ {
_MyHelper.DidFirstPageDocStyle = false; _MyHelper.DidFirstPageDocStyle = false;
lastDocStyle = (int)CurSection.MyDocStyle.Index; lastDocStyle = (int)mySection.MyDocStyle.Index;
LastFmtName = CurSection.ActiveFormat.Name; LastFmtName = mySection.ActiveFormat.Name;
} }
if (!CurSection.IsStepSection) _MyHelper.PageBookmarks.Add((ItemInfo)CurSection, ((CurSection.DisplayNumber ?? "") == "" ? "" : CurSection.DisplayNumber + " - ") + CurSection.DisplayText, null); if (!mySection.IsStepSection) _MyHelper.PageBookmarks.Add((ItemInfo)mySection, ((mySection.DisplayNumber ?? "") == "" ? "" : mySection.DisplayNumber + " - ") + mySection.DisplayText, null);
_MyHelper.MySection = CurSection; _MyHelper.MySection = mySection;
//OnStatusChanged("After Set Svg", PromsPrinterStatusType.SetSVG); //OnStatusChanged("After Set Svg", PromsPrinterStatusType.SetSVG);
} }
// if this format uses phonelists, see if this section has one. We need to know the number // if this format uses phonelists, see if this section has one. We need to know the number
//of lines to adjust the pagelength for pagination and printing. //of lines to adjust the pagelength for pagination and printing.
_MyHelper.PhoneListHeight = 0; _MyHelper.PhoneListHeight = 0;
if (CurSection.ActiveFormat.PlantFormat.FormatData.SectData.PrintPhoneList) if (mySection.ActiveFormat.PlantFormat.FormatData.SectData.PrintPhoneList)
{ {
// get config for section // get config for section
SectionConfig sc = CurSection.MyConfig as SectionConfig; SectionConfig sc = mySection.MyConfig as SectionConfig;
if (sc.Section_PhoneList != null && sc.Section_PhoneList == "Y") if (sc.Section_PhoneList != null && sc.Section_PhoneList == "Y")
{ {
DocVersionConfig dvc = CurSection.MyDocVersion.MyConfig as DocVersionConfig; DocVersionConfig dvc = mySection.MyDocVersion.MyConfig as DocVersionConfig;
if (dvc != null) if (dvc != null)
{ {
string phlist = dvc.Print_PhoneList; string phlist = dvc.Print_PhoneList;
@ -1131,13 +1082,13 @@ namespace Volian.Print.Library
} }
_MyHelper.FinalMessageSectionID = finalMessageSectionID; // set VlnSvgPageHelper with the finalMessageSectionID _MyHelper.FinalMessageSectionID = finalMessageSectionID; // set VlnSvgPageHelper with the finalMessageSectionID
if (CurSection.IsAutoTOCSection) if (mySection.IsAutoTOCSection)
{ {
if (((cb.PdfWriter.CurrentPageNumber % 2 == 0 && !_MyHelper.CreatingFoldoutPage) || myProcedure.ProcHasSupInfoData) && InsertBlankPages) // Bug Fix: B2016-181 - add blank page if page count is even if (((cb.PdfWriter.CurrentPageNumber % 2 == 0 && !_MyHelper.CreatingFoldoutPage) || myProcedure.ProcHasSupInfoData) && InsertBlankPages) // Bug Fix: B2016-181 - add blank page if page count is even
{ {
InsertBlankPage(cb); InsertBlankPage(cb);
} }
GenerateTOC(CurSection, myProcedure, cb, _TextLayer); GenerateTOC(mySection, myProcedure, cb, _TextLayer);
// B2020-102: extra page printing after auto TOC for summer. Retested for Farley and was successful also // B2020-102: extra page printing after auto TOC for summer. Retested for Farley and was successful also
// F2018-033: Farley Auto TOC. If doing foldouts or supinfo facing pages, add a blank page after also: // F2018-033: Farley Auto TOC. If doing foldouts or supinfo facing pages, add a blank page after also:
//if (myProcedure.ProcHasSupInfoData && InsertBlankPages) // Bug Fix: B2016-181 - add blank page if page count is even //if (myProcedure.ProcHasSupInfoData && InsertBlankPages) // Bug Fix: B2016-181 - add blank page if page count is even
@ -1147,21 +1098,21 @@ namespace Volian.Print.Library
} }
else else
{ {
if (CurSection.IsStepSection) if (mySection.IsStepSection)
{ {
if (CurSection.Steps != null && CurSection.Steps.Count > 0) if (mySection.Steps != null && mySection.Steps.Count > 0)
{ {
// get first step to send to floating foldout indx.&& MyItemInfo.FoldoutIndex>-1) // get first step to send to floating foldout indx.&& MyItemInfo.FoldoutIndex>-1)
ItemInfo firstStep = CurSection.Steps[0]; ItemInfo firstStep = mySection.Steps[0];
// B2019-165 Don't print the duplex foldout (on the back of the page) if the Don't Include Duplex Foldout check box was checked in section properties // B2019-165 Don't print the duplex foldout (on the back of the page) if the Don't Include Duplex Foldout check box was checked in section properties
if (firstStep.FoldoutIndex() > -1 && (CurSection.MyPrevious == null || !((CurSection.MyPrevious.MyConfig as SectionConfig).Section_DontIncludeDuplexFoldout))) if (firstStep.FoldoutIndex() > -1 && (mySection.MyPrevious == null || !((mySection.MyPrevious.MyConfig as SectionConfig).Section_DontIncludeDuplexFoldout)))
DoFoldoutPage(cb, "Beginning of Step Section", _TextLayer, _MyHelper, firstStep.FoldoutIndex(), InsertBlankPages); DoFoldoutPage(cb, "Beginning of Step Section", _TextLayer, _MyHelper, firstStep.FoldoutIndex(), InsertBlankPages);
else if (!_MyHelper.CreatingFoldoutPage && _MyFoldoutReader.Count > 0 && InsertBlankPages) else if (!_MyHelper.CreatingFoldoutPage && _MyFoldoutReader.Count > 0 && InsertBlankPages)
{ {
// if it is continuous pagination, don't do blank page - not sure if this is correct place for this: // if it is continuous pagination, don't do blank page - not sure if this is correct place for this:
// C2023-001 if the previous section has the flag to not insert blank pages, // C2023-001 if the previous section has the flag to not insert blank pages,
// then don't insert a blank page between the previous section and this one // then don't insert a blank page between the previous section and this one
if (CurSection.SectionConfig.Section_Pagination == SectionConfig.SectionPagination.Separate && !CurSection.SearchPrev.MyDocStyle.DontInsertBlankPages) if (mySection.SectionConfig.Section_Pagination == SectionConfig.SectionPagination.Separate && !mySection.SearchPrev.MyDocStyle.DontInsertBlankPages)
{ {
// only insert a blank page if this section does not have a foldout (but the procedure as a whole does) // only insert a blank page if this section does not have a foldout (but the procedure as a whole does)
// and the checkbox on the print dialog to add blank pages is checked // and the checkbox on the print dialog to add blank pages is checked
@ -1173,18 +1124,18 @@ namespace Volian.Print.Library
{ {
// If the procedure has supplemental facing pages, but this section does not & it's the first section, // If the procedure has supplemental facing pages, but this section does not & it's the first section,
// need a blank 'facing page'. Sections after the first will get blank 'facing page' in print's pagination logic // need a blank 'facing page'. Sections after the first will get blank 'facing page' in print's pagination logic
if (SupInfoPrintType == E_SupInfoPrintType.Merge && !CurSection.HasSupInfoSteps && firstStepSec && InsertBlankPages) if (SupInfoPrintType == E_SupInfoPrintType.Merge && !mySection.HasSupInfoSteps && firstStepSec && InsertBlankPages)
{ {
InsertBlankPage(cb); InsertBlankPage(cb);
} }
} }
} }
firstStepSec = false; firstStepSec = false;
CreateStepPdf(CurSection, cb); CreateStepPdf(mySection, cb);
} }
else else
{ {
CreateWordDocPdf(cb, CurSection); CreateWordDocPdf(cb, mySection);
} }
} }
_MyHelper.PrintedSectionPage = 0; _MyHelper.PrintedSectionPage = 0;
@ -1631,44 +1582,19 @@ namespace Volian.Print.Library
// C2018-004 create meta file for baseline compares // C2018-004 create meta file for baseline compares
Volian.Base.Library.BaselineMetaFile.WriteLine("TOC Ystart {0} LeftMar {1} ScNmPos {2} ScTtlPos {3} ScPgPos {4}", yPageStart, leftMargin, secNumPos, secTitlePos, secPagePos); Volian.Base.Library.BaselineMetaFile.WriteLine("TOC Ystart {0} LeftMar {1} ScNmPos {2} ScTtlPos {3} ScPgPos {4}", yPageStart, leftMargin, secNumPos, secTitlePos, secPagePos);
bool inGroup = false; bool inGroup = false;
SectionInfo CurSection = null; // C2024-003 detrimine determine if the user in printing a sub section.
if (Convert.ToBoolean(PrtSectID[2]))
{
foreach (SectionInfo si2 in ii.Sections) // Find parent section.
{
if (si2.ItemID == PrtSectID[0])
{
foreach (SectionInfo subsi in si2.Sections) // Find sub section.
{
if (subsi.ItemID == PrtSectID[1])
{
CurSection = subsi; // Assigned sub section object to CurSection.
}
}
}
}
}
foreach (SectionInfo mySection in ii.Sections) foreach (SectionInfo mySection in ii.Sections)
{ {
if (PrtSectID == -1 || (PrtSectID > -1 && mySection.ItemID == PrtSectID))
if (PrtSectID[0] == -1 || (PrtSectID[0] > -1 && mySection.ItemID == PrtSectID[0]))
{ {
if (!Convert.ToBoolean(PrtSectID[2])) // If section is not a Sub Section assign the iteration variable to CurSection
{
CurSection = mySection;
}
sectCnt++; sectCnt++;
SectionConfig sc = CurSection.MyConfig as SectionConfig; SectionConfig sc = mySection.MyConfig as SectionConfig;
if ((CurSection.MyDocStyle != null && CurSection.MyDocStyle.IncludeInTOC && (sc == null || sc.Section_TOC != "Y")) if ((mySection.MyDocStyle != null && mySection.MyDocStyle.IncludeInTOC && (sc == null || sc.Section_TOC != "Y"))
|| ((CurSection.MyDocStyle == null || !CurSection.MyDocStyle.IncludeInTOC) && (sc != null && sc.Section_TOC == "Y"))) || ((mySection.MyDocStyle == null || !mySection.MyDocStyle.IncludeInTOC) && (sc != null && sc.Section_TOC == "Y")))
{ {
// for indenting of subsections, count up tree. Only start indenting // for indenting of subsections, count up tree. Only start indenting
// at third level, i.e. not indent on 1.0 and 1.1, but indent on 1.1.1: // at third level, i.e. not indent on 1.0 and 1.1, but indent on 1.1.1:
level = 0; level = 0;
ItemInfo iilvl = CurSection as ItemInfo; ItemInfo iilvl = mySection as ItemInfo;
while (!iilvl.IsProcedure) while (!iilvl.IsProcedure)
{ {
level++; level++;
@ -1710,7 +1636,7 @@ namespace Volian.Print.Library
// need to do the section number, section title & page number. Page number // need to do the section number, section title & page number. Page number
// has to be put on at end after number of page is known, so use a Template. // has to be put on at end after number of page is known, so use a Template.
bool didGrp = false; bool didGrp = false;
string tmptxt = CurSection.MyContent.Number == null || CurSection.MyContent.Number == "" ? " " : CurSection.DisplayNumber;// B2017-019 - process "<u>" in section number string tmptxt = mySection.MyContent.Number == null || mySection.MyContent.Number == "" ? " " : mySection.DisplayNumber;// B2017-019 - process "<u>" in section number
if (tocSection.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.TableOfContentsData.TofCRemoveGrpNameInSects if (tocSection.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.TableOfContentsData.TofCRemoveGrpNameInSects
&& tocGrpHeading.Length > 0 && tmptxt.ToUpper().Contains(tocGrpHeading)) && tocGrpHeading.Length > 0 && tmptxt.ToUpper().Contains(tocGrpHeading))
{ {
@ -1739,7 +1665,7 @@ namespace Volian.Print.Library
// logic put in for V.C. Summer who wants to their auto table of contents to print "OPERATOR ACTIONS" (set in the format) instead of "Procedure Steps" // logic put in for V.C. Summer who wants to their auto table of contents to print "OPERATOR ACTIONS" (set in the format) instead of "Procedure Steps"
// - note that Summer didn't want to change the section title because they want transition to say "procedure step" for the section title. 03/08/2016 // - note that Summer didn't want to change the section title because they want transition to say "procedure step" for the section title. 03/08/2016
string tocSecTitle = CurSection.FormattedDisplayText;// B2017-019 - process "<u>" in section title string tocSecTitle = mySection.FormattedDisplayText;// B2017-019 - process "<u>" in section title
tocSecTitle = ConvertSpecialChars(tocSecTitle, ii.ActiveFormat.PlantFormat.FormatData); // B2019-172 process symbol characters tocSecTitle = ConvertSpecialChars(tocSecTitle, ii.ActiveFormat.PlantFormat.FormatData); // B2019-172 process symbol characters
if (tocSecTitle.ToUpper() == "PROCEDURE STEPS" && tocSection.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.TableOfContentsData.TofCProcedureStepsTitle != "") if (tocSecTitle.ToUpper() == "PROCEDURE STEPS" && tocSection.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.TableOfContentsData.TofCProcedureStepsTitle != "")
tocSecTitle = tocSection.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.TableOfContentsData.TofCProcedureStepsTitle; tocSecTitle = tocSection.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.TableOfContentsData.TofCProcedureStepsTitle;
@ -1805,7 +1731,7 @@ namespace Volian.Print.Library
// adjust ylocation for pagenumber - the ylocation will get reset if the // adjust ylocation for pagenumber - the ylocation will get reset if the
// section title split on 2 lines and the page number needs to be on the 2nd line. // section title split on 2 lines and the page number needs to be on the 2nd line.
// Only do this if the title is not empty (the code was meant for if title spans more than a line) // Only do this if the title is not empty (the code was meant for if title spans more than a line)
if (retval != ttlRetval && CurSection.MyContent.Text != null && CurSection.MyContent.Text != "") yLocation += (retval - ttlRetval); if (retval != ttlRetval && mySection.MyContent.Text != null && mySection.MyContent.Text != "") yLocation += (retval - ttlRetval);
// retval = the minimum (further down the page) between section number and // retval = the minimum (further down the page) between section number and
// title - this accounts for multi line title. // title - this accounts for multi line title.
@ -1813,7 +1739,7 @@ namespace Volian.Print.Library
lastyLocation = retval; lastyLocation = retval;
// check that the page number should be in the TOC (some BGE sections do not have the page number) // check that the page number should be in the TOC (some BGE sections do not have the page number)
if (!((CurSection.MyDocStyle.StructureStyle.Style & E_DocStructStyle.DontNumberInTOC) == E_DocStructStyle.DontNumberInTOC)) if (!((mySection.MyDocStyle.StructureStyle.Style & E_DocStructStyle.DontNumberInTOC) == E_DocStructStyle.DontNumberInTOC))
{ {
// add a template for the page number: // add a template for the page number:
// if the space character is not null & is not a space, the we've got to put out // if the space character is not null & is not a space, the we've got to put out
@ -1864,8 +1790,8 @@ namespace Volian.Print.Library
} }
// if in the pre-table of content list, just put the page number out as text. // if in the pre-table of content list, just put the page number out as text.
// otherwise, add a template _MyHelper.MyTOCPageCounts // otherwise, add a template _MyHelper.MyTOCPageCounts
string key = "TOC" + CurSection.ItemID.ToString(); string key = "TOC" + mySection.ItemID.ToString();
if (CurSection.IsAutoTOCSection || _MyHelper.MyTOCPageNums.ContainsKey(key)) if (mySection.IsAutoTOCSection || _MyHelper.MyTOCPageNums.ContainsKey(key))
{ {
string pnum = _MyHelper.MyTOCPageNums.ContainsKey(key) ? _MyHelper.MyTOCPageNums[key].ToString() : (_MyHelper.CurrentTOCPageNumber + 1).ToString(); string pnum = _MyHelper.MyTOCPageNums.ContainsKey(key) ? _MyHelper.MyTOCPageNums[key].ToString() : (_MyHelper.CurrentTOCPageNumber + 1).ToString();
rtfText = GetRtfToC(pnum, tOfC); rtfText = GetRtfToC(pnum, tOfC);
@ -1879,10 +1805,10 @@ namespace Volian.Print.Library
//If the format wants single spacing within subsections (2nd level and lower), then need to figure out //If the format wants single spacing within subsections (2nd level and lower), then need to figure out
// spacing (vcb1 table of contents) // spacing (vcb1 table of contents)
//bool dosuby = (((tocSection.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.TableOfContentsData.TofCLineSpacingSub ?? 1) > 0) //bool dosuby = (((tocSection.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.TableOfContentsData.TofCLineSpacingSub ?? 1) > 0)
// && (CurSection.MyParent.IsSection && ((CurSection.Sections != null && CurSection.Sections.Count > 0) || (level > 0 && CurSection.NextItem != null)))) // && (mySection.MyParent.IsSection && ((mySection.Sections != null && mySection.Sections.Count > 0) || (level > 0 && mySection.NextItem != null))))
// || didGrp; // || didGrp;
doSubY = (((tocSection.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.TableOfContentsData.TofCLineSpacingSub ?? 1) > 0) doSubY = (((tocSection.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.TableOfContentsData.TofCLineSpacingSub ?? 1) > 0)
&& (CurSection.MyParent.IsSection && (/* CurSection.Sections == null && */ sectCnt < ii.Sections.Count))) // B2016-205 && (mySection.MyParent.IsSection && (/* mySection.Sections == null && */ sectCnt < ii.Sections.Count))) // B2016-205
|| didGrp; || didGrp;
//float spc = (float)(tOfC.TofCLineSpacing ?? 1); //float spc = (float)(tOfC.TofCLineSpacing ?? 1);
if (doSubY) if (doSubY)
@ -1911,12 +1837,12 @@ namespace Volian.Print.Library
} }
// C2021-015: Barakah High Level Steps in Table of Contents - check to see if we need to add the high level steps on // C2021-015: Barakah High Level Steps in Table of Contents - check to see if we need to add the high level steps on
// table of contents for this section, format flag & section has steps: // table of contents for this section, format flag & section has steps:
if (CurSection.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.TableOfContentsData.TofCAllowHLS && if (mySection.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.TableOfContentsData.TofCAllowHLS &&
CurSection.IsStepSection && CurSection.Steps != null && CurSection.Steps.Count > 0) mySection.IsStepSection && mySection.Steps != null && mySection.Steps.Count > 0)
yLocation = AddHLSToTOC(tocSection, CurSection, tOfC, cb, yPageStart, yLocation, doSubY, level + 1, adjSecTitlePos); yLocation = AddHLSToTOC(tocSection, mySection, tOfC, cb, yPageStart, yLocation, doSubY, level + 1, adjSecTitlePos);
} }
float savYLoc = yLocation; float savYLoc = yLocation;
yLocation = AddSectionToTOC(tocSection, CurSection, tOfC, cb, yPageStart, yLocation, doSubY); yLocation = AddSectionToTOC(tocSection, mySection, tOfC, cb, yPageStart, yLocation, doSubY);
if (savYLoc == yLocation) // nothing was outputted i.e. the subsections are not included on the TOC // B2016-205 if (savYLoc == yLocation) // nothing was outputted i.e. the subsections are not included on the TOC // B2016-205
{ {
if (doSubY && sectCnt == ii.Sections.Count) if (doSubY && sectCnt == ii.Sections.Count)
@ -3015,39 +2941,17 @@ namespace Volian.Print.Library
private void LoadSectionTree(ItemInfo ii) private void LoadSectionTree(ItemInfo ii)
{ {
if (ii.Sections == null) return; // B2021-067 crash on null reference if (ii.Sections == null) return; // B2021-067 crash on null reference
SectionInfo CurSection = null;
if (Convert.ToBoolean(MyPromsPrinter.PrtSectID[2])) // C2024-003 determine if the user is printing a sub section. If so assign it to CurSection.
{
foreach (SectionInfo si2 in ii.Sections) // Find parent section
{
if (si2.ItemID == MyPromsPrinter.PrtSectID[0])
{
foreach (SectionInfo subsi in si2.Sections) // Find sub section.
{
if (subsi.ItemID == MyPromsPrinter.PrtSectID[1])
{
CurSection = subsi; // Assign sub section object to CurSection.
break;
}
}
}
}
}
foreach (SectionInfo si in ii.Sections) foreach (SectionInfo si in ii.Sections)
if (MyPromsPrinter.PrtSectID[0] == -1 || (MyPromsPrinter.PrtSectID[0] > -1 && si.ItemID == MyPromsPrinter.PrtSectID[0])) {
if (MyPromsPrinter.PrtSectID == -1 || (MyPromsPrinter.PrtSectID > -1 && si.ItemID == MyPromsPrinter.PrtSectID))
{ {
if (!Convert.ToBoolean(MyPromsPrinter.PrtSectID[2])) // If section is not a Sub Section assign the iteration variable to CurSection if (si.IsStepSection)
{ {
CurSection = si; if (si.Sections != null) LoadSectionTree(si);
}
if (CurSection.IsStepSection)
{
if (CurSection.Sections != null) LoadSectionTree(CurSection);
} }
else else
{ {
MyPdfFile = _MyPromsPrinter.BuildMSWordPDF(CurSection); MyPdfFile = _MyPromsPrinter.BuildMSWordPDF(si);
if (MyPdfFile != null) if (MyPdfFile != null)
{ {
try try
@ -3056,18 +2960,18 @@ namespace Volian.Print.Library
if (fi.Length == 0) // B2017-218 Handle invalid word sections if (fi.Length == 0) // B2017-218 Handle invalid word sections
{ {
if (!PromsPrinter.BaselineTesting) //B2018-071 Output a message box unless baseline testing is being performed. if (!PromsPrinter.BaselineTesting) //B2018-071 Output a message box unless baseline testing is being performed.
MessageBox.Show(CurSection.DisplayNumber + " " + CurSection.DisplayText + " is not valid", "Invalid Word Section", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); MessageBox.Show(si.DisplayNumber + " " + si.DisplayText + " is not valid", "Invalid Word Section", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return; return;
} }
MyReader = MyPdfFile != null ? new PdfReader(MyPdfFile) : null; MyReader = MyPdfFile != null ? new PdfReader(MyPdfFile) : null;
string key = string.Empty; string key = string.Empty;
for (int i = 1; i <= MyReader.NumberOfPages; i++) for (int i = 1; i <= MyReader.NumberOfPages; i++)
{ {
key = string.Format("{0}.{1}", CurSection.ItemID, i); key = string.Format("{0}.{1}", si.ItemID, i);
dicPage.Add(key, MyPromsPrinter.MyContentByte.PdfWriter.GetImportedPage(MyReader, i)); dicPage.Add(key, MyPromsPrinter.MyContentByte.PdfWriter.GetImportedPage(MyReader, i));
iTextSharp.text.Rectangle rectgl = MyReader.GetPageSizeWithRotation(i); iTextSharp.text.Rectangle rectgl = MyReader.GetPageSizeWithRotation(i);
// If the word page is set to landscape, but the document style is not landscape, then flip the height and width (put back to portrait) // If the word page is set to landscape, but the document style is not landscape, then flip the height and width (put back to portrait)
if (!((CurSection.MyDocStyle.StructureStyle.Style & E_DocStructStyle.DSS_WordContentLandscaped) == E_DocStructStyle.DSS_WordContentLandscaped) && rectgl.Height < rectgl.Width) if (!((si.MyDocStyle.StructureStyle.Style & E_DocStructStyle.DSS_WordContentLandscaped) == E_DocStructStyle.DSS_WordContentLandscaped) && rectgl.Height < rectgl.Width)
rectgl = new iTextSharp.text.Rectangle(rectgl.Height, rectgl.Width); rectgl = new iTextSharp.text.Rectangle(rectgl.Height, rectgl.Width);
dicSize.Add(key, rectgl); dicSize.Add(key, rectgl);
//dicSize.Add(key, MyReader.GetPageSizeWithRotation(i)); //dicSize.Add(key, MyReader.GetPageSizeWithRotation(i));
@ -3077,41 +2981,41 @@ namespace Volian.Print.Library
{ {
if (_MyPromsPrinter.DocReplace == null) if (_MyPromsPrinter.DocReplace == null)
MessageBox.Show(ex.Message, ex.GetType().FullName, MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show(ex.Message, ex.GetType().FullName, MessageBoxButtons.OK, MessageBoxIcon.Error);
_MyLog.Warn(string.Format("Error in LoadSectionTree [{0}],{1}.{2}", CurSection.ItemID, CurSection.DisplayNumber, CurSection.DisplayText), ex); _MyLog.Warn(string.Format("Error in LoadSectionTree [{0}],{1}.{2}", si.ItemID, si.DisplayNumber, si.DisplayText), ex);
} }
} }
} }
} }
}
} }
} }
//public class PrintTimer
//{
// private DateTime _StartTime = DateTime.Now;
// public DateTime StartTime
// {
// get { return _StartTime; }
// set { _StartTime = value; }
// }
// private string _Description = "Start";
// public string Description
// {
// get { return _Description; }
// set
// {
// DateTime dtNext = DateTime.Now;
// //Console.WriteLine("{0},'{1}'", TimeSpan.FromTicks(dtNext.Ticks - LastTime.Ticks).TotalSeconds, Description);
// _Description = value;
// _LastTime = dtNext;
// }
// }
// private DateTime _LastTime = DateTime.Now;
// public DateTime LastTime
// {
// get { return _LastTime; }
// set { _LastTime = value; }
// }
//}
} }
//public class PrintTimer
//{
// private DateTime _StartTime = DateTime.Now;
// public DateTime StartTime
// {
// get { return _StartTime; }
// set { _StartTime = value; }
// }
// private string _Description = "Start";
// public string Description
// {
// get { return _Description; }
// set
// {
// DateTime dtNext = DateTime.Now;
// //Console.WriteLine("{0},'{1}'", TimeSpan.FromTicks(dtNext.Ticks - LastTime.Ticks).TotalSeconds, Description);
// _Description = value;
// _LastTime = dtNext;
// }
// }
// private DateTime _LastTime = DateTime.Now;
// public DateTime LastTime
// {
// get { return _LastTime; }
// set { _LastTime = value; }
// }
//}

View File

@ -12,7 +12,7 @@ using Volian.Base.Library;
namespace Volian.Print.Library namespace Volian.Print.Library
{ {
public partial class VlnSvgPageHelper : SvgPageHelper public partial class VlnSvgPageHelper:SvgPageHelper
{ {
private float _TableAdjustment = 0;// RHM20150525 - Table Scrunch private float _TableAdjustment = 0;// RHM20150525 - Table Scrunch
public float TableAdjustment public float TableAdjustment
@ -52,14 +52,14 @@ namespace Volian.Print.Library
private float? _BottomContent = null;// RHM20150525 - Table Scrunch private float? _BottomContent = null;// RHM20150525 - Table Scrunch
public float? BottomContent public float? BottomContent
{ {
get get
{ {
return _BottomContent; return _BottomContent;
} }
set set
{ {
if (value == null || _BottomContent == null || _BottomContent > value) if(value == null || _BottomContent == null || _BottomContent > value)
_BottomContent = value; _BottomContent = value;
} }
} }
private PageBookmarks _PageBookmarks = new PageBookmarks(); private PageBookmarks _PageBookmarks = new PageBookmarks();
@ -85,45 +85,43 @@ namespace Volian.Print.Library
get { return _TopMessage; } get { return _TopMessage; }
set { _TopMessage = value; } set { _TopMessage = value; }
} }
// C2024-003 parameter contains parent section itemid, child section itemid, issubsection flag. private int _prtSectID = -1;
// C2024-003 values needed to print section. public int PrtSectID
private int[] _prtSectID = new int[] { -1, -1, 0 };
public int[] PrtSectID
{ {
get { return _prtSectID; } get { return _prtSectID; }
set { _prtSectID = value; } set { _prtSectID = value; }
} }
private List<vlnText> _TopMessageRs = new List<vlnText>(); // Added if there are 2 messages, in AER AND RNO (for BGE) private List<vlnText> _TopMessageRs=new List<vlnText>(); // Added if there are 2 messages, in AER AND RNO (for BGE)
public List<vlnText> TopMessageRs public List<vlnText> TopMessageRs
{ {
get { return _TopMessageRs; } get { return _TopMessageRs; }
set { _TopMessageRs = value; } set { _TopMessageRs = value; }
} }
private List<vlnText> _TopMessageSub1s = new List<vlnText>(); // BGE Alarms: in CONDITION/RESPONSE if break within substep private List<vlnText> _TopMessageSub1s=new List<vlnText>(); // BGE Alarms: in CONDITION/RESPONSE if break within substep
public List<vlnText> TopMessageSub1s public List<vlnText> TopMessageSub1s
{ {
get { return _TopMessageSub1s; } get { return _TopMessageSub1s; }
set { _TopMessageSub1s = value; } set { _TopMessageSub1s = value; }
} }
private List<vlnText> _TopMessageSub2s = new List<vlnText>(); // BGE Alarms: in CONDITION/RESPONSE if break within substep private List<vlnText> _TopMessageSub2s=new List<vlnText>(); // BGE Alarms: in CONDITION/RESPONSE if break within substep
public List<vlnText> TopMessageSub2s public List<vlnText> TopMessageSub2s
{ {
get { return _TopMessageSub2s; } get { return _TopMessageSub2s; }
set { _TopMessageSub2s = value; } set { _TopMessageSub2s = value; }
} }
private List<vlnText> _BottomMessage = new List<vlnText>(); // B2017-203) any continuous sections with end messages may have more than 1 message on a page private List<vlnText> _BottomMessage = new List<vlnText>(); // B2017-203) any continuous sections with end messages may have more than 1 message on a page
public List<vlnText> BottomMessage public List<vlnText> BottomMessage
{ {
get { return _BottomMessage; } get { return _BottomMessage; }
set { _BottomMessage = value; } set { _BottomMessage = value; }
} }
private vlnText _BottomMessageR; // Added if there are 2 messages, in AER AND RNO (for BGE) private vlnText _BottomMessageR; // Added if there are 2 messages, in AER AND RNO (for BGE)
public vlnText BottomMessageR public vlnText BottomMessageR
{ {
get { return _BottomMessageR; } get { return _BottomMessageR; }
set { _BottomMessageR = value; } set { _BottomMessageR = value; }
} }
private vlnText _BottomMessageA; // Added if there are 3 messages, at bottom AND in AER AND RNO (for BGEALARMS) private vlnText _BottomMessageA; // Added if there are 3 messages, at bottom AND in AER AND RNO (for BGEALARMS)
public vlnText BottomMessageA public vlnText BottomMessageA
{ {
get { return _BottomMessageA; } get { return _BottomMessageA; }
@ -188,12 +186,12 @@ namespace Volian.Print.Library
public PdfWriter MyPdfWriter public PdfWriter MyPdfWriter
{ {
get { return _MyPdfWriter; } get { return _MyPdfWriter; }
set set
{ {
MyPageCounts = new PageCounts(); MyPageCounts = new PageCounts();
MyTOCPageCounts = new PageCounts(); MyTOCPageCounts = new PageCounts();
MyTOCPageNums = new Dictionary<string, int>(); MyTOCPageNums = new Dictionary<string, int>();
_MyPdfWriter = value; _MyPdfWriter = value;
} }
} }
private PdfContentByte _MyPdfContentByte; private PdfContentByte _MyPdfContentByte;
@ -228,7 +226,7 @@ namespace Volian.Print.Library
// when false, no page has been printed yet (for determining whether a blank page before print // when false, no page has been printed yet (for determining whether a blank page before print
// needs done if first section has foldouts) // needs done if first section has foldouts)
private bool _PrintedAPage = false; private bool _PrintedAPage = false;
public bool PrintedAPage public bool PrintedAPage
{ {
get { return _PrintedAPage; } get { return _PrintedAPage; }
set { _PrintedAPage = value; } set { _PrintedAPage = value; }
@ -268,7 +266,7 @@ namespace Volian.Print.Library
//Console.WriteLine("End {0}",path); //Console.WriteLine("End {0}",path);
int profileDepth = ProfileTimer.Push(">>>> OnEndPage"); int profileDepth = ProfileTimer.Push(">>>> OnEndPage");
InitialsPrinted = false; InitialsPrinted = false;
MyPromsPrinter.OnStatusChanged(string.Format("Page {0}", CurrentPageNumber + 1)); MyPromsPrinter.OnStatusChanged(string.Format("Page {0}", CurrentPageNumber+1));
// B2019-152: Landscape page merged page numbers // B2019-152: Landscape page merged page numbers
if (this.MySection != null && MySection.MyDocStyle.LandscapePageList) PromsPrinter.AddMergedLandscapePage(this, MyPromsPrinter.PDFFile); if (this.MySection != null && MySection.MyDocStyle.LandscapePageList) PromsPrinter.AddMergedLandscapePage(this, MyPromsPrinter.PDFFile);
bool onBlankPage = OnBlankPage; bool onBlankPage = OnBlankPage;
@ -289,15 +287,15 @@ namespace Volian.Print.Library
{ {
DrawRuler(writer.DirectContent); DrawRuler(writer.DirectContent);
float x = MySection == null ? 555 : (float)MySection.MyDocStyle.Layout.PageWidth; float x = MySection == null ? 555 : (float)MySection.MyDocStyle.Layout.PageWidth;
DrawBottomRuler(writer.DirectContent, x / 2 - 144); //aer column DrawBottomRuler(writer.DirectContent, x / 2 - 144); //aer column
DrawBottomRuler(writer.DirectContent, x - 144); //rno column DrawBottomRuler(writer.DirectContent, x - 144); //rno column
} }
} }
else else
{ {
E_NumberingSequence numseq = MySection.MyDocStyle.NumberingSequence ?? 0; E_NumberingSequence numseq = MySection.MyDocStyle.NumberingSequence??0;
// if a foldout is only printing within its section, don't do increments on pagecounts: // if a foldout is only printing within its section, don't do increments on pagecounts:
if (numseq == E_NumberingSequence.WithinEachSection) if (numseq==E_NumberingSequence.WithinEachSection)
MyPageCounts.CanIncrement = false; MyPageCounts.CanIncrement = false;
else else
MyPageCounts.CanIncrement = true; MyPageCounts.CanIncrement = true;
@ -307,7 +305,7 @@ namespace Volian.Print.Library
} }
// added the check for onBlankPage and Foldouts to fix bug found in V.C. Summer auto table of contents - 03/08/2016 // added the check for onBlankPage and Foldouts to fix bug found in V.C. Summer auto table of contents - 03/08/2016
//C2019-042 Section_IsFoldout checks Section Number, Section Title, and use of check box //C2019-042 Section_IsFoldout checks Section Number, Section Title, and use of check box
if (!onBlankPage && (MySection.MyDocStyle.StructureStyle.Style == null || (MySection.MyDocStyle.StructureStyle.Style & E_DocStructStyle.DontCountInTabOfCont) == 0) && if (!onBlankPage && (MySection.MyDocStyle.StructureStyle.Style==null || (MySection.MyDocStyle.StructureStyle.Style & E_DocStructStyle.DontCountInTabOfCont) == 0) &&
!(MySection.ActiveFormat.PlantFormat.FormatData.PrintData.SectionLevelFoldouts && (MySection.MyConfig as SectionConfig).Section_IsFoldout == "Y")) !(MySection.ActiveFormat.PlantFormat.FormatData.PrintData.SectionLevelFoldouts && (MySection.MyConfig as SectionConfig).Section_IsFoldout == "Y"))
CurrentTOCPageNumber++; CurrentTOCPageNumber++;
if (MySection.ActiveFormat.PlantFormat.FormatData.SectData.PrintPhoneList) if (MySection.ActiveFormat.PlantFormat.FormatData.SectData.PrintPhoneList)
@ -342,12 +340,12 @@ namespace Volian.Print.Library
if (MySection.ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvertAlarm) if (MySection.ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvertAlarm)
{ {
float left = (float)MySection.MyDocStyle.Layout.LeftMargin + 4.40f - 6; // used 4.40 -6 to line up with the macro & not touch two digit sub-step tabs. float left = (float)MySection.MyDocStyle.Layout.LeftMargin + 4.40f - 6; // used 4.40 -6 to line up with the macro & not touch two digit sub-step tabs.
float right = (float)MySection.MyDocStyle.Layout.PageWidth - .76f; // used -.76 to make bge alarm lines closest to lining up with macro float right = (float)MySection.MyDocStyle.Layout.PageWidth - .76f; // used -.76 to make bge alarm lines closest to lining up with macro
if (AlarmYoffStart > 0) if (AlarmYoffStart > 0)
{ {
// draw vertical - either to the alarmyoffend or bottom of page // draw vertical - either to the alarmyoffend or bottom of page
if (AlarmYoffEnd > 0) // ends on this page. if (AlarmYoffEnd > 0) // ends on this page.
{ {
DrawVertical(writer.DirectContent, left, AlarmYoffStart, AlarmYoffEnd); DrawVertical(writer.DirectContent, left, AlarmYoffStart, AlarmYoffEnd);
DrawVertical(writer.DirectContent, right, AlarmYoffStart, AlarmYoffEnd); DrawVertical(writer.DirectContent, right, AlarmYoffStart, AlarmYoffEnd);
@ -405,7 +403,7 @@ namespace Volian.Print.Library
cb.LineTo(x, y); cb.LineTo(x, y);
cb.Stroke(); cb.Stroke();
} }
for (float y = yBottom; y <= yTop; y += 10) for (float y = yBottom; y <= yTop; y += 10)
{ {
float w = 10; float w = 10;
if (i % 10 == 0) w = 30; if (i % 10 == 0) w = 30;
@ -416,7 +414,7 @@ namespace Volian.Print.Library
cb.LineTo(x, y); cb.LineTo(x, y);
cb.Stroke(); cb.Stroke();
} }
i = 0; i = 0;
cb.Stroke(); cb.Stroke();
cb.RestoreState(); cb.RestoreState();
cb.EndLayer(); cb.EndLayer();
@ -428,7 +426,7 @@ namespace Volian.Print.Library
if (PageListLayer != null) cb.BeginLayer(PageListLayer); if (PageListLayer != null) cb.BeginLayer(PageListLayer);
cb.SetColorStroke(new Color(PrintOverride.SvgColor)); cb.SetColorStroke(new Color(PrintOverride.SvgColor));
cb.SetLineWidth(1.05f); // Tweak the line width to match vlnmacro cb.SetLineWidth(1.05f); // Tweak the line width to match vlnmacro
//cb.SetColorStroke(lineColor); //cb.SetColorStroke(lineColor);
cb.MoveTo(x, top); cb.MoveTo(x, top);
cb.LineTo(x, bottom); cb.LineTo(x, bottom);
cb.Stroke(); cb.Stroke();
@ -523,13 +521,13 @@ namespace Volian.Print.Library
{ {
if (_MyGaps == null) if (_MyGaps == null)
_MyGaps = new Gaps(); _MyGaps = new Gaps();
return _MyGaps; return _MyGaps;
} }
} }
public void AddGap(float top, float bottom, float left, float right) public void AddGap(float top, float bottom, float left, float right)
{ {
float center = MySection.MyDocStyle.Layout.LeftMargin + MySection.MyDocStyle.CenterLineX ?? 0; float center = MySection.MyDocStyle.Layout.LeftMargin + MySection.MyDocStyle.CenterLineX ?? 0;
if (center == 0) return; if(center == 0) return;
if (center > right || center < left) return; if (center > right || center < left) return;
MyGaps.Add(top, bottom); MyGaps.Add(top, bottom);
} }
@ -580,7 +578,7 @@ namespace Volian.Print.Library
if ((MySection.MyDocStyle.StructureStyle.Where & E_DocStyleUse.UseOnFirstPage) > 0) if ((MySection.MyDocStyle.StructureStyle.Where & E_DocStyleUse.UseOnFirstPage) > 0)
{ {
//Console.WriteLine("{0} ResetDocStyleAndValues", MySection.MyDocStyle.Name); //Console.WriteLine("{0} ResetDocStyleAndValues", MySection.MyDocStyle.Name);
ItemInfo ii = (ItemInfo)MySection; ItemInfo ii = (ItemInfo) MySection;
int indx = (int)MySection.MyDocStyle.IndexOtherThanFirstPage; int indx = (int)MySection.MyDocStyle.IndexOtherThanFirstPage;
foreach (DocStyle ds in ii.ActiveFormat.PlantFormat.DocStyles.DocStyleList) foreach (DocStyle ds in ii.ActiveFormat.PlantFormat.DocStyles.DocStyleList)
{ {
@ -616,7 +614,7 @@ namespace Volian.Print.Library
cb.SetColorStroke(new Color(System.Drawing.Color.CornflowerBlue)); cb.SetColorStroke(new Color(System.Drawing.Color.CornflowerBlue));
float yTop = (float)(cb.PdfWriter.PageSize.Height - layout.TopMargin); float yTop = (float)(cb.PdfWriter.PageSize.Height - layout.TopMargin);
//Console.WriteLine("Page,yTop,yTopMargin {0},{1},{2}", cb.PdfDocument.PageNumber, yTop, YTopMargin); //Console.WriteLine("Page,yTop,yTopMargin {0},{1},{2}", cb.PdfDocument.PageNumber, yTop, YTopMargin);
if (YTopMargin != null) yTop = (float)YTopMargin; if(YTopMargin != null) yTop = (float)YTopMargin;
float yBottom = (float)(cb.PdfWriter.PageSize.Height - (layout.TopMargin + layout.PageLength)); float yBottom = (float)(cb.PdfWriter.PageSize.Height - (layout.TopMargin + layout.PageLength));
//Console.WriteLine("'{0}',{1},{2}", MySection.MyDocStyle.Name, yTop, yBottom); //Console.WriteLine("'{0}',{1},{2}", MySection.MyDocStyle.Name, yTop, yBottom);
cb.MoveTo(x, yTop); cb.MoveTo(x, yTop);
@ -657,14 +655,14 @@ namespace Volian.Print.Library
} }
cb.SetLineWidth(w / 30); cb.SetLineWidth(w / 30);
i++; i++;
cb.MoveTo(x + w, y - 1); cb.MoveTo(x + w, y-1);
cb.LineTo(x, y - 1); cb.LineTo(x, y-1);
cb.Stroke(); cb.Stroke();
} }
cb.SetLineWidth(.1F); cb.SetLineWidth(.1F);
cb.Rectangle((float)layout.LeftMargin, yTop, (float)layout.PageWidth - (float)layout.LeftMargin, yBottom - yTop); cb.Rectangle((float)layout.LeftMargin, yTop, (float)layout.PageWidth - (float)layout.LeftMargin, yBottom - yTop);
float yFooter = yBottom + (float)layout.FooterLength; float yFooter = yBottom+(float)layout.FooterLength;
cb.MoveTo((float)layout.LeftMargin, yFooter); cb.MoveTo((float)layout.LeftMargin,yFooter);
cb.LineTo((float)layout.PageWidth, yFooter); cb.LineTo((float)layout.PageWidth, yFooter);
float yRuler = 612; float yRuler = 612;
cb.MoveTo(0, yRuler); cb.MoveTo(0, yRuler);
@ -673,17 +671,17 @@ namespace Volian.Print.Library
{ {
if (x1 % 72 == 0) if (x1 % 72 == 0)
{ {
cb.MoveTo(x1, yRuler - 20); cb.MoveTo(x1, yRuler-20);
cb.LineTo(x1, yRuler + 20); cb.LineTo(x1, yRuler+20);
} }
else if (x1 % 36 == 0) else if (x1 % 36 == 0)
{ {
cb.MoveTo(x1, yRuler - 10); cb.MoveTo(x1, yRuler-10);
cb.LineTo(x1, yRuler + 10); cb.LineTo(x1, yRuler+10);
} }
else else
{ {
cb.MoveTo(x1, yRuler - 5); cb.MoveTo(x1, yRuler-5);
cb.LineTo(x1, yRuler); cb.LineTo(x1, yRuler);
} }
} }
@ -722,24 +720,20 @@ namespace Volian.Print.Library
foreach (PageBookmark pb in PageBookmarks) foreach (PageBookmark pb in PageBookmarks)
{ {
int lev = pb.Level; int lev = pb.Level;
if (MyPdfOutlines.Count < lev || lev == 0) if (MyPdfOutlines.Count < lev || lev==0)
{ {
PdfDestination dest = new PdfDestination(PdfDestination.FIT); PdfDestination dest = new PdfDestination(PdfDestination.FIT);
PdfOutline pdo = new PdfOutline(writer.DirectContent.RootOutline, dest, pb.Title, false); PdfOutline pdo = new PdfOutline(writer.DirectContent.RootOutline, dest, pb.Title, false);
if (!Convert.ToBoolean(_prtSectID[2])) if (MyPdfOutlines.Count == lev)
{ MyPdfOutlines.Add(pdo);
if (MyPdfOutlines.Count == lev) else
MyPdfOutlines.Add(pdo); MyPdfOutlines[lev] = pdo;
else
MyPdfOutlines[lev] = pdo;
}
} }
else else
{ {
PdfDestination dest = pb.PdfDestination; PdfDestination dest =pb.PdfDestination;
if (dest == null) dest = new PdfDestination(PdfDestination.FIT); if(dest==null) dest = new PdfDestination(PdfDestination.FIT);
PdfOutline pdo = new PdfOutline(MyPdfOutlines[lev - 1], dest, Regex.Replace(pb.Title, @"\\{Prerequisite Step: .*?\\}", string.Empty), false); PdfOutline pdo = new PdfOutline(MyPdfOutlines[lev-1], dest,Regex.Replace(pb.Title, @"\\{Prerequisite Step: .*?\\}", string.Empty), false);
if (MyPdfOutlines.Count == lev) if (MyPdfOutlines.Count == lev)
MyPdfOutlines.Add(pdo); MyPdfOutlines.Add(pdo);
else else
@ -762,10 +756,10 @@ namespace Volian.Print.Library
// to the physical page location. // to the physical page location.
ntfn.YOffset = yTopMargin - myYOff; ntfn.YOffset = yTopMargin - myYOff;
ntfn.YTopMost = yTopMargin - myYOff; ntfn.YTopMost = yTopMargin - myYOff;
ntfn.Processed = false; // process from here ntfn.Processed = false; // process from here
// Only use ParagraphToPdf for printing of a single step. // Only use ParagraphToPdf for printing of a single step.
// This is assuming that footnotes do not have child steps. // This is assuming that footnotes do not have child steps.
ntfn.ParagraphToPdf(cb, yTopMargin, yTopMargin, tmp); ntfn.ParagraphToPdf(cb, yTopMargin, yTopMargin, tmp);
//ntfn.ToPdf(cb, yTopMargin, ref yTopMargin, ref tmp); //ntfn.ToPdf(cb, yTopMargin, ref yTopMargin, ref tmp);
@ -850,11 +844,11 @@ namespace Volian.Print.Library
// TODO: Pass in zeroes because topdf is inherited. // TODO: Pass in zeroes because topdf is inherited.
vcb.ToPdf(cb, topMargin, ref tmp, ref tmp); vcb.ToPdf(cb, topMargin, ref tmp, ref tmp);
} }
_MyChangeBars = new List<vlnChangeBar>(); _MyChangeBars = new List<vlnChangeBar>();
} }
#region SectionLevelData #region SectionLevelData
private ChangeBarDefinition _ChangeBarDefinition; private ChangeBarDefinition _ChangeBarDefinition;
public ChangeBarDefinition ChangeBarDefinition public ChangeBarDefinition ChangeBarDefinition
{ {
get { return _ChangeBarDefinition; } get { return _ChangeBarDefinition; }
set { _ChangeBarDefinition = value; } set { _ChangeBarDefinition = value; }
@ -885,8 +879,7 @@ namespace Volian.Print.Library
DidFirstPageDocStyle = false; DidFirstPageDocStyle = false;
if (DidFirstPageDocStyle) if (DidFirstPageDocStyle)
forceLoadSvg = SetDocStyleAndValues(); // this method also gets the SVG (the 'else' part of this) forceLoadSvg = SetDocStyleAndValues(); // this method also gets the SVG (the 'else' part of this)
if (_prtSectID[0] > -1) if (_prtSectID > -1) {
{
forceLoadSvg = true; forceLoadSvg = true;
} }
Volian.Svg.Library.Svg sectSvg = BuildSvg(_MySection, forceLoadSvg); Volian.Svg.Library.Svg sectSvg = BuildSvg(_MySection, forceLoadSvg);
@ -903,7 +896,7 @@ namespace Volian.Print.Library
private int _MaxRNO; private int _MaxRNO;
public int MaxRNO public int MaxRNO
{ {
get get
{ {
return _MySection.ColumnMode; return _MySection.ColumnMode;
} }
@ -946,7 +939,7 @@ namespace Volian.Print.Library
foreach (vlnChangeBar cb in MyChangeBars) foreach (vlnChangeBar cb in MyChangeBars)
{ {
// only look at changebars in same column // only look at changebars in same column
if (cb.XOffset == vcb.XOffset) if (cb.XOffset == vcb.XOffset)
{ {
// if the two change bars end at same location, set prevCB which will // if the two change bars end at same location, set prevCB which will
// adjust the length (top position) of the change bar. This condition // adjust the length (top position) of the change bar. This condition
@ -979,7 +972,7 @@ namespace Volian.Print.Library
float yChangeBarBottomExtend = prevCB.YChangeBarBottomExtend; float yChangeBarBottomExtend = prevCB.YChangeBarBottomExtend;
prevCB.Height = Math.Max(prevCB.Height, vcb.Height); prevCB.Height = Math.Max(prevCB.Height, vcb.Height);
prevCB.YExtendLine = prevCB.YChangeBarBottom - Math.Min(yChangeBarBottomExtend, vcb.YChangeBarBottomExtend); //Math.Max(prevCB.YExtendLine, vcb.YExtendLine); prevCB.YExtendLine = prevCB.YChangeBarBottom - Math.Min(yChangeBarBottomExtend, vcb.YChangeBarBottomExtend); //Math.Max(prevCB.YExtendLine, vcb.YExtendLine);
// if a change bar message at this ychangebarbottom exists, see which message is used // if a change bar message at this ychangebarbottom exists, see which message is used
if (cbmess != null && prevCB.Messages.ContainsKey(prevCB.YChangeBarBottom)) UpdateCbMessage(cbmess, prevCB, vcb.XOffset); if (cbmess != null && prevCB.Messages.ContainsKey(prevCB.YChangeBarBottom)) UpdateCbMessage(cbmess, prevCB, vcb.XOffset);
return; return;
} }
@ -989,7 +982,7 @@ namespace Volian.Print.Library
float yChangeBarBottomExtend1 = prevCB.YChangeBarBottomExtend; float yChangeBarBottomExtend1 = prevCB.YChangeBarBottomExtend;
prevCB.YChangeBarBottom = Math.Min(prevCB.YChangeBarBottom, vcb.YChangeBarBottom); prevCB.YChangeBarBottom = Math.Min(prevCB.YChangeBarBottom, vcb.YChangeBarBottom);
prevCB.YExtendLine = prevCB.YChangeBarBottom - Math.Min(yChangeBarBottomExtend1, vcb.YChangeBarBottomExtend); //Math.Max(prevCB.YExtendLine, vcb.YExtendLine); prevCB.YExtendLine = prevCB.YChangeBarBottom - Math.Min(yChangeBarBottomExtend1, vcb.YChangeBarBottomExtend); //Math.Max(prevCB.YExtendLine, vcb.YExtendLine);
// Two messages at this location, determine which one to use // Two messages at this location, determine which one to use
if (cbmess != null && prevCB.Messages.ContainsKey(prevCB.YChangeBarBottom)) UpdateCbMessage(cbmess, prevCB, vcb.XOffset); if (cbmess != null && prevCB.Messages.ContainsKey(prevCB.YChangeBarBottom)) UpdateCbMessage(cbmess, prevCB, vcb.XOffset);
// no message at this location, just add it. // no message at this location, just add it.
@ -1024,7 +1017,7 @@ namespace Volian.Print.Library
if (cb.MyParent.MyItemInfo.ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvertAlarm && if (cb.MyParent.MyItemInfo.ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvertAlarm &&
(vcb.MyParent.MyItemInfo.IsTable || cb.MyParent.MyItemInfo.IsTable || cb.BottomIsTable)) tolerance *= 1.5f; (vcb.MyParent.MyItemInfo.IsTable || cb.MyParent.MyItemInfo.IsTable || cb.BottomIsTable)) tolerance *= 1.5f;
bool bothFootnotes = cb.MyParent.MyItemInfo.IsFootnote && vcb.MyParent.MyItemInfo.IsFootnote; bool bothFootnotes = cb.MyParent.MyItemInfo.IsFootnote && vcb.MyParent.MyItemInfo.IsFootnote;
if (!bothFootnotes && cb.MyParent.MyItemInfo.MyHLS != null && vcb.MyParent.MyItemInfo.MyHLS != null && if (!bothFootnotes && cb.MyParent.MyItemInfo.MyHLS != null && vcb.MyParent.MyItemInfo.MyHLS != null &&
cb.MyParent.MyItemInfo.MyHLS.ItemID != vcb.MyParent.MyItemInfo.MyHLS.ItemID) return false; cb.MyParent.MyItemInfo.MyHLS.ItemID != vcb.MyParent.MyItemInfo.MyHLS.ItemID) return false;
// cb.Yoffset is within range of vcb: // cb.Yoffset is within range of vcb:
if (cb.YOffset <= vcb.YOffset && if (cb.YOffset <= vcb.YOffset &&
@ -1047,7 +1040,7 @@ namespace Volian.Print.Library
set { _MyPromsPrinter = value; } set { _MyPromsPrinter = value; }
} }
private int _MyRomanPage = 1; private int _MyRomanPage = 1;
public VlnSvgPageHelper(VEPROMS.CSLA.Library.SectionInfo mySection, PromsPrinter myPromsPrinter, string hlsText, int hlsItemId, int[] PrtSectID = null) public VlnSvgPageHelper(VEPROMS.CSLA.Library.SectionInfo mySection, PromsPrinter myPromsPrinter, string hlsText, int hlsItemId, int PrtSectID)
: base() : base()
{ {
_prtSectID = PrtSectID; _prtSectID = PrtSectID;
@ -1102,7 +1095,7 @@ namespace Volian.Print.Library
} }
//if (sPag == SectionConfig.SectionPagination.Continuous && !mySection.DidFirstPageDocStyle) return null; //if (sPag == SectionConfig.SectionPagination.Continuous && !mySection.DidFirstPageDocStyle) return null;
if (forceLoad) return mySvg; if (forceLoad) return mySvg;
if (sPag == SectionConfig.SectionPagination.Continuous) return null; if (sPag == SectionConfig.SectionPagination.Continuous) return null;
return mySvg; return mySvg;
} }
public PageCounts MyPageCounts = null; public PageCounts MyPageCounts = null;
@ -1155,7 +1148,7 @@ namespace Volian.Print.Library
//string tocKey = "TOC" + MySection.ItemID.ToString(); //string tocKey = "TOC" + MySection.ItemID.ToString();
if (args.MyText.Contains("{PAGE}") || args.MyText.Contains("{OF}")) if (args.MyText.Contains("{PAGE}") || args.MyText.Contains("{OF}"))
{ {
#region numberingseq #region numberingseq
/* /*
public enum E_NumberingSequence : uint public enum E_NumberingSequence : uint
@ -1177,8 +1170,8 @@ namespace Volian.Print.Library
// default for the key is to make it NumberingSequence. Then handle // default for the key is to make it NumberingSequence. Then handle
// specific cases. // specific cases.
string key = ((int)MySection.MyDocStyle.NumberingSequence).ToString(); string key = ((int)MySection.MyDocStyle.NumberingSequence).ToString();
E_NumberingSequence numseq = MySection.MyDocStyle.NumberingSequence ?? 0; E_NumberingSequence numseq = MySection.MyDocStyle.NumberingSequence??0;
//Console.WriteLine("\"{0}\"\t\"{1}\"\t{2}", MySection.DisplayNumber, MySection.DisplayText, numseq); //Console.WriteLine("\"{0}\"\t\"{1}\"\t{2}", MySection.DisplayNumber, MySection.DisplayText, numseq);
switch (numseq) switch (numseq)
{ {
@ -1209,7 +1202,7 @@ namespace Volian.Print.Library
key = key + "." + MySection.ItemID; key = key + "." + MySection.ItemID;
break; break;
case E_NumberingSequence.WithinEachSectionNumber: case E_NumberingSequence.WithinEachSectionNumber:
key = key + "." + (MySection.DisplayNumber == string.Empty ? (MySection.ActiveParent as ItemInfo).DisplayNumber : MySection.DisplayNumber); key = key + "." + ( MySection.DisplayNumber == string.Empty ? (MySection.ActiveParent as ItemInfo).DisplayNumber : MySection.DisplayNumber);
break; break;
case E_NumberingSequence.GroupedByLevel: case E_NumberingSequence.GroupedByLevel:
case E_NumberingSequence.Like6_ButDoesntNeedSubsection: case E_NumberingSequence.Like6_ButDoesntNeedSubsection:
@ -1245,7 +1238,7 @@ namespace Volian.Print.Library
if (!args.MyText.StartsWith("Non-printing ")) MyPdfContentByte.AddTemplate(tmp, args.MySvgScale.X(args.MySvgText.X), args.MySvgScale.Y(MyPdfContentByte, args.MySvgText.Y)); if (!args.MyText.StartsWith("Non-printing ")) MyPdfContentByte.AddTemplate(tmp, args.MySvgScale.X(args.MySvgText.X), args.MySvgScale.Y(MyPdfContentByte, args.MySvgText.Y));
return string.Empty; return string.Empty;
} }
if (args.MyText.Contains("{FINALPAGE}")) if (args.MyText.Contains("{FINALPAGE}"))
{ {
if (MySection.ItemID == FinalMessageSectionID) if (MySection.ItemID == FinalMessageSectionID)
{ {
@ -1288,7 +1281,7 @@ namespace Volian.Print.Library
{ {
// If subformat and does not have its own genmac, find an inherited genmac. // If subformat and does not have its own genmac, find an inherited genmac.
FormatInfo tmpf = FormatInfo.Get(activeFormat.ParentID); FormatInfo tmpf = FormatInfo.Get(activeFormat.ParentID);
while (tmpf.FormatID != 1 && (sGenMac == null || sGenMac == string.Empty)) while (tmpf.FormatID!=1 && (sGenMac==null||sGenMac==string.Empty))
{ {
sGenMac = tmpf.GenMac; sGenMac = tmpf.GenMac;
tmpf = FormatInfo.Get(tmpf.ParentID); tmpf = FormatInfo.Get(tmpf.ParentID);
@ -1339,7 +1332,7 @@ namespace Volian.Print.Library
SectionConfig sc = section.MyConfig as SectionConfig; SectionConfig sc = section.MyConfig as SectionConfig;
// C2018-004 create meta file for baseline compares // C2018-004 create meta file for baseline compares
Volian.Base.Library.BaselineMetaFile.WriteLine("SecNum=\"{0}\" SecTitle=\"{1}\" DocStyle=\"{2}\" Format=\"{3}\" ItemID={4}", section.DisplayNumber, section.DisplayText, section.MyDocStyle.Name, sc.FormatSelection, section.ItemID); Volian.Base.Library.BaselineMetaFile.WriteLine("SecNum=\"{0}\" SecTitle=\"{1}\" DocStyle=\"{2}\" Format=\"{3}\" ItemID={4}", section.DisplayNumber, section.DisplayText, section.MyDocStyle.Name, sc.FormatSelection, section.ItemID);
Volian.Base.Library.BaselineMetaFile.WriteLine(" Pagination=\"{0}\" MSWordPgCnt={1} NumPages={2} WordMargin={3}", sc.Section_Pagination, section.MSWordPageCount, (string.IsNullOrEmpty(sc.Section_NumPages)) ? "0" : sc.Section_NumPages, (string.IsNullOrEmpty(sc.Section_WordMargin)) ? "N" : sc.Section_WordMargin); Volian.Base.Library.BaselineMetaFile.WriteLine(" Pagination=\"{0}\" MSWordPgCnt={1} NumPages={2} WordMargin={3}", sc.Section_Pagination, section.MSWordPageCount, (string.IsNullOrEmpty(sc.Section_NumPages)) ? "0" : sc.Section_NumPages, (string.IsNullOrEmpty(sc.Section_WordMargin))?"N":sc.Section_WordMargin);
if (PgLogicals == null) PgLogicals = new Dictionary<string, bool>(); if (PgLogicals == null) PgLogicals = new Dictionary<string, bool>();
else PgLogicals.Clear(); else PgLogicals.Clear();
@ -1383,7 +1376,7 @@ namespace Volian.Print.Library
} }
VE_Font useFontForCheckOffHeader = null; VE_Font useFontForCheckOffHeader = null;
if (forceLoad || (sPag == SectionConfig.SectionPagination.Separate || ((sPag == SectionConfig.SectionPagination.Continuous || sPag == 0) && (pageItem.Row < 0)))) if (forceLoad || (sPag == SectionConfig.SectionPagination.Separate || ((sPag == SectionConfig.SectionPagination.Continuous || sPag ==0 )&& (pageItem.Row < 0))))
{ {
//if (PrevRow > 0) //if (PrevRow > 0)
//{ //{
@ -1397,12 +1390,12 @@ namespace Volian.Print.Library
// prevLPI = curLPI; // prevLPI = curLPI;
// } // }
//} //}
// C2019-006 - Moved and modified the RO_Lookup() logic here, before we process the tokens in the page list // C2019-006 - Moved and modified the RO_Lookup() logic here, before we process the tokens in the page list
// this allows us to use RO_Lookup() in a "PS=" conditional token (is usually a PSI check box) // this allows us to use RO_Lookup() in a "PS=" conditional token (is usually a PSI check box)
// A while loop was also added to the we can have more than one call to RO_Lookup() on a pagelist line // A while loop was also added to the we can have more than one call to RO_Lookup() on a pagelist line
// this logic was put in for Barakah Alarms // this logic was put in for Barakah Alarms
// Note that each Alarm is defined as its own RO in the Referenced Object database, with multiple return values // Note that each Alarm is defined as its own RO in the Referenced Object database, with multiple return values
// to define the Window ID, Alarm, Source, Setpoint, etc. for example. // to define the Window ID, Alarm, Source, Setpoint, etc. for example.
string pltok = pageItem.Token; string pltok = pageItem.Token;
while (pltok.Contains("RO_Lookup(")) while (pltok.Contains("RO_Lookup("))
{ {
@ -1448,11 +1441,11 @@ namespace Volian.Print.Library
int idx = procnum.IndexOf('-'); int idx = procnum.IndexOf('-');
otherChildUnit = procnum.Substring(0, idx); // we need to get RO info for the Other child applicability - this gets child's number otherChildUnit = procnum.Substring(0, idx); // we need to get RO info for the Other child applicability - this gets child's number
} }
ROLookupVal = ROLookup(parts[0], parts[1], string.Empty, otherChildUnit); // will return empty string if alarm point is not found in RO database ROLookupVal = ROLookup(parts[0], parts[1], string.Empty,otherChildUnit); // will return empty string if alarm point is not found in RO database
usePSIvalue = (ROLookupVal != section.MyProcedure.DisplayNumber); // use PSI value if child alarm ID not found or does not match resolved procedure number (alarm point) usePSIvalue = (ROLookupVal != section.MyProcedure.DisplayNumber); // use PSI value if child alarm ID not found or does not match resolved procedure number (alarm point)
} }
// C2021-065 if usePSIvalue is true, then we know alarm point info is not in the RO database, so just use the default (PSI) value // C2021-065 if usePSIvalue is true, then we know alarm point info is not in the RO database, so just use the default (PSI) value
if (usePSIvalue) if (usePSIvalue)
ROLookupVal = parts[2]; // C2021-065 use the value defined in the PSI ROLookupVal = parts[2]; // C2021-065 use the value defined in the PSI
else else
ROLookupVal = ROLookup(parts[0], parts[1], parts[2], otherChildUnit); ROLookupVal = ROLookup(parts[0], parts[1], parts[2], otherChildUnit);
@ -1483,18 +1476,18 @@ namespace Volian.Print.Library
} }
// C2021-065 (BNPP Alarms format) we are processing a paglist flag (ROLkUpMatch) to determine how to get Alarm Point information // C2021-065 (BNPP Alarms format) we are processing a paglist flag (ROLkUpMatch) to determine how to get Alarm Point information
// Nothing else is on this page list item, so use "continue" to jump to the next pagelist item as nothing gets printed for this item // Nothing else is on this page list item, so use "continue" to jump to the next pagelist item as nothing gets printed for this item
if (pageItem.ROLkUpMatch) if (pageItem.ROLkUpMatch)
continue; continue;
MatchCollection matches = regexFindToken.Matches(pltok);//(pageItem.Token); MatchCollection matches = regexFindToken.Matches(pltok);//(pageItem.Token);
if (matches.Count > 0) if (matches.Count > 0)
{ {
string plstr = string.Empty; string plstr = string.Empty;
// When a pagelist line (row) has more than one token that is resolved to text, each resolved token text was place on top // When a pagelist line (row) has more than one token that is resolved to text, each resolved token text was place on top
// of each other. Use a temporary string (plstr) to process the pagelist tokens for each pagelist line (row) before adding // of each other. Use a temporary string (plstr) to process the pagelist tokens for each pagelist line (row) before adding
// it to the svgGroup. // it to the svgGroup.
plstr = pltok;//pageItem.Token; plstr = pltok;//pageItem.Token;
// F2017-046: Remove the '@@' characters that were getting printed on SAMG Sup Info facing pages for Calvert (BGESAM1 format). // F2017-046: Remove the '@@' characters that were getting printed on SAMG Sup Info facing pages for Calvert (BGESAM1 format).
if (MyPromsPrinter.DoingFacingPage && plstr.Contains("@@")) plstr = plstr.Replace("@@", string.Empty); if (MyPromsPrinter.DoingFacingPage && plstr.Contains("@@")) plstr = plstr.Replace("@@", string.Empty);
foreach (Match match in matches) foreach (Match match in matches)
{ {
@ -1526,8 +1519,8 @@ namespace Volian.Print.Library
if (relval == "Y") if (relval == "Y")
{ {
//svgGroup.Add(PageItemToSvgText(pageItem.Token, (float)pageItem.RelatedItem.Row, (float)pageItem.RelatedItem.Col, pageItem.RelatedItem.Justify ?? VEPROMS.CSLA.Library.E_Justify.PSLeft, pageItem.Font, val, MySection)); //svgGroup.Add(PageItemToSvgText(pageItem.Token, (float)pageItem.RelatedItem.Row, (float)pageItem.RelatedItem.Col, pageItem.RelatedItem.Justify ?? VEPROMS.CSLA.Library.E_Justify.PSLeft, pageItem.Font, val, MySection));
svgGroup.Add(PageItemToSvgText(pltok, (float)pageItem.RelatedItem.Row, (float)pageItem.RelatedItem.Col, pageItem.RelatedItem.Justify ?? VEPROMS.CSLA.Library.E_Justify.PSLeft, pageItem.Font, val, MySection)); svgGroup.Add(PageItemToSvgText(pltok, (float)pageItem.RelatedItem.Row, (float)pageItem.RelatedItem.Col, pageItem.RelatedItem.Justify ?? VEPROMS.CSLA.Library.E_Justify.PSLeft, pageItem.Font, val, MySection));
plstr = string.Empty; // Clear it so it isn't put out twice (used below) plstr = string.Empty; // Clear it so it isn't put out twice (used below)
} }
} }
} }
@ -1538,7 +1531,7 @@ namespace Volian.Print.Library
} }
if (val != null && val != string.Empty && !PgLogicals.ContainsKey(pstok)) PgLogicals.Add(pstok, val != null); if (val != null && val != string.Empty && !PgLogicals.ContainsKey(pstok)) PgLogicals.Add(pstok, val != null);
//if (val == null || val == string.Empty) //if (val == null || val == string.Empty)
//val = " "; //val = " ";
if (val == null) if (val == null)
val = string.Empty; val = string.Empty;
plstr = plstr.Replace(token, val); plstr = plstr.Replace(token, val);
@ -1626,7 +1619,7 @@ namespace Volian.Print.Library
} }
} }
else else
svgGroup.Add(PageItemToSvgText(pageItem, pltok, MySection, supInfoMargAdj)); svgGroup.Add(PageItemToSvgText(pageItem, pltok, MySection, supInfoMargAdj));
} }
} }
// Proms page numbering designed requires a "{PAGE}" token to increment the page counter. So the easiest way // Proms page numbering designed requires a "{PAGE}" token to increment the page counter. So the easiest way
@ -1656,7 +1649,7 @@ namespace Volian.Print.Library
private string ROLookup(string accpageid, string multiid, string deflt, string overrideChild) private string ROLookup(string accpageid, string multiid, string deflt, string overrideChild)
{ {
ROFSTLookup myLookup = MySection.MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(MySection.MyDocVersion, overrideChild); ROFSTLookup myLookup = MySection.MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(MySection.MyDocVersion, overrideChild);
string accpgid = accpageid; string accpgid = accpageid;
ROFSTLookup.rochild roc = myLookup.GetROChildByAccPageID("<" + accpgid + "." + multiid + ">", MySection.MyDocVersion.DocVersionConfig.RODefaults_setpointprefix, MySection.MyDocVersion.DocVersionConfig.RODefaults_graphicsprefix); ROFSTLookup.rochild roc = myLookup.GetROChildByAccPageID("<" + accpgid + "." + multiid + ">", MySection.MyDocVersion.DocVersionConfig.RODefaults_setpointprefix, MySection.MyDocVersion.DocVersionConfig.RODefaults_graphicsprefix);
@ -1692,10 +1685,10 @@ namespace Volian.Print.Library
public string HLSText public string HLSText
{ {
get { return _HLSText; } get { return _HLSText; }
set set
{ {
if (_HLSText == string.Empty) if (_HLSText == string.Empty)
_HLSText = value; _HLSText = value;
} }
} }
private string _HLSTAB = string.Empty; private string _HLSTAB = string.Empty;
@ -1789,7 +1782,7 @@ namespace Volian.Print.Library
plstr = plstr.Replace(token, string.Empty); plstr = plstr.Replace(token, string.Empty);
svgGroup.Add(PageItemToSvgUse(pageItem, FirstAndLast(token), supInfoMargAdj)); svgGroup.Add(PageItemToSvgUse(pageItem, FirstAndLast(token), supInfoMargAdj));
break; break;
case "{PMODEBOX}": // need to set either 1 or 2 depending on number of columns case "{PMODEBOX}": // need to set either 1 or 2 depending on number of columns
case "[PMODEBOX]": case "[PMODEBOX]":
string box = "1"; string box = "1";
if (_MySection.SectionConfig.Section_ColumnMode == SectionConfig.SectionColumnMode.Four) if (_MySection.SectionConfig.Section_ColumnMode == SectionConfig.SectionColumnMode.Four)
@ -1831,7 +1824,7 @@ namespace Volian.Print.Library
case "[PROCTITLE3]": case "[PROCTITLE3]":
case "{COVERPROCTITLE}": case "{COVERPROCTITLE}":
case "[COVERPROCTITLE]": case "[COVERPROCTITLE]":
int tlen = (token.Contains("COVERPROCTITLE")) ? (int)section.ActiveFormat.PlantFormat.FormatData.ProcData.CoverTitleLength : (int)section.ActiveFormat.PlantFormat.FormatData.ProcData.TitleLength; int tlen = (token.Contains("COVERPROCTITLE"))?(int)section.ActiveFormat.PlantFormat.FormatData.ProcData.CoverTitleLength : (int)section.ActiveFormat.PlantFormat.FormatData.ProcData.TitleLength;
//float linelen = (int)section.ActiveFormat.PlantFormat.FormatData.ProcData.TitleLength * (float)pageItem.Font.CPI / 12; //float linelen = (int)section.ActiveFormat.PlantFormat.FormatData.ProcData.TitleLength * (float)pageItem.Font.CPI / 12;
float linelen = tlen * (float)pageItem.Font.CPI / 12; float linelen = tlen * (float)pageItem.Font.CPI / 12;
string title = section.MyProcedure.MyContent.Text; string title = section.MyProcedure.MyContent.Text;
@ -1859,7 +1852,7 @@ namespace Volian.Print.Library
break; break;
case "{TITLE&UNIT}": case "{TITLE&UNIT}":
case "[TITLE&UNIT]": case "[TITLE&UNIT]":
tlen = (token.Contains("COVERPROCTITLE")) ? (int)section.ActiveFormat.PlantFormat.FormatData.ProcData.CoverTitleLength : (int)section.ActiveFormat.PlantFormat.FormatData.ProcData.TitleLength; tlen = (token.Contains("COVERPROCTITLE"))?(int)section.ActiveFormat.PlantFormat.FormatData.ProcData.CoverTitleLength : (int)section.ActiveFormat.PlantFormat.FormatData.ProcData.TitleLength;
linelen = tlen * (float)pageItem.Font.CPI / 12; linelen = tlen * (float)pageItem.Font.CPI / 12;
plstr = SplitTitleAndUnit(svgGroup, pageItem, section.MyProcedure.MyContent.Text.ToUpper(), (int)linelen, token, plstr); //,rowAdj); plstr = SplitTitleAndUnit(svgGroup, pageItem, section.MyProcedure.MyContent.Text.ToUpper(), (int)linelen, token, plstr); //,rowAdj);
break; break;
@ -1906,8 +1899,8 @@ namespace Volian.Print.Library
case "{PDFTime}": case "{PDFTime}":
plstr = plstr.Replace("{PDFTime}", DateTime.Now.ToString("HH:mm:ss")); plstr = plstr.Replace("{PDFTime}", DateTime.Now.ToString("HH:mm:ss"));
break; break;
// F2023-087: Added PDFDate at PDFTime - note that cannot have multiple tokens in a conditional because of reg expression // F2023-087: Added PDFDate at PDFTime - note that cannot have multiple tokens in a conditional because of reg expression
// processing. // processing.
case "[PDFDateAtTime]": case "[PDFDateAtTime]":
plstr = plstr.Replace("[PDFDateAtTime]", DateTime.Now.ToString("MM/dd/yyyy") + " at " + DateTime.Now.ToString("HH:mm:ss")); plstr = plstr.Replace("[PDFDateAtTime]", DateTime.Now.ToString("MM/dd/yyyy") + " at " + DateTime.Now.ToString("HH:mm:ss"));
break; break;
@ -1923,12 +1916,12 @@ namespace Volian.Print.Library
if (unitnum.Length > 0) if (unitnum.Length > 0)
{ {
if (unitnum.Contains("#")) if (unitnum.Contains("#"))
eopnum = unitnum.Replace("#", eopnum); eopnum = unitnum.Replace("#", eopnum);
if (unitnum.Contains("!")) if (unitnum.Contains("!"))
eopnum = unitnum.Replace("!", unitname); eopnum = unitnum.Replace("!", unitname);
if (eopnum == string.Empty) if (eopnum == string.Empty)
eopnum = section.MyProcedure.MyContent.Number; eopnum = section.MyProcedure.MyContent.Number;
if (eopnum.ToUpper().Contains(@"<U")) if (eopnum.ToUpper().Contains(@"<U"))
{ {
// C2021-064 If we are processing the EOP number or an ROLookUp in the pagelist, then strip out the Parent/Child unit tokens // C2021-064 If we are processing the EOP number or an ROLookUp in the pagelist, then strip out the Parent/Child unit tokens
@ -1978,13 +1971,13 @@ namespace Volian.Print.Library
case "[ATTACHTITLECONT]": case "[ATTACHTITLECONT]":
// B2020-038: incorrect pagination: Note that if PSOnlyFirst is active and pagination is set to continuous, pagination may be incorrect in printed output (no code change-just info here in case happens again) // B2020-038: incorrect pagination: Note that if PSOnlyFirst is active and pagination is set to continuous, pagination may be incorrect in printed output (no code change-just info here in case happens again)
bool printsectlevel = ((pageItem.Justify & VEPROMS.CSLA.Library.E_Justify.PSOnlyFirst) != VEPROMS.CSLA.Library.E_Justify.PSOnlyFirst) || bool printsectlevel = ((pageItem.Justify & VEPROMS.CSLA.Library.E_Justify.PSOnlyFirst) != VEPROMS.CSLA.Library.E_Justify.PSOnlyFirst) ||
(((pageItem.Justify & VEPROMS.CSLA.Library.E_Justify.PSOnlyFirst) == VEPROMS.CSLA.Library.E_Justify.PSOnlyFirst) && PrintedSectionPage == 0); (((pageItem.Justify & VEPROMS.CSLA.Library.E_Justify.PSOnlyFirst) == VEPROMS.CSLA.Library.E_Justify.PSOnlyFirst) && PrintedSectionPage==0);
// if there is 'no title' for the section, only print it if a format flag says to print it. // if there is 'no title' for the section, only print it if a format flag says to print it.
if (printsectlevel) if (printsectlevel)
{ {
if (section.DisplayText.ToUpper().Contains("<NO TITLE>") && !section.ActiveFormat.PlantFormat.FormatData.ProcData.PrintNoTitle) printsectlevel = false; if (section.DisplayText.ToUpper().Contains("<NO TITLE>") && !section.ActiveFormat.PlantFormat.FormatData.ProcData.PrintNoTitle) printsectlevel = false;
} }
if (MyPromsPrinter.DoingFacingPage) printsectlevel = false; // don't put out section title/number if doing SAMG facing pages if (MyPromsPrinter.DoingFacingPage) printsectlevel = false; // don't put out section title/number if doing SAMG facing pages
if (printsectlevel) if (printsectlevel)
{ {
string stitle = section.DisplayText; string stitle = section.DisplayText;
@ -1992,11 +1985,11 @@ namespace Volian.Print.Library
&& token.Contains("ATTACHTITLECONT") && DidFirstPageDocStyle) && token.Contains("ATTACHTITLECONT") && DidFirstPageDocStyle)
{ {
string myMsg = section.MyDocStyle.Continue.Top.Message; string myMsg = section.MyDocStyle.Continue.Top.Message;
if (myMsg != null && myMsg != string.Empty) stitle = stitle + myMsg; if (myMsg != null && myMsg != string.Empty)stitle = stitle + myMsg;
} }
// B2023-043: Beaver Valley AOP - allow attributes, such as superscript on section titles when printing // B2023-043: Beaver Valley AOP - allow attributes, such as superscript on section titles when printing
if (section.ActiveFormat.PlantFormat.FormatData.PrintData.SectionTitleWithAttributes) if (section.ActiveFormat.PlantFormat.FormatData.PrintData.SectionTitleWithAttributes)
stitle = section.FormattedDisplayText; stitle = section.FormattedDisplayText;
// B2021-119: large titles on Landscape Word Attachments are printing on 2 lines. // B2021-119: large titles on Landscape Word Attachments are printing on 2 lines.
// B2022-149: crash on cast if null // B2022-149: crash on cast if null
int? stl = (int?)section.ActiveFormat.PlantFormat.FormatData.SectData.SectionNumberAndTitleLength; int? stl = (int?)section.ActiveFormat.PlantFormat.FormatData.SectData.SectionNumberAndTitleLength;
@ -2011,7 +2004,7 @@ namespace Volian.Print.Library
plstr = plstr.Replace(token, string.Empty); plstr = plstr.Replace(token, string.Empty);
//svgGroup.Add(PageItemToSvgText(pageItem, section.DisplayText)); //svgGroup.Add(PageItemToSvgText(pageItem, section.DisplayText));
break; break;
case "{METASECTIONTITLE}": // This will print the top level section title (versus level above current) starting from a sub-section case "{METASECTIONTITLE}": // This will print the top level section title (versus level above current) starting from a sub-section
case "[METASECTIONTITLE]": case "[METASECTIONTITLE]":
if (section.MyParent.IsSection) if (section.MyParent.IsSection)
{ {
@ -2061,9 +2054,9 @@ namespace Volian.Print.Library
// text starts with a ' - ' - remove it. // text starts with a ' - ' - remove it.
else if (plstr.StartsWith(" - ") && plstr.IndexOf("{SECTIONLEVELTITLE}") == 3) else if (plstr.StartsWith(" - ") && plstr.IndexOf("{SECTIONLEVELTITLE}") == 3)
plstr = plstr.Substring(3); plstr = plstr.Substring(3);
//svgGroup.Add(PageItemToSvgText(pageItem, pageItem.Token.Replace(token, section.DisplayNumber))); //svgGroup.Add(PageItemToSvgText(pageItem, pageItem.Token.Replace(token, section.DisplayNumber)));
break; break;
case "{METASECTIONNUMBER}": // This will print the top level section number when starting from a sub-section case "{METASECTIONNUMBER}": // This will print the top level section number when starting from a sub-section
case "[METASECTIONNUMBER]": case "[METASECTIONNUMBER]":
if (section.MyParent.IsSection) if (section.MyParent.IsSection)
{ {
@ -2125,12 +2118,12 @@ namespace Volian.Print.Library
break; break;
case "{ATTACHNUM}": case "{ATTACHNUM}":
case "[ATTACHNUM]": case "[ATTACHNUM]":
plstr = plstr.Replace(token, "1"); // used by SHESDD - but 16bit returns '1' unless has format flag 'MoveParensToToken' that was only in SCE (San Onofre) plstr = plstr.Replace(token, "1"); // used by SHESDD - but 16bit returns '1' unless has format flag 'MoveParensToToken' that was only in SCE (San Onofre)
break; break;
case "{ATTACHNUM1}": case "{ATTACHNUM1}":
case "[ATTACHNUM1]": case "[ATTACHNUM1]":
string numAtt = GetAttachNum1(); string numAtt = GetAttachNum1();
plstr = plstr.Replace(token, numAtt); // used by SHESDD - but 16bit returns '1' unless has format flag 'MoveParensToToken' that was only in SCE (San Onofre) plstr = plstr.Replace(token, numAtt); // used by SHESDD - but 16bit returns '1' unless has format flag 'MoveParensToToken' that was only in SCE (San Onofre)
break; break;
case "{CHKOFFHEADING}": case "{CHKOFFHEADING}":
case "[CHKOFFHEADING]": case "[CHKOFFHEADING]":
@ -2219,7 +2212,7 @@ namespace Volian.Print.Library
// plants that have been delivered - so added special code for BGE. // plants that have been delivered - so added special code for BGE.
if (section.ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvert) if (section.ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvert)
{ {
if (Regex.IsMatch(procnum.Substring(0, 1), "[A-Za-z]")) if (Regex.IsMatch(procnum.Substring(0,1),"[A-Za-z]"))
plstr = pd.ProcDescr1; plstr = pd.ProcDescr1;
else else
plstr = string.Empty; plstr = string.Empty;
@ -2275,12 +2268,12 @@ namespace Volian.Print.Library
plstr = plstr.Replace(token, thisDate2.ToString("H:mm")); plstr = plstr.Replace(token, thisDate2.ToString("H:mm"));
break; break;
case "{HLRNO}": case "{HLRNO}":
plstr = HLRNO == null ? string.Empty : plstr.Replace(token, HLRNO); plstr = HLRNO==null?string.Empty:plstr.Replace(token, HLRNO);
break; break;
case "{HLSTAB}": case "{HLSTAB}":
if (HLSTAB.Contains("{!Clock}")) // F2022-024 replace with the clock symbol defined in GenMac format file if (HLSTAB.Contains("{!Clock}")) // F2022-024 replace with the clock symbol defined in GenMac format file
{ {
HLSTAB = HLSTAB.Replace("{!Clock}", string.Empty).TrimStart(" ".ToCharArray()); HLSTAB = HLSTAB.Replace("{!Clock}",string.Empty).TrimStart(" ".ToCharArray());
svgGroup.Add(PageItemToSvgUse(pageItem, "Clock", supInfoMargAdj)); svgGroup.Add(PageItemToSvgUse(pageItem, "Clock", supInfoMargAdj));
} }
plstr = plstr.Replace(token, HLSTAB); plstr = plstr.Replace(token, HLSTAB);
@ -2399,7 +2392,7 @@ namespace Volian.Print.Library
} }
if (token.Contains(@"RO-")) if (token.Contains(@"RO-"))
{ {
plstr = token.Replace("{", string.Empty).Replace("}", string.Empty); plstr = token.Replace("{",string.Empty).Replace("}",string.Empty);
svgGroup.Add(PageItemToSvgText(pageItem, plstr, MySection, 0)); svgGroup.Add(PageItemToSvgText(pageItem, plstr, MySection, 0));
} }
if (token.Contains(@"PS-")) if (token.Contains(@"PS-"))
@ -2414,7 +2407,7 @@ namespace Volian.Print.Library
{ {
val = procConfig.GetValue("PSI", token.Substring(4, token.Length - 5)); val = procConfig.GetValue("PSI", token.Substring(4, token.Length - 5));
// F2021-034: Resolve applicability unit tokens (not just '<u>') // F2021-034: Resolve applicability unit tokens (not just '<u>')
if (val.ToUpper().Contains("<U>") || val.ToUpper().Contains("<U-")) // Replace token with the applicable unit information if(val.ToUpper().Contains("<U>") || val.ToUpper().Contains("<U-")) // Replace token with the applicable unit information
{ {
string unbr3 = ResolveUnitApp(MySection.MyDocVersion, val); string unbr3 = ResolveUnitApp(MySection.MyDocVersion, val);
val = unbr3 ?? string.Empty; val = unbr3 ?? string.Empty;
@ -2423,9 +2416,9 @@ namespace Volian.Print.Library
// defined, see if the text is too wide for a single line (SplitTextMaxWidth). The // defined, see if the text is too wide for a single line (SplitTextMaxWidth). The
// AdjustTopMarginForMultLinePageListItem contains the y-adjustment that must be considered // AdjustTopMarginForMultLinePageListItem contains the y-adjustment that must be considered
// in the TopMargin if the PSI text split onto more than one line. // in the TopMargin if the PSI text split onto more than one line.
if ((pageItem.MaxWidth ?? 0) > 0 || (pageItem.MaxWidthCurPage ?? 0) > 0) if ((pageItem.MaxWidth ?? 0) > 0 || (pageItem.MaxWidthCurPage ?? 0) > 0)
{ {
int locwid = ((pageItem.MaxWidth ?? 0) > 0) ? (int)pageItem.MaxWidth : (int)pageItem.MaxWidthCurPage; int locwid = ((pageItem.MaxWidth??0)>0)?(int)pageItem.MaxWidth:(int)pageItem.MaxWidthCurPage;
AdjustTopMarginForMultiLinePageListItems = SplitTextMaxWidth(svgGroup, pageItem, val, locwid, token, ref plstr); AdjustTopMarginForMultiLinePageListItems = SplitTextMaxWidth(svgGroup, pageItem, val, locwid, token, ref plstr);
if ((pageItem.MaxWidthCurPage ?? 0) > 0) AdjustTopMarginForMultiLinePageListItems = 0; if ((pageItem.MaxWidthCurPage ?? 0) > 0) AdjustTopMarginForMultiLinePageListItems = 0;
} }
@ -2568,7 +2561,7 @@ namespace Volian.Print.Library
foreach (string line in titleLines) foreach (string line in titleLines)
{ {
cnt++; cnt++;
if (cnt == 1 && yOffset == 0) if (cnt == 1 && yOffset == 0)
plstr = plstr.Replace(match, line); plstr = plstr.Replace(match, line);
else else
{ {
@ -2586,7 +2579,7 @@ namespace Volian.Print.Library
} }
return Math.Max(0, yOffset); return Math.Max(0, yOffset);
} }
private string SplitTitle(SvgGroup svgGroup, VEPROMS.CSLA.Library.PageItem pageItem, string title, int? len, string match, string plstr, int? numAndTitleLen) private string SplitTitle(SvgGroup svgGroup, VEPROMS.CSLA.Library.PageItem pageItem, string title, int? len, string match, string plstr,int? numAndTitleLen)
{ {
bool includePrecedingText = false; bool includePrecedingText = false;
if (match == "{PROCTITLE2}" || match == "[PROCTITLE2]") return plstr.Replace(match, string.Empty); if (match == "{PROCTITLE2}" || match == "[PROCTITLE2]") return plstr.Replace(match, string.Empty);
@ -2597,7 +2590,7 @@ namespace Volian.Print.Library
// This logic does not handle any pagelist tokens following the section title. // This logic does not handle any pagelist tokens following the section title.
// "@@" acts like a hanging indent (Calvert) so don't include stuff before the title // "@@" acts like a hanging indent (Calvert) so don't include stuff before the title
// For now, made this explicite with the use of SectionLevelTitle // For now, made this explicite with the use of SectionLevelTitle
if ((numAndTitleLen != null && numAndTitleLen > 0) && !plstr.Contains("@@") && (plstr.IndexOf("{SECTIONLEVELTITLE}") > 0)) if ((numAndTitleLen != null && numAndTitleLen > 0) && !plstr.Contains("@@") && (plstr.IndexOf("{SECTIONLEVELTITLE}") > 0))
{ {
int idx = plstr.IndexOf(match); int idx = plstr.IndexOf(match);
title = plstr.Replace(match, title); // include everthing on this line for splitting title = plstr.Replace(match, title); // include everthing on this line for splitting
@ -2610,11 +2603,11 @@ namespace Volian.Print.Library
// B2022-061: don't print '\line' as part of procedure title in pagelist items. // B2022-061: don't print '\line' as part of procedure title in pagelist items.
if (match == "{PROCTITLE}") title = title.Replace("\\line ", string.Empty); if (match == "{PROCTITLE}") title = title.Replace("\\line ", string.Empty);
if (match == "{PROCTITLE2}" || match == "[PROCTITLE2]") return plstr.Replace(match, string.Empty); // this would have been done in proctitle1 if (match == "{PROCTITLE2}" || match == "[PROCTITLE2]") return plstr.Replace(match, string.Empty); // this would have been done in proctitle1
plstr = plstr.Replace(match, title).Replace("@@", string.Empty); plstr = plstr.Replace(match, title).Replace("@@",string.Empty);
//svgGroup.Add(PageItemToSvgText(pageItem, title)); //svgGroup.Add(PageItemToSvgText(pageItem, title));
return plstr; return plstr;
} }
// BGE has a '@@' in its section number/title pagelist item for eops. If the title goes onto two lines, // BGE has a '@@' in its section number/title pagelist item for eops. If the title goes onto two lines,
// the '@@' marked the starting location for the title. Process this differently than other split titles: // the '@@' marked the starting location for the title. Process this differently than other split titles:
if (plstr.Contains("@@")) if (plstr.Contains("@@"))
@ -2623,7 +2616,7 @@ namespace Volian.Print.Library
return string.Empty; // all resolved pagelist items were already added to svgGroup for printing. return string.Empty; // all resolved pagelist items were already added to svgGroup for printing.
} }
// Otherwise determine how many line to split the text into // Otherwise determine how many line to split the text into
List<string> titleLines = Volian.Base.Library.RtfTools.SplitText(title, (includePrecedingText) ? (int)numAndTitleLen : (int)len); List<string>titleLines = Volian.Base.Library.RtfTools.SplitText(title,(includePrecedingText)?(int)numAndTitleLen: (int)len);
// Adjust y location based on which pagelist token & how many lines. Proctitle1 is adjusted if // Adjust y location based on which pagelist token & how many lines. Proctitle1 is adjusted if
// there are more than 2 lines (proctitle1 should have it's own y location that is used if there are 1 or 2 lines.) // there are more than 2 lines (proctitle1 should have it's own y location that is used if there are 1 or 2 lines.)
@ -2669,11 +2662,11 @@ namespace Volian.Print.Library
public PageItem PIInitials public PageItem PIInitials
{ {
get { return _PIInitials; } get { return _PIInitials; }
set set
{ {
if (_PIInitials != null && value == null) if (_PIInitials != null && value == null)
_LastPIInitials = _PIInitials; _LastPIInitials = _PIInitials;
_PIInitials = value; _PIInitials = value;
} }
} }
private PageItem _LastPIInitials = null; private PageItem _LastPIInitials = null;
@ -2694,11 +2687,11 @@ namespace Volian.Print.Library
get { return _InitialsPrinted; } get { return _InitialsPrinted; }
set { _InitialsPrinted = value; } set { _InitialsPrinted = value; }
} }
public bool PrintInitials(PdfContentByte cb, float yLocation, float leftMargin) public bool PrintInitials(PdfContentByte cb,float yLocation, float leftMargin)
{ {
if (InitialsPrinted) return false; if (InitialsPrinted) return false;
InitialsPrinted = true; InitialsPrinted = true;
vlnParagraph.TextAt(cb, this, PIInitials ?? LastPIInitials, yLocation, leftMargin); vlnParagraph.TextAt(cb,this, PIInitials ?? LastPIInitials, yLocation, leftMargin);
return true; return true;
} }
private void DoSpecialSectNumTitle(SvgGroup svgGroup, VEPROMS.CSLA.Library.PageItem pageItem, string title, int? len, string match, string plstr) private void DoSpecialSectNumTitle(SvgGroup svgGroup, VEPROMS.CSLA.Library.PageItem pageItem, string title, int? len, string match, string plstr)
@ -2787,7 +2780,7 @@ namespace Volian.Print.Library
} }
// if the token was proctitle, dont' adjust. If the token was PROCTITLE1/2 then // if the token was proctitle, dont' adjust. If the token was PROCTITLE1/2 then
// move down 6. // move down 6.
// int adj = pageItem.Token.Contains("1") || pageItem.Token.Contains("2") ? 0 : -6; // int adj = pageItem.Token.Contains("1") || pageItem.Token.Contains("2") ? 0 : -6;
int adj = (titleLines.Count > 2) ? -6 : 0; int adj = (titleLines.Count > 2) ? -6 : 0;
float yOffset = adj * (titleLines.Count - 2); float yOffset = adj * (titleLines.Count - 2);
int lnCnt = 0; int lnCnt = 0;
@ -2860,7 +2853,7 @@ namespace Volian.Print.Library
// Take the difference between the width in Points of a character at 12CPI and a character // Take the difference between the width in Points of a character at 12CPI and a character
// at the defined font's CPI. Multiply that times the length of title and divide by two // at the defined font's CPI. Multiply that times the length of title and divide by two
// to find the half-way point. // to find the half-way point.
// if the PageItem's font CPI is null, then default to 12 CPI // if the PageItem's font CPI is null, then default to 12 CPI
colAdj16bit = (1 + text.Length) * ((72 / (float)(pageItem.Font.CPI ?? 12)) - (72 / 12)) / 2; colAdj16bit = (1 + text.Length) * ((72 / (float)(pageItem.Font.CPI ?? 12)) - (72 / 12)) / 2;
} }
@ -2884,11 +2877,11 @@ namespace Volian.Print.Library
} }
// F2023-035: WCN - allow for change in left margin for supplemental information pages by // F2023-035: WCN - allow for change in left margin for supplemental information pages by
// setting a value in the DocStyle for the adjustment. // setting a value in the DocStyle for the adjustment.
svgText.X = new SvgMeasurement((float)lcol - colAdj16bit + supmargadj, E_MeasurementUnits.PT); // F2023-035: Add in supplemental info margin adjust svgText.X = new SvgMeasurement((float)lcol - colAdj16bit + supmargadj, E_MeasurementUnits.PT); // F2023-035: Add in supplemental info margin adjust
svgText.Y = new SvgMeasurement(row, E_MeasurementUnits.PT); svgText.Y = new SvgMeasurement(row, E_MeasurementUnits.PT);
if (svgText.Font.Underline && svgText.Text.EndsWith(" ")) svgText.Text = svgText.Text.Substring(0, svgText.Text.Length - 1) + "\xA0";// replace last space with a hardspace if (svgText.Font.Underline && svgText.Text.EndsWith(" ")) svgText.Text = svgText.Text.Substring(0, svgText.Text.Length - 1) + "\xA0";// replace last space with a hardspace
// C2018-004 create meta file for baseline compares // C2018-004 create meta file for baseline compares
Volian.Base.Library.BaselineMetaFile.WriteLine(" PL x {0} y {1} {2} {3} {4} \"{5}\"", svgText.X, svgText.Y, svgText.FontFamily, svgText.FontSize, svgText.SVGFontStyle, TextForBaseline.FixText(svgText.Text)); Volian.Base.Library.BaselineMetaFile.WriteLine(" PL x {0} y {1} {2} {3} {4} \"{5}\"", svgText.X, svgText.Y, svgText.FontFamily, svgText.FontSize, svgText.SVGFontStyle, TextForBaseline.FixText(svgText.Text));
return svgText; return svgText;
} }
// F2021-070 & 066 - shrink font size of page list items if format has amount. ShrinkIt compares size (width) of text with input font and // F2021-070 & 066 - shrink font size of page list items if format has amount. ShrinkIt compares size (width) of text with input font and
@ -2975,7 +2968,7 @@ namespace Volian.Print.Library
svgText.X = new SvgMeasurement((float)lcol - colAdj16bit, E_MeasurementUnits.PT); // new SvgMeasurement((float)(pageItem.Col ?? 0), E_MeasurementUnits.PT); svgText.X = new SvgMeasurement((float)lcol - colAdj16bit, E_MeasurementUnits.PT); // new SvgMeasurement((float)(pageItem.Col ?? 0), E_MeasurementUnits.PT);
svgText.Y = new SvgMeasurement((float)(yOffset + pageItem.Row ?? 0), E_MeasurementUnits.PT); svgText.Y = new SvgMeasurement((float)(yOffset + pageItem.Row ?? 0), E_MeasurementUnits.PT);
if (svgText.Font.Underline && svgText.Text.EndsWith(" ")) svgText.Text = svgText.Text.Substring(0, svgText.Text.Length - 1) + "\xA0";// replace last space with a hardspace if (svgText.Font.Underline && svgText.Text.EndsWith(" ")) svgText.Text = svgText.Text.Substring(0, svgText.Text.Length - 1) + "\xA0";// replace last space with a hardspace
// C2018-004 create meta file for baseline compares // C2018-004 create meta file for baseline compares
Volian.Base.Library.BaselineMetaFile.WriteLine(" PL x {0} y {1} {2} {3} {4} \"{5}\"", svgText.X, svgText.Y, svgText.FontFamily, svgText.FontSize, svgText.SVGFontStyle, TextForBaseline.FixText(svgText.Text)); Volian.Base.Library.BaselineMetaFile.WriteLine(" PL x {0} y {1} {2} {3} {4} \"{5}\"", svgText.X, svgText.Y, svgText.FontFamily, svgText.FontSize, svgText.SVGFontStyle, TextForBaseline.FixText(svgText.Text));
return svgText; return svgText;
} }
@ -3022,8 +3015,8 @@ namespace Volian.Print.Library
svgText.X = new SvgMeasurement((float)lcol - colAdj16bit, E_MeasurementUnits.PT); // new SvgMeasurement((float)(pageItem.Col ?? 0), E_MeasurementUnits.PT); svgText.X = new SvgMeasurement((float)lcol - colAdj16bit, E_MeasurementUnits.PT); // new SvgMeasurement((float)(pageItem.Col ?? 0), E_MeasurementUnits.PT);
svgText.Y = new SvgMeasurement(row, E_MeasurementUnits.PT); svgText.Y = new SvgMeasurement(row, E_MeasurementUnits.PT);
if (svgText.Font.Underline && svgText.Text.EndsWith(" ")) svgText.Text = svgText.Text.Substring(0, svgText.Text.Length - 1) + "\xA0";// replace last space with a hardspace if (svgText.Font.Underline && svgText.Text.EndsWith(" ")) svgText.Text = svgText.Text.Substring(0, svgText.Text.Length - 1) + "\xA0";// replace last space with a hardspace
// C2018-004 create meta file for baseline compares // C2018-004 create meta file for baseline compares
Volian.Base.Library.BaselineMetaFile.WriteLine(" PL x {0} y {1} {2} {3} {4} \"{5}\"", svgText.X, svgText.Y, svgText.FontFamily, svgText.FontSize, svgText.SVGFontStyle, TextForBaseline.FixText(svgText.Text)); Volian.Base.Library.BaselineMetaFile.WriteLine(" PL x {0} y {1} {2} {3} {4} \"{5}\"", svgText.X, svgText.Y, svgText.FontFamily, svgText.FontSize, svgText.SVGFontStyle, TextForBaseline.FixText(svgText.Text));
return svgText; return svgText;
} }
private static List<string> _MissingTokens = new List<string>(); private static List<string> _MissingTokens = new List<string>();
@ -3035,7 +3028,7 @@ namespace Volian.Print.Library
return CurrentPageNumber.ToString(); return CurrentPageNumber.ToString();
case "{OF}": // Total Page Count for this section case "{OF}": // Total Page Count for this section
return CurrentPageOf.ToString(); return CurrentPageOf.ToString();
case "{REV}": // Revision Number and/or Revision string. case "{REV}": // Revision Number and/or Revision string.
case "{REV2}": case "{REV2}":
// The 16bit code has a revision number & then a revision date. This revision date // The 16bit code has a revision number & then a revision date. This revision date
// was actually either a date OR a string. The 32bit code no longer will call this // was actually either a date OR a string. The 32bit code no longer will call this
@ -3046,14 +3039,14 @@ namespace Volian.Print.Library
if (Rev != null && Rev != string.Empty) Rev = Rev.TrimStart(" ".ToCharArray()); if (Rev != null && Rev != string.Empty) Rev = Rev.TrimStart(" ".ToCharArray());
// Now check the format flags to determine if/how the Rev string should be parsed. // Now check the format flags to determine if/how the Rev string should be parsed.
if ((MySection.ActiveFormat.PlantFormat.FormatData.PrintData.DoRevDate && Rev.Contains("/")) if ((MySection.ActiveFormat.PlantFormat.FormatData.PrintData.DoRevDate && Rev.Contains("/"))
|| (MySection.ActiveFormat.PlantFormat.FormatData.PrintData.RevDateWithForwardSlash && Rev.Contains("\\"))) || (MySection.ActiveFormat.PlantFormat.FormatData.PrintData.RevDateWithForwardSlash && Rev.Contains("\\")))
{ {
int indx = Rev.IndexOf(MySection.ActiveFormat.PlantFormat.FormatData.PrintData.RevDateWithForwardSlash ? '\\' : '/'); int indx = Rev.IndexOf(MySection.ActiveFormat.PlantFormat.FormatData.PrintData.RevDateWithForwardSlash ? '\\' : '/');
if (match.Value == "{REV}") return Rev.Substring(0, indx); if (match.Value == "{REV}") return Rev.Substring(0,indx);
return Rev.Substring(indx + 1); return Rev.Substring(indx+1);
} }
if (match.Value == "{REV}") return Rev; if (match.Value == "{REV}")return Rev;
return System.DateTime.Today.ToShortDateString(); return System.DateTime.Today.ToShortDateString();
case "{CHKOFFHEADING}": case "{CHKOFFHEADING}":
return PageListTopCheckOffHeader; return PageListTopCheckOffHeader;
@ -3116,8 +3109,8 @@ namespace Volian.Print.Library
private ItemInfo _MyItemInfo; private ItemInfo _MyItemInfo;
public ItemInfo MyItemInfo public ItemInfo MyItemInfo
{ {
get { return _MyItemInfo; } get { return _MyItemInfo; }
set { _MyItemInfo = value; } set { _MyItemInfo = value; }
} }
private string _Title; private string _Title;
public string Title public string Title
@ -3195,7 +3188,7 @@ namespace Volian.Print.Library
} }
/* /*
* could have line thickness (set default from 16-bit), line color (set default as black), line style * could have line thickness (set default from 16-bit), line color (set default as black), line style
*/ */
public ChangeBarDefinition() public ChangeBarDefinition()
{ {
} }

File diff suppressed because it is too large Load Diff