diff --git a/PROMS/Baseline/frmBaseline.cs b/PROMS/Baseline/frmBaseline.cs
index d634f138..8551661e 100644
--- a/PROMS/Baseline/frmBaseline.cs
+++ b/PROMS/Baseline/frmBaseline.cs
@@ -456,7 +456,7 @@ namespace Baseline
switch (myLast)
{
case LastWas.Pagination:
- line = OpenPDF(line);
+ OpenPDF(line);
break;
case LastWas.Baseline: // TODO: Need to add code here to open matching file
OpenOnePDF(myLine,1);
@@ -479,7 +479,7 @@ namespace Baseline
switch (myLast)
{
case LastWas.Pagination:
- line = OpenPDF(line);
+ OpenPDF(line);
break;
case LastWas.Baseline: // TODO: Need to add code here to open matching file
OpenOnePDF(myLine,2);
@@ -491,34 +491,99 @@ namespace Baseline
break;
}
}
- string exePath;
- private string OpenPDF(string line)
+
+ ///
+ /// This will return the full path to the PDF file
+ ///
+ ///
+ ///
+ ///
+ private string GetPFDFileAndPath(FileInfo fi, string patern)
{
- int page = int.Parse(line.Substring(0, 6));
+ string[] fileList = Directory.GetFiles(fi.DirectoryName, patern);
+ // sort the list of file list
+ Array.Sort((string[])fileList);
+ return fileList.First(); // the PDF file that we what should be top of the list then.
+ }
+
+ ///
+ /// This will parse out the procedure number for the PROMS ShortPath representation of a procedure section or step part
+ /// In the PROMS ShortPath, ".S" is used to delimit the procedure number, section then uses "..S" for the step parts
+ /// This method was written to handle cases where ".S" is used as part of the procedure number
+ ///
+ ///
+ ///
+ private string ParseOutProcedureNumberFromLine(string txt)
+ {
+ // old logic was looking for the first occurence of ".S" in the txt string as the ending point of the procedure nuumber
+ // Beaver Valley has a procedure number "1.SBGEN" in which the old logic would not work
+ // 1.SBGEN.SC. ==> short path of attachment section "C"
+ // 1.SBGEN.SC..S1. ==> short path of Step 1 in attachment section "C"
+ string rtnstr = null;
+ int lidx = -1;
+ // if the item is to a high levels step or sub-step the short path as "..S" for each part of the step
+ // so look for the last occurence of ".." which will be the end of the section information
+ lidx = txt.LastIndexOf("..");
+ if (lidx > 0)
+ {
+ lidx = txt.LastIndexOf(".S", lidx); // this will position us to the end of the procedure number
+ }
+ else
+ {
+ lidx = txt.LastIndexOf(".S"); // this will position us to the end of the procedure number if there was no step information
+ }
// B2018-113 - Replace slashes and backslashes with underscores just as PROMS does when creating a PDF file.
- line = line.Substring(8, line.IndexOf(".S") - 8).Replace("/", "_").Replace("\\", "_");
+ rtnstr = txt.Substring(8, lidx - 8).Replace("/", "_").Replace("\\", "_");
+ return rtnstr;
+ }
+
+ string exePath;
+ private void OpenPDF(string line)
+ {
+ int pageNum = int.Parse(line.Substring(0, 6));
+ // B2018-113 - Replace slashes and backslashes with underscores just as PROMS does when creating a PDF file.
+ string ProcNum = ParseOutProcedureNumberFromLine(line);
+ string procPatern = string.Format("*{0}*.pdf", string.IsNullOrEmpty(line) ? "noProcNumber" : ProcNum);
+
FindFile ff = lbDifferent.SelectedItem as FindFile;
FileInfo fi1 = new FileInfo(ff.File1);
FileInfo fi2 = new FileInfo(ff.File2);
+ string PDFfileName1 = GetPFDFileAndPath(fi1,procPatern);
+ string PDFfileName2 = GetPFDFileAndPath(fi2,procPatern);
+ if (string.IsNullOrEmpty(PDFfileName1) || string.IsNullOrEmpty(PDFfileName2)) return;
+
// If you don't know where the Reader executable is for PDFs Open a PDF and Check to see where the path points
if (exePath == null)
{
- System.Diagnostics.Process p = System.Diagnostics.Process.Start(fi1.DirectoryName + "\\" + line + ".pdf");
- exePath = TryToGetPath(p);
- p.Kill(); // No need to keep it open
+ try
+ {
+ System.Diagnostics.Process p = System.Diagnostics.Process.Start(PDFfileName1);
+ exePath = TryToGetPath(p);
+ p.Kill(); // No need to keep it open
+ }
+ catch (Exception ex)
+ {
+ Application.DoEvents();
+ string msg = string.Format("{0} - {1}", ex.GetType().Name, ex.Message);
+ Console.WriteLine(msg);
+ MessageBox.Show(msg, "Error opening default PDF Viewer");
+ return;
+ }
}
+
// Open the first PDF on a Specific Page
- System.Diagnostics.ProcessStartInfo psi1 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A page={0} ", page) + fi1.DirectoryName + "\\" + line + ".pdf ");
+ System.Diagnostics.ProcessStartInfo psi1 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format(" /A \"page={0}\" \"{1}\" ", pageNum,PDFfileName1));
System.Diagnostics.Process p1 = System.Diagnostics.Process.Start(psi1);
// Move the PDF Reader window to 0,0
MoveProcess(p1, 0, 0);
- // Open the first PDF on a Specific Page
- System.Diagnostics.ProcessStartInfo psi2 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A page={0} ", page) + fi2.DirectoryName + "\\" + line + ".pdf ");
+
+ // Open the second PDF on a Specific Page
+ System.Diagnostics.ProcessStartInfo psi2 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format(" /A \"page={0}\" \"{1}\" ", pageNum, PDFfileName2));
System.Diagnostics.Process p2 = System.Diagnostics.Process.Start(psi2);
// Move the PDF Reader window to 960,0
// TODO: This Offset could be a Setting
MoveProcess(p2, 960, 0);
- return line;
+ return;
}
///
/// Try to get the location of the PDF Reader executable
@@ -530,7 +595,7 @@ namespace Baseline
p.WaitForInputIdle();
while (p.MainModule == null)
{
- Console.WriteLine("{0} - {1}", p.MainWindowTitle,p.ProcessName);
+ Console.WriteLine("{0} - {1}", p.MainWindowTitle, p.ProcessName);
p.WaitForInputIdle();
Application.DoEvents();
}
@@ -594,40 +659,52 @@ namespace Baseline
///
private void OpenOnePDF(Line myLine, int list)
{
+ if (myLine == null) return; // no PDF to open
// B2018-113 - Replace slashes and backslashes with underscores just as PROMS does when creating a PDF file.
string proc = myLine.MyProc.Number.Replace("/","_").Replace("\\","_");
+
+ // if no procedure number, PROMS creates pdf filename "NoProcNumber.pdf"
+ // create pattern to use to get the PDF from the directory
+ // add wildcards (*) to file the file if any prefix or suffix was added to the filename
+ string procPatern = string.Format("*{0}*.pdf", proc == string.Empty ? "noProcNumber" : proc);
int pagenum = myLine.MyPage.Number;
FindFile ff = lbDifferent.SelectedItem as FindFile;
- FileInfo fi1 = new FileInfo(ff.File1);
- FileInfo fi2 = new FileInfo(ff.File2);
- if (exePath == null)
- {
- System.Diagnostics.Process p = System.Diagnostics.Process.Start(fi1.DirectoryName + "\\" + proc + ".pdf");
- while (exePath == null)
- {
- try
- {
-
- exePath = p.MainModule.FileName;
- }
- catch (Exception ex)
- {
- Application.DoEvents();
- Console.WriteLine("{0} - {1}", ex.GetType().Name, ex.Message);
- }
- }
- p.Kill();
- }
+ string PDFfileName = null;
if (list == 1)
{
- System.Diagnostics.ProcessStartInfo psi1 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A page={0} ", pagenum) + fi1.DirectoryName + "\\" + proc + ".pdf ");
- System.Diagnostics.Process p1 = System.Diagnostics.Process.Start(psi1);
+ FileInfo fi1 = new FileInfo(ff.File1);
+ PDFfileName = GetPFDFileAndPath(fi1, procPatern);
}
- else
+ else // list == 2
{
- System.Diagnostics.ProcessStartInfo psi2 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A page={0} ", pagenum) + fi2.DirectoryName + "\\" + proc + ".pdf ");
- System.Diagnostics.Process p1 = System.Diagnostics.Process.Start(psi2);
+ FileInfo fi2 = new FileInfo(ff.File2);
+ PDFfileName = GetPFDFileAndPath(fi2, procPatern);
}
+ if (string.IsNullOrEmpty(PDFfileName)) return; // no PDF to open
+
+ // if exePath is null, then open the found PDF with the default PDF viewer and
+ // capture/save the entire name and path of the default PDF viewer
+ if (exePath == null)
+ {
+ try
+ {
+ System.Diagnostics.Process tp = System.Diagnostics.Process.Start(PDFfileName);
+ exePath = TryToGetPath(tp);
+ tp.Kill();
+ }
+ catch (Exception ex)
+ {
+ Application.DoEvents();
+ string msg = string.Format("{0} - {1}", ex.GetType().Name, ex.Message);
+ Console.WriteLine(msg);
+ MessageBox.Show(msg, "Error opening default PDF Viewer");
+ return;
+ }
+ }
+ // open the PDF and jump to the page number
+ System.Diagnostics.ProcessStartInfo psi1 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A \"page={0}\" \"{1}\" ", pagenum,PDFfileName));
+ psi1.UseShellExecute = false;
+ System.Diagnostics.Process p1 = System.Diagnostics.Process.Start(psi1);
}
///
/// Perform Debug Meta file comparison for all of the folders within the automated testing folders
@@ -709,11 +786,12 @@ namespace Baseline
private void lbProcedures_SelectedIndexChanged(object sender, EventArgs e)
{
//Initialize Results List Box
- lbResults1.Items.Clear();
Procedure myProc = lbProcedures.SelectedItem as Procedure;
+ if (myProc == null) return; // clicked on the white space (blank line) in the list of different procedures
//TODO: May need to consider if there are duplicate procedure numers and titles
Procedure myProc1 = MyProcs1.Find(x => x.Number == myProc.Number && x.Title == myProc.Title);
// Build the results ListBox for the left window
+ lbResults1.Items.Clear();
if (myProc1 != null)
{
foreach (Page myPage in myProc1.MyPages)