Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d4756b732d | |||
| 7273a8b13b | |||
| a544a5cd4f | |||
| ff9ade75d4 | |||
| cfd5498521 | |||
| 9b7c30e1cd | |||
| 670e5d7fa9 | |||
| 8258235611 | |||
| 4d97f29943 | |||
| ab8d59eb2d | |||
| c324fa69b2 | |||
| 1cdb9b4cc2 | |||
| f47fa49b80 | |||
| 6ade96c7ef | |||
| 61d31a3c67 | |||
| 014509ea30 | |||
| b6da13a653 |
+118
-40
@@ -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)
|
||||
|
||||
/// <summary>
|
||||
/// This will return the full path to the PDF file
|
||||
/// </summary>
|
||||
/// <param name="fi"></param>
|
||||
/// <param name="patern"></param>
|
||||
/// <returns></returns>
|
||||
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.
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 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
|
||||
/// </summary>
|
||||
/// <param name="txt"></param>
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
/// <summary>
|
||||
/// 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
|
||||
/// <param name="list"></param>
|
||||
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);
|
||||
}
|
||||
/// <summary>
|
||||
/// 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)
|
||||
|
||||
@@ -422,150 +422,6 @@ namespace LBWordLibrary
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
/// <summary>
|
||||
/// If document contains symbol characters, returns problem font.
|
||||
/// </summary>
|
||||
public string FontHasSymbolCharacters
|
||||
{
|
||||
get
|
||||
{
|
||||
LBRange myRange = Range();
|
||||
myRange = myRange.GoTo(LBWdGoToItem.wdGoToPercent, LBWdGoToDirection.wdGoToLast, 100);
|
||||
myRange.Start = 0;
|
||||
int end = myRange.End;
|
||||
string myText = GetRangeText(myRange);
|
||||
//return _RegFindSymbol.IsMatch(myText);
|
||||
MatchCollection problems = _RegFindSymbol.Matches(myText);
|
||||
int offset = 0;
|
||||
List<string> alreadyProcessed = new List<string>();
|
||||
List<string> fontHasSymbols = new List<string>();
|
||||
foreach (Match problem in problems)
|
||||
{
|
||||
if (!alreadyProcessed.Contains(problem.Value))
|
||||
{
|
||||
myRange.Start = problem.Index + offset;
|
||||
myRange.End = problem.Index + problem.Length + offset;
|
||||
int newOffset = FindRangeOffset(myRange, problem, offset, end);
|
||||
string fontName = myRange.Font.Name;
|
||||
if (IsSymbolFont(fontName))
|
||||
{
|
||||
if( !fontHasSymbols.Contains(fontName))
|
||||
{
|
||||
fontHasSymbols.Add(fontName);
|
||||
// Found symbol font
|
||||
_MyLog.InfoFormat("Font '{0}' has Symbols", fontName);
|
||||
}
|
||||
//Console.WriteLine("Font '{0}' has Symbols", myRange.Font.Name);
|
||||
//return true;
|
||||
}
|
||||
else
|
||||
return myRange.Font.Name;
|
||||
offset = newOffset;
|
||||
alreadyProcessed.Add(problem.Value);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Debug Tool - Return a string containing a list of the fonts that have symbol characters.
|
||||
/// </summary>
|
||||
public string FontsHaveSymbolCharacters
|
||||
{
|
||||
get
|
||||
{
|
||||
string sep = "";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
List<string> fonts=new List<string>();
|
||||
LBRange myRange = Range();
|
||||
myRange = myRange.GoTo(LBWdGoToItem.wdGoToPercent, LBWdGoToDirection.wdGoToLast, 100);
|
||||
myRange.Start = 0;
|
||||
int end = myRange.End;
|
||||
string myText = GetRangeText(myRange);
|
||||
//return _RegFindSymbol.IsMatch(myText);
|
||||
MatchCollection problems = _RegFindSymbol.Matches(myText);
|
||||
int offset = 0;
|
||||
foreach (Match problem in problems)
|
||||
{
|
||||
myRange.Start = problem.Index + offset;
|
||||
myRange.End = problem.Index + problem.Length + offset;
|
||||
int newOffset = FindRangeOffset(myRange, problem, offset, end);
|
||||
if (!fonts.Contains(myRange.Font.Name))
|
||||
{
|
||||
fonts.Add(myRange.Font.Name);
|
||||
sb.Append(sep + "'" + myRange.Font.Name + "'");
|
||||
sep = ",";
|
||||
}
|
||||
offset = newOffset;
|
||||
}
|
||||
if (sb.Length > 0) return sb.ToString();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Debug Tool - Return a list of symbol characters using VESYMB font.
|
||||
/// </summary>
|
||||
public string FontsHaveSymbolCharacters2
|
||||
{
|
||||
get
|
||||
{
|
||||
try
|
||||
{
|
||||
Dictionary<string, List<int>> fonts = new Dictionary<string, List<int>>();
|
||||
LBRange myRange = Range();
|
||||
myRange = myRange.GoTo(LBWdGoToItem.wdGoToPercent, LBWdGoToDirection.wdGoToLast, 100);
|
||||
myRange.Start = 0;
|
||||
int end = myRange.End;
|
||||
string myText = GetRangeText(myRange);
|
||||
//return _RegFindSymbol.IsMatch(myText);
|
||||
MatchCollection problems = _RegFindSymbol.Matches(myText);
|
||||
int offset = 0;
|
||||
foreach (Match problem in problems)
|
||||
{
|
||||
myRange.Start = problem.Index + offset;
|
||||
myRange.End = problem.Index + problem.Length + offset;
|
||||
int newOffset = FindRangeOffset(myRange, problem, offset, end);
|
||||
string sFont = myRange.Font.Name;
|
||||
if (sFont.ToUpper().StartsWith("VESYM"))
|
||||
{
|
||||
if (!fonts.ContainsKey(sFont))
|
||||
{
|
||||
fonts.Add(sFont, new List<int>());
|
||||
}
|
||||
List<int> symbols = fonts[sFont];
|
||||
string myTextSymb = GetRangeText(myRange);
|
||||
foreach (char c in myTextSymb)
|
||||
{
|
||||
if (!symbols.Contains((int)c))
|
||||
symbols.Add((int)c);
|
||||
}
|
||||
}
|
||||
offset = newOffset;
|
||||
}
|
||||
if (fonts.Count > 0)
|
||||
{
|
||||
string sep = "";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
foreach (string font in fonts.Keys)
|
||||
{
|
||||
sb.Append(sep + "'" + font + "'");
|
||||
sep = ",";
|
||||
foreach (int i in fonts[font])
|
||||
{
|
||||
sb.Append(sep);
|
||||
sb.Append(i);
|
||||
}
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("{0},{1},{2}", ex.GetType().Name, ex.Message, ex.StackTrace);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks to see if the document contains symbol characters
|
||||
@@ -601,86 +457,7 @@ namespace LBWordLibrary
|
||||
}
|
||||
}
|
||||
Regex _RegFindSymbol = new Regex("[\\uF020-\\uF07F]+");
|
||||
/// <summary>
|
||||
/// FixSymbolCharacters - Fix any symbol characters in the document
|
||||
/// </summary>
|
||||
public void FixSymbolCharacters()
|
||||
{
|
||||
// Set up range object to be used to process text
|
||||
LBRange myRange = Range();
|
||||
myRange = myRange.GoTo(LBWdGoToItem.wdGoToPercent, LBWdGoToDirection.wdGoToLast, 100);
|
||||
int end = myRange.End;
|
||||
myRange.Start = 0;
|
||||
string myText = GetRangeText(myRange);
|
||||
MatchCollection problems = _RegFindSymbol.Matches(myText);
|
||||
int offset = 0;
|
||||
foreach (Match problem in problems)
|
||||
{
|
||||
myRange.Start = problem.Index + offset;
|
||||
myRange.End = problem.Index + problem.Length + offset;
|
||||
int newOffset = FindRangeOffset(myRange, problem, offset, end);
|
||||
if (myRange.Font.Name == "")
|
||||
{
|
||||
int wrdStart = myRange.Start;
|
||||
int wrdEnd = myRange.End;
|
||||
int wrdMiddle = wrdStart;
|
||||
while (myRange.Font.Name == "")
|
||||
{
|
||||
do
|
||||
{
|
||||
myRange.End = ++wrdMiddle;
|
||||
} while(myRange.Font.Name != "");
|
||||
myRange.End = wrdMiddle - 1;
|
||||
ReplaceSymbolCharacters(myRange);
|
||||
myRange.Start = wrdMiddle -1;
|
||||
myRange.End = wrdEnd;
|
||||
}
|
||||
ReplaceSymbolCharacters(myRange);
|
||||
}
|
||||
else
|
||||
{
|
||||
ReplaceSymbolCharacters(myRange);
|
||||
}
|
||||
offset = newOffset;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Try to fix the first character in the symbol range F000 to F0FF. If it cannot be
|
||||
/// fixed, it is an indicator that the font is not installed properly. Regardless of
|
||||
/// whether there is success, the change is undone so that the document will not be
|
||||
/// considered dirty, i.e. will not prompt user for save.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public bool AttemptToFixASymbolCharacter()
|
||||
{
|
||||
// Set up range object to be used to process text
|
||||
LBRange myRange = Range();
|
||||
myRange = myRange.GoTo(LBWdGoToItem.wdGoToPercent, LBWdGoToDirection.wdGoToLast, 100);
|
||||
|
||||
int end = myRange.End;
|
||||
myRange.Start = 0;
|
||||
string myText = GetRangeText(myRange);
|
||||
MatchCollection problems = _RegFindSymbol.Matches(myText);
|
||||
if (problems.Count>0)
|
||||
{
|
||||
Match problem = problems[0];
|
||||
myRange.Start = problem.Index;
|
||||
myRange.End = myRange.Start + 1;
|
||||
if (IsSymbolFont(myRange.Font.Name)) return true; // if it's a symbol font already, no issue.
|
||||
string before = GetRangeText(myRange);
|
||||
string updated = ReplaceSymbolCharacters(before);
|
||||
myRange.Text = updated;
|
||||
string after = GetRangeText(myRange);
|
||||
Undo(1);
|
||||
//Console.WriteLine("Undo1 results = {0}", tst);
|
||||
//tst = Undo(1);
|
||||
//Console.WriteLine("Undo2 results = {0}", tst);
|
||||
//tst = Undo(1);
|
||||
//Console.WriteLine("Undo3 results = {0}", tst);
|
||||
return (updated == after);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the Range Text with error handling. myRange.Text sometimes will get a null reference exception.
|
||||
/// </summary>
|
||||
@@ -737,35 +514,6 @@ namespace LBWordLibrary
|
||||
return myRange.Start - problem.Index;
|
||||
}
|
||||
/// <summary>
|
||||
/// ReplaceSymbolCharacters Replaces any symbol characters in the specified range
|
||||
/// </summary>
|
||||
/// <param name="myRange"></param>
|
||||
private static void ReplaceSymbolCharacters(LBRange myRange)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (IsSymbolFont(myRange.Font.Name))
|
||||
return;
|
||||
string before = GetRangeText(myRange);
|
||||
string updated = ReplaceSymbolCharacters(before);
|
||||
myRange.Text = updated;
|
||||
string after = GetRangeText(myRange);
|
||||
if (after != updated) // If the Word text doesn't match try including a character before and after and do it again.
|
||||
{
|
||||
Console.WriteLine("'TryEntireRange Failed',{0},{1},'{2}','{3}','{4}'", myRange.Start, myRange.End, before, updated, after);
|
||||
int end = myRange.End;
|
||||
myRange.Start = myRange.Start - 1;
|
||||
myRange.End = end + 1;
|
||||
myRange.Text = ReplaceSymbolCharacters(GetRangeText(myRange));
|
||||
Console.WriteLine("'TryEntireRange Failed',{0},{1},'{2}'", myRange.Start, myRange.End, GetRangeText(myRange));
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("'TryEntireRange Exception',{0},{1},'{2}'", myRange.Start, myRange.End, ex.Message);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// ReplaceSymbolCharacters processes the string returned and changes any symbols (0xF0??) to normal characters
|
||||
/// </summary>
|
||||
/// <param name="str"></param>
|
||||
|
||||
@@ -418,7 +418,7 @@ namespace ROEditor
|
||||
// NOTE: not doing the "Using System.Threading;" statement at beginning of file because it conflicts with the declaration of the "Timer" variable
|
||||
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
|
||||
|
||||
// The data path the was passed in.
|
||||
// The data path the was passed in.
|
||||
DbConnectPath = PassedInPath;
|
||||
|
||||
// Setup the context menu
|
||||
@@ -2844,7 +2844,8 @@ namespace ROEditor
|
||||
}
|
||||
else
|
||||
{
|
||||
newt=null;
|
||||
mnutitle = Regex.Replace(mnutitle, @"\\u([0-9]{1,4})\?", m => Convert.ToChar(int.Parse(m.Groups[1].Value)).ToString()); // RO Editor add symbols C2022
|
||||
newt =null;
|
||||
success = myrodb.RODB_WriteRO((VlnXmlElement)roTreeView.SelectedNode.Tag);
|
||||
if (success==true && mnutitle != "") roTreeView.SelectedNode.Text = mnutitle; //B2021-077 make sure mnutitle has text or it will clear the node's title in the tree
|
||||
}
|
||||
|
||||
+1
-12
@@ -83,7 +83,6 @@ namespace VEPROMS
|
||||
this.lblUser = new DevComponents.DotNetBar.LabelItem();
|
||||
this.lblLastChange = new DevComponents.DotNetBar.LabelItem();
|
||||
this.btnStepRTF = new DevComponents.DotNetBar.ButtonItem();
|
||||
this.btnFixMSWord = new DevComponents.DotNetBar.ButtonItem();
|
||||
this.epAnnotations = new DevComponents.DotNetBar.ExpandablePanel();
|
||||
this.ctrlAnnotationDetails = new Volian.Controls.Library.AnnotationDetails();
|
||||
this.btnAnnoDetailsPushPin = new DevComponents.DotNetBar.ButtonX();
|
||||
@@ -541,8 +540,7 @@ namespace VEPROMS
|
||||
this.btnEditItem,
|
||||
this.lblUser,
|
||||
this.lblLastChange,
|
||||
this.btnStepRTF,
|
||||
this.btnFixMSWord});
|
||||
this.btnStepRTF});
|
||||
this.bottomBar.Location = new System.Drawing.Point(5, 573);
|
||||
this.bottomBar.Name = "bottomBar";
|
||||
this.bottomBar.Size = new System.Drawing.Size(1185, 25);
|
||||
@@ -728,14 +726,6 @@ namespace VEPROMS
|
||||
this.btnStepRTF.Text = "Step RTF";
|
||||
this.btnStepRTF.Click += new System.EventHandler(this.btnStepRTF_Click);
|
||||
//
|
||||
// btnFixMSWord
|
||||
//
|
||||
this.btnFixMSWord.ForeColor = System.Drawing.Color.Black;
|
||||
this.btnFixMSWord.Name = "btnFixMSWord";
|
||||
this.btnFixMSWord.Text = "Fix Symbol Fonts";
|
||||
this.btnFixMSWord.Visible = false;
|
||||
this.btnFixMSWord.Click += new System.EventHandler(this.btnFixMSWord_Click);
|
||||
//
|
||||
// epAnnotations
|
||||
//
|
||||
this.epAnnotations.CanvasColor = System.Drawing.SystemColors.Control;
|
||||
@@ -1775,7 +1765,6 @@ namespace VEPROMS
|
||||
private DevComponents.DotNetBar.ButtonItem btnItemInfo;
|
||||
private DevComponents.DotNetBar.ButtonItem btnFilter;
|
||||
private DevComponents.DotNetBar.TextBoxItem txtFilter;
|
||||
private DevComponents.DotNetBar.ButtonItem btnFixMSWord;
|
||||
private Volian.Controls.Library.DisplayBookMarks displayBookMarks;
|
||||
//private DevComponents.DotNetBar.LabelItem lblLocked;
|
||||
private DevComponents.DotNetBar.ButtonItem btnShortCuts;
|
||||
|
||||
@@ -11,7 +11,6 @@ using System.IO;
|
||||
using System.Configuration;
|
||||
using System.Reflection;
|
||||
using VEPROMS.CSLA.Library;
|
||||
//using Csla;
|
||||
using DevComponents;
|
||||
using DevComponents.DotNetBar;
|
||||
using DevComponents.DotNetBar.Rendering;
|
||||
@@ -234,7 +233,7 @@ namespace VEPROMS
|
||||
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
|
||||
displayRO.TabControl = tc; // B2019-043 this was being passed in as a parameter for DisplayRO which caused issues with the Visual Studio designer
|
||||
|
||||
SetupFolder(MyDocVersion.FolderID);
|
||||
SetupFolder(MyDocVersion.FolderID);
|
||||
tc.MySessionInfo = MyParent.MySessionInfo;
|
||||
displaySearch1.TopFolderID = myDocVersion.FolderID;
|
||||
SelectedDVI = myDocVersion;
|
||||
@@ -1578,13 +1577,13 @@ namespace VEPROMS
|
||||
}
|
||||
else
|
||||
{
|
||||
SelectedROFst = myDTP.MyDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst;
|
||||
SelectedROFst = myDTP.MyDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (tc.MyEditItem != null && displayRO.MyROFST != null && tc.MyEditItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].ROFstID != displayRO.MyROFST.ROFstID)
|
||||
{
|
||||
SelectedROFst = tc.MyEditItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst;
|
||||
SelectedROFst = tc.MyEditItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst;
|
||||
}
|
||||
|
||||
// need this to update RO Tree after UpdateRofst (B2015-226)
|
||||
@@ -1592,9 +1591,9 @@ namespace VEPROMS
|
||||
if (displayRO.MyROFST != SelectedROFst)
|
||||
{
|
||||
displayRO.MyROFST = SelectedROFst;
|
||||
// B2023-021: force Load of Step Prop/RO panel RO tree by passing in
|
||||
// true to LoadTree
|
||||
displayRO.LoadTree(true);
|
||||
// B2023-021: force Load of Step Prop/RO panel RO tree by passing in
|
||||
// true to LoadTree
|
||||
displayRO.LoadTree(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2396,8 +2395,8 @@ namespace VEPROMS
|
||||
tv.MyUserInfo = MyUserInfo;
|
||||
StepTabRibbon.MySessionInfo = MySessionInfo;
|
||||
|
||||
// Initialize Caption with Server name and Database name.
|
||||
SetCaption(tv.TopNode as VETreeNode);
|
||||
// Initialize Caption with Server name and Database name.
|
||||
SetCaption(tv.TopNode as VETreeNode);
|
||||
System.Threading.AutoResetEvent autoEvent = new System.Threading.AutoResetEvent(false);
|
||||
|
||||
//System.Threading.TimerCallback timerDelegate = new System.Threading.TimerCallback(MySessionInfo.PingSession);
|
||||
@@ -4552,8 +4551,8 @@ namespace VEPROMS
|
||||
|
||||
SetCaption(tv.SelectedNode as VETreeNode);
|
||||
displayApplicability.MyDisplayTabItem = tc.SelectedDisplayTabItem;
|
||||
|
||||
if (tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociationCount > 0)
|
||||
|
||||
if (tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociationCount > 0)
|
||||
{
|
||||
displayRO.MyROFST = tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst;
|
||||
}
|
||||
@@ -4628,8 +4627,6 @@ namespace VEPROMS
|
||||
if (args != null && args.MyEditItem != null && !args.MyEditItem.MyStepPanel.ContainsFocus)
|
||||
return;
|
||||
|
||||
btnFixMSWord.Visible = (args != null && (args.MyItemInfo != null && args.MyEditItem == null));
|
||||
|
||||
if (_LastStepRTB != null && !_LastStepRTB.Disposing && !_LastStepRTB.Closed)
|
||||
_LastStepRTB.EditModeChanged -= new StepRTBEvent(_LastStepRTB_EditModeChanged);
|
||||
|
||||
@@ -4767,9 +4764,9 @@ namespace VEPROMS
|
||||
// B2022-026 RO Memory reduction coding (Jakes Merge)
|
||||
displayRO.ProgressBar = bottomProgBar;
|
||||
displayRO.MyRTB = args.MyEditItem.MyStepRTB;
|
||||
displayRO.LoadTree();
|
||||
displayRO.LoadTree();
|
||||
|
||||
displayBookMarks.MyEditItem = args.MyEditItem;
|
||||
displayBookMarks.MyEditItem = args.MyEditItem;
|
||||
displayHistory.MyEditItem = args.MyEditItem;
|
||||
|
||||
lblEditView.Text = args.MyEditItem.MyStepPanel.VwMode == E_ViewMode.Edit ? "Edit" : "View";
|
||||
@@ -4932,7 +4929,7 @@ namespace VEPROMS
|
||||
|
||||
// B2022-026 RO Memory reduction coding (Jakes Merge)
|
||||
displayRO.LoadTree();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -5241,19 +5238,6 @@ namespace VEPROMS
|
||||
Clipboard.SetDataObject(mydo);
|
||||
}
|
||||
}
|
||||
private void btnFixMSWord_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (tc.SelectedDisplayTabItem != null && tc.SelectedDisplayTabItem.MyDSOTabPanel != null)
|
||||
{
|
||||
string btnText = btnFixMSWord.Text;
|
||||
btnFixMSWord.FixedSize = btnFixMSWord.Size;
|
||||
btnFixMSWord.Text = "Processing ...";
|
||||
this.Cursor = Cursors.WaitCursor;
|
||||
tc.SelectedDisplayTabItem.MyDSOTabPanel.FixSymbolCharacters();
|
||||
btnFixMSWord.Text = btnText;
|
||||
this.Cursor = Cursors.Default;
|
||||
}
|
||||
}
|
||||
|
||||
private void epAnnotations_Resize(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -49,7 +49,7 @@ namespace Volian.Controls.Library
|
||||
this.btnApplicabilitychg.Size = new System.Drawing.Size(80, 22);
|
||||
this.btnApplicabilitychg.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.btnApplicabilitychg.RightToLeft = System.Windows.Forms.RightToLeft.No;
|
||||
this.superTooltip1.SetSuperTooltip(this.btnApplicabilitychg, new DevComponents.DotNetBar.SuperTooltipInfo("Change applicability settings - All At Level", "", "When clicked, all steps at the level of the current step will have their applicability settings changed. Note that for two column procedures, the left column and right column are handled separately.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray));
|
||||
this.superTooltip1.SetSuperTooltip(this.btnApplicabilitychg, new DevComponents.DotNetBar.SuperTooltipInfo("Change applicability settings - All At Level", "", "When clicked, all sub-steps at that level of the current step will be set to the selected applicability. Note that this button is disabled when on a RNO step type but enabled for sub-step under it.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray));
|
||||
this.btnApplicabilitychg.TabIndex = 0;
|
||||
this.btnApplicabilitychg.Text = "Set All at Level";
|
||||
this.btnApplicabilitychg.ColorTable = DevComponents.DotNetBar.eButtonColor.BlueOrb;
|
||||
|
||||
@@ -69,6 +69,14 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
MyItemInfo = _MyDisplayTabItem.MyItemInfo;
|
||||
}
|
||||
if (MyItemInfo.IsRNOPart == true) // C2026-027 disable “Set_At_All_Level” button on the Applicability tab when RNO step is active.
|
||||
{
|
||||
btnApplicabilitychg.Enabled = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
btnApplicabilitychg.Enabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -390,10 +398,18 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
}
|
||||
}
|
||||
_MyItemInfo = value;
|
||||
_MyItemInfo = value;
|
||||
if (_MyItemInfo != null)
|
||||
{
|
||||
if (this.Visible == false) return;
|
||||
if (_MyItemInfo.IsRNOPart == true) // C2026-027 disable “Set_At_All_Level” button on the Applicability tab when RNO step is active.
|
||||
{
|
||||
btnApplicabilitychg.Enabled = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
btnApplicabilitychg.Enabled = true;
|
||||
}
|
||||
IItemConfig cfg = _MyItemInfo.MyConfig as IItemConfig;
|
||||
List<int> apples = cfg.MasterSlave_Applicability.GetFlags();
|
||||
UnwireCheckboxes(true);
|
||||
|
||||
@@ -960,7 +960,9 @@ namespace Volian.Print.Library
|
||||
OnStatusChanged("After NewPage", PromsPrinterStatusType.NewPage);
|
||||
if (myProcedure.Sections == null)
|
||||
{
|
||||
MessageBox.Show("This procedure has no content and will not be printed.", "Empty Procedure", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
// C2026-033 if we are running baselines, don't display the empty procedure message box, instead continue on as if OK was pressed.
|
||||
if (!BaselineTesting)
|
||||
MessageBox.Show("This procedure has no content and will not be printed.", "Empty Procedure", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
ProfileTimer.Pop(profileDepth);
|
||||
// B2024-062 Added check for EmptyProcedure. This is to prevent the Try Again message
|
||||
// from appearing after the user clicks on the OK button from the Empty Procedure message
|
||||
|
||||
@@ -2,13 +2,14 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Printing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Drawing.Printing;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Windows.Forms;
|
||||
using VG;
|
||||
//using XYPlots;
|
||||
|
||||
@@ -21,6 +22,10 @@ namespace XYPlots
|
||||
public frmXYPlot(string title,string xyPlot)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
title = Regex.Replace(title, @"\\u([0-9]{1,4})\?", m => int.TryParse(m?.Groups[1]?.Value, out int result) ? Convert.ToChar(result).ToString() : ""); // C2022-003 RO Symbols. Convert unicode to character.
|
||||
xyPlot = Regex.Replace(xyPlot, @"\\u([0-9]{1,4})\?", m => int.TryParse(m?.Groups[1]?.Value, out int result) ? Convert.ToChar(result).ToString() : ""); // C2022-003 RO Symbols. Convert unicode to character.
|
||||
|
||||
int pstart = xyPlot.IndexOf("<<G"); // find the starting Plot Command
|
||||
xyPlot = xyPlot.Substring(pstart); // set val to the start of the plot commands
|
||||
_XYPlot =xyPlot;
|
||||
|
||||
Reference in New Issue
Block a user