Compare commits

...

50 Commits

Author SHA1 Message Date
4a3d32960f Format update fix. Needed to remove an invalid character at the beginning of the ComPeakFlexall.xml file. Note that the character was not visible in the editor but you could right arrow past it. 2024-01-24 16:44:55 -05:00
414c2239ee Merge pull request '~Modified font to use Arial' (#213) from B2023-114_PLarsen into Development
Merging into Development.  No code review needed due to format change
2024-01-24 13:52:10 -05:00
f71bd0da19 ~Modified font to use Arial 2024-01-24 13:51:19 -05:00
9b59810c89 Merge pull request 'F2024-006 Fixed pagination logic to that step text at the bottom of an Alarm Point page does not print on top of the bottom continue message' (#210) from Vogtle3&4 into Development
Merging F2024-006 into development after successful code review.
2024-01-24 08:40:57 -05:00
82fa4f1e74 F2024-006 Fixed pagination logic to that step text at the bottom of an Alarm Point page does not print on top of the bottom continue message 2024-01-24 08:10:21 -05:00
d59ef9118f Merge pull request 'B2024-001: Out of memory crash on update of ROs when RO has '>' or '<' and RO in table, when done from ribbon or admin tools' (#209) from GenWork into Development
Review successful. Good to merge into Development.
2024-01-24 08:05:05 -05:00
3b3a542b24 B2024-001: Out of memory crash on update of ROs when RO has '>' or '<' and RO in table, when done from ribbon or admin tools 2024-01-24 06:57:46 -05:00
d6f1f5fb0c Merge pull request 'F2023-112 Continuation of the initial check-in for the Vogtle Units 3 & 4 Background Document formats. Also tweaked TOC page num position in all VEGP formats.' (#206) from Vogtle3&4 into Development
Reviewed-on: #206
2024-01-17 08:47:06 -05:00
a2ec9162be F2023-112 Continuation of the initial check-in for the Vogtle Units 3 & 4 Background Document formats. Also tweaked TOC page num position in all VEGP formats. 2024-01-16 15:20:39 -05:00
e2f9dbf1e2 Merge pull request 'F2024-004 Added a Flex Deviation format per Beaver Valley’s request.' (#205) from F2024-004_BeaverVallyFlexDev into Development
Format only change.
2024-01-12 10:46:14 -05:00
3d6cbd9a6b F2024-004 Added a Flex Deviation format per Beaver Valley’s request. 2024-01-12 10:43:37 -05:00
35e4826dc4 Merge pull request 'B2023-114E' (#200) from B2023-114E-Comanche-Peaks-Arial into Development
format changes look good. Ready to be tested
2024-01-12 09:33:20 -05:00
5b985a3cbe B2023-114E-Comanche-Peaks-Arial 2024-01-12 09:12:38 -05:00
1be087a279 Merge pull request 'C2024-001-Quick-Print-In-ribbon' (#204) from C2024-001-Quick-Print-In-ribbon into Development
code looked good.
2024-01-11 14:25:53 -05:00
4afac4b3df Merge branch 'Development' into C2024-001-Quick-Print-In-ribbon 2024-01-11 12:42:06 -05:00
473a170983 Merge remote-tracking branch 'origin/Development' into C2024-001-Quick-Print-In-ribbon 2024-01-11 10:33:12 -05:00
87c4d13abe C2024-001-Quick-Print-In-Ribbon 2024-01-11 08:58:35 -05:00
e1972763ae Merge pull request 'Vogtle3&4' (#201) from Vogtle3&4 into Development
Code Review completed successfully.
2024-01-11 06:30:22 -05:00
f09a29318c B2023-114E-Comanche-Peaks-Arial 2024-01-10 18:01:11 -05:00
aa28de4ba8 C2024-001 Quick-Print-in-ribbon 2024-01-10 14:28:47 -05:00
8e4c42ac05 F2023-112 - adjust length of text next to purpose in background format, other format adjustments and cleanup 2024-01-10 12:17:53 -05:00
0a1c588625 B2023-114E 2024-01-09 20:24:01 -05:00
a6e85a6cda Merge pull request 'B2022-134: update ros crash when ro has '<' or '>' and ro is used in table' (#199) from GenWork into Development
code was successfully reviewed.
2024-01-09 12:00:00 -05:00
077564cd3e B2022-134: update ros crash when ro has '<' or '>' and ro is used in table 2024-01-09 10:43:27 -05:00
b8807f2289 Merge branch 'Development' into Vogtle3&4 2024-01-08 15:50:08 -05:00
71cef595ca F2023-112 format setting to remove -B from background proc num (used in title box) 2024-01-08 15:46:05 -05:00
eb00324edf Merge pull request 'Vogtle3&4' (#197) from Vogtle3&4 into Development
Merging into Development after successful code review.
2024-01-08 14:47:51 -05:00
f0670905b3 F2024-002 Fix the line spacing for the Attachment – Step Editor section type to restore the blank lines between sub-steps. 2024-01-05 15:47:34 -05:00
e53cc2ab71 F2023-112 -adjusted step widths 2024-01-05 15:03:54 -05:00
f02ca8bd86 F2023-112 Format Flag foruse of width override 2024-01-05 11:09:24 -05:00
27bbbdc9df Merge branch 'Development' into Vogtle3&4 2024-01-03 17:44:14 -05:00
bda5a54754 F2023-112 added format flag for full section number in step tab - for background format 2024-01-03 17:43:38 -05:00
935e666b7f Merge pull request 'F2023-126: center single line caution/note when more than 1 Vogtle Alarms' (#195) from GenWork into Development
Code looks good. ready for testing.
2024-01-03 09:38:50 -05:00
b1043cfec1 F2023-126: center single line caution/note when more than 1 Vogtle Alarms 2024-01-03 09:27:13 -05:00
ad64675119 Merge pull request 'F2024-001 Added an “Attachment – Step Editor” section type to the Vogtle Alarms format' (#194) from Vogtle3&4 into Development
format only changes given to me from Jeff.
2024-01-02 14:04:23 -05:00
e670b3776b F2024-001 Added an “Attachment – Step Editor” section type to the Vogtle Alarms format 2024-01-02 14:03:16 -05:00
10c4974cdf Merge pull request 'C2022-009 New link to Error folder' (#193) from C2022-009 into Development
Merging into Development after successful code review.
2024-01-02 11:07:28 -05:00
b6cbb97d7d C2022-009 New link to Error folder 2023-12-27 20:51:32 -05:00
c25421ceb6 Merge pull request 'C2023-024 Fix Duplicate Print Issue' (#192) from C2023-024B into Development
Merging into Development after successful code review.
2023-12-27 16:01:15 -05:00
041e28b61b C2023-024 Fix Duplicate Print Issue 2023-12-27 11:45:43 -05:00
3ad6dea425 Merge pull request 'C2023-023 Quick Print' (#190) from C2023-023 into Development
Merging into Development after successful code review
2023-12-21 11:24:46 -05:00
051805c76d C2023-023 Quick Print 2023-12-21 10:04:58 -05:00
3acdf1f6b4 C2023-023 Quick Print 2023-12-20 12:21:43 -05:00
4f8eaf2d9b Merge pull request 'F2023-112 inital check in of Vogtle Background format' (#188) from Vogtle3&4 into Development
Merging into Development after successful code review.
2023-12-15 15:47:01 -05:00
e7298c5201 F2023-112 inital check in of Vogtle Background format 2023-12-15 15:25:13 -05:00
03cbaa055a Merge pull request 'B2023-115: Vogtle Alarms - Top Continue message (round 2)' (#186) from GenWork into Development
passed code review
2023-12-12 09:16:56 -05:00
389847c9ca B2023-115: Vogtle Alarms - Top Continue message (round 2) 2023-12-12 09:02:40 -05:00
140d7c72e0 Merge pull request 'F2023-133: adjust alarm point title size font adjustment amount (from 410 to 405)' (#184) from GenWork into Development
Merging F2023-133 into Development.
2023-12-11 10:05:59 -05:00
8e682201d7 F2023-133: adjust alarm point title size font adjustment amount (from 410 to 405) 2023-12-11 08:39:22 -05:00
5e272075f8 Merge pull request 'Cleaned up fomat plant list' (#182) from GeneralDebugging into Development
just cleaned up the file, no testing needed
2023-12-08 14:45:25 -05:00
50 changed files with 618 additions and 273 deletions

View File

@ -126,6 +126,7 @@
<Content Include="fmtall\BVPSAOPall.xml" />
<Content Include="fmtall\BVPSAtchall.xml" />
<Content Include="fmtall\BVPSBCKall.xml" />
<Content Include="fmtall\BVPSFlexDEVall.xml" />
<Content Include="fmtall\BVPSDEVall.xml" />
<Content Include="fmtall\BVPSNIBCKall.xml" />
<Content Include="fmtall\BVPSSAMGall.xml" />
@ -301,6 +302,7 @@
<Content Include="fmtall\SHESAMall.xml" />
<Content Include="fmtall\SHESSDall.xml" />
<Content Include="fmtall\SHESSD_00all.xml" />
<Content Include="fmtall\VEGPBckall.xml" />
<Content Include="fmtall\VEGP1all.xml" />
<Content Include="fmtall\VEGP2all.xml" />
<Content Include="fmtall\VEGPAlrall.xml" />
@ -376,7 +378,7 @@
<Content Include="fmtall\wst1all.xml" />
<Content Include="fmtall\wst2all.xml" />
<Content Include="fmtall\wstalrall.xml" />
<Content Include="fmtall\VEGPBckall.xml" />
<Content Include="fmtall\VEGPBckStpsall.xml" />
<Content Include="fmtall\wstbckall.xml" />
<Content Include="fmtall\wstcklall.xml" />
<Content Include="fmtall\wstdcsall.xml" />
@ -404,6 +406,7 @@
<Content Include="genmacall\BVPSAOP.svg" />
<Content Include="genmacall\BVPSAtch.svg" />
<Content Include="genmacall\BVPSbck.svg" />
<Content Include="genmacall\BVPSFlexdev.svg" />
<Content Include="genmacall\BVPSdev.svg" />
<Content Include="genmacall\BVPSNIBCK.svg" />
<Content Include="genmacall\BVPSSAMG.svg" />
@ -512,6 +515,7 @@
<Content Include="genmacall\shesam.svg" />
<Content Include="genmacall\shessd.svg" />
<Content Include="genmacall\VEGPBck.svg" />
<Content Include="genmacall\VEGPBckStps.svg" />
<Content Include="genmacall\VEGP1.svg" />
<Content Include="genmacall\VEGP2.svg" />
<Content Include="genmacall\VEGPAlr.svg" />

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1091,6 +1091,11 @@ namespace VEPROMS
DoCreatePDF();
}
public void QPCreatePDF()
{
DoCreatePDF();
}
private void DoCreatePDF()
{
if (_AllProcedures)

View File

@ -87,6 +87,8 @@ namespace VEPROMS
// multiple events because the print dialog will be displayed for each time the event was added.
_SelectedStepTabPanel.MyStepTabRibbon.PrintRequest -= new StepTabRibbonEvent(MyStepTabRibbon_PrintRequest);
_SelectedStepTabPanel.MyStepTabRibbon.PrintRequest += new StepTabRibbonEvent(MyStepTabRibbon_PrintRequest);
_SelectedStepTabPanel.MyStepTabRibbon.QPrintRequest -= new StepTabRibbonEvent(MyStepTabRibbon_QPrintRequest);
_SelectedStepTabPanel.MyStepTabRibbon.QPrintRequest += new StepTabRibbonEvent(MyStepTabRibbon_QPrintRequest);
_SelectedStepTabPanel.MyStepTabRibbon.ProgressBar = bottomProgBar;
_SelectedStepTabPanel.MyStepTabRibbon.ContActionSummaryRequest -= MyStepTabRibbon_ContActionSummaryRequest;
_SelectedStepTabPanel.MyStepTabRibbon.ContActionSummaryRequest += MyStepTabRibbon_ContActionSummaryRequest;
@ -512,6 +514,7 @@ namespace VEPROMS
ItemInfo.ItemDeleted += new ItemInfoEvent(RefreshDisplayHistory);
tv.PrintProcedure += new vlnTreeViewEvent(tv_PrintProcedure);
tv.QPrintProcedure += new vlnTreeViewEvent(tv_QPrintProcedure);
tv.PrintAllProcedures += new vlnTreeViewEvent(tv_PrintAllProcedures);
tv.ApproveProcedure += new vlnTreeViewEvent(tv_ApproveProcedure);
tv.ApproveAllProcedures += new vlnTreeViewEvent(tv_ApproveAllProcedures);
@ -1152,6 +1155,40 @@ namespace VEPROMS
pi.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
}
void tv_QPrintProcedure(object sender, vlnTreeEventArgs args) // Quick Print right click menu on Procedure name.
{
try
{
ProcedureInfo pi = (args.Node as VETreeNode).VEObject as ProcedureInfo;
if (pi == null) return;
tc.SaveCurrentEditItem(pi);
pi.MyDocVersion.DocVersionConfig.SelectedSlave = args.UnitIndex;
using (DlgPrintProcedure prnDlg = new DlgPrintProcedure(pi))
{
prnDlg.SelectedSlave = args.UnitIndex;
prnDlg.MySessionInfo = MySessionInfo;
prnDlg.SetupForProcedure(); // Setup filename
prnDlg.QPCreatePDF(); // Create Print report
pi.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
}
}
catch(Exception ex)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("Could not create PDF Print");
sb.AppendLine();
MessageBox.Show(sb.ToString(), "Error when creating PDF Print", MessageBoxButtons.OK, MessageBoxIcon.Warning);
_MyLog.Warn("Failed to create PDF print", ex);
}
}
void tv_CreateContinuousActionSummary(object sender, vlnTreeEventArgs args)
{
DialogResult dr = System.Windows.Forms.DialogResult.Yes;
@ -1372,14 +1409,75 @@ namespace VEPROMS
//added by jcb 20130718 to support create pdf button when multi-unit and user selects a unit
pi.MyDocVersion.DocVersionConfig.SelectedSlave = pi.ProcedureConfig.SelectedSlave;
try
{
using (DlgPrintProcedure prnDlg = new DlgPrintProcedure(pi))
{
prnDlg.SelectedSlave = pi.ProcedureConfig.SelectedSlave == 0 ? -1 : pi.ProcedureConfig.SelectedSlave; //added by jcb 20130718 to support create pdf button when multi-unit and user selects a unit
prnDlg.MySessionInfo = MySessionInfo;
prnDlg.ShowDialog(this); // RHM 20120925 - Center dialog over PROMS window
//added by jcb 20130718 to support create pdf button when multi-unit and user selects a unit
pi.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
}
}
catch (Exception ex)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("Could not create PDF Print");
sb.AppendLine();
MessageBox.Show(sb.ToString(), "Error when creating PDF Print", MessageBoxButtons.OK, MessageBoxIcon.Warning);
_MyLog.Warn("Failed to create PDF print", ex);
}
}
void MyStepTabRibbon_QPrintRequest(object sender, StepTabRibbonEventArgs args)
{
// Fix for B2013-173:
// if the user did the print by using the shortcut keys 'Ctrl-P' the arguments sent in
// is the first opened procedure rather than the active procedure. So check for this
// and if they are not the same, use the CurrentItem from the main frmVEPROMS.
ProcedureInfo piThis = null;
if (_CurrentItem != null) piThis = _CurrentItem.MyProcedure;
ProcedureInfo pi = args.Proc as ProcedureInfo;
if (piThis != null && pi.ItemID != piThis.ItemID) pi = piThis;
// Check if Procedure Info is null
if (pi == null) return;
DlgPrintProcedure prnDlg = new DlgPrintProcedure(pi);
prnDlg.SelectedSlave = pi.ProcedureConfig.SelectedSlave == 0 ? -1 : pi.ProcedureConfig.SelectedSlave; //added by jcb 20130718 to support create pdf button when multi-unit and user selects a unit
prnDlg.MySessionInfo = MySessionInfo;
prnDlg.ShowDialog(this); // RHM 20120925 - Center dialog over PROMS window
//added by jcb 20130718 to support create pdf button when multi-unit and user selects a unit
pi.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
pi.MyDocVersion.DocVersionConfig.SelectedSlave = pi.ProcedureConfig.SelectedSlave;
try
{
using (DlgPrintProcedure prnDlg = new DlgPrintProcedure(pi))
{
prnDlg.SelectedSlave = pi.ProcedureConfig.SelectedSlave == 0 ? -1 : pi.ProcedureConfig.SelectedSlave; //added by jcb 20130718 to support create pdf button when multi-unit and user selects a unit
prnDlg.MySessionInfo = MySessionInfo;
prnDlg.SetupForProcedure(); // Setup filename
//prnDlg.ShowDialog(this); // RHM 20120925 - Center dialog over PROMS window
prnDlg.QPCreatePDF(); // Create Print report
//added by jcb 20130718 to support create pdf button when multi-unit and user selects a unit
pi.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
}
}
catch (Exception ex)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("Could not create PDF Print");
sb.AppendLine();
MessageBox.Show(sb.ToString(), "Error when creating PDF Print", MessageBoxButtons.OK, MessageBoxIcon.Warning);
_MyLog.Warn("Failed to create PDF print", ex);
}
}
void displaySearch1_PrintRequest(object sender, DisplaySearchEventArgs args)

View File

@ -1533,9 +1533,13 @@ namespace VEPROMS.CSLA.Library
return myGrp;
}
// B2024-001: Loading of Ros was getting called over and over when ROs are in tables. Added
// a flag to only process once until completed, 'currentlyLoading'.
static bool currentlyLoading = false;
private void Load(int rofstID)
{
if (currentlyLoading) return; // B2024-001: don't load if in process of loading
currentlyLoading = true;
_dicRoCounts = new Dictionary<int, int>();
DateTime dtStart = DateTime.Now;
@ -1631,6 +1635,7 @@ namespace VEPROMS.CSLA.Library
}
catch { }
}
currentlyLoading = false; // B2024-001: done loading
}
private void LoadChild(int rofstID, int dbiID, ROFSTLookup.rochild child)

View File

@ -711,6 +711,11 @@ namespace VEPROMS.CSLA.Library
else
newvalue = newvalue.Replace(@"\u9586?", m.Groups[1].Value + @"\u9586?" + m.Groups[3].Value);
}
// B2022-134: crash when updating an RO that contains '<' or '>' when RO is used in a table cell. These
// are xml special characters, the grid is stored as xml, so these characters need translated so that
// storing them as xml in the database won't crash. They get translated back when used in Proms.
if (newvalue.Contains("<")) newvalue = newvalue.Replace("<", "&lt;");
if (newvalue.Contains(">")) newvalue = newvalue.Replace(">", "&gt;");
if (gg != newvalue)
{
retval = gg;

View File

@ -4104,7 +4104,7 @@ namespace VEPROMS.CSLA.Library
ItemInfo srcItem = ItemInfo.Get(eds[0].ItemID);
if (srcItem == null) return null;
if (srcItem.IsHigh) return srcItem.Ordinal;
if (srcItem.IsHigh || srcItem.IsSection || srcItem.IsProcedure) return srcItem.Ordinal;
// B2018-118: the LinkedOrdinal count must take into account cautions versus notes types:
ItemInfo hls = srcItem.MyHLS;
bool enIsCaution = this.IsCaution;
@ -4223,6 +4223,14 @@ namespace VEPROMS.CSLA.Library
((IsHigh && FormatStepData.PageBreakOnStep) || (IsRNOPart && MyHLS.FormatStepData.PageBreakOnStep)))
tbformate = IsRNOPart ? MyHLS.FormatStepData.TabData.RNOIdentEdit : FormatStepData.TabData.IdentEdit;
//F2023-112 Vogtle Units 3 and 4 Backgrounds
// added code to get the tbformate (this is used for the tab displayed in the step editor) for Cautions and Notes background steps
// like we do for the high level steps (see the if statement above)
// all plants using enhanced backgrounds will benefit from this and is adjustable in the format files
if (((ActiveFormat.PlantFormat.FormatData.PurchaseOptions.Value & E_PurchaseOptions.EnhancedBackgrounds) == E_PurchaseOptions.EnhancedBackgrounds) &&
((IsCaution || IsNote) && FormatStepData.PageBreakOnStep))
tbformate = IsRNOPart ? FormatStepData.TabData.RNOIdentEdit : FormatStepData.TabData.IdentEdit;
if (ActiveFormat.Name.ToUpper() == "WCNCKL" || ActiveFormat.Name.ToUpper() == "WSTCKL")
{
if (!IsNote && !IsCaution) tbformat = FormatStepData.TabData.IdentEdit;
@ -4237,15 +4245,23 @@ namespace VEPROMS.CSLA.Library
{
string tb = (LinkedOrdinal==null)? "NA" : LinkedOrdinal.ToString();
tbformat = tbformat.Replace("{LNK C/N Num}", tb);
if (tbformate != null) tbformate = tbformate.Replace("{LNK C/N Num}", tb);
if ((ActiveParent as ItemInfo).FormatStepData.TabData.IdentEdit.Contains("{Section Prefix}") && LinkedTabHasSectionPrefix) // B2019-126 Check the HLS of the source document (ex. EOP step) to see if it includes the section number prefix in its tab
tbformat = tbformat.Replace("{Section Prefix}",""); // B2018-141 remove duplicate section number
{
tbformat = tbformat.Replace("{Section Prefix}", ""); // B2018-141 remove duplicate section number
if (tbformate != null) tbformate = tbformate.Replace("{Section Prefix}", ""); // F2023-112 replace in editor tab
}
if ((ActiveParent as ItemInfo).LinkedTab != null)
tbformat = tbformat.Replace("{LNK Step Num}", (ActiveParent as ItemInfo).LinkedTab.Trim(" .".ToCharArray())); //(ActiveParent as ItemInfo).Ordinal.ToString());
{
tbformat = tbformat.Replace("{LNK Step Num}", (ActiveParent as ItemInfo).LinkedTab.Trim(" .".ToCharArray()));
if (tbformate != null) tbformate = tbformate.Replace("{LNK Step Num}", (ActiveParent as ItemInfo).LinkedTab.Trim(" .".ToCharArray())); // F2023-112 replace in editor tab
}
tbformat = tbformat.TrimStart(" ".ToCharArray());
if (tbformate != null) tbformate = tbformate.TrimStart(" ".ToCharArray()); // F2023-112 replace in editor tab
}
if (tbformat.Contains("{LNK Step Num}"))
tbformat = tbformat.Replace("{LNK Step Num}", LinkedTab==null?"NA":LinkedTab.Trim(" .".ToCharArray()).PadLeft(2));//Ordinal.ToString().PadLeft(2));
if (tbformate != null && tbformate.Contains("{LNK Step Num}"))
if (tbformate != null && tbformate.Contains("{LNK Step Num}")) // F2023-112 replace in editor tab
tbformate = tbformate.Replace("{LNK Step Num}", LinkedTab == null ? "NA" : LinkedTab.Trim(" .".ToCharArray()).PadLeft(2));//Ordinal.ToString());
if (tbformate != null && tbformate.Contains("{!Clock}"))
{
@ -4972,7 +4988,8 @@ namespace VEPROMS.CSLA.Library
// Otherwise, just return the section tab.
// Before checking for anything, if the DisplayNumber starts with 'ATTACHMENT ', don't use that in the Section
// prefix for the tabstring.
string attNum = ActiveSection.DisplayNumber.ToUpper().StartsWith("ATTACHMENT ") ? ActiveSection.DisplayNumber.Substring(11) : ActiveSection.DisplayNumber;
// F2023-112 - added flag to use entire section number in the step tab - Vogtle 3&4 Background format (VEGPBckStp)
string attNum = (ActiveSection.DisplayNumber.ToUpper().StartsWith("ATTACHMENT ") && !FormatStepData.TabData.UseEntireSectionNum) ? ActiveSection.DisplayNumber.Substring(11) : ActiveSection.DisplayNumber;
Match m = Regex.Match(attNum, @"[a-zA-Z]"); // for alpha, use non-touched displaynumber
int indx = -1;
if (m.Success)

View File

@ -171,7 +171,8 @@ namespace VEPROMS.CSLA.Library
DSS_PageListAddSectCont = 0x400000000, // for this section, add the top continue message when doing the ATTACHTITLECONT pagelist token (Calvert/Landscape word docs)
DSS_WordContentLandscaped = 0x800000000, // for this section, the word content is landscaped.
DSS_ChklstEditSize = 0x100000000, // Westinghouse checklist - edit window size
DSS_SameXOffSubsections = 0x2000000000, // print subsections at same offset as section & preceeding subsections,start HLS xoff at section text (not number)
DSS_SameXOffSubsections = 0x2000000000, // print subsections at same offset as section & preceeding subsections,start HLS xoff at section text (not number)
DSS_PageListBkgndStpContMsg = 0x4000000000, // Background Step Number printed via Pagelist with "{CM:(Cont)}" which will print "(cont)" next to step number if it's continued to the next page - (VEGPBckStp) F2023-112
};
public enum E_DocStyleUse : uint
{

View File

@ -202,6 +202,15 @@ namespace VEPROMS.CSLA.Library
return LazyLoad(ref _TextColor, "@TextColor");
}
}
// F2023-112 Vogtle Units 3 & Backgrounds - trim the ending "-B" from the procedure number (used in title box of page header)
private LazyLoad<string> _TrimEnding;
public string TrimEnding
{
get
{
return LazyLoad(ref _TrimEnding, "@TrimEnding");
}
}
#endregion
#region Override ToString
public override string ToString()

View File

@ -1458,6 +1458,14 @@ namespace VEPROMS.CSLA.Library
return LazyLoad(ref _NoBlankLastNoteCautionWarn, "@NoBlankLastNoteCautionWarn");
}
}
private LazyLoad<bool> _NoteCautionCenterOneAllTypes; // F2023-126: Vogtle Alarms - center single line caution/note if more than one type exist off step
public bool NoteCautionCenterOneAllTypes
{
get
{
return LazyLoad(ref _NoteCautionCenterOneAllTypes, "@NoteCautionCenterOneAllTypes");
}
}
private LazyLoad<bool> _ChkBoxToGeneratePointListText; // C2021-063 Barakah Alarm: check box to generate Alarm Point List Text
public bool ChkBoxToGeneratePointListText
{
@ -3182,6 +3190,14 @@ namespace VEPROMS.CSLA.Library
return LazyLoad(ref _WolfcreekCKLBackgndFormat, "@WolfcreekCKLBackgndFormat");
}
}
private LazyLoad<bool> _Vogtle3and4BackgroundFormat;
public bool Vogtle3and4BackgroundFormat
{
get
{
return LazyLoad(ref _Vogtle3and4BackgroundFormat, "@Vogtle3and4BackgroundFormat");
}
}
private LazyLoad<bool> _FortranFormatNumbers;
public bool FortranFormatNumbers
{
@ -6611,6 +6627,14 @@ namespace VEPROMS.CSLA.Library
return LazyLoad(ref _NoTrim, "TabData/@NoTrim");
}
}
private LazyLoad<bool> _UseEntireSectionNum;
public bool UseEntireSectionNum
{
get
{
return LazyLoad(ref _UseEntireSectionNum, "TabData/@UseEntireSectionNum");
}
}
}
#endregion

View File

@ -1029,10 +1029,23 @@ namespace Volian.Controls.Library
// OpenEnhancedDocument(this, args);
//}
public event StepTabRibbonEvent PrintRequest;
private void OnPrintRequest(StepTabRibbonEventArgs args)
public event StepTabRibbonEvent QPrintRequest;
private void OnPrintRequest(StepTabRibbonEventArgs args, int prttyp = 0)
{
if (PrintRequest != null)
PrintRequest(this, args);
if (PrintRequest != null) {
if (prttyp == 0)
{
PrintRequest(this, args);
}
}
if (QPrintRequest != null)
{
if (prttyp == 1)
{
QPrintRequest(this, args);
}
}
}
public event StepTabRibbonEvent ContActionSummaryRequest;
private void OnContActionSummaryRequest(StepTabRibbonEventArgs args)
@ -1947,7 +1960,7 @@ namespace Volian.Controls.Library
rtabChgId.Visible = MyItemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.ChangeBarData.ChangeIds;
}
#region submenu for printing child procedures
#region submenu for printing child procedures
// C2020-013 add unit (child) submenu to create PDF and create CAS buttons
private void miMultiUnit_Click(object sender, EventArgs e)
{
@ -1956,12 +1969,16 @@ namespace Volian.Controls.Library
DevComponents.DotNetBar.ButtonItem mip = mi.Parent as DevComponents.DotNetBar.ButtonItem;
int selectedChild = (int)mi.Tag;
if (selectedChild == 0) return; // unit (child) not selected
MyItemInfo.MyProcedure.ProcedureConfig.SelectedSlave = (int) mi.Tag;
switch (mip.Text)
{
case "Create":
btnPdfCreate_Click(sender, e);
break;
case "Quick\r\nPrint":
btnPdfQuickCreate_Click(sender, e);
break;
case "Cont. Act\r\nSummary":
btnCASCreate_Click(sender, e);
break;
@ -1973,6 +1990,9 @@ namespace Volian.Controls.Library
btnPdfCreate.SubItems.Clear();
btnPdfCreate.Tag = null;
btnPdfCreate.Click -= new System.EventHandler(btnPdfCreate_Click);
btnPdfQuickCreate.SubItems.Clear();
btnPdfQuickCreate.Tag = null;
btnPdfQuickCreate.Click -= new System.EventHandler(btnPdfQuickCreate_Click);
btnCASCreate.SubItems.Clear();
btnCASCreate.Tag = null;
btnCASCreate.Click -= new System.EventHandler(btnCASCreate_Click);
@ -1990,12 +2010,16 @@ namespace Volian.Controls.Library
btnPdfCreate.SubItems.Add(btn);
btn = MakeSubMenuButton(s, k, miMultiUnit_Click);
btn.Enabled = procAppl;
btnPdfQuickCreate.SubItems.Add(btn);
btn = MakeSubMenuButton(s, k, miMultiUnit_Click);
btn.Enabled = procAppl;
btnReviewCreatePDF.SubItems.Add(btn);
btn = MakeSubMenuButton(s, k, miMultiUnit_Click);
btn.Enabled = procAppl;
btnCASCreate.SubItems.Add(btn);
}
btnPdfCreate.AutoExpandOnClick = true;
btnPdfQuickCreate.AutoExpandOnClick = true;
btnReviewCreatePDF.AutoExpandOnClick = true;
btnCASCreate.AutoExpandOnClick = true;
}
@ -4086,7 +4110,14 @@ namespace Volian.Controls.Library
{
if (MyItemInfo == null) return; // if creating a pdf before rtb exists, return;
if (MyEditItem != null) MyEditItem.SaveCurrentAndContents();
OnPrintRequest(new StepTabRibbonEventArgs(MyItemInfo.MyProcedure));
OnPrintRequest(new StepTabRibbonEventArgs(MyItemInfo.MyProcedure), 0);
}
private void btnPdfQuickCreate_Click(object sender, EventArgs e)
{
if (MyItemInfo == null) return; // if creating a pdf before rtb exists, return;
if (MyEditItem != null) MyEditItem.SaveCurrentAndContents();
OnPrintRequest(new StepTabRibbonEventArgs(MyItemInfo.MyProcedure), 1);
}
private void btnCASCreate_Click(object sender, EventArgs e)

View File

@ -165,6 +165,50 @@
<metadata name="superTooltipRibbon.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="btnPdfQuickCreate.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr2AAAK9gHCr3ADAAAI0UlE
QVRYR53XSWwb1xkH8JElS+i50KUIempB9FyguQRoiya2gSyHOEWQADnkFtRxmwRBENcIigZx0sDNVsCJ
d1mSZcv0EluS7aS2JFv7QslaSIkUd3KG+zILZx/y3++RVBzvTgf4YzhDit/vfe89YsSx41/79nN79/yj
9ejBEz/vOtLb2XWkp7PrKOVYIydYjnffThdds/z43vGezu4TvZ09J04209d5svtUZy+d93/62c8unh+s
17rvMdh3k+s/fPmXKyPpq4GJ4mJwpugJe0qe6FLJE/eWPIn1socPlD1CqOxJRURPOip6MjE6s9DrVIS9
V/LwwaIn4S94Yms5T2Q16wkupT1+D+8ZuTL951K8yrW0tDQr3nVc7p3k3Ie+dwVuyKnYjIXkgoXUio3s
uo180EEx6qCcqEISapDTNShZoJID1HzjrGTZ/SrElINS0kI+qiMTUiH4ZcS9ZUwNL+2ChAcDhnonuDOH
vnP5RyUhOmUiMW9CWLaQ8VnIBQgRtlGMESLpEKJaL8aKVhIaKhnnNiLDEDYhTORjDFEBH5Awc2N5FzQ0
q93nGOwZ5/oPfudaHxEJYCA+b4BfMpH2Wsj6aUQhBmBf7EAUCJGhkS/zMD/8DMapoUYnCpQ8IbLUqbSN
smCikCBERMHc+Mou2I8EXHWtDYtCZJIAcwaStwykvCYBaDQhC4UoARLsiwlAI9aOnYVxqA/64E1oORta
ie5R1CJNUZ66RPfEDCF4DZ4pAuBhgO6xJqBMAB2xOb0JMJAhQC5IXxS1mgC7DjA+/gr6ue+hzaxBK9jQ
RUCXGtHEGtQyTU2REFkdi7OrDwcMMMA3DUB4UiOARgAdwioDGMiFGMCsL7AyzbFErTY+ovYfPQXzP0eg
FwwYSg1mBTDVZio16EoVFdHE0sJjAE5/c8XlGy7dCfDSHNYBBgoxAvAWxLQFqUSArw7D2vtPWJ9+AUO2
YWo1WHoNjgk4ViO2RZ/TLKwsex8OuNR9swkoEkBFbF5FYkmD4NOQCejIhQ0U4wZKtLDErAmZWqyfG4Kz
bQfs/V/ANGuwzSocu4ZqtYZajcrRwc62bcPr/QmA0GSlDkgu0z5eI8CGVt/XxaSBctqg9ptQJAf6og+1
X/0aztFjoLpwHIeKV6koAzQFdLD7jwQM9BDgIAMUhNAUATyVOiC1rtJeJkBMo9HrEHMG5JIBVTah58uo
PvscnCtXaIc1Cm0iNiE/HTBSEMJTCmILCpKrFaT8KrIRFYWkhnJGg1TUUZEMaJoJM51B7ckn4XzyCWwq
yFp9PwS79vl8jwLcIMBll2+UADMK4osKeF8F6WAFuZiKYkqFmNegiDrUig6dilk08urTT6P64ouwBQE2
FbobsQl4dAd6CXCIADfyQmSOfr+XZAjrCjJhBflkBaWsSitfRUXRaPQE0DQ4b70Fu6sLzjvvwPn6a1jN
LtyNeLxFuNkBBpiXkViVkdqQkY0pKKQUlAsVKLIKVVWhGbTnV1Zo/p+FGYnAXFhA9YUXYPl890U8FuBi
zyh36uCQyzuaE8JzEgEkpIIycgkZxawCqazQ6Ct1gEoAa98+2O++C51hTBM2daD66quwksl7EJZlPUYH
To5ypw8PuXw3c0LEIyHpJUBIQp6XUSrIkCUCVCqoUOu1cBjOjh0wJiagUfE6QpbhfPABqq+8Asvvh0Vz
b7NQVZMQPr//Lw9fA30jXP+RIdfaRFaI3hLBr4vIRCUU0hLEEgGogKIoUAhgfvkl7DfegEbXmq43EDRa
o1SCs3cvak89BbuvD/boKJyBAdi9vSi+/HJvjeN2EuE3lC33UAZOE+DYkGt9KivEVkQIGyKySRHFnARJ
lOoAmXWARm8//zy08XGorDitftYJ68gR2NQBZ/duVHfuRHXbNtSeeAK1Z56B8/77ELdvP09F/075N+UP
DHAHYrB/hDtzfNDln80I7AkmFS4jJ4goFUVIEiEoDGB8/jksKqLOz0Pv74d54ADM48dhXL0KY3kZBs/X
p8PI5WBfuFAvblMKO3ceog78lor+rpmWOwHuYe7MiUFXYD4j0PMf0tEy8pkyymURIgNQcYVWvvXSS9Au
XoQ6PQ01GESF2s46odI0sN3BpkSnsIVp0NybNGUGfS69Z88BAjxHRX9P+dM9iKGzw5y7e9C1sZAWkoES
MokSCjkCsOI0KimRgPHee9Bp/lknZNoNCpuSZuq7g21RKsgAdURzh7BF6l1fry/CZtE/UnZQbq+FoXME
6CHArZTABwnAl1AslCGPjUEZHITa0wPztdcg0zaT2Hpopr4wKT+GMMQmhCHY69XVxvNAnmpR0TbKVlb8
B8Dl89e5s70DruBSShDCRWSFAuTePqg0x9LMDCxaWMp/r0GUFYgiTQubms3QdX2himy7Eoo+U//NqDQw
DLUJeOBx+QIB+giwIghCvITyyTPQ3n4bZfp1M15/Her+/SgWWVeKKOaLND2FO1LM0X1KKU9/S50T2eIt
30YtL9FT8cMAVy5e586dGnCFvIKQCmWgvvk3SN9+C233X6HSqs/Hk8hmcsimssgIGZqie5Pls9S5LHKp
HPLpPP2CNkAsiwuLjwE4TQAfL6SiWZSPd6OyZw+kDz+iR7IgUnwaQlwAH+PBR5uJ3BW6J0QFpGIppONp
ZJIZ2sq5ejyznkcALm0CkkIymqEvSdLDSAB8nEcimkQinEA8FEcsGENsgxK4N/FAHPGNOBLBBJKhJPjw
bdDs5OyjANe48/0MkEglQikkIknEI4l6wWggiog/gvB6GOE1ii+MkDf0Q8JeusdC9yO+CKJrUUTXo4j7
CbORqIOmx6ffhPMAQEdHB3e69xx39GD3L6bHPAfnpxfPzk7NuWcmZtzTY9PuqZtT7snRSffkyKR7Ynii
kesT7vHr443ztfH6681r9v7k8KR7amTKPX1j2j0zNuO+dOHS9hyfa1a862hra+O2tm/l2tvbW9raW9u3
drR1tLa1dmxp3dLR0trS0bKlEa6F66CP/79ppdznn1OO+x8FMcZP/Ws5zwAAAABJRU5ErkJggg==
</value>
</data>
<data name="btnDelelete.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6

View File

@ -501,6 +501,11 @@ namespace Volian.Controls.Library
{
if (PrintProcedure != null) PrintProcedure(sender, args);
}
public event vlnTreeViewEvent QPrintProcedure;
private void OnQPrintProcedure(object sender, vlnTreeEventArgs args)
{
if (QPrintProcedure != null) QPrintProcedure(sender, args);
}
public event vlnTreeViewEvent PrintAllProcedures;
private void OnPrintAllProcedures(object sender, vlnTreeEventArgs args)
{
@ -831,6 +836,7 @@ namespace Volian.Controls.Library
MenuItem micas = new MenuItem("Create Continuous Action Summary");
MenuItem mitcas = new MenuItem("Create Time Critical Action Summary"); //F2022-024 added menu option
MenuItem mip = new MenuItem("Print");
MenuItem miqp = new MenuItem("Quick Print");
MenuItem mia = new MenuItem("Approve");
int k = 0;
foreach (string s in pri.MyDocVersion.UnitNames)
@ -841,6 +847,9 @@ namespace Volian.Controls.Library
MenuItem mp = mip.MenuItems.Add(s, new EventHandler(miMultiUnit_Click));
mp.Enabled = procAppl;
mp.Tag = k;
MenuItem mqp = miqp.MenuItems.Add(s, new EventHandler(miMultiUnit_Click));
mqp.Enabled = procAppl;
mqp.Tag = k;
MenuItem ma = mia.MenuItems.Add(s, new EventHandler(miMultiUnit_Click));
ma.Enabled = procAppl;
ma.Tag = k;
@ -854,6 +863,7 @@ namespace Volian.Controls.Library
cm.MenuItems.Add(micas);
cm.MenuItems.Add(mitcas);
cm.MenuItems.Add(mip);
cm.MenuItems.Add(miqp);
AddShowChangeBarsAfterMenuItem(cm.MenuItems, pri);
cm.MenuItems.Add(mia);
AddApprovedRevisionsMultiUnit(cm.MenuItems, pri);
@ -863,6 +873,8 @@ namespace Volian.Controls.Library
cm.MenuItems.Add("Create Continuous Action Summary", new EventHandler(mi_Click));
cm.MenuItems.Add("Create Time Critical Action Summary", new EventHandler(mi_Click));
cm.MenuItems.Add("Print", new EventHandler(mi_Click));
cm.MenuItems.Add("Quick Print", new EventHandler(mi_Click));
//MenuItem miqp = new MenuItem("Print");
AddShowChangeBarsAfterMenuItem(cm.MenuItems, pri);
cm.MenuItems.Add("Approve", new EventHandler(mi_Click));
//_MyLog.WarnFormat("Context Menu 1 before - {0}", GC.GetTotalMemory(true));
@ -877,19 +889,24 @@ namespace Volian.Controls.Library
if (pri.MyDocVersion.MultiUnitCount > 1)
{
MenuItem mip = new MenuItem("Print");
MenuItem miqp = new MenuItem("Quick Print");
int k = 0;
foreach (string s in pri.MyDocVersion.UnitNames)
{
k++;
MenuItem mp = mip.MenuItems.Add(s, new EventHandler(miMultiUnit_Click));
mp.Tag = k;
MenuItem mqp = miqp.MenuItems.Add(s, new EventHandler(miMultiUnit_Click));
mqp.Tag = k;
}
cm.MenuItems.Add(mip);
cm.MenuItems.Add(miqp);
AddApprovedRevisionsMultiUnit(cm.MenuItems, pri);
}
else
{
cm.MenuItems.Add("Print", new EventHandler(mi_Click));
cm.MenuItems.Add("Quick Print", new EventHandler(mi_Click));
AddApprovedRevisions(cm.MenuItems, pri);
}
}
@ -1727,6 +1744,9 @@ namespace Volian.Controls.Library
case "Print":
OnPrintProcedure(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0, mi.Text, (int)mi.Tag));
break;
case "Quick Print":
OnQPrintProcedure(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0, mi.Text, (int)mi.Tag));
break;
case "Print All Procedures for":
OnPrintAllProcedures(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0,mi.Text,(int)mi.Tag));
break;
@ -1967,6 +1987,9 @@ namespace Volian.Controls.Library
case "Print":
OnPrintProcedure(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0));
break;
case "Quick Print":
OnQPrintProcedure(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0));
break;
case "Print All Procedures":
OnPrintAllProcedures(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0));
break;

View File

@ -569,9 +569,22 @@ namespace Volian.Print.Library
KeepStepsOnPage = false;
}
}
// 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'.
if (KeepStepsOnPage && !alarmPageKeepHighWithSubs && ySizeIncludingFirst > (yWithinMargins - ySizeBtmCtnMess1 - ySizeBtmEndMess1)) KeepStepsOnPage = false;
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).
// See comment above for setting of '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
// 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
float myFirstPieceSize = GetFirstPieceSize(true);
if (myFirstPieceSize > yWithinMargins)
KeepStepsOnPage = false;
}
else
KeepStepsOnPage = false;
}
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

View File

@ -19,7 +19,7 @@ using JR.Utils.GUI.Forms;
namespace Volian.Print.Library
{
public delegate void PromsPrinterStatusEvent(object sender,PromsPrintStatusArgs args);
public delegate void PromsPrinterStatusEvent(object sender, PromsPrintStatusArgs args);
public class PromsPrintStatusArgs
{
private string _MyStatus;
@ -291,7 +291,7 @@ namespace Volian.Print.Library
get { return _MyReaderHelper; }
set { _MyReaderHelper = value; }
}
private string _BlankPageText; // C2019-004: Allow user to define duplex blank page text
private string _BlankPageText; // C2019-004: Allow user to define duplex blank page text
public string BlankPageText
{
get { return _BlankPageText; }
@ -299,7 +299,7 @@ namespace Volian.Print.Library
}
// use DidAll & MergeNotIncuded to know that printing all (not single) was done. Used w/ merge code to know when to return, i.e. not include in merged pdf
private bool _DidAll;
public bool DidAll // value passed in from frmPdfStatusForm
public bool DidAll // value passed in from frmPdfStatusForm
{
get { return _DidAll; }
set { _DidAll = value; }
@ -336,7 +336,7 @@ namespace Volian.Print.Library
_MyReaderHelper = new ReaderHelper(this);
_SaveLinks = saveLinks;
// 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>();
_BlankPageText = blankPageText;
_DidAll = didAll;
@ -366,7 +366,7 @@ namespace Volian.Print.Library
if (_MyItem is ProcedureInfo)
{
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
{
_MergeNotIncluded = true;
return null;
@ -399,7 +399,7 @@ namespace Volian.Print.Library
}
else // B2017-186 Neither Facing Pages or Page Number Transitions
{
string tmpss = Print(_MyItem as ProcedureInfo, pdfFolder, makePlacekeeper, makeContinuousActionSummary, makeTimeCriticalActionSummary);
string tmpss = Print(_MyItem as ProcedureInfo, pdfFolder, makePlacekeeper, makeContinuousActionSummary, makeTimeCriticalActionSummary);
if (!BatchPrint && ForcedPaginations != null && ForcedPaginations.Count > 0) // B2020-159: Forced Pagination Reporting
{
ReportForcedPaginations();
@ -435,7 +435,7 @@ namespace Volian.Print.Library
ProcedureInfo.RefreshPageNumTransitions(_MyItem as ProcedureInfo);
_MyReaderHelper = new ReaderHelper(this);
retstr = Print(_MyItem as ProcedureInfo, pdfFolder, makePlacekeeper, makeContinuousActionSummary, makeTimeCriticalActionSummary);
if (! BatchPrint && ForcedPaginations != null && ForcedPaginations.Count > 0) // B2020-159: Forced Pagination Reporting
if (!BatchPrint && ForcedPaginations != null && ForcedPaginations.Count > 0) // B2020-159: Forced Pagination Reporting
{
ReportForcedPaginations();
ForcedPaginations.Clear();
@ -538,7 +538,7 @@ namespace Volian.Print.Library
_PROMSVersionLayer.SetPrint("PROMS Version", true);
}
}
public static int ProcPageCount = -1; // Used to count page numbers in each pdf. This will be used if/when pdfs are merged together.
public static int ProcPageCount = -1; // Used to count page numbers in each pdf. This will be used if/when pdfs are merged together.
private void CloseDocument(string fileName)
{
int profileDepth = ProfileTimer.Push(">>>> CloseDocument");
@ -565,7 +565,7 @@ namespace Volian.Print.Library
set
{
_MyContentByte = value;
if(value != null)MyReaderHelper.LoadTree(MyItem);
if (value != null) MyReaderHelper.LoadTree(MyItem);
}
}
public void NewPage()
@ -585,22 +585,22 @@ namespace Volian.Print.Library
{
SectionInfo currentSection = _MyHelper.MySection;
SectionInfo nextSection = GetNextSection(currentSection); // _MyHelper.MySection.NextItem as SectionInfo;
//SectionConfig sc = (nextSection ?? currentSection).MyConfig as SectionConfig;
// If we are changing to a different section, then get the config from the nextSection
// else we are still printing in the same section so get the config from the current section
SectionConfig sc = ((!sectionChange || nextSection == null)? currentSection.MyConfig : nextSection.MyConfig) as SectionConfig;
//SectionConfig sc = (nextSection ?? currentSection).MyConfig as SectionConfig;
// If we are changing to a different section, then get the config from the nextSection
// else we are still printing in the same section so get the config from the current section
SectionConfig sc = ((!sectionChange || nextSection == null) ? currentSection.MyConfig : nextSection.MyConfig) as SectionConfig;
bool wordMargins = (sc != null && sc.Section_WordMargin == "Y");
if (wordMargins)
{
if (nextSection != null && (sectionChange) && !nextSection.IsStepSection) //change to a word section
{
if (nextSection != null && (sectionChange) && !nextSection.IsStepSection) //change to a word section
{
LastWordSection = nextSection;
_PageCountOfWordSection = 1;
MyReaderHelper.MySectionInfo = LastWordSection;
//ShowNeedForPageSize();
rct = MyReaderHelper.GetSize(LastWordSection, 1);
}
else if (!currentSection.IsStepSection) //current section is a word section
else if (!currentSection.IsStepSection) //current section is a word section
{
if (currentSection != LastWordSection)
{
@ -608,7 +608,7 @@ namespace Volian.Print.Library
_PageCountOfWordSection = 1;
}
else
if (!_MyHelper.OnBlankPage) _PageCountOfWordSection++; // B2018-049: supplemental printing throws off page sizes
if (!_MyHelper.OnBlankPage) _PageCountOfWordSection++; // B2018-049: supplemental printing throws off page sizes
MyReaderHelper.MySectionInfo = LastWordSection;
//ShowNeedForPageSize();
rct = MyReaderHelper.GetSize(LastWordSection, _PageCountOfWordSection);
@ -622,7 +622,7 @@ namespace Volian.Print.Library
if (currentSection.IsStepSection)
Volian.Base.Library.BaselineMetaFile.WriteLine("{0}", rct);
else
Volian.Base.Library.BaselineMetaFile.WriteLine("UseWordMargins={0} {1} ", (wordMargins)?"Y":"N", rct);
Volian.Base.Library.BaselineMetaFile.WriteLine("UseWordMargins={0} {1} ", (wordMargins) ? "Y" : "N", rct);
//Console.WriteLine("\"{0}\"\t\"{1}\"\t\"{2}\"\t\"{3}\"\t{4}"
// , currentSection == null ? "" : currentSection.DisplayNumber + " " + currentSection.DisplayText
// , nextSection == null ? "" : nextSection.DisplayNumber + " " + nextSection.DisplayText
@ -682,44 +682,82 @@ namespace Volian.Print.Library
// Console.WriteLine("To {0}.{1} Page: {2}",LastWordSection.DisplayNumber,LastWordSection.DisplayText,_PageCountOfWordSection);
// PreviousWordSection = LastWordSection;
//}
private PdfContentByte OpenDoc(string outputFileName, iTextSharp.text.Rectangle rect)
private PdfContentByte OpenDoc(ref string outputFileName, iTextSharp.text.Rectangle rect)
{
PdfWriter writer=null;
iTextSharp.text.Document document = new iTextSharp.text.Document(rect);
try
{
writer = PdfWriter.GetInstance(document, new FileStream(outputFileName, FileMode.Create));
// PDFA1B does not allow layers, so this is disabled for now
// If enabled, CreateLayers will need to be skipped.
//writer.PDFXConformance = PdfWriter.PDFA1B;
PdfWriter writer = null;
iTextSharp.text.Document document = new iTextSharp.text.Document(rect);
try
{
if (File.Exists(outputFileName))
{
String tmpExt = System.IO.Path.GetExtension(outputFileName);
String tmpPTH = System.IO.Path.GetDirectoryName(outputFileName);
String tmpFN = System.IO.Path.GetFileName(outputFileName);
String tmpFNNoExt = System.IO.Path.GetFileNameWithoutExtension(outputFileName);
var files = new HashSet<string>(Directory.GetFiles(tmpPTH, "*.pdf"));
//string baseName = Path.Combine(scpath, "Screenshot_");
string filename;
int i = 0;
do
{
filename = tmpPTH + @"\" + tmpFNNoExt + "_" + ++i + ".pdf";
} while (files.Contains(filename));
outputFileName = filename;
}
writer = PdfWriter.GetInstance(document, new FileStream(outputFileName, FileMode.Create));
// PDFA1B does not allow layers, so this is disabled for now
// If enabled, CreateLayers will need to be skipped.
//writer.PDFXConformance = PdfWriter.PDFA1B;
}
catch (Exception ex)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("Could not create");
sb.AppendLine();
sb.AppendLine(outputFileName + ".");
sb.AppendLine();
sb.AppendLine("If it is open, close and retry.");
MessageBox.Show(sb.ToString(), "Error on CreatePdf", MessageBoxButtons.OK, MessageBoxIcon.Warning);
//MessageBox.Show("Could not create " + outputFileName + ". If it is open, close and retry.", "Error on CreatePdf");
return MyContentByte = null;
}
document.Open();
// Create Layers
CreateLayers(writer.DirectContent);
MSWordToPDF.DebugStatus = DebugOutput ? 1 : 0;
PrintOverride.Reset();
if (DebugOutput)
{
PrintOverride.TextColor = System.Drawing.Color.Red;
PrintOverride.SvgColor = System.Drawing.Color.LawnGreen;
PrintOverride.BoxColor = System.Drawing.Color.Red;
PrintOverride.ChangeBarColor = System.Drawing.Color.Red;
PrintOverride.DebugColor = System.Drawing.Color.CadetBlue;
}
MyContentByte = writer.DirectContent;
return MyContentByte;
}
catch (Exception ex)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("Could not create");
sb.AppendLine("Error occured when creating Print PDF");
sb.AppendLine();
sb.AppendLine(outputFileName + ".");
sb.AppendLine();
sb.AppendLine("If it is open, close and retry.");
MessageBox.Show(sb.ToString(), "Error on CreatePdf", MessageBoxButtons.OK, MessageBoxIcon.Warning);
MessageBox.Show(sb.ToString(), "Error Creating PDF", MessageBoxButtons.OK, MessageBoxIcon.Warning);
//MessageBox.Show("Could not create " + outputFileName + ". If it is open, close and retry.", "Error on CreatePdf");
return MyContentByte = null;
}
document.Open();
// Create Layers
CreateLayers(writer.DirectContent);
MSWordToPDF.DebugStatus = DebugOutput ? 1 : 0;
PrintOverride.Reset();
if (DebugOutput)
{
PrintOverride.TextColor = System.Drawing.Color.Red;
PrintOverride.SvgColor = System.Drawing.Color.LawnGreen;
PrintOverride.BoxColor = System.Drawing.Color.Red;
PrintOverride.ChangeBarColor = System.Drawing.Color.Red;
PrintOverride.DebugColor = System.Drawing.Color.CadetBlue;
}
MyContentByte = writer.DirectContent;
return MyContentByte;
}
//private string CreateFileName(string procNumber, string sectNumber, string sectTitle)
//{
@ -823,7 +861,7 @@ namespace Volian.Print.Library
get { return _AllowAllWatermarks; }
set { _AllowAllWatermarks = value; }
}
private string _WatermarkOverrideColor = "BLUE"; // C2021-019: Override watermark color
private string _WatermarkOverrideColor = "BLUE"; // C2021-019: Override watermark color
public string WatermarkOverrideColor
{
get { return _WatermarkOverrideColor; }
@ -838,7 +876,7 @@ namespace Volian.Print.Library
// B2023-024 PROMS was using old cached PDF data when printing Word sections.
if (doingFoldout)
{
PdfInfo.RemovePDFFromCache((ItemInfo) myFoldoutSection); // remove cached PDF info to force getting of new data
PdfInfo.RemovePDFFromCache((ItemInfo)myFoldoutSection); // remove cached PDF info to force getting of new data
if (File.Exists(outputFileName))
File.Delete(outputFileName); // delete the temporary FOLDOUT file
}
@ -857,7 +895,7 @@ namespace Volian.Print.Library
bool wordMargins = (sc != null && sc.Section_WordMargin == "Y");
if (wordMargins)
{
string pdfFile =BuildMSWordPDF(si);
string pdfFile = BuildMSWordPDF(si);
try
{
PdfReader reader = new PdfReader(pdfFile);
@ -866,21 +904,21 @@ namespace Volian.Print.Library
catch (Exception ex)
{
MessageBox.Show(ex.Message, ex.GetType().FullName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
_MyLog.Warn(string.Format("Error of ReadPDf [{0}],{1}.{2}",si.ItemID,si.DisplayNumber,si.DisplayText),ex);
_MyLog.Warn(string.Format("Error of ReadPDf [{0}],{1}.{2}", si.ItemID, si.DisplayNumber, si.DisplayText), ex);
throw new Exception("Error in readPDF", ex);
}
}
}
PdfContentByte cb = OpenDoc(outputFileName, rct);
PdfContentByte cb = OpenDoc(ref outputFileName, rct);
if (cb == null)
{
ProfileTimer.Pop(profileDepth);
return null;
}
SetupProperties(cb.PdfDocument, myProcedure);
SetupProperties(cb.PdfDocument, myProcedure);
OnStatusChanged("Before NewPage", PromsPrinterStatusType.Before);
NewPage(); // Start of print
//_MyLog.InfoFormat("NewPage 1 {0}", cb.PdfWriter.CurrentPageNumber);
NewPage(); // Start of print
//_MyLog.InfoFormat("NewPage 1 {0}", cb.PdfWriter.CurrentPageNumber);
OnStatusChanged("After NewPage", PromsPrinterStatusType.NewPage);
if (myProcedure.Sections == null)
{
@ -906,7 +944,7 @@ namespace Volian.Print.Library
{
// B2020-115 Calculate maximum available space on a page for figures
vlnParagraph.hMax = ((float)mySection.MyDocStyle.Layout.PageLength);
vlnParagraph.wMax = ((float) mySection.MyDocStyle.Layout.PageWidth)- ((float) mySection.MyDocStyle.Layout.LeftMargin - 12);
vlnParagraph.wMax = ((float)mySection.MyDocStyle.Layout.PageWidth) - ((float)mySection.MyDocStyle.Layout.LeftMargin - 12);
NeedSupInfoBreak = true;
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)
@ -961,7 +999,7 @@ namespace Volian.Print.Library
}
x += 72F * VlnSettings.GetCommandFloat("X", 0);
y -= 72F * VlnSettings.GetCommandFloat("Y", 0);
_MyHelper.BackgroundOffset = new PointF(x,y);
_MyHelper.BackgroundOffset = new PointF(x, y);
_MyHelper.BackgroundPageOffset = 0;
}
_MyHelper.WatermarkLayer = _WatermarkLayer;
@ -977,7 +1015,7 @@ namespace Volian.Print.Library
//_MyHelper.DoZoomOMatic = DebugOutput;
_MyHelper.OriginalPageBreak = OriginalPageBreak;
_MyHelper.PROMSVersion = _PromsVersion; //C2018-009 print PROMS version
_MyHelper.WatermarkColor = WatermarkOverrideColor; // C2021-019: save the override for the watermark color
_MyHelper.WatermarkColor = WatermarkOverrideColor; // C2021-019: save the override for the watermark color
OnStatusChanged("After Set PageEvent", PromsPrinterStatusType.SetPageEvent);
}
else
@ -1073,7 +1111,7 @@ namespace Volian.Print.Library
{
// 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
if (SupInfoPrintType==E_SupInfoPrintType.Merge && !mySection.HasSupInfoSteps && firstStepSec && InsertBlankPages)
if (SupInfoPrintType == E_SupInfoPrintType.Merge && !mySection.HasSupInfoSteps && firstStepSec && InsertBlankPages)
{
InsertBlankPage(cb);
}
@ -1112,14 +1150,14 @@ namespace Volian.Print.Library
{
// Setting the default font to Arial since that is what Calvert is currently using for their Placekeeper pages
VE_Font pkFont = new VE_Font("Arial", 11, E_Style.None, 12); // default font info.
// Ideally, we should grab the font from the DocStyle used for the Placekeeper.
// Note that Calvert has two Placekeeper docSyles (EOPs and AOPs) in the same format.
// Both Placekeeper DocStyles use Arial 11 pt font, so there is no need to grab it from the format file.
//foreach (DocStyle ds in _MyHelper.MySection.ActiveFormat.PlantFormat.DocStyles.DocStyleList)
//{ // note that this will get the last Placekeeper font setting
// if (ds.StructureStyle.Style == E_DocStructStyle.Placekeeper)
// pkFont = ds.Font;
//}
// Ideally, we should grab the font from the DocStyle used for the Placekeeper.
// Note that Calvert has two Placekeeper docSyles (EOPs and AOPs) in the same format.
// Both Placekeeper DocStyles use Arial 11 pt font, so there is no need to grab it from the format file.
//foreach (DocStyle ds in _MyHelper.MySection.ActiveFormat.PlantFormat.DocStyles.DocStyleList)
//{ // note that this will get the last Placekeeper font setting
// if (ds.StructureStyle.Style == E_DocStructStyle.Placekeeper)
// pkFont = ds.Font;
//}
if (_MyHelper.MyPlacekeepers.Count > 0)
MyPlacekeeper = new Placekeeper(_MyHelper.MyPlacekeepers, pkFont);
}
@ -1149,7 +1187,7 @@ namespace Volian.Print.Library
{
_MyHelper.OnBlankPage = true;
string baselinemsg = "==Insert Blank Page==";
if (_BlankPageText != null && _BlankPageText != "") // C2019-004: Allow user to define duplex blank page text
if (_BlankPageText != null && _BlankPageText != "") // C2019-004: Allow user to define duplex blank page text
{
if (_MyHelper.IsLandscape) // rotate the blank page message on landscaped pages
{
@ -1174,9 +1212,9 @@ namespace Volian.Print.Library
private void SetupProperties(PdfDocument document, ProcedureInfo myProcedure)
{
document.AddTitle(string.Format("{0} {1}",myProcedure.DisplayNumber,myProcedure.DisplayText));
document.AddTitle(string.Format("{0} {1}", myProcedure.DisplayNumber, myProcedure.DisplayText));
document.AddSubject(myProcedure.SearchDVPath);
document.AddCreator(string.Format("{0} {1}",Application.ProductName, Application.ProductVersion));
document.AddCreator(string.Format("{0} {1}", Application.ProductName, Application.ProductVersion));
document.AddAuthor(Volian.Base.Library.VlnSettings.UserID);
}
private Placekeeper _MyPlacekeeper = null;
@ -1206,7 +1244,7 @@ namespace Volian.Print.Library
public void CreateWordDocPdf(PdfContentByte cb, SectionInfo mySection)
{
if (mySection.PageNumber == -1) // If page num transition goes to a section, need the pagenumber of section.
if (mySection.PageNumber == -1) // If page num transition goes to a section, need the pagenumber of section.
{
if ((mySection.MyDocStyle.StructureStyle.Style & E_DocStructStyle.DontCountFoldoutPgs) == E_DocStructStyle.DontCountFoldoutPgs)
mySection.PageNumber = _MyHelper.CurrentPageNumberNoFoldouts;
@ -1229,15 +1267,15 @@ namespace Volian.Print.Library
int sectPageCount = 0;
float locEndOfWordDoc = 0;
float pdfSize = 0;
using (PdfInfo myPdf = PdfInfo.Get(mySection,false))
using (PdfInfo myPdf = PdfInfo.Get(mySection, false))
{
if (myPdf == null) // B2017-218 Handle invalid word sections
{
cb.SetFontAndSize(BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED), 20);
cb.SetTextMatrix(cb.PdfDocument.Left+200,cb.PdfDocument.Bottom+cb.PdfDocument.Top / 2);
cb.SetTextMatrix(cb.PdfDocument.Left + 200, cb.PdfDocument.Bottom + cb.PdfDocument.Top / 2);
cb.ShowText("Word Section Invalid");
// C2018-004 create meta file for baseline compares
Volian.Base.Library.BaselineMetaFile.WriteLine("!!Word Section Invalid: ID {0} \"{1}\" \"{2}\"",mySection.ItemID, mySection.DisplayNumber, mySection.DisplayText);
Volian.Base.Library.BaselineMetaFile.WriteLine("!!Word Section Invalid: ID {0} \"{1}\" \"{2}\"", mySection.ItemID, mySection.DisplayNumber, mySection.DisplayText);
}
else
{
@ -1298,13 +1336,13 @@ namespace Volian.Print.Library
OnStatusChanged("Read MSWord", PromsPrinterStatusType.ReadMSWord);
if (doimport2)
{
if (((!didFoldout && _MyFoldoutReader.Count > 0 ) || mySection.MyProcedure.ProcHasSupInfoData) && cb.PdfWriter.CurrentPageNumber > 1 && InsertBlankPages)
if (((!didFoldout && _MyFoldoutReader.Count > 0) || mySection.MyProcedure.ProcHasSupInfoData) && cb.PdfWriter.CurrentPageNumber > 1 && InsertBlankPages)
{
bool doInsertBlankPage = true;
SectionInfo currentSection = _MyHelper.MySection;
iTextSharp.text.Rectangle curRecSize = cb.PdfDocument.PageSize; // save current PDF Doc Page Size
// 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
// 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
if (mySection.MyDocStyle.DontInsertBlankPages)
{
// C2023-001 we are going to print the first page of a section that we don't insert blank pages
@ -1348,16 +1386,16 @@ namespace Volian.Print.Library
//float y1 = cb.PdfDocument.PageSize.Height ; // 1.8f;
float height = 12 * 1.5F;
// B2019-102 Locate the chunk below the bottom of the page
ct.SetSimpleColumn(0, -height, chk.GetWidthPoint() * 1.01F, -2*height );
ct.SetSimpleColumn(0, -height, chk.GetWidthPoint() * 1.01F, -2 * height);
ct.AddElement(new Phrase(chk));
cb.SetColorFill(new iTextSharp.text.Color(PrintOverride.TextColor));
int status = ct.Go();
if(status > 1)
if (status > 1)
_MyLog.WarnFormat("\r\n.-.-.-. Failed to add a PDF destination for {0}", mySection.ShortPath);
}
if(DebugPagination.IsOpen) DebugPagination.WriteLine("{0:D6},'{1}',{2}",
_MyHelper.MyPdfContentByte.PdfWriter.CurrentPageNumber, mySection.ShortPath,pageNumber);
if (DebugPagination.IsOpen) DebugPagination.WriteLine("{0:D6},'{1}',{2}",
_MyHelper.MyPdfContentByte.PdfWriter.CurrentPageNumber, mySection.ShortPath, pageNumber);
}
if (ii == sectPageCount - 1)
{
@ -1377,7 +1415,7 @@ namespace Volian.Print.Library
float centerpos = (float)mySection.MyDocStyle.Layout.LeftMargin + (wtpm - (myMsg.Length * (float)mySection.MyDocStyle.End.Font.CharsToTwips)) / 2;
float yBottomMargin = Math.Max(0, (float)mySection.MyDocStyle.Layout.TopMargin - (float)mySection.MyDocStyle.Layout.PageLength - 2 * vlnPrintObject.SixLinesPerInch);
float adjMsgY = 0;
if ((float)mySection.MyDocStyle.End.Flag < 0) // Adjust this many lines down the page.
if ((float)mySection.MyDocStyle.End.Flag < 0) // Adjust this many lines down the page.
{
adjMsgY = (float)(-(float)mySection.MyDocStyle.End.Flag * vlnPrintObject.SixLinesPerInch);
if (ylocation - adjMsgY > mySection.MyDocStyle.Layout.FooterLength) ylocation = ylocation - adjMsgY;
@ -1395,47 +1433,47 @@ namespace Volian.Print.Library
}
OnStatusChanged("Merge MSWord", PromsPrinterStatusType.MergeMSWord);
}
OnStatusChanged("Before NewPage", PromsPrinterStatusType.Before);
if (mySection.MyDocStyle.LandscapePageList)// && mySection.MyDocStyle.Layout.PageWidth > mySection.MyDocStyle.Layout.PageLength)
_MyHelper.IsLandscape = true;
else
_MyHelper.IsLandscape = false;
// C2023-001 put in for Beaver Valley, DontInsertBlankPages is use on their CAS sections, which inlucde a hard page break
// with text saying that page folds out. Some procedures also have a PROMS foldout section that is printed on the
// back of the procedure step pages. When we are printing duplex with blank pages, we don't want to insert a blank
// page between the two pages of the CAS section
// "pageForNextSection" is used to tell NewPage() if it needs to check the page size of the next section before starting the
// next page - this fixes an issue where the page we inserted for the backside of the previous section was the larger page
// size (11x17 vs 8x11)
bool pageForNextSection = (ii == sectPageCount - 1 && !InsertBlankPages);
_MyHelper.SpecialCAS = false;
if (mySection.MyDocStyle.DontInsertBlankPages && ii == sectPageCount - 1) // C2023-001 beaver valley CAS section type (has hard page break for back of page)
{
pageForNextSection = true;
_MyHelper.SpecialCAS = true; // B2023-005: Beaver Valley - flag to rotate watermark on 2nd CAS page
}
NewPage(pageForNextSection); // Word Document
//_MyLog.InfoFormat("NewPage 3 {0}", cb.PdfWriter.CurrentPageNumber);
OnStatusChanged("Before NewPage", PromsPrinterStatusType.Before);
if (mySection.MyDocStyle.LandscapePageList)// && mySection.MyDocStyle.Layout.PageWidth > mySection.MyDocStyle.Layout.PageLength)
_MyHelper.IsLandscape = true;
else
_MyHelper.IsLandscape = false;
// C2023-001 put in for Beaver Valley, DontInsertBlankPages is use on their CAS sections, which inlucde a hard page break
// with text saying that page folds out. Some procedures also have a PROMS foldout section that is printed on the
// back of the procedure step pages. When we are printing duplex with blank pages, we don't want to insert a blank
// page between the two pages of the CAS section
// "pageForNextSection" is used to tell NewPage() if it needs to check the page size of the next section before starting the
// next page - this fixes an issue where the page we inserted for the backside of the previous section was the larger page
// size (11x17 vs 8x11)
bool pageForNextSection = (ii == sectPageCount - 1 && !InsertBlankPages);
_MyHelper.SpecialCAS = false;
if (mySection.MyDocStyle.DontInsertBlankPages && ii == sectPageCount - 1) // C2023-001 beaver valley CAS section type (has hard page break for back of page)
{
pageForNextSection = true;
_MyHelper.SpecialCAS = true; // B2023-005: Beaver Valley - flag to rotate watermark on 2nd CAS page
}
NewPage(pageForNextSection); // Word Document
//_MyLog.InfoFormat("NewPage 3 {0}", cb.PdfWriter.CurrentPageNumber);
// if this document style has another style that is for pages other than first, we need to
// reset the document style off of this section AND reset docstyle values used.
_MyHelper.DidFirstPageDocStyle = true;
// if this document style has another style that is for pages other than first, we need to
// reset the document style off of this section AND reset docstyle values used.
_MyHelper.DidFirstPageDocStyle = true;
// Calvert has a case in their stp landscape word docs where a ' (Continued)' message
// appears in their pagelist item for printing the section title, {ATTACHTITLECONT} pagelist
// However, other sections use this token, but do NOT have the continue message - so
// the docstyle was added to flag the difference between them (STP-Landscape Attachments has it,
// STP-Attachments do not)
if (resetSvgForCont && (mySection.MyDocStyle.StructureStyle.Style & E_DocStructStyle.DSS_PageListAddSectCont) == E_DocStructStyle.DSS_PageListAddSectCont)
{
_MyHelper.ResetSvg();
resetSvgForCont = false; // only need to reset it once (for all pages after 1st page)
}
// Calvert has a case in their stp landscape word docs where a ' (Continued)' message
// appears in their pagelist item for printing the section title, {ATTACHTITLECONT} pagelist
// However, other sections use this token, but do NOT have the continue message - so
// the docstyle was added to flag the difference between them (STP-Landscape Attachments has it,
// STP-Attachments do not)
if (resetSvgForCont && (mySection.MyDocStyle.StructureStyle.Style & E_DocStructStyle.DSS_PageListAddSectCont) == E_DocStructStyle.DSS_PageListAddSectCont)
{
_MyHelper.ResetSvg();
resetSvgForCont = false; // only need to reset it once (for all pages after 1st page)
}
//DebugPagination.WriteLine("CreateWordDocPdf");
if ((mySection.MyDocStyle.StructureStyle.Where & E_DocStyleUse.UseOnFirstPage) > 0)
_MyHelper.MySection = mySection; // this resets the docstyle/pagestyle in pagehelper
OnStatusChanged("After NewPage", PromsPrinterStatusType.NewPage);
//DebugPagination.WriteLine("CreateWordDocPdf");
if ((mySection.MyDocStyle.StructureStyle.Where & E_DocStyleUse.UseOnFirstPage) > 0)
_MyHelper.MySection = mySection; // this resets the docstyle/pagestyle in pagehelper
OnStatusChanged("After NewPage", PromsPrinterStatusType.NewPage);
}
}
catch (Exception ex)
@ -1453,7 +1491,7 @@ namespace Volian.Print.Library
// so that if merge is done, the pages that are landscaped can have landscaped page numbers placed on them
public static void AddMergedLandscapePage(VlnSvgPageHelper _MyHelper, string PDFFile)
{
string tmp = PDFFile.Substring(0,PDFFile.IndexOf(".pdf"));
string tmp = PDFFile.Substring(0, PDFFile.IndexOf(".pdf"));
if (MergedLandscapePages == null) MergedLandscapePages = new Dictionary<string, List<int>>();
if (MergedLandscapePages.ContainsKey(tmp))
MergedLandscapePages[tmp].Add(_MyHelper.CurrentPageNumber);
@ -1512,7 +1550,7 @@ namespace Volian.Print.Library
float xAdjNumber = -6 + 1.2F;
float xAdjTitle = .8F + 1.2F;
float xAdjTitleIndent = -6 + 2.4F;
float yadj = 0.5F; // tweak to get 16 & 32 bit output to match.
float yadj = 0.5F; // tweak to get 16 & 32 bit output to match.
float yPageStartAdj = yPageStart - yadj;
float leftMargin = (float)tocSection.MyDocStyle.Layout.LeftMargin;
@ -1572,7 +1610,7 @@ namespace Volian.Print.Library
inGroup = true;
// B2020-033: for single spacing, add an extra line before a grouping title:
float tmpspc = (float)(tOfC.TofCLineSpacing ?? 1);
if (lastTOCGroupHeading != "" || (firstGroupHeading && tmpspc==1))
if (lastTOCGroupHeading != "" || (firstGroupHeading && tmpspc == 1))
{
yLocation += vlnPrintObject.SixLinesPerInch;
firstGroupHeading = false;
@ -1612,9 +1650,9 @@ 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"
// - 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 = 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 != "")
tocSecTitle = tocSection.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.TableOfContentsData.TofCProcedureStepsTitle;
tocSecTitle = tocSection.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.TableOfContentsData.TofCProcedureStepsTitle;
// Do the title first since it may wrap to 2nd line and this is an issue for
// doing a pagebreak, i.e. may cause a page break when the number on a single line
@ -1622,7 +1660,7 @@ namespace Volian.Print.Library
//if (tocSection.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.TableOfContentsData
if (level == 0 && tocSection.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.TableOfContentsData.TofCUnderlineFirstLevelTitle)
{
VE_Font ovrFont = new VE_Font(tOfC.Font.Family, (int)tOfC.Font.Size,(E_Style)tOfC.Font.Style | E_Style.Underline, (float)tOfC.Font.CPI);
VE_Font ovrFont = new VE_Font(tOfC.Font.Family, (int)tOfC.Font.Size, (E_Style)tOfC.Font.Style | E_Style.Underline, (float)tOfC.Font.CPI);
rtfText = GetRtfToC(tocSecTitle, tOfC, ovrFont);
}
else
@ -1657,8 +1695,8 @@ namespace Volian.Print.Library
if (lnsp > -1) yLocation += (lnaftergroup * vlnPrintObject.SixLinesPerInch); // new line
}
// Print the section title
float retval = Rtf2Pdf.TextAt(cb, myparagraphSecTitle, leftMargin + ((tOfC.TofCSecNumPos == tOfC.TofCSecTitlePos && tmptxt.Equals(" "))? secNumPos : adjSecTitlePos), yPageStart - yLocation, width, height, "", yBottomMargin);
if (retval == 0) // couldn't fit, flags need for a page break.
float retval = Rtf2Pdf.TextAt(cb, myparagraphSecTitle, leftMargin + ((tOfC.TofCSecNumPos == tOfC.TofCSecTitlePos && tmptxt.Equals(" ")) ? secNumPos : adjSecTitlePos), yPageStart - yLocation, width, height, "", yBottomMargin);
if (retval == 0) // couldn't fit, flags need for a page break.
{
NewPage();
_MyHelper.ResetSvg(); // needed to reset so that PSNotFirst pagelist justify flag gets used for BGE
@ -1749,7 +1787,7 @@ namespace Volian.Print.Library
AddTemplateTOCPageCounts(tOfC, yLocation, yPageStartAdj, leftMargin, secPagePos, height, key);
}
//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)
// && (mySection.MyParent.IsSection && ((mySection.Sections != null && mySection.Sections.Count > 0) || (level > 0 && mySection.NextItem != null))))
// || didGrp;
@ -1760,9 +1798,9 @@ namespace Volian.Print.Library
if (doSubY)
{
float spcs = (float)(tOfC.TofCLineSpacingSub ?? 1);
if (spcs == -1) // F2018-033: Allow for single & double spacing for Farley (if in group or not)
if (spcs == -1) // F2018-033: Allow for single & double spacing for Farley (if in group or not)
{
if (inGroup) // Do not require a title to be placed on each section in group for Farley. If in group from above, single space
if (inGroup) // Do not require a title to be placed on each section in group for Farley. If in group from above, single space
spcs = 1;
else
spcs = 2;
@ -1772,9 +1810,9 @@ namespace Volian.Print.Library
else
{
float spc = (float)(tOfC.TofCLineSpacing ?? 1);
if (spc == -1) // F2018-033: Allow for single & double spacing for Farley (if in group or not)
if (spc == -1) // F2018-033: Allow for single & double spacing for Farley (if in group or not)
{
if (inGroup) // Do not require a title to be placed on each section in group for Farley. If in group from above, single space
if (inGroup) // Do not require a title to be placed on each section in group for Farley. If in group from above, single space
spc = 1;
else
spc = 2;
@ -1823,7 +1861,7 @@ namespace Volian.Print.Library
// 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, stepNumPos, stepTitlePos, stepPagePos);
int tofCNumLevels = tocSection.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.TableOfContentsData.TofCNumLevels ?? 0;
if (tofCNumLevels > 0 && level > tofCNumLevels) return yLocation; // don't go down more than number of levels as defined in format
if (tofCNumLevels > 0 && level > tofCNumLevels) return yLocation; // don't go down more than number of levels as defined in format
// figure out whether to indent. If not, set indentOffset to 0, otherwise indent number to where parent's text was (input parTitleXOff)
int startIndentAfterLevel = tocSection.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.TableOfContentsData.TofCStartIndentAfterLevel ?? 2; //
@ -1833,7 +1871,7 @@ namespace Volian.Print.Library
// start, if indenting. Without this, the xoffset was not correct:
float indentOffset = level == 0 ? 0 : parTitleXOff;
float numwidth = 0;
foreach (ItemInfo hls in ii.Steps) // Ouput each HLS that has config flag to include it.
foreach (ItemInfo hls in ii.Steps) // Ouput each HLS that has config flag to include it.
{
StepConfig stc = hls.MyConfig as StepConfig;
if (stc != null && stc.Step_IncludeInTOC)
@ -1842,13 +1880,13 @@ namespace Volian.Print.Library
// need to do the step number, title & page number. Page number has to be put on at end after number of page is known, so use a Template.
string tmptxt = hls.MyTab.CleanText;
if (tmptxt == null || tmptxt == "") tmptxt = " "; // if no number set to blanks. Without this, low level printing gets confused
if (tmptxt == null || tmptxt == "") tmptxt = " "; // if no number set to blanks. Without this, low level printing gets confused
string rtfText = GetRtfToC(tmptxt, tOfC);
Paragraph myparagraphStepNum = vlnPrintObject.RtfToParagraph(rtfText);
float width = 0;
foreach (Chunk chkt in myparagraphStepNum.Chunks)
width += chkt.GetWidthPoint();
if (numwidth == 0) numwidth = width; // keep same xoffset for step text unless overwriting by number (see below)
if (numwidth == 0) numwidth = width; // keep same xoffset for step text unless overwriting by number (see below)
Rtf2Pdf.Offset = new PointF(0, 2.5F);
// if the starting column of text would be in 'middle of' the number, just put it
@ -1960,9 +1998,9 @@ namespace Volian.Print.Library
string rtnVal = str;
rtnVal = rtnVal.Replace("\u00A0", @"\u160?"); //convert \u00A0 to a hard space (\u00A0 shows as a blank in the search text field)
rtnVal = rtnVal.Replace("\n", @"\line "); //B2018-020 SQL content record has "\line " for the hard return
// Bug fix B2014-057
// if we are searching for a symbol character in all procedure sets MyDocVersion is null
// when MyDocVersion is null, get the symbol list directly from the PROMS base format (BaseAll.xml)
// Bug fix B2014-057
// if we are searching for a symbol character in all procedure sets MyDocVersion is null
// when MyDocVersion is null, get the symbol list directly from the PROMS base format (BaseAll.xml)
if (fmtData != null && fmtData.SymbolList != null)
{
SymbolList sl = fmtData.SymbolList;
@ -2178,7 +2216,7 @@ namespace Volian.Print.Library
// was found in, i.e. Ginna Rev2 SAMG, SAG-3 step 7. This change won't affect other plants/formats but if the problem occurs
// the format value can be used to adjust the location of bottom message. However, this could adversely affect pagination and
// each plant/format needs to be done on a case by base basis.
float yBottomMargin = Math.Max(0, yTopMargin - (float)myItemInfo.MyDocStyle.Layout.PageLength - (myItemInfo.MyDocStyle.Continue.Bottom.LocAdj==null?0:(int)myItemInfo.MyDocStyle.Continue.Bottom.LocAdj));
float yBottomMargin = Math.Max(0, yTopMargin - (float)myItemInfo.MyDocStyle.Layout.PageLength - (myItemInfo.MyDocStyle.Continue.Bottom.LocAdj == null ? 0 : (int)myItemInfo.MyDocStyle.Continue.Bottom.LocAdj));
vlnParagraph.PathPrefix = myItemInfo.Path;
//Rtf2Pdf.PdfDebug = true;
Rtf2Pdf.Offset = new PointF(0, 2.5F);
@ -2188,7 +2226,7 @@ namespace Volian.Print.Library
{
System.Drawing.Drawing2D.Matrix myMatrix = new System.Drawing.Drawing2D.Matrix(0, 1, -1, 0, cb.PdfDocument.PageSize.Height, 0);
cb.Transform(myMatrix);
_MyHelper.IsWatermarkLandscape = true; // B2019-145: watermark on landscape page
_MyHelper.IsWatermarkLandscape = true; // B2019-145: watermark on landscape page
}
}
else
@ -2208,9 +2246,9 @@ namespace Volian.Print.Library
{
// if there is supplemental information associated with this section... generate the pdf. This pdf will be used to place
// supplemental information on facing pages
// B2017-267 Put in the DocStyle setting "AdjustTopMarginOnStepContinuePages" for Farley who uses the "PSOnlyFirst" in some of their pagelists so that a section title is printed only on the first page of the section.
// This will adjust the top margin when the section title is not printed on the other pages.
yTopMargin += myItemInfo.MyDocStyle.AdjustTopMarginOnStepContinuePages;
// B2017-267 Put in the DocStyle setting "AdjustTopMarginOnStepContinuePages" for Farley who uses the "PSOnlyFirst" in some of their pagelists so that a section title is printed only on the first page of the section.
// This will adjust the top margin when the section title is not printed on the other pages.
yTopMargin += myItemInfo.MyDocStyle.AdjustTopMarginOnStepContinuePages;
if (SupInfoPrintType == E_SupInfoPrintType.Merge && myParagraph.SupInfoSection != null && myParagraph.SupInfoSection.ChildrenBelow != null && myParagraph.SupInfoSection.ChildrenBelow.Count > 0)
GenerateSuppInfoPdf(myParagraph.SupInfoSection, yTopMargin, yBottomMargin);
localYPageStart = myParagraph.ToPdf(cb, yPageStart, ref yTopMargin, ref yBottomMargin);
@ -2218,7 +2256,7 @@ namespace Volian.Print.Library
_MyHelper.MyPlacekeepers.Add(myParagraph.MyPlaceKeeper); // add this step text to the PlaceKeeper (Calvert Cliffs)
if (myParagraph.MyContAct != null)
_MyHelper.MyContActSteps.Add(myParagraph.MyContAct); // add this step to the Continuous Action Summary
// F2022-024 Time Critical Action
// F2022-024 Time Critical Action
if (myParagraph.MyTimeCriticalAction != null)
_MyHelper.MyTimeCriticalActionSteps.Add(myParagraph.MyTimeCriticalAction); // add this step to the Time Critical Action Summary
}
@ -2261,8 +2299,8 @@ namespace Volian.Print.Library
{
_MyHelper.IsLandscape = false;
}
NewPage(true); // end of step section
//_MyLog.InfoFormat("NewPage 6 {0}", cb.PdfWriter.CurrentPageNumber);
NewPage(true); // end of step section
//_MyLog.InfoFormat("NewPage 6 {0}", cb.PdfWriter.CurrentPageNumber);
_NoBreakYOffset = 0;
yPageStart = yTopMargin;
}
@ -2274,7 +2312,7 @@ namespace Volian.Print.Library
{
_MyHelper.DrawBottomMessage(cb);
localYPageStart += 12;
myParagraph.YBottomMost += 24; // two lines.
myParagraph.YBottomMost += 24; // two lines.
}
float tmplocal = localYPageStart;
_NoBreakYOffset = myParagraph.YBottomMost;
@ -2298,7 +2336,7 @@ namespace Volian.Print.Library
else SupInfoPdfPage.Clear();
string SupInfoPdfName = Volian.Base.Library.VlnSettings.TemporaryFolder + @"\SupInfo" + vlnParagraph.MyItemInfo.ItemID.ToString() + @".pdf";
iTextSharp.text.Rectangle pageSize = PDFPageSize.UsePaperSize(MyItem.ActiveFormat.PlantFormat.FormatData.PDFPageSize.PaperSize); // C2020-002 paper size is now set in the format files
PdfContentByte cb = OpenDoc(SupInfoPdfName, pageSize);
PdfContentByte cb = OpenDoc(ref SupInfoPdfName, pageSize);
if (cb == null) return;
VlnSvgPageHelper myPageHelper = new VlnSvgPageHelper(vlnParagraph.MyItemInfo as SectionInfo, this, null, 0);
cb.PdfWriter.PageEvent = myPageHelper;
@ -2310,7 +2348,7 @@ namespace Volian.Print.Library
myPageHelper.ChangeBarDefinition = MyChangeBarDefinition;
float yPageStart = yTopMargin;
vlnParagraph._yPageStartForSupInfo = yTopMargin;
SupInfoAjustGroupings(vlnParagraph,cb);
SupInfoAjustGroupings(vlnParagraph, cb);
SupInfoPrintType = E_SupInfoPrintType.SupInfoPdfPrint;
vlnParagraph.ToPdf(cb, yPageStart, ref yTopMargin, ref yBottomMargin);
SupInfoPrintType = E_SupInfoPrintType.Merge;
@ -2347,11 +2385,11 @@ namespace Volian.Print.Library
// Initialize font decrement
float decrement = 2f;
float fontSize = grp[0].IParagraph.Leading; // current font size
float mpglen = MeasureSupInfoGroupLength(grp, cb,pageLength); // Measure the length of the group of supinfo paragraphs
// If the group does not fit on a page then reduce the font size
float mpglen = MeasureSupInfoGroupLength(grp, cb, pageLength); // Measure the length of the group of supinfo paragraphs
// If the group does not fit on a page then reduce the font size
if (mpglen > pageLength)
{
float newFontSize=fontSize;
float newFontSize = fontSize;
// reduce the font size by _Decrement until the entire grouping fits on one page
while (mpglen > pageLength) // While the measured supinfo group length is greatere than the page length
{
@ -2413,36 +2451,36 @@ namespace Volian.Print.Library
private void ReduceSupInfoGroupFontSize(vlnParagraph pg, float scaler, PdfContentByte cb)
{
float hBefore = pg.Height;// Save initial paragraph height
AdjustSupInfoTable(pg, scaler,cb);
NewSupInfoFixChunks(pg, scaler);// Apply multiplier to font size
pg.IParagraph.Leading = scaler * pg.IParagraph.Leading; // Adjust leading (line spacing)
// B2017-112: Don't do the font size change if images.
// B2017-116: Don;t do the font size change for RTF Raw
if (pg.ImageText == null && !pg.MyItemInfo.IsRtfRaw)
AdjustSupInfoTable(pg, scaler, cb);
NewSupInfoFixChunks(pg, scaler);// Apply multiplier to font size
pg.IParagraph.Leading = scaler * pg.IParagraph.Leading; // Adjust leading (line spacing)
// B2017-112: Don't do the font size change if images.
// B2017-116: Don;t do the font size change for RTF Raw
if (pg.ImageText == null && !pg.MyItemInfo.IsRtfRaw)
{
float hAfter = pg.GetParagraphHeight(cb, pg.IParagraph, "", pg.Width); // Calculate new paragraph height
pg.Height = hAfter; // Save new Height;
pg.YBottomMost += hAfter - hBefore; // Adjust YbottomMost for font size and leading
float hleading = hBefore * scaler; // Calcuate leading change
// If the change in font size effects the paragraph height due to word wrapping save the impact to adjust
// Offsets below
if ((hleading > hAfter + 1 && scaler < 1f) || (hleading < hAfter + 1 && scaler > 1f))
{
float hAfter = pg.GetParagraphHeight(cb, pg.IParagraph, "", pg.Width); // Calculate new paragraph height
pg.Height = hAfter; // Save new Height;
pg.YBottomMost += hAfter - hBefore; // Adjust YbottomMost for font size and leading
float hleading = hBefore * scaler; // Calcuate leading change
// If the change in font size effects the paragraph height due to word wrapping save the impact to adjust
// Offsets below
if ((hleading > hAfter + 1 && scaler < 1f) || (hleading < hAfter + 1 && scaler > 1f))
if (!_AdjustForParagraphShrinkage.ContainsKey(pg.YOffset))
{
if (!_AdjustForParagraphShrinkage.ContainsKey(pg.YOffset))
{
_AdjustForParagraphShrinkage.Add(pg.YOffset, hleading - hAfter);
}
_AdjustForParagraphShrinkage.Add(pg.YOffset, hleading - hAfter);
}
}
else // Adjust the Image Size B2017-112 And B2017-116
{
pg.ImageScaler *= scaler;
pg.Height *= scaler;
pg.Width *= scaler;
}
float yoBefore = pg.YOffset;// Save the offset before
float yoAfter = pg.YOffset = NewSupInfoFixOffset(pg, scaler);// Calculate the offset after
pg.YBottomMost += yoAfter - yoBefore;// Adjust YbottomMost for changes to yOffset
}
else // Adjust the Image Size B2017-112 And B2017-116
{
pg.ImageScaler *= scaler;
pg.Height *= scaler;
pg.Width *= scaler;
}
float yoBefore = pg.YOffset;// Save the offset before
float yoAfter = pg.YOffset = NewSupInfoFixOffset(pg, scaler);// Calculate the offset after
pg.YBottomMost += yoAfter - yoBefore;// Adjust YbottomMost for changes to yOffset
foreach (vlnParagraph cpg in pg.ChildrenAbove)// Process Children Above
ReduceSupInfoGroupFontSize(cpg, scaler, cb);
foreach (vlnParagraph cpg in pg.ChildrenBelow)// Process Children Below
@ -2474,9 +2512,9 @@ namespace Volian.Print.Library
// Create lists of heights before and after shrinking sup info
Dictionary<int, float> beforeRowHeight = new Dictionary<int, float>();
Dictionary<int, float> afterRowHeight = new Dictionary<int, float>();
for (int i = 0; i < pg.MyGrid.RowTop.GetLength(0)-1; i++)
for (int i = 0; i < pg.MyGrid.RowTop.GetLength(0) - 1; i++)
{
beforeRowHeight.Add(i, scaler * (pg.MyGrid.RowTop[i+1] - pg.MyGrid.RowTop[i]));
beforeRowHeight.Add(i, scaler * (pg.MyGrid.RowTop[i + 1] - pg.MyGrid.RowTop[i]));
afterRowHeight.Add(i, 0);
}
// Adjust font size for each cell.
@ -2484,18 +2522,18 @@ namespace Volian.Print.Library
{
float x = cell.MyTable.ColLeft[cell.c1];
float w = cell.MyTable.ColLeft[cell.c2 + 1] - x;
float hBefore = scaler * pg.GetParagraphHeight(cb,cell.MyPara,"",w);
float hBefore = scaler * pg.GetParagraphHeight(cb, cell.MyPara, "", w);
foreach (Chunk chk in cell.MyPara.Chunks)
chk.Font.Size = scaler * chk.Font.Size;
float hAfter = 1.075F * pg.GetParagraphHeight(cb,cell.MyPara,"",w);// 1.075 is a magic number that worked for Ginna. Otherwise decenders overlapped the bottom line of the cell.
float hAfter = 1.075F * pg.GetParagraphHeight(cb, cell.MyPara, "", w);// 1.075 is a magic number that worked for Ginna. Otherwise decenders overlapped the bottom line of the cell.
cell.HContent = hAfter;
// Save tthe height after adjusting the font size to account for changes in word wrap.
afterRowHeight[cell.r1]=Math.Max(hAfter,afterRowHeight[cell.r1]);
afterRowHeight[cell.r1] = Math.Max(hAfter, afterRowHeight[cell.r1]);
}
for (int i = 0; i < pg.MyGrid.RowTop.GetLength(0)-1; i++)
for (int i = 0; i < pg.MyGrid.RowTop.GetLength(0) - 1; i++)
{
pg.MyGrid.RowTop[i+1] = scaler * pg.MyGrid.RowTop[i+1];// Adjust for leading
pg.MyGrid.RowTop[i+1] += (afterRowHeight[i]-beforeRowHeight[i]); //Adjust for word wrapping
pg.MyGrid.RowTop[i + 1] = scaler * pg.MyGrid.RowTop[i + 1];// Adjust for leading
pg.MyGrid.RowTop[i + 1] += (afterRowHeight[i] - beforeRowHeight[i]); //Adjust for word wrapping
}
}
}
@ -2523,11 +2561,11 @@ namespace Volian.Print.Library
private void NewSupInfoFixParts(vlnPrintObject po, float scaler)
{
if (po.IParagraph == null) return; // B2017-132 check for NULL reference (happend printing Bryon SAMGS with sup info pages)
// Adjust the font size by the multiplier
// Adjust the font size by the multiplier
foreach (Chunk chk in po.IParagraph.Chunks)
chk.Font.Size = scaler * chk.Font.Size;
po.IParagraph.Leading = scaler * po.IParagraph.Leading;// Apply the multiplier to the leading (line spacing)
po.YOffset = NewSupInfoFixOffset(po,scaler);// Adjust the YOffset
po.YOffset = NewSupInfoFixOffset(po, scaler);// Adjust the YOffset
}
/// <summary>
/// Adjust the Font Size
@ -2552,7 +2590,7 @@ namespace Volian.Print.Library
_LastBottom = 0;
_LastOffset = 12;// 24; // account for the Sup Info header (two lines)
float fontSize = grp[0].IParagraph.Leading; // current font size
// For each SupInfo Paragraph calculate length
// For each SupInfo Paragraph calculate length
foreach (vlnParagraph pg in grp)
{
MeasureSupInfoGroupLength(pg, cb);// Measure a SupInfo Paragraph and children
@ -2600,7 +2638,7 @@ namespace Volian.Print.Library
}
supInfoGroups[supInfoGroups.Count - 1].Add(pg); // add paragraph to the last grouping
}
return supInfoGroups;
return supInfoGroups;
}
#endregion //ShrinkSupInfoGroupAtATime
@ -2621,7 +2659,7 @@ namespace Volian.Print.Library
{
string SupInfoPdfName = Volian.Base.Library.VlnSettings.TemporaryFolder + @"\SupInfo" + myPageHelper.MySection.ItemID.ToString() + @".pdf";
PdfReader pdfreader = new PdfReader(SupInfoPdfName);
sipage = cb.PdfWriter.GetImportedPage(pdfreader, getpage+1);
sipage = cb.PdfWriter.GetImportedPage(pdfreader, getpage + 1);
// F2023-035: WCN - allow for change in left margin for supplemental information pages by
// setting a value in the DocStyle for the adjustment. When importing the vlnParagraph page
// use this adjustment (note that page list items are done in VlnSvgPageHelper)
@ -2641,7 +2679,7 @@ namespace Volian.Print.Library
}
public void DoFoldoutPage(PdfContentByte cb, string str, PdfLayer textLayer, VlnSvgPageHelper myPageHelper, int foldoutindx, bool insertBlankPages)
{
if (_MyFoldoutSection == null || _MyFoldoutSection.Count==0) return;
if (_MyFoldoutSection == null || _MyFoldoutSection.Count == 0) return;
// if the very first page to be output is a 'foldout', treat this as a special case, since
// if duplex printing is on, the foldout should always be on the left side, i.e. or behind
@ -2667,7 +2705,7 @@ namespace Volian.Print.Library
PdfImportedPage fgPage = null;
try
{ // read saved foldout page
fgPage = cb.PdfWriter.GetImportedPage(_MyFoldoutReader[foldoutindx],1);
fgPage = cb.PdfWriter.GetImportedPage(_MyFoldoutReader[foldoutindx], 1);
}
catch (Exception ex)
{
@ -2679,7 +2717,7 @@ namespace Volian.Print.Library
AddImportedPageToLayer(cb.PdfWriter.DirectContent, textLayer, fgPage, 0, 0);
foreach (iTextSharp.text.pdf.PdfAnnotation.PdfImportedLink il in _MyFoldoutReader[foldoutindx].GetLinks(1))
{
if(!il.IsInternal() )
if (!il.IsInternal())
cb.PdfWriter.AddAnnotation(il.CreateAnnotation(cb.PdfWriter));
}
@ -2692,7 +2730,7 @@ namespace Volian.Print.Library
//_MyLog.InfoFormat("DoFoldoutPage {0}", cb.PdfWriter.CurrentPageNumber);
//PrintTextMessage(cb, "Foldout for: " + str, textLayer);
NewPage();// Temporary for foldout/16bit-32bit page alignment
//_MyLog.InfoFormat("NewPage 8 {0}", cb.PdfWriter.CurrentPageNumber);
//_MyLog.InfoFormat("NewPage 8 {0}", cb.PdfWriter.CurrentPageNumber);
myPageHelper.MySection = saveSect;
myPageHelper.OnFoldoutPage = false;
}
@ -2746,7 +2784,7 @@ namespace Volian.Print.Library
{
if (!HasManPagAnnot(ii, "Removed Manual Page Break")) VEPROMS.CSLA.Library.Annotation.MakeAnnotation(itm, AnnotationType.GetByNameOrCreate("Manual Pagination Issues"), null, "Removed Manual Page Break", null);
sc.Step_NewManualPagebreak = false; // reset the flag that was set in the config
if (sc.Step_SubStepPagebreak) sc.Step_SubStepPagebreak = false; // C2023-018: remove substep page break flags
if (sc.Step_SubStepPagebreak) sc.Step_SubStepPagebreak = false; // C2023-018: remove substep page break flags
itm.MyContent.Config = sc.ToString();
itm.MyContent.DTS = DateTime.Now;
itm.MyContent.UserID = Volian.Base.Library.VlnSettings.UserID;
@ -2873,7 +2911,7 @@ namespace Volian.Print.Library
public iTextSharp.text.Rectangle GetSize(SectionInfo sectInfo, int pageNumber)
{
string key = string.Format("{0}.{1}", sectInfo.ItemID, pageNumber);
if(dicSize.ContainsKey(key))
if (dicSize.ContainsKey(key))
return dicSize[key];
return PDFPageSize.UsePaperSize(sectInfo.ActiveFormat.PlantFormat.FormatData.PDFPageSize.PaperSize); // C2020-002 paper size is now set in the format files
}
@ -2881,16 +2919,16 @@ namespace Volian.Print.Library
{
dicPage = new Dictionary<string, PdfImportedPage>();
dicSize = new Dictionary<string, iTextSharp.text.Rectangle>();
LoadSectionTree(ii);
LoadSectionTree(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
foreach (SectionInfo si in ii.Sections)
{
if (si.IsStepSection)
{
if(si.Sections != null)LoadSectionTree(si);
if (si.Sections != null) LoadSectionTree(si);
}
else
{
@ -2900,10 +2938,10 @@ namespace Volian.Print.Library
try
{
FileInfo fi = new FileInfo(MyPdfFile);
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.
MessageBox.Show(si.DisplayNumber + " " + si.DisplayText + " is not valid", "Invalid Word Section", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
if (!PromsPrinter.BaselineTesting) //B2018-071 Output a message box unless baseline testing is being performed.
MessageBox.Show(si.DisplayNumber + " " + si.DisplayText + " is not valid", "Invalid Word Section", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
MyReader = MyPdfFile != null ? new PdfReader(MyPdfFile) : null;
@ -2917,13 +2955,13 @@ namespace Volian.Print.Library
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);
dicSize.Add(key, rectgl);
//dicSize.Add(key, MyReader.GetPageSizeWithRotation(i));
//dicSize.Add(key, MyReader.GetPageSizeWithRotation(i));
}
}
catch (Exception ex)
{
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}", si.ItemID, si.DisplayNumber, si.DisplayText), ex);
}
}
@ -2960,3 +2998,4 @@ namespace Volian.Print.Library
// }
//}
}

View File

@ -1934,8 +1934,6 @@ i = 0;
else
eopnum = section.MyProcedure.DisplayNumber;// B2021-066: found and fixed during proc pc/pc work
}
}
// B2022-066 the "{PREDELIMEOPNUM}" token was not being processed because there was a space after the "{"
if (token.Equals("{PREDELIMEOPNUM}"))
@ -1947,6 +1945,10 @@ i = 0;
if (idx < eopnum.Length)
eopnum = eopnum.Substring(0, idx);
}
if (pageItem.TrimEnding != null)
eopnum = eopnum.TrimEnd(pageItem.TrimEnding.ToCharArray());
plstr = plstr.Replace(token, eopnum);
//svgGroup.Add(PageItemToSvgText(pageItem, pageItem.Token.Replace(token, eopnum)));
//svgGroup.Add(PageItemToSvgText(pageItem, pageItem.Token.Replace(token, section.MyProcedure.MyContent.Number)));

View File

@ -1046,8 +1046,9 @@ namespace Volian.Print.Library
// Calvert Alarms have a special case, center text if the next/previous is not the same type of caution or note.
// Calvert Alarms have a note1 that is a warning. if a regular note preceeded it, this regular note was not centered.
// F2023-126: Vogtle Alarms - center single line caution/note if more than one type exist off step, added the check for NoteCautionCenterOneAllTypes
bool doAlign = false;
if (MyItemInfo.ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvert && (MyItemInfo.IsCaution || MyItemInfo.IsNote || MyItemInfo.IsNote1))
if ((MyItemInfo.ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvert || MyItemInfo.ActiveFormat.PlantFormat.FormatData.PrintData.NoteCautionCenterOneAllTypes) && (MyItemInfo.IsCaution || MyItemInfo.IsNote || MyItemInfo.IsNote1))
{
bool diffAsPrev = MyItemInfo.MyPrevious == null || (MyItemInfo.MyPrevious != null && MyItemInfo.MyContent.Type != MyItemInfo.MyPrevious.MyContent.Type);
bool diffAsNext = MyItemInfo.NextItem == null || (MyItemInfo.NextItem != null && MyItemInfo.MyContent.Type != MyItemInfo.NextItem.MyContent.Type);
@ -1912,7 +1913,11 @@ namespace Volian.Print.Library
float bcm_yLocation = TableBottom == -1 ? yLocation: Math.Min(TableBottom,yLocation);
DoBottomContinueMsg(cb, yBottomMargin, bcm_yLocation, docstyle, doThreeContinues);
MyPromsPrinter.NewPage();
if (MyItemInfo.IsStep && (MyItemInfo.ActiveSection != null && ((MyItemInfo.ActiveSection.MyDocStyle.StructureStyle.Style & E_DocStructStyle.DSS_PageListSpBckgrnd) == E_DocStructStyle.DSS_PageListSpBckgrnd))) // C2018-003 fixed use of getting the active section
// C2018-003 fixed use of getting the active section
// F2023-112 Vogtle Units 3 & 4 background document format DSS_PageListBkgndStpContMsg to print continue message next to step number
if (MyItemInfo.IsStep && (MyItemInfo.ActiveSection != null &&
((MyItemInfo.ActiveSection.MyDocStyle.StructureStyle.Style & E_DocStructStyle.DSS_PageListSpBckgrnd) == E_DocStructStyle.DSS_PageListSpBckgrnd) ||
((MyItemInfo.ActiveSection.MyDocStyle.StructureStyle.Style & E_DocStructStyle.DSS_PageListBkgndStpContMsg) == E_DocStructStyle.DSS_PageListBkgndStpContMsg)))
{
// check if parent (can be HLS, Caution or Note) has the UseOldTemplate. If so,
// flag that a continue message should be printed as part of a pagelist header (if pagelist
@ -2823,25 +2828,35 @@ namespace Volian.Print.Library
ItemInfo parentStep = MyItemInfo.MyHLS; // get the high level step
myMsg = string.Format(myMsg, parentStep.CombinedTab, parentStep.DisplayTextKeepSpecialChars);
}
if ((docstyle.Continue.Top.HLS ?? 0) == 4) // B2023-115 Top continue message for Vogtle Alarms
// B2023-115 Top continue message for Vogtle Alarms: 1st version done on 12/6/23. Changes to logic as per request
// from engineering done on 12/12/23. See comment below for logic for 12/12/23 (history of this file has previous
// logic)
if ((docstyle.Continue.Top.HLS ?? 0) == 4)
{
// Vogtle Alarms: Their alarms are set up differently than standard procedures - the HLS in Vogtle
// alarms is a section in other procedures. The top continue message is shown when a break occurs between
// first level sub-steps '(continued)' with no step number as part of message' within the first level sub-step
// only if it is sequential (which is like a HLS in standard procedures) and the continue message
// has the first level sub-step's tab. There should be NO continue message if the break occurs at the HLS.
ItemInfo cur = MyItemInfo;
if (!(cur.IsCaution || cur.IsNote || cur.IsHigh))
while (!cur.MyParent.IsHigh) cur = cur.MyParent; // get to the first level substep to get its tab
// alarms is a section in other procedures. The top continue message is shown when a break occurs:
// • A continued message will appear on the top of the page ONLY if the pagination occurs anywhere
// within the first level substep. If, for example, the page break occurs between substep 3 and substep
// 4 as in example 2, no continued message will appear on the top of the page.
// • If a continued message is needed, the continued message will include the first level substep number
// if it is a sequential substep, such as “5. (continued)”. If it is NOT a sequential substep, then only
// the word “(continued)” will appear.
// • If a page break occurs between high level steps, such as before “Causes:”, then no continued message is needed.
bool doMessage = true;
if (MyItemInfo.IsHigh) doMessage = false; // at high, don't do message
if (MyItemInfo.MyParent.IsHigh) doMessage = false; // at first level, don't do message
// Caution/Note on first level, don't do message
if ((MyItemInfo.IsCaution || MyItemInfo.IsNote) && MyItemInfo.MyParent.MyParent.IsHigh) doMessage = false;
myMsg = docstyle.Continue.Top.Message;
// if within first level sequential, add on the sequential's number:
if (!cur.IsHigh && cur.IsSequential && MyItemInfo.MyParent.MyParent.IsHigh)
if (doMessage)
{
ItemInfo parentStep = MyItemInfo.MyParent;
myMsg = MyItemInfo.IsHigh ? myMsg : parentStep.CombinedTab + ". " + myMsg;
// Get to highest level below HLS
ItemInfo cur = MyItemInfo;
while (!cur.MyParent.IsHigh) cur = cur.MyParent;
// if sequential, add on step number, otherwise just put out message:
myMsg = !cur.IsSequential ? myMsg : cur.CombinedTab + ". " + myMsg;
}
// don't put a message out for HLS, note that the page start is decremented above so need to add that amount back on
if (MyItemInfo.IsHigh)
else // if not doing message, clear it & set yPageStart back to what it was before handling message
{
myMsg = "";
yPageStart += 2 * SixLinesPerInch;
@ -3299,9 +3314,11 @@ namespace Volian.Print.Library
/// This gets the height of the step with it's Caution's, Notes and potentially any First Substeps
/// </summary>
/// <returns></returns>
private float GetFirstPieceSize()
// F2024-006: Vogtle Alarms pagination - added 'includeFirstSub' to get that size of the first substep with the parent step
// to help determine pagination
private float GetFirstPieceSize(bool includeFirstSub = false)
{
vlnParagraph paraLast = GetFirstPieceLastPart();
vlnParagraph paraLast = GetFirstPieceLastPart(includeFirstSub);
float retval = (paraLast.YBottom) - YTopMost;
//Console.WriteLine(MyItemInfo.DBSequence);
return retval;
@ -3355,10 +3372,12 @@ namespace Volian.Print.Library
get { return _YBottomForBox; }
set { _YBottomForBox = value; }
}
private vlnParagraph GetFirstPieceLastPart()
// F2024-006: Vogtle Alarms pagination - added 'includeFirstSub' to get that size of the first substep with the parent step
// to help determine pagination - even when PaginateOnFirstSubstep is turned on
private vlnParagraph GetFirstPieceLastPart(bool includeFirstSub = false)
{
vlnParagraph para = this;
if (!MyItemInfo.ActiveFormat.MyStepSectionLayoutData.PaginateOnFirstSubstep && ChildrenBelow != null && ChildrenBelow.Count > 0)
if ((!MyItemInfo.ActiveFormat.MyStepSectionLayoutData.PaginateOnFirstSubstep || includeFirstSub) && ChildrenBelow != null && ChildrenBelow.Count > 0)
{
// If the substep has a separator (OR, AND) then return the last substep rather than the first.
string mySep = ChildrenBelow[0].MyItemInfo.FormatStepData.Sep ?? "{Null}";
@ -3371,14 +3390,14 @@ namespace Volian.Print.Library
if (keepEqListTogether && !ChildrenBelow[0].MyItemInfo.IsSequential && !this.MyItemInfo.IsHigh) // Extend to the last Item.
para = ChildrenBelow[ChildrenBelow.Count - 1].GetFirstPieceLastPart();
else
para = ChildrenBelow[0].GetFirstPieceLastPart();
para = ChildrenBelow[0].GetFirstPieceLastPart(includeFirstSub);
}
}
if (ChildrenRight != null && ChildrenRight.Count > 0)
{
foreach (vlnParagraph paraRight in ChildrenRight)
{
vlnParagraph paraRightLast = paraRight.GetFirstPieceLastPart();
vlnParagraph paraRightLast = paraRight.GetFirstPieceLastPart(includeFirstSub);
if (paraRightLast.YBottom > para.YBottom)
para = paraRightLast;
}
@ -6219,7 +6238,8 @@ namespace Volian.Print.Library
if (!itemInfo.ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvertAlarm || !UseTemplateWidthOrXOff(itemInfo.MyParent))
{
// B2018-146 Adjust the width to match the HLS Right Margin.
if (itemInfo.IsBackgroundStepOrChild())
// F2023-112 added format flag for Vogtle Units 3 & 4 backgrounds. This allows use of override width on AND and List sub-step types
if (itemInfo.IsBackgroundStepOrChild() || itemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.Vogtle3and4BackgroundFormat)
Width = this.MyHighLevelParagraph.Width + this.MyHighLevelParagraph.XOffset - this.XOffset;
else
Width = (float)itemInfo.MyDocStyle.Layout.PageWidth - (float)itemInfo.MyDocStyle.Layout.LeftMargin - delta;
@ -6596,7 +6616,7 @@ namespace Volian.Print.Library
int? bxIndx = itemInfo.IsStep ? itemInfo.FormatStepData.StepLayoutData.STBoxindex : null;
float? widOvrd = 0;
float xwid = 0;
if (itemInfo.IsStep && itemInfo.MyHLS != null && UseTemplateWidthOrXOff(itemInfo) && (xwid = GetWidthOrStartFromTemplate(itemInfo, formatInfo, true)) > 0)
if (itemInfo.IsStep && itemInfo.MyHLS != null && UseTemplateWidthOrXOff(itemInfo) && (xwid = GetWidthOrStartFromTemplate(itemInfo, formatInfo, true)) > 0)
widOvrd = xwid;
else
widOvrd = itemInfo.FormatStepData == null ? null : itemInfo.FormatStepData.WidthOverride == null ? null :
@ -6655,10 +6675,15 @@ namespace Volian.Print.Library
}
if ((widOvrd ?? 0) != 0)
{
Width = (float)widOvrd;
// if there's a box, we may need to do an adjustment on the width, if the tab data was changed
// so don't return.
if (bxIndx == null) return;
//F2023-112 Vogtle Units 3 & 4 Backgrounds. Don't use override width of paragraph when it's off of TitleWithTextRight
// We need to allow the code to calculate the width of that paragraph for this case (later in this function)
if (!(itemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.Vogtle3and4BackgroundFormat && itemInfo.MyParent.FormatStepData != null && itemInfo.MyParent.FormatStepData.Type == "TitleWithTextRight"))
{
Width = (float)widOvrd;
// if there's a box, we may need to do an adjustment on the width, if the tab data was changed
// so don't return.
if (bxIndx == null) return;
}
}
float tabWidth = (myTab == null) ? 0 : myTab.Width;
if (itemInfo.IsHigh)