Compare commits

..
66 changed files with 4301 additions and 4588 deletions
-1
View File
@@ -402,4 +402,3 @@ FodyWeavers.xsd
/fmtall /fmtall
/genmacall /genmacall
*AssemblyInfo.cs *AssemblyInfo.cs
/PROMS/Baseline/Baseline.sln
-1
View File
@@ -67,7 +67,6 @@
<Compile Include="frmSettings.Designer.cs"> <Compile Include="frmSettings.Designer.cs">
<DependentUpon>frmSettings.cs</DependentUpon> <DependentUpon>frmSettings.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="GlobalSuppressions.cs" />
<Compile Include="Program.cs" /> <Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="frmBaseline.resx"> <EmbeddedResource Include="frmBaseline.resx">
-8
View File
@@ -1,8 +0,0 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Not modifying Naming Styles")]
+3
View File
@@ -1,4 +1,7 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
namespace Baseline namespace Baseline
+247 -124
View File
@@ -43,9 +43,12 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Data; using System.Data;
using System.Drawing;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using System.Collections.Specialized;
using System.IO; using System.IO;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Xml.Serialization; using System.Xml.Serialization;
@@ -70,8 +73,13 @@ namespace Baseline
} }
public partial class frmBaseline : Form public partial class frmBaseline : Form
{ {
public IgnoreLines MyIgnore { get; set; } = new IgnoreLines(); private IgnoreLines _MyIgnore = new IgnoreLines();
private LastWas myLast = LastWas.Search; public IgnoreLines MyIgnore
{
get { return _MyIgnore; }
set { _MyIgnore = value; }
}
private LastWas myLast = LastWas.Search;
private Settings MySettings; private Settings MySettings;
public string MyStatus public string MyStatus
{ {
@@ -143,11 +151,9 @@ namespace Baseline
this.WindowState = Properties.Settings.Default.WidnowState; this.WindowState = Properties.Settings.Default.WidnowState;
if(Properties.Settings.Default.Ignore != null && Properties.Settings.Default.Ignore != "") if(Properties.Settings.Default.Ignore != null && Properties.Settings.Default.Ignore != "")
MyIgnore = IgnoreLines.Get(Properties.Settings.Default.Ignore); MyIgnore = IgnoreLines.Get(Properties.Settings.Default.Ignore);
MySettings = new Settings MySettings= new Settings();
{ MySettings.IgnoreLines = new BindingList<string>();
IgnoreLines = new BindingList<string>() splitContainer1.SplitterDistance = Properties.Settings.Default.Split1;
};
splitContainer1.SplitterDistance = Properties.Settings.Default.Split1;
splitContainer2.SplitterDistance = Properties.Settings.Default.Split2; splitContainer2.SplitterDistance = Properties.Settings.Default.Split2;
splitContainer3.SplitterDistance = Properties.Settings.Default.Split3; splitContainer3.SplitterDistance = Properties.Settings.Default.Split3;
if (Properties.Settings.Default.MRU1 != null && Properties.Settings.Default.MRU1.Count > 0) if (Properties.Settings.Default.MRU1 != null && Properties.Settings.Default.MRU1.Count > 0)
@@ -234,27 +240,28 @@ namespace Baseline
lbProcedures.Items.Clear(); lbProcedures.Items.Clear();
lbResults1.Items.Clear(); lbResults1.Items.Clear();
lbResults2.Items.Clear(); lbResults2.Items.Clear();
if (lbDifferent.SelectedItem is FindFile ff) FindFile ff = lbDifferent.SelectedItem as FindFile;
{ if (ff != null)
// Fill Procedure or Result ListBoxes {
switch (myLast) // Fill Procedure or Result ListBoxes
{ switch (myLast)
case LastWas.Pagination: {
CompareContent(ff.File1, ff.File2);// Compare DebugPagination case LastWas.Pagination:
break; CompareContent(ff.File1, ff.File2);// Compare DebugPagination
case LastWas.Baseline: break;
CompareContent3(ff.File1, ff.File2);// Compare DebugMeta case LastWas.Baseline:
break; CompareContent3(ff.File1, ff.File2);// Compare DebugMeta
case LastWas.Search: break;
ShowSearchResults(ff.File1, ff.File2);// Perform search on DebugMeta case LastWas.Search:
break; ShowSearchResults(ff.File1, ff.File2);// Perform search on DebugMeta
default: break;
CompareContent(ff.File1, ff.File2);//Default DebugPagination default:
break; CompareContent(ff.File1, ff.File2);//Default DebugPagination
} break;
//CompareOneFile(ff.File1, ff.File2); }
} //CompareOneFile(ff.File1, ff.File2);
} }
}
Procedures MyProcs1; Procedures MyProcs1;
Procedures MyProcs2; Procedures MyProcs2;
/// <summary> /// <summary>
@@ -354,6 +361,13 @@ namespace Baseline
lines1 = list1.AsEnumerable<string>();// Convert back to Enumerable to work with LINQ lines1 = list1.AsEnumerable<string>();// Convert back to Enumerable to work with LINQ
return lines1; return lines1;
} }
private string GetProcNum(string line)
{
string retval = line.Substring(3, line.IndexOf(" | ") - 3);
if (retval.Contains("_"))
retval = retval.Substring(0, retval.IndexOf("_") - 1);
return retval;
}
/// <summary> /// <summary>
/// Include lines for Procedure or Page or Search is true /// Include lines for Procedure or Page or Search is true
/// Account for Case Insensitive CheckBox /// Account for Case Insensitive CheckBox
@@ -436,8 +450,8 @@ namespace Baseline
private void lbResults1_SelectedIndexChanged(object sender, EventArgs e) private void lbResults1_SelectedIndexChanged(object sender, EventArgs e)
{ {
string line=null; string line=null;
if (lbResults1.SelectedItem is string v) if (lbResults1.SelectedItem is string)
line = v; line = (string)lbResults1.SelectedItem;
Line myLine = lbResults1.SelectedItem as Line; Line myLine = lbResults1.SelectedItem as Line;
switch (myLast) switch (myLast)
{ {
@@ -458,8 +472,8 @@ namespace Baseline
{ {
string line=null; string line=null;
if(lbResults2.SelectedItem is string v) if(lbResults2.SelectedItem is string)
line = v; line = (string)lbResults2.SelectedItem;
Line myLine = lbResults2.SelectedItem as Line; Line myLine = lbResults2.SelectedItem as Line;
switch (myLast) switch (myLast)
@@ -489,7 +503,7 @@ namespace Baseline
string[] fileList = Directory.GetFiles(fi.DirectoryName, patern); string[] fileList = Directory.GetFiles(fi.DirectoryName, patern);
// sort the list of file list // sort the list of file list
Array.Sort((string[])fileList); Array.Sort((string[])fileList);
return fileList.FirstOrDefault(); // the PDF file that we what should be top of the list then. return fileList.First(); // the PDF file that we what should be top of the list then.
} }
/// <summary> /// <summary>
@@ -501,10 +515,16 @@ namespace Baseline
/// <returns></returns> /// <returns></returns>
private string ParseOutProcedureNumberFromLine(string txt) private string ParseOutProcedureNumberFromLine(string txt)
{ {
// if the item is to a high levels step or sub-step the short path as "..S" for each part of the step // old logic was looking for the first occurence of ".S" in the txt string as the ending point of the procedure nuumber
// so look for the last occurence of ".." which will be the end of the section information // Beaver Valley has a procedure number "1.SBGEN" in which the old logic would not work
int lidx = txt.LastIndexOf(".."); // 1.SBGEN.SC. ==> short path of attachment section "C"
if (lidx > 0) // 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 lidx = txt.LastIndexOf(".S", lidx); // this will position us to the end of the procedure number
} }
@@ -512,13 +532,9 @@ namespace Baseline
{ {
lidx = txt.LastIndexOf(".S"); // this will position us to the end of the procedure number if there was no step information lidx = txt.LastIndexOf(".S"); // this will position us to the end of the procedure number if there was no step information
} }
// old logic was looking for the first occurence of ".S" in the txt string as the ending point of the procedure nuumber // B2018-113 - Replace slashes and backslashes with underscores just as PROMS does when creating a PDF file.
// Beaver Valley has a procedure number "1.SBGEN" in which the old logic would not work rtnstr = txt.Substring(8, lidx - 8).Replace("/", "_").Replace("\\", "_");
// 1.SBGEN.SC. ==> short path of attachment section "C" return rtnstr;
// 1.SBGEN.SC..S1. ==> short path of Step 1 in attachment section "C"
// B2018-113 - Replace slashes and backslashes with underscores just as PROMS does when creating a PDF file.
string rtnstr = txt.Substring(8, lidx - 8).Replace("/", "_").Replace("\\", "_");
return rtnstr;
} }
string exePath; string exePath;
@@ -600,10 +616,10 @@ namespace Baseline
progname = @"C:\Program Files (x86)\IDM Computer Solutions\UltraCompare\UC.exe"; progname = @"C:\Program Files (x86)\IDM Computer Solutions\UltraCompare\UC.exe";
System.Diagnostics.ProcessStartInfo psi = System.Diagnostics.ProcessStartInfo psi =
new System.Diagnostics.ProcessStartInfo(progname, string.Format(@" -t ""{0}"" ""{1}""", compareFile, baseFile)); new System.Diagnostics.ProcessStartInfo(progname, string.Format(@" -t ""{0}"" ""{1}""", compareFile, baseFile));
_ = System.Diagnostics.Process.Start(psi); System.Diagnostics.Process prc = System.Diagnostics.Process.Start(psi);
} }
private readonly ProcessLocationQueue myQueue= new ProcessLocationQueue(); private ProcessLocationQueue myQueue= new ProcessLocationQueue();
private Timer queueTimer = null; private Timer queueTimer = null;
/// <summary> /// <summary>
/// Move a Process to a specific screen location - This is done with a timer so /// Move a Process to a specific screen location - This is done with a timer so
@@ -616,11 +632,9 @@ namespace Baseline
{ {
if (queueTimer == null) if (queueTimer == null)
{ {
queueTimer = new Timer queueTimer = new Timer();
{ queueTimer.Enabled = false;
Enabled = false queueTimer.Tick += queueTimer_Tick;
};
queueTimer.Tick += queueTimer_Tick;
queueTimer.Interval = 1000; queueTimer.Interval = 1000;
} }
myQueue.Add(proc, x, y); myQueue.Add(proc, x, y);
@@ -655,8 +669,8 @@ namespace Baseline
string procPatern = string.Format("*{0}*.pdf", proc == string.Empty ? "noProcNumber" : proc); string procPatern = string.Format("*{0}*.pdf", proc == string.Empty ? "noProcNumber" : proc);
int pagenum = myLine.MyPage.Number; int pagenum = myLine.MyPage.Number;
FindFile ff = lbDifferent.SelectedItem as FindFile; FindFile ff = lbDifferent.SelectedItem as FindFile;
string PDFfileName; string PDFfileName = null;
if (list == 1) if (list == 1)
{ {
FileInfo fi1 = new FileInfo(ff.File1); FileInfo fi1 = new FileInfo(ff.File1);
PDFfileName = GetPFDFileAndPath(fi1, procPatern); PDFfileName = GetPFDFileAndPath(fi1, procPatern);
@@ -687,13 +701,11 @@ namespace Baseline
return; return;
} }
} }
// open the PDF and jump to the page number // 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)) System.Diagnostics.ProcessStartInfo psi1 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A \"page={0}\" \"{1}\" ", pagenum,PDFfileName));
{ psi1.UseShellExecute = false;
UseShellExecute = false System.Diagnostics.Process p1 = System.Diagnostics.Process.Start(psi1);
}; }
_ = System.Diagnostics.Process.Start(psi1);
}
/// <summary> /// <summary>
/// Perform Debug Meta file comparison for all of the folders within the automated testing folders /// Perform Debug Meta file comparison for all of the folders within the automated testing folders
/// </summary> /// </summary>
@@ -773,10 +785,11 @@ namespace Baseline
} }
private void lbProcedures_SelectedIndexChanged(object sender, EventArgs e) private void lbProcedures_SelectedIndexChanged(object sender, EventArgs e)
{ {
//Initialize Results List Box //Initialize Results List Box
if (!(lbProcedures.SelectedItem is Procedure myProc)) return; // clicked on the white space (blank line) in the list of different procedures Procedure myProc = lbProcedures.SelectedItem as Procedure;
//TODO: May need to consider if there are duplicate procedure numers and titles if (myProc == null) return; // clicked on the white space (blank line) in the list of different procedures
Procedure myProc1 = MyProcs1.Find(x => x.Number == myProc.Number && x.Title == myProc.Title); //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 // Build the results ListBox for the left window
lbResults1.Items.Clear(); lbResults1.Items.Clear();
if (myProc1 != null) if (myProc1 != null)
@@ -823,13 +836,28 @@ namespace Baseline
}; };
public class Settings public class Settings
{ {
public BindingList<string> IgnoreLines { get; set; } private BindingList<string> _IgnoreLines;
} public BindingList<string> IgnoreLines
{
get { return _IgnoreLines; }
set { _IgnoreLines = value; }
}
}
public partial class FindFile public partial class FindFile
{ {
public string File1 { get; set; } private string _File1;
public string File2 { get; set; } public string File1
public FindFile(string file1, string file2) {
get { return _File1; }
set { _File1 = value; }
}
private string _File2;
public string File2
{
get { return _File2; }
set { _File2 = value; }
}
public FindFile(string file1, string file2)
{ {
File1 = file1; File1 = file1;
File2 = file2; File2 = file2;
@@ -837,16 +865,19 @@ namespace Baseline
} }
public partial class FindFiles : List<FindFile> public partial class FindFiles : List<FindFile>
{ {
private readonly string _FileName; private string _FileName;
public string FileName => _FileName; public string FileName
/// <summary> {
/// Build list of DocVersion Folders with differences get { return _FileName; }
/// </summary> }
/// <param name="path1">Base path</param> /// <summary>
/// <param name="path2">Compare path</param> /// Build list of DocVersion Folders with differences
/// <param name="fileName">filename</param> /// </summary>
/// <param name="myIgnore">Ignore list</param> /// <param name="path1">Base path</param>
public FindFiles(string path1, string path2, string fileName,IgnoreLines myIgnore) /// <param name="path2">Compare path</param>
/// <param name="fileName">filename</param>
/// <param name="myIgnore">Ignore list</param>
public FindFiles(string path1, string path2, string fileName,IgnoreLines myIgnore)
{ {
DirectoryInfo di1 = new DirectoryInfo(path1); DirectoryInfo di1 = new DirectoryInfo(path1);
DirectoryInfo di2 = new DirectoryInfo(path2); DirectoryInfo di2 = new DirectoryInfo(path2);
@@ -1072,16 +1103,34 @@ namespace Baseline
// Text - the line of text // Text - the line of text
public partial class Procedure public partial class Procedure
{ {
public string Number { get; set; } private string _Number;
public string Title { get; set; } public string Number
public Pages MyPages { get; set; } = new Pages();
public Procedure(string number, string title)
{ {
Number = number; get { return _Number; }
Title = title; set { _Number = value; }
} }
public override string ToString() => string.Format("{0} - {1}", Number, Title); private string _Title;
} public string Title
{
get { return _Title; }
set { _Title = value; }
}
private Pages _MyPages = new Pages();
public Pages MyPages
{
get { return _MyPages; }
set { _MyPages = value; }
}
public Procedure(string number, string title)
{
_Number = number;
_Title = title;
}
public override string ToString()
{
return string.Format("{0} - {1}", Number, Title);
}
}
public partial class Procedures : List<Procedure> public partial class Procedures : List<Procedure>
{ {
// Sample data for a Procedure Number line // Sample data for a Procedure Number line
@@ -1112,34 +1161,77 @@ namespace Baseline
} }
public partial class Page public partial class Page
{ {
public int Number { get; set; } private int _Number;
public int Number
{
get { return _Number; }
set { _Number = value; }
}
private Lines _MyLines = new Lines();
public Lines MyLines { get; set; } = new Lines(); public Lines MyLines
public Page(int number) => Number = number; {
public override string ToString() => string.Format("Page {0}", Number); get { return _MyLines; }
} set { _MyLines = value; }
}
public Page(int number)
{
_Number = number;
}
public override string ToString()
{
return string.Format("Page {0}", Number);
}
}
public partial class Pages : List<Page> public partial class Pages : List<Page>
{ {
public void Add(int number) => Add(new Page(number)); public void Add(int number)
} {
Add(new Page(number));
}
}
public partial class Line public partial class Line
{ {
public Procedure MyProc { get; set; } private Procedure _MyProc;
public Page MyPage { get; set; } public Procedure MyProc
public string Text { get; set; }
public Line(string text) => Text = text;
public Line(string text, Procedure myProc, Page myPage)
{ {
Text = text; get { return _MyProc; }
MyProc = myProc; set { _MyProc = value; }
MyPage = myPage;
} }
public override string ToString() => Text; private Page _MyPage;
} public Page MyPage
{
get { return _MyPage; }
set { _MyPage = value; }
}
private string _Text;
public string Text
{
get { return _Text; }
set { _Text = value; }
}
public Line(string text)
{
_Text = text;
}
public Line(string text, Procedure myProc, Page myPage)
{
_Text = text;
_MyProc = myProc;
_MyPage = myPage;
}
public override string ToString()
{
return Text;
}
}
public partial class Lines : List<Line> public partial class Lines : List<Line>
{ {
public void Add(string text) => Add(new Line(text)); public void Add(string text)
} {
Add(new Line(text));
}
}
[Serializable] [Serializable]
public partial class IgnoreLine public partial class IgnoreLine
{ {
@@ -1177,12 +1269,21 @@ namespace Baseline
public IgnoreLines() public IgnoreLines()
{ {
} }
public void Add(string text, Relation searchType, bool active) => Add(new IgnoreLine(text, searchType, active)); public void Add(string text, Relation searchType, bool active)
// Convert IgnoreLines to string (XML) {
public override string ToString() => GenericSerializer<IgnoreLines>.StringSerialize(this); Add(new IgnoreLine(text, searchType, active));
// Convert string to IgnoreLines }
public static IgnoreLines Get(string xml) => GenericSerializer<IgnoreLines>.StringDeserialize(xml); // Convert IgnoreLines to string (XML)
} public override string ToString()
{
return GenericSerializer<IgnoreLines>.StringSerialize(this);
}
// Convert string to IgnoreLines
public static IgnoreLines Get(string xml)
{
return GenericSerializer<IgnoreLines>.StringDeserialize(xml);
}
}
/// <summary> /// <summary>
/// This is a simple serializer that takes a class and converts it to and from string (XML) /// This is a simple serializer that takes a class and converts it to and from string (XML)
/// </summary> /// </summary>
@@ -1210,7 +1311,7 @@ namespace Baseline
string ss = s.Replace("encoding=\"utf-16\"", ""); string ss = s.Replace("encoding=\"utf-16\"", "");
XmlSerializer xs = new XmlSerializer(typeof(T)); XmlSerializer xs = new XmlSerializer(typeof(T));
UTF8Encoding enc = new UTF8Encoding(); UTF8Encoding enc = new UTF8Encoding();
byte[] arrBytData = enc.GetBytes(ss); Byte[] arrBytData = enc.GetBytes(ss);
using (MemoryStream ms = new MemoryStream(arrBytData)) using (MemoryStream ms = new MemoryStream(arrBytData))
{ {
t = (T)xs.Deserialize(ms); t = (T)xs.Deserialize(ms);
@@ -1224,9 +1325,12 @@ namespace Baseline
public class NonXsiTextWriter : XmlTextWriter public class NonXsiTextWriter : XmlTextWriter
{ {
public NonXsiTextWriter(TextWriter w) : base(w) { } public NonXsiTextWriter(TextWriter w) : base(w) { }
public NonXsiTextWriter(Stream w, Encoding encoding) public NonXsiTextWriter(Stream w, Encoding encoding)
: base(w, encoding) => Formatting = Formatting.Indented; : base(w, encoding)
public NonXsiTextWriter(string filename, Encoding encoding) : base(filename, encoding) { } {
this.Formatting = Formatting.Indented;
}
public NonXsiTextWriter(string filename, Encoding encoding) : base(filename, encoding) { }
bool _skip = false; bool _skip = false;
public override void WriteStartAttribute(string prefix, string localName, string ns) public override void WriteStartAttribute(string prefix, string localName, string ns)
{ {
@@ -1268,16 +1372,32 @@ namespace Baseline
public const short SWP_NOZORDER = 0X4; public const short SWP_NOZORDER = 0X4;
public const int SWP_SHOWWINDOW = 0x0040; public const int SWP_SHOWWINDOW = 0x0040;
public System.Diagnostics.Process Process { get; set; } private System.Diagnostics.Process _Process;
public int X { get; set; }
public int Y { get; set; } public System.Diagnostics.Process Process
public ProcessLocation(System.Diagnostics.Process process, int x, int y) {
get { return _Process; }
set { _Process = value; }
}
private int _X;
public int X
{
get { return _X; }
set { _X = value; }
}
private int _Y;
public int Y
{
get { return _Y; }
set { _Y = value; }
}
public ProcessLocation(System.Diagnostics.Process process, int x, int y)
{ {
Process = process; Process = process;
X = x; X = x;
Y = y; Y = y;
} }
private static bool FoxitSettingInfo = true; private static Boolean FoxitSettingInfo = true;
/// <summary> /// <summary>
/// MoveIt() moves the window containing the PDF viewer to the right so the two pdf viewer windows will not overlap. /// MoveIt() moves the window containing the PDF viewer to the right so the two pdf viewer windows will not overlap.
@@ -1298,8 +1418,11 @@ namespace Baseline
} }
public class ProcessLocationQueue: Queue<ProcessLocation> public class ProcessLocationQueue: Queue<ProcessLocation>
{ {
public void Add(System.Diagnostics.Process process, int x, int y) => Enqueue(new ProcessLocation(process, x, y)); public void Add(System.Diagnostics.Process process, int x, int y)
public void ProcessNext() {
Enqueue(new ProcessLocation(process,x,y));
}
public void ProcessNext()
{ {
ProcessLocation pl = Dequeue(); ProcessLocation pl = Dequeue();
pl.MoveIt(); pl.MoveIt();
+26 -6
View File
@@ -1,4 +1,11 @@
using System; using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
namespace Baseline namespace Baseline
@@ -12,7 +19,17 @@ namespace Baseline
set { set {
_MyIgnore = value; _MyIgnore = value;
dgv.DataSource=null; dgv.DataSource=null;
//dgvcSearchType.ValueType = typeof(Relation);
//dgvcSearchType.ValueMember = "Value";
//dgvcSearchType.DisplayMember = "Display";
//dgvcSearchType.DataSource = new Relation[] { Relation.Contains, Relation.StartsWith, Relation.EndsWith, Relation.Regex }
//.Select(x => new { Display = x.ToString(), Value = x })
//.ToList();
dgv.DataSource=value; dgv.DataSource=value;
//dgvcSearchType.DataSource =
//new List<Relation>((Relation[]) Enum.GetValues(typeof(Relation)))
//.Select(x => new { Display=x.ToString(), Value=(int)x })
//.ToList();;
} }
} }
public frmSettings(IgnoreLines myIgnore) public frmSettings(IgnoreLines myIgnore)
@@ -29,16 +46,19 @@ namespace Baseline
col.ValueType = typeof(Relation); col.ValueType = typeof(Relation);
} }
private void dgv_DataError(object sender, DataGridViewDataErrorEventArgs e) => Console.WriteLine("Here"); private void dgv_DataError(object sender, DataGridViewDataErrorEventArgs e)
private void btnOK_Click(object sender, EventArgs e)
{ {
DialogResult = System.Windows.Forms.DialogResult.OK; Console.WriteLine("Here");
Close(); }
private void btnOK_Click(object sender, EventArgs e)
{
this.DialogResult = System.Windows.Forms.DialogResult.OK;
this.Close();
} }
private void btnCancel_Click(object sender, EventArgs e) private void btnCancel_Click(object sender, EventArgs e)
{ {
DialogResult = System.Windows.Forms.DialogResult.Cancel; this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
Close(); this.Close();
} }
} }
} }
-1
View File
@@ -179,7 +179,6 @@
<Content Include="fmtall\CPL_00all.xml" /> <Content Include="fmtall\CPL_00all.xml" />
<Content Include="fmtall\CPL_01all.xml" /> <Content Include="fmtall\CPL_01all.xml" />
<Content Include="fmtall\CPL_02all.xml" /> <Content Include="fmtall\CPL_02all.xml" />
<Content Include="fmtall\CPL_04all.xml" />
<Content Include="fmtall\CPL_03all.xml" /> <Content Include="fmtall\CPL_03all.xml" />
<Content Include="fmtall\CPSAMGDataall.xml" /> <Content Include="fmtall\CPSAMGDataall.xml" />
<Content Include="fmtall\CPSAMGDEVall.xml" /> <Content Include="fmtall\CPSAMGDEVall.xml" />
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.
@@ -116,12 +116,12 @@ namespace ROEditor
public uint thisoff; public uint thisoff;
public string title; public string title;
public FstTmpSTRC(ushort type, uint offset, string tl) public FstTmpSTRC(ushort type, uint offset, string tl)
{ {
thistype = type; thistype = type;
thisoff = offset; thisoff = offset;
title = tl; title = tl;
} }
void WriteString(BinaryWriter bw, string str) void WriteString(BinaryWriter bw, string str)
{ {
@@ -150,7 +150,7 @@ namespace ROEditor
bw.Write(thisoff); bw.Write(thisoff);
bw.Write(thistype); bw.Write(thistype);
WriteString(bw,title); WriteString(bw,title);
} }
} }
// The Sorted Array was not sorting via the ASCII value of each character in a given string. // The Sorted Array was not sorting via the ASCII value of each character in a given string.
@@ -565,8 +565,8 @@ namespace ROEditor
string RecIdStr = elem.GetAttribute("RecID"); string RecIdStr = elem.GetAttribute("RecID");
curRecID = System.Convert.ToUInt32(RecIdStr,16); curRecID = System.Convert.ToUInt32(RecIdStr,16);
// Get the current node's parent id // Get the current node's parent id
string ParIdStr = elem.GetAttribute("ParentID"); string ParIdStr = elem.GetAttribute("ParentID");
elemParentID = Convert.ToUInt32(ParIdStr,16); elemParentID = Convert.ToUInt32(ParIdStr,16);
string HasKids = elem.GetAttribute("HasChild"); string HasKids = elem.GetAttribute("HasChild");
@@ -771,8 +771,8 @@ namespace ROEditor
private ushort SaveROToFST(XmlNode RONode,ArrayList InUseList,string RtnValTmplate, string AccPageIDTplate) private ushort SaveROToFST(XmlNode RONode,ArrayList InUseList,string RtnValTmplate, string AccPageIDTplate)
{ {
ushort RtnVal; ushort RtnVal;
uint startFST = (uint)fhFST.BaseStream.Position; uint startFST = (uint)fhFST.BaseStream.Position;
uint RORecID; uint RORecID;
uint ParID; uint ParID;
byte nullbyte=0; byte nullbyte=0;
@@ -844,12 +844,8 @@ namespace ROEditor
AccPageID = " "; AccPageID = " ";
WriteString(AccPageID); WriteString(AccPageID);
//C2026-008 Re-Architect RO.FST to include RO Modification date/time // Save the ID and offset entry for the current ID
string moddt = ROdatabase.RODB_GetModDateTime(elem.GetAttribute("RecID"), elem.GetAttribute("Table")); IdsAndOffsets.Add(RORecID,startFST);
if (!string.IsNullOrEmpty(moddt)) WriteString(moddt);
// Save the ID and offset entry for the current ID
IdsAndOffsets.Add(RORecID, startFST);
// Save the RecID and Accessory Page id // Save the RecID and Accessory Page id
IdsAndAccPgIds[AccPageID] = RORecID; IdsAndAccPgIds[AccPageID] = RORecID;
@@ -322,9 +322,9 @@ namespace RODBInterface
get { return _PCChildList; } get { return _PCChildList; }
set { _PCChildList = value; } set { _PCChildList = value; }
} }
#endregion #endregion
#region abstracts // need these for each method that must be defined for each database type #region abstracts // need these for each method that must be defined for each database type
public abstract string RODB_GetNextGroupTable(); public abstract string RODB_GetNextGroupTable();
public abstract string RODB_GetNextRecId(string table); public abstract string RODB_GetNextRecId(string table);
public abstract bool RODB_GetRootGroups(VlnXmlElement root); public abstract bool RODB_GetRootGroups(VlnXmlElement root);
public abstract bool RODB_DeleteGroup(XmlNode group, string tbname, string toprecid); public abstract bool RODB_DeleteGroup(XmlNode group, string tbname, string toprecid);
@@ -355,10 +355,9 @@ namespace RODBInterface
public abstract string RODB_GetDBServerForAbout(); public abstract string RODB_GetDBServerForAbout();
public abstract string RODB_HasBeenConverted(); public abstract string RODB_HasBeenConverted();
public abstract bool RODB_WriteSqlConnectToAccess(string newConectStr); public abstract bool RODB_WriteSqlConnectToAccess(string newConectStr);
public abstract string RODB_GetModDateTime(string Recid, string table); #endregion
#endregion
public RODB() public RODB()
{ {
} }
@@ -2383,9 +2382,9 @@ namespace RODBInterface
RecID = DBE.GetString(0); RecID = DBE.GetString(0);
MyRecID = RecID; MyRecID = RecID;
Info = DBE.GetString(1); Info = DBE.GetString(1);
// it's defined in the local table if the first character is "<" which starts // it's defined in the local table if the first character is "<" which starts
// the schema definition string. // the schema definition string.
if ("<" == Info.Substring(0, 1)) if ("<" == Info.Substring(0, 1))
{ {
name = ParseEleName(Info); name = ParseEleName(Info);
if (name != null) if (name != null)
@@ -2426,7 +2425,7 @@ namespace RODBInterface
return retlist; return retlist;
} }
public override string RODB_GetSchemaPiece(string Recid, string table) public override string RODB_GetSchemaPiece(string Recid, string table)
{ {
string strGetSchemaPiece; string strGetSchemaPiece;
string Info; string Info;
@@ -3083,28 +3082,7 @@ namespace RODBInterface
return GrpCnt; return GrpCnt;
} }
//C2026-008 Re-Architect RO.FST to include RO Modification date/time }
//Get the Modification Date / Time for the RO
public override string RODB_GetModDateTime(string Recid, string table)
{
using (System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection(strDatabaseConnectionCommand))
{
connection.Open();
using (System.Data.OleDb.OleDbCommand command = connection.CreateCommand())
{
//Unfortunately Access wont let you paramaterize the table name
command.CommandText = $"SELECT ModDateTime FROM {Regex.Replace(table, "[^a-zA-Z0-9]", "")} WHERE RecID = @Value";
command.Parameters.Add(new System.Data.OleDb.OleDbParameter
{
OleDbType = System.Data.OleDb.OleDbType.VarChar,
ParameterName = "@Value",
Value = Recid
});
return command.ExecuteScalar().ToString();
}
}
}
}
} }
@@ -1803,9 +1803,9 @@ namespace RODBInterface
RecID = reader.GetString(0); RecID = reader.GetString(0);
MyRecID = RecID; MyRecID = RecID;
Info = reader.GetString(1); Info = reader.GetString(1);
// it's defined in the local table if the first character is "<" which starts // it's defined in the local table if the first character is "<" which starts
// the schema definition string. // the schema definition string.
if ("<" == Info.Substring(0, 1)) if ("<" == Info.Substring(0, 1))
{ {
name = ParseEleName(Info); name = ParseEleName(Info);
if (name != null) if (name != null)
@@ -1859,9 +1859,9 @@ namespace RODBInterface
RecID = reader.GetString(0); RecID = reader.GetString(0);
MyRecID = RecID; MyRecID = RecID;
Info = reader.GetString(1); Info = reader.GetString(1);
// it's defined in the local table if the first character is "<" which starts // it's defined in the local table if the first character is "<" which starts
// the schema definition string. // the schema definition string.
if ("<" == Info.Substring(0, 1)) if ("<" == Info.Substring(0, 1))
{ {
name = ParseEleName(Info); name = ParseEleName(Info);
if (name != null) if (name != null)
@@ -2653,36 +2653,8 @@ namespace RODBInterface
} }
return GrpCnt; return GrpCnt;
} }
#endregion
//C2026-008 Re-Architect RO.FST to include RO Modification date/time public static bool TestConnect(string constring)
//Get the Modification Date / Time for the RO
public override string RODB_GetModDateTime(string Recid, string table)
{
using (SqlConnection connection = new SqlConnection(strDatabaseConnectionCommand))
{
connection.Open();
using (SqlCommand command = connection.CreateCommand())
{
command.CommandText = $"SELECT ModDateTime FROM ROALL WHERE RecID = @Value AND ROTable = @table";
command.Parameters.Add(new SqlParameter
{
SqlDbType = SqlDbType.VarChar,
ParameterName = "@Value",
Value = Recid
});
command.Parameters.Add(new SqlParameter
{
SqlDbType = SqlDbType.VarChar,
ParameterName = "@table",
Value = table
});
return command.ExecuteScalar().ToString();
}
}
}
#endregion
public static bool TestConnect(string constring)
{ {
bool success = false; bool success = false;
using (SqlConnection connection = new SqlConnection(constring)) using (SqlConnection connection = new SqlConnection(constring))
+1 -1
View File
@@ -1817,7 +1817,7 @@ ALTER trigger [dbo].[tr_Contents_Delete] on [dbo].[Contents] instead of delete a
select ii.ContentID,ii.Number,ii.Text,ii.Type,ii.FormatID,ii.Config,ii.DTS,ii.UserID,ii.DeleteStatus,ii.ActionDTS select ii.ContentID,ii.Number,ii.Text,ii.Type,ii.FormatID,ii.Config,ii.DTS,ii.UserID,ii.DeleteStatus,ii.ActionDTS
from tblContents ii inner join deleted dd on dd.ContentID = ii.ContentID from tblContents ii inner join deleted dd on dd.ContentID = ii.ContentID
where ii.DeleteStatus > 0 where ii.DeleteStatus > 0
update ga set ga.contentauditid = (select ISNULL(max(auditid),0) from contentaudits where contentid = ga.contentid and deletestatus = ga.deletestatus) update ga set ga.contentauditid = (select max(auditid) from contentaudits where contentid = ga.contentid and deletestatus = ga.deletestatus)
from gridaudits ga join deleted dd on ga.contentid = dd.contentid where ga.contentauditid = 0 from gridaudits ga join deleted dd on ga.contentid = dd.contentid where ga.contentauditid = 0
end end
go go
+45 -303
View File
@@ -5227,7 +5227,7 @@ CREATE PROCEDURE [dbo].[getRevisionByItemIDandRevisionNumberAndUnitID]
WITH EXECUTE AS OWNER WITH EXECUTE AS OWNER
AS AS
declare @RevisionID int declare @RevisionID int
set @RevisionID = (select top 1 revisionid from revisions rr cross apply rr.config.nodes('//Applicability') t1(r1) where itemid = @itemid and revisionnumber = @RevisionNumber and r1.value('@Index','int') = @UnitID order by revisionid desc) set @RevisionID = (select revisionid from revisions rr cross apply rr.config.nodes('//Applicability') t1(r1) where itemid = @itemid and revisionnumber = @RevisionNumber and r1.value('@Index','int') = @UnitID)
SELECT SELECT
[RevisionID], [RevisionID],
[ItemID], [ItemID],
@@ -5547,12 +5547,6 @@ ELSE PRINT 'Function: ve_GetItemDerivedApplicability Error on Creation'
GO GO
------- -------
-- =============================================
-- Author: Matthew Schill
-- Modify date: 07/14/2026
-- Description: Reworked ve_GetParentItem for Performance improvement
-- =============================================
/****** Object: UserDefinedFunction [dbo].[vefn_GetParentItem] Script Date: 03/28/2012 17:58:48 ******/ /****** Object: UserDefinedFunction [dbo].[vefn_GetParentItem] Script Date: 03/28/2012 17:58:48 ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[ve_GetParentItem]') AND OBJECTPROPERTY(id,N'IsScalarFunction') = 1) IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[ve_GetParentItem]') AND OBJECTPROPERTY(id,N'IsScalarFunction') = 1)
DROP FUNCTION [ve_GetParentItem]; DROP FUNCTION [ve_GetParentItem];
@@ -5561,46 +5555,35 @@ GO
Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
Copyright 2012 - Volian Enterprises, Inc. All rights reserved. Copyright 2012 - Volian Enterprises, Inc. All rights reserved.
*****************************************************************************/ *****************************************************************************/
CREATE OR ALTER FUNCTION [dbo].[ve_GetParentItem] (@ItemID int) RETURNS int CREATE FUNCTION [dbo].[ve_GetParentItem] (@ItemID int) RETURNS int
WITH EXECUTE AS OWNER WITH EXECUTE AS OWNER
AS AS
BEGIN BEGIN
DECLARE @ParentID int; DECLARE @ParentID int;
WITH Itemz([ItemID]) as WITH Itemz([ItemID],[IsFound]) as
( (
select ii.itemid from items ii WITH (NOLOCK) where ii.itemid = @ItemID select ii.itemid,0 from items ii where ii.itemid = @ItemID
union all union all
select ii.previousid from items ii WITH (NOLOCK) select ii.previousid,0 from items ii
join itemz zz on ii.itemid = zz.itemid join itemz zz on ii.itemid = zz.itemid
where ii.previousid is not null where ii.previousid is not null
and zz.isfound = 0
union all
select ii.itemid,1
from parts pp
join itemz zz on pp.itemid = zz.itemid
join items ii on ii.contentid = pp.contentid
) )
select top 1 @ParentID = ii.itemid select top 1 @ParentID = itemid from itemz
from itemz where isfound = 1 OPTION (MAXRECURSION 10000)
inner join parts pp WITH (NOLOCK) on pp.itemid = itemz.itemid
inner join items ii WITH (NOLOCK) on ii.contentid = pp.contentid
OPTION (MAXRECURSION 10000)
RETURN @ParentID RETURN @ParentID
END END
GO GO
IF (@@Error = 0) PRINT 'ScalerFunction [vefn_GetParentItem] Succeeded' IF (@@Error = 0) PRINT 'ScalerFunction [vefn_GetParentItem] Succeeded'
ELSE PRINT 'ScalerFunction [vefn_GetParentItem] Error on Creation' ELSE PRINT 'ScalerFunction [vefn_GetParentItem] Error on Creation'
go go
IF EXISTS (SELECT * FROM dbo.sysIndexes WHERE name like 'IX_PartsItemID')
DROP INDEX [IX_PartsItemID] ON [dbo].[tblParts];
GO
CREATE NONCLUSTERED INDEX IX_PartsItemID
ON [dbo].[tblParts] ([ItemID] ASC)
INCLUDE([ContentID],[DeleteStatus],[FromType]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
PRINT 'Added IX_PartsItemID Index. Speeds up Getting Parent Items'
GO
/****** Object: UserDefinedFunction [dbo].[vefn_CanTransitionBeCreated] Script Date: 10/14/2012 02:03:30 ******/ /****** Object: UserDefinedFunction [dbo].[vefn_CanTransitionBeCreated] Script Date: 10/14/2012 02:03:30 ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[vefn_CanTransitionBeCreated]') AND OBJECTPROPERTY(id,N'IsScalarFunction') = 1) IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[vefn_CanTransitionBeCreated]') AND OBJECTPROPERTY(id,N'IsScalarFunction') = 1)
DROP FUNCTION [vefn_CanTransitionBeCreated]; DROP FUNCTION [vefn_CanTransitionBeCreated];
@@ -13558,6 +13541,34 @@ IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[deleteAllDocVers
DROP PROCEDURE [deleteAllDocVersionPdfs]; DROP PROCEDURE [deleteAllDocVersionPdfs];
GO GO
/*****************************************************************************
Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
Copyright 2017 - Volian Enterprises, Inc. All rights reserved.
*****************************************************************************/
CREATE PROCEDURE [dbo].[deleteAllDocVersionPdfs]
(
@VersionID int
)
WITH EXECUTE AS OWNER
AS
BEGIN TRY -- Try Block
BEGIN TRANSACTION
DELETE [Pdfs]
WHERE [DocID] IN(select EE.DocID from vefn_GetVersionItems(cast(@VersionID as varchar(20))) VI
Join Entries EE ON EE.ContentID= VI.ContentID)
IF( @@TRANCOUNT > 0 ) COMMIT
END TRY
BEGIN CATCH -- Catch Block
IF( @@TRANCOUNT = 1 ) ROLLBACK -- Only rollback if top level
ELSE IF( @@TRANCOUNT > 1 ) COMMIT -- Otherwise commit. Top level will rollback
EXEC vlnErrorHandler
END CATCH
GO
-- Display the status of Proc creation
IF (@@Error = 0) PRINT 'Procedure Creation: deleteAllDocVersionPdfs Succeeded'
ELSE PRINT 'Procedure Creation: deleteAllDocVersionPdfs Error on Creation'
GO
/****** Object: StoredProcedure [addFiguresByROFstIDandImageIDs] ******/ /****** Object: StoredProcedure [addFiguresByROFstIDandImageIDs] ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[addFiguresByROFstIDandImageIDs]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[addFiguresByROFstIDandImageIDs]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE [addFiguresByROFstIDandImageIDs]; DROP PROCEDURE [addFiguresByROFstIDandImageIDs];
@@ -17158,7 +17169,6 @@ GO
[roid] [varchar](50) NOT NULL, [roid] [varchar](50) NOT NULL,
[appid] [varchar](max) NULL, [appid] [varchar](max) NULL,
[value] [varchar](max) NULL, [value] [varchar](max) NULL,
[moddatetime] [datetime] NULL,
CONSTRAINT [PK_RofstChild] PRIMARY KEY CLUSTERED CONSTRAINT [PK_RofstChild] PRIMARY KEY CLUSTERED
( (
[RofstChildID] ASC [RofstChildID] ASC
@@ -17293,23 +17303,6 @@ GO
End -- Rofst Tables End -- Rofst Tables
Go Go
-- =============================================
-- Author: Matthew Schill
-- Create date: 03/30/2026
-- Description: Store RO Modification date/time
-- =============================================
--- Add Column to store RO Modification date/time if it does not already exist
IF NOT EXISTS(SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'RofstChild'
AND COLUMN_NAME = 'moddatetime')
ALTER TABLE RofstChild ADD moddatetime datetime NULL;
go
-- Display the status
IF (@@Error = 0) PRINT 'Altered table [RofstChild] Succeeded for moddatetime'
ELSE PRINT 'Altered table [RofstChild] Error on Alter for moddatetime'
go
/* /*
---------------------------------------------------------------------------------- ----------------------------------------------------------------------------------
@@ -19712,7 +19705,6 @@ GO
@roid VarChar(50), @roid VarChar(50),
@appid VarChar(Max) = null, @appid VarChar(Max) = null,
@value VarChar(Max) = null, @value VarChar(Max) = null,
@ModDateTime DateTime = null,
@missingDefaultValue VarChar(Max) = null @missingDefaultValue VarChar(Max) = null
) )
With Execute as Owner With Execute as Owner
@@ -19730,8 +19722,8 @@ GO
Set @missingDefaultValue = '[TBD]'; Set @missingDefaultValue = '[TBD]';
-- Create Rofst Child/Group Record --> [Roid = (12) Digits] -- Create Rofst Child/Group Record --> [Roid = (12) Digits]
Insert Into RofstChild (RofstID, ID, ParentID, dbiID, [type], title, roid, appid, moddatetime, [value]) Insert Into RofstChild (RofstID, ID, ParentID, dbiID, [type], title, roid, appid, [value])
Values (@RofstID, @ID, @ParentID, @dbiID, @type, @title, @roid, @appid, @ModDateTime, REPLACE(REPLACE(@value, '&123;', '{'), '&125;', '}')); Values (@RofstID, @ID, @ParentID, @dbiID, @type, @title, @roid, @appid, REPLACE(REPLACE(@value, '&123;', '{'), '&125;', '}'));
-- Check for appid, if exists, then insert the default value for each return type if multi-value -- Check for appid, if exists, then insert the default value for each return type if multi-value
@@ -24785,256 +24777,6 @@ IF (@@Error = 0) PRINT 'Procedure Creation: [GetMissingDocsByUnit] Succeeded'
ELSE PRINT 'Procedure Creation: [GetMissingDocsByUnit] Error on Creation' ELSE PRINT 'Procedure Creation: [GetMissingDocsByUnit] Error on Creation'
GO GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[vefn_ROFST_changes]') AND OBJECTPROPERTY(id,N'IsTableFunction') = 1)
DROP FUNCTION [vefn_ROFST_changes];
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
==========================================================================================================
Author: Matthew Schill
Create Date: 03/31/2026
Description: Function for ROs that updated in latest RO FST Load
==========================================================================================================
*/
CREATE FUNCTION [dbo].[vefn_ROFST_changes](@OrigFSTID int, @NewFSTid int, @VersionID int)
RETURNS @ROIDs TABLE
(
[roid] varchar(50)
)
WITH EXECUTE AS OWNER
AS
BEGIN
insert into @ROIDs
SELECT DISTINCT ISNULL(RofstChild.roid,previous.roid)
FROM
(SELECT * FROM RofstChild where RofstChild.RofstID = @NewFSTid) RofstChild
FULL OUTER JOIN
(SELECT * FROM RofstChild previous where previous.RofstID = @OrigFSTID) previous
ON previous.dbiID = RofstChild.dbiID AND previous.ID = RofstChild.ID
where
ISNULL(previous.RofstID,'') != ISNULL(RofstChild.RofstID,'')
AND
(
(RofstChild.RofstID = @NewFSTid OR RofstChild.RofstID IS NULL)
AND
(previous.RofstID = @OrigFSTID OR previous.RofstID IS NULL)
)
AND
(previous.moddatetime IS NULL
OR RofstChild.moddatetime IS NULL
OR RofstChild.moddatetime != previous.moddatetime
OR RofstChild.title != previous.title
OR RofstChild.value != previous.value
)
RETURN
END
go
IF (@@Error = 0) PRINT 'TableFunction [vefn_ROFST_changes] Succeeded'
ELSE PRINT 'TableFunction [vefn_ROFST_changes] Error on Creation'
go
/****** Object: StoredProcedure [deleteDocVersionPdfsWithNewROs] ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[deleteDocVersionPdfsWithNewROs]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE [deleteDocVersionPdfsWithNewROs];
GO
/*
==========================================================================================================
Author: Matthew Schill
Create Date: 03/31/2026
Description: Delete all PDFs with ROs that will need re-resolved
==========================================================================================================
*/
CREATE PROCEDURE [dbo].[deleteDocVersionPdfsWithNewROs]
(
@VersionID int,
@OrigFSTid int,
@NewFSTid int
)
WITH EXECUTE AS OWNER
AS
BEGIN
DELETE [Pdfs]
WHERE [DocID] IN
(
select EE.DocID from vefn_GetVersionItems(cast(@VersionID as varchar(20))) VI
Join Entries EE ON EE.ContentID= VI.ContentID
Join DRoUsages ON DRoUsages.DocID = EE.DocID
Join dbo.vefn_ROFST_changes(@OrigFSTID, @NewFSTid, @VersionID) ROFST_changes on LEFT(DRoUsages.ROID,12) = ROFST_changes.roid
)
RETURN
END
GO
-- Display the status of Proc creation
IF (@@Error = 0) PRINT 'Procedure Creation: deleteDocVersionPdfsWithNewROs Succeeded'
ELSE PRINT 'Procedure Creation: deleteDocVersionPdfsWithNewROs Error on Creation'
GO
/****** Object: StoredProcedure [getItemsWithNewROs] ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[getItemsWithNewROs]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE [getItemsWithNewROs];
GO
/*
==========================================================================================================
Author: Matthew Schill
Create Date: 03/31/2026
Description: Get Items with New ROs that will need resolved
==========================================================================================================
*/
CREATE PROCEDURE [dbo].[getItemsWithNewROs]
(
@VersionID int,
@OrigFSTid int,
@NewFSTid int
)
WITH EXECUTE AS OWNER
AS
BEGIN
select DISTINCT tblItems.ItemID FROM
dbo.vefn_ROFST_changes(@OrigFSTID, @NewFSTid, @VersionID) ROFST_changes
INNER JOIN RoUsages ON LEFT(RoUsages.ROID,12) = ROFST_changes.roid
INNER JOIN tblItems ON RoUsages.ContentID = tblItems.ContentID
OUTER APPLY (Select VersionID = dbo.vefn_GetVersionIDByItemID(tblItems.ItemID)) ver
INNER JOIN DocVersions DV ON DV.VersionID = ver.VersionID
INNER JOIN Associations ON Associations.VersionID = DV.VersionID
where ver.VersionID = @VersionID
RETURN
END
GO
-- Display the status of Proc creation
IF (@@Error = 0) PRINT 'Procedure Creation: getItemsWithNewROs Succeeded'
ELSE PRINT 'Procedure Creation: getItemsWithNewROs Error on Creation'
GO
/****** Object: StoredProcedure [dbo].[getRevisionByItemIDandRevisionNumber] ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[getRevisionByItemIDandRevisionNumber]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[getRevisionByItemIDandRevisionNumber];
GO
/*****************************************************************************
Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
Copyright 2012 - Volian Enterprises, Inc. All rights reserved.
*****************************************************************************/
CREATE PROCEDURE [dbo].[getRevisionByItemIDandRevisionNumber]
(
@ItemID int,
@RevisionNumber nvarchar(50)
)
WITH EXECUTE AS OWNER
AS
declare @RevisionID int
set @RevisionID = (select top 1 revisionid from revisions where itemid = @itemid and revisionnumber = @RevisionNumber order by revisionid desc)
SELECT
[RevisionID],
[ItemID],
[TypeID],
[RevisionNumber],
[RevisionDate],
[Notes],
[Config],
[DTS],
[UserID],
[LastChanged],
(SELECT COUNT(*) FROM [Checks] WHERE [Checks].[RevisionID]=[Revisions].[RevisionID]) [CheckCount],
(SELECT COUNT(*) FROM [Versions] WHERE [Versions].[RevisionID]=[Revisions].[RevisionID]) [VersionCount]
FROM [Revisions]
WHERE [RevisionID]=@RevisionID
SELECT
[Checks].[CheckID],
[Checks].[RevisionID],
[Checks].[StageID],
[Checks].[ConsistencyChecks],
[Checks].[DTS],
[Checks].[UserID],
[Checks].[LastChanged],
[Stages].[Name] [Stage_Name],
[Stages].[Description] [Stage_Description],
[Stages].[IsApproved] [Stage_IsApproved],
[Stages].[DTS] [Stage_DTS],
[Stages].[UserID] [Stage_UserID]
FROM [Checks]
JOIN [Stages] ON
[Stages].[StageID]=[Checks].[StageID]
WHERE
[Checks].[RevisionID]=@RevisionID
SELECT
[Versions].[VersionID],
[Versions].[RevisionID],
[Versions].[StageID],
[Versions].[DTS],
[Versions].[UserID],
[Versions].[LastChanged],
[Versions].[PDF],
[Versions].[SummaryPDF],
[Stages].[Name] [Stage_Name],
[Stages].[Description] [Stage_Description],
[Stages].[IsApproved] [Stage_IsApproved],
[Stages].[DTS] [Stage_DTS],
[Stages].[UserID] [Stage_UserID]
FROM [Versions]
JOIN [Stages] ON
[Stages].[StageID]=[Versions].[StageID]
WHERE
[Versions].[RevisionID]=@RevisionID
RETURN
-- Display the status of Proc creation
IF (@@Error = 0) PRINT 'Procedure Creation: getRevisionByItemIDandRevisionNumber Succeeded'
ELSE PRINT 'Procedure Creation: getRevisionByItemIDandRevisionNumber Error on Creation'
GO
/*
==========================================================================================================
Author: Matthew Schill
Create Date: 06/29/2026
Description: Added an ISNULL check when setting GridAudits.contentauditid.
Was Causing Deletion of some Grids to fail.
==========================================================================================================
*/
/****** Object: Trigger [tr_Contents_Delete] ******/
ALTER trigger [dbo].[tr_Contents_Delete] on [dbo].[Contents] instead of delete as
begin
update ii set DeleteStatus = (select max(DeleteID) from DeleteLog where SPID = @@spid), ActionDTS = getdate(),
UserID = (select top 1 UserID from DeleteLog where SPID = @@spid order by deleteid desc)
from tblContents ii inner join deleted dd on dd.ContentID = ii.ContentID
insert into ContentAudits(ContentID,Number,Text,Type,FormatID,Config,DTS,UserID,DeleteStatus,ActionDTS)
select ii.ContentID,ii.Number,ii.Text,ii.Type,ii.FormatID,ii.Config,ii.DTS,ii.UserID,ii.DeleteStatus,ii.ActionDTS
from tblContents ii inner join deleted dd on dd.ContentID = ii.ContentID
where ii.DeleteStatus > 0
update ga set ga.contentauditid = (select ISNULL(max(auditid),0) from contentaudits where contentid = ga.contentid and deletestatus = ga.deletestatus)
from gridaudits ga join deleted dd on ga.contentid = dd.contentid where ga.contentauditid = 0
end
go
-- Display the status of Trigger alter
IF (@@Error = 0) PRINT 'Trigger Alteration: tr_Contents_Delete Succeeded'
ELSE PRINT 'Trigger Alteration: tr_Contents_Delete Error on Creation'
GO
/* /*
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
| ADD New Code Before this Block | | ADD New Code Before this Block |
@@ -25068,8 +24810,8 @@ BEGIN TRY -- Try Block
DECLARE @RevDate varchar(255) DECLARE @RevDate varchar(255)
DECLARE @RevDescription varchar(255) DECLARE @RevDescription varchar(255)
set @RevDate = '07/16/2026 8:30 AM' set @RevDate = '03/13/2026 7:00 AM'
set @RevDescription = 'Reworked ve_GetParentItem for Performance improvement' set @RevDescription = 'Added Get Missing Docs by Unit for Generating Pdf table'
Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription
PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription
File diff suppressed because it is too large Load Diff
@@ -68,26 +68,8 @@ namespace VEPROMS
MyProcConfig.Print_ChangeBarDate = dateTimeInput1.Value.ToString("MM/dd/yyyy HH:mm:ss");// ("MM/dd/yyyy HH:mm:ss"); MyProcConfig.Print_ChangeBarDate = dateTimeInput1.Value.ToString("MM/dd/yyyy HH:mm:ss");// ("MM/dd/yyyy HH:mm:ss");
//CSM - C2026-010 - Add Audit Record for Change Bar Audit History //CSM - C2026-010 - Add Audit Record for Change Bar Audit History
ChangeBarAuditHistory.AddAudit(MyProcInfo.ItemID, $"Set ChangeBars set to ({dateTimeInput1.Value.ToString("MM/dd/yyyy HH:mm:ss")}) by ({VlnSettings.UserID}) on ({DateTime.Now})", DateTime.Now, VlnSettings.UserID, 0); ChangeBarAuditHistory.AddAudit(MyProcInfo.ItemID, $"Set ChangeBars set to ({ dateTimeInput1.Value.ToString("MM/dd/yyyy HH:mm:ss")}) by ({ VlnSettings.UserID}) on ({DateTime.Now})", DateTime.Now, VlnSettings.UserID, 0);
//CSM C2026-014 if multi-unit, set for each unit
System.Data.DataTable dt = RevisionData.GetRevisionDataByUnit(MyProcInfo.ItemID);
if (RevisionData.HasUnits(dt))
{
//Change the ChangeBarDate for each unit
foreach (DataRow r in dt.Rows)
{
if (!r.IsNull("UnitID"))
{
MyProcConfig.SelectedSlave = Convert.ToInt32(r["UnitID"]);
MyProcConfig.Print_ChangeBarDate = dateTimeInput1.Value.ToString("MM/dd/yyyy HH:mm:ss");
//CSM - C2026-010 - Add Audit Record for Change Bar Audit History
ChangeBarAuditHistory.AddAudit(MyProcInfo.ItemID, $"Set ChangeBars set to ({dateTimeInput1.Value.ToString("MM/dd/yyyy HH:mm:ss")}) by ({VlnSettings.UserID}) on ({DateTime.Now}) for (Unit {r["UnitName"]})", DateTime.Now, VlnSettings.UserID, MyProcConfig.SelectedSlave);
}
}
MyProcConfig.SelectedSlave = 0;
}
} }
@@ -126,10 +108,7 @@ namespace VEPROMS
sb.Append($" The Procedure Viewer Change Bar Date will be set to ({maxDTS})."); sb.Append($" The Procedure Viewer Change Bar Date will be set to ({maxDTS}).");
foreach (DataRow r in dt.Rows) foreach (DataRow r in dt.Rows)
{ {
if (!r.IsNull("UnitID")) sb.Append($"\r\n The Change Bar Date for Unit ({r["UnitName"]}) will be set to ({Convert.ToDateTime(r["DTS"]):MM/dd/yyyy HH:mm:ss}).");
{
sb.Append($"\r\n The Change Bar Date for Unit ({r["UnitName"]}) will be set to ({Convert.ToDateTime(r["DTS"]):MM/dd/yyyy HH:mm:ss}).");
}
} }
sb.Append("\r\n Any Change Bars for Units not listed above will use the Overall/Procedure Viewer Change Bar Date (as these Units have no approvals)."); sb.Append("\r\n Any Change Bars for Units not listed above will use the Overall/Procedure Viewer Change Bar Date (as these Units have no approvals).");
@@ -142,14 +121,12 @@ namespace VEPROMS
//Change the ChangeBarDate for each unit //Change the ChangeBarDate for each unit
foreach (DataRow r in dt.Rows) foreach (DataRow r in dt.Rows)
{ {
if (!r.IsNull("UnitID")) MyProcConfig.SelectedSlave = Convert.ToInt32(r["UnitID"]);
{ MyProcConfig.Print_ChangeBarDate = Convert.ToDateTime(r["DTS"]).ToString("MM / dd / yyyy HH: mm: ss");
MyProcConfig.SelectedSlave = Convert.ToInt32(r["UnitID"]);
MyProcConfig.Print_ChangeBarDate = Convert.ToDateTime(r["DTS"]).ToString("MM / dd / yyyy HH: mm: ss"); //CSM - C2026-010 - Add Audit Record for Change Bar Audit History
ChangeBarAuditHistory.AddAudit(MyProcInfo.ItemID, $"Reset ChangeBars performed by ({VlnSettings.UserID}) on ({DateTime.Now}). ChangeBars reset to show since last approval ({Convert.ToDateTime(r["DTS"]):MM/dd/yyyy HH:mm:ss}) for (Unit {r["UnitName"]})", DateTime.Now, VlnSettings.UserID, MyProcConfig.SelectedSlave);
//CSM - C2026-010 - Add Audit Record for Change Bar Audit History
ChangeBarAuditHistory.AddAudit(MyProcInfo.ItemID, $"Reset ChangeBars performed by ({VlnSettings.UserID}) on ({DateTime.Now}). ChangeBars reset to show since last approval ({Convert.ToDateTime(r["DTS"]):MM/dd/yyyy HH:mm:ss}) for (Unit {r["UnitName"]})", DateTime.Now, VlnSettings.UserID, MyProcConfig.SelectedSlave);
}
} }
MyProcConfig.SelectedSlave = 0; MyProcConfig.SelectedSlave = 0;
DialogResult = DialogResult.OK; DialogResult = DialogResult.OK;
@@ -1036,11 +1036,8 @@ namespace VEPROMS
ROFstInfo roFstInfo = dq.DocVersionAssociations[0].MyROFst; ROFstInfo roFstInfo = dq.DocVersionAssociations[0].MyROFst;
string rofstPath = roFstInfo.MyRODb.FolderPath + @"\ro.fst"; string rofstPath = roFstInfo.MyRODb.FolderPath + @"\ro.fst";
//must get id before ROFST gets updated so know what to refresh later //if (!pathExists(rofstPath))
int origfstid = roFstInfo.ROFstID; if (!File.Exists(rofstPath))
//if (!pathExists(rofstPath))
if (!File.Exists(rofstPath))
{ {
ProgressBar.ColorTable = eProgressBarItemColor.Error; ProgressBar.ColorTable = eProgressBarItemColor.Error;
FinalProgressBarMessage = "No existing RO.FST"; FinalProgressBarMessage = "No existing RO.FST";
@@ -1066,29 +1063,9 @@ namespace VEPROMS
ROFstInfo.UpdateRoFst(roFstInfo.MyRODb, dv, roFstInfo, DoProgressBarRefresh); ROFstInfo.UpdateRoFst(roFstInfo.MyRODb, dv, roFstInfo, DoProgressBarRefresh);
roFstInfo = dq.DocVersionAssociations[0].MyROFst; roFstInfo = dq.DocVersionAssociations[0].MyROFst;
} }
else if (!dv.ROfstLastCompleted && origfstid == roFstInfo.ROFstID) roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
{ ROFst newrofst = ROFstInfo.RefreshROFst(dv, roFstInfo, DoProgressBarRefresh, txtProcess);
//Handle issue where load failed without completing update roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
//previous RO FST did not load, get last loaded ID
//if none, use -1 which will check all ROs in the Working Draft
string cfg = dv.DocVersionAssociations[0].Config;
AssociationConfig ac = new AssociationConfig((cfg == null || cfg.Length == 0) ? "<Config />" : cfg);
if (dv.DocVersionAssociations[0]?.MyROFst != null)
{
if (!int.TryParse(ac.ROUpdate_PrevROFSTID, out origfstid))
{
origfstid = -1;
}
}
else
{
origfstid = -1;
}
}
roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
ROFstInfo.RefreshROFstAtItemLevel(DocVersionInfo.Get(dv.VersionID), DoProgressBarRefresh, txtProcess, roFstInfo, origfstid, roFstInfo.ROFstID);
roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
} }
Cursor = Cursors.Default; Cursor = Cursors.Default;
@@ -1339,10 +1316,10 @@ namespace VEPROMS
{ {
if (ProgressBar == null) return; if (ProgressBar == null) return;
ProgressBar.Text = value; ProgressBar.Value = 100;
ProgressBar.Maximum = 100; ProgressBar.Maximum = 100;
ProgressBar.Value = 100; ProgressBar.Text = value;
txtProcess.AppendText(value); txtProcess.AppendText(value);
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
+20 -91
View File
@@ -11,7 +11,6 @@ using System.IO;
using System.Configuration; using System.Configuration;
using System.Reflection; using System.Reflection;
using VEPROMS.CSLA.Library; using VEPROMS.CSLA.Library;
//using Csla;
using DevComponents; using DevComponents;
using DevComponents.DotNetBar; using DevComponents.DotNetBar;
using DevComponents.DotNetBar.Rendering; using DevComponents.DotNetBar.Rendering;
@@ -246,16 +245,12 @@ namespace VEPROMS
tc.MyCopyStep = myParent.tc.MyCopyStep; // copy the copystep info to the child window tc.MyCopyStep = myParent.tc.MyCopyStep; // copy the copystep info to the child window
//B2026 - 048 View Only Mode freezes PROMS if last tab closed (tv.Nodes[0] as VETreeNode).InChildWindow = true; // tells us this folder's tree nodes are in the child window
tc.EnableDisableStepProperties -= EnableDisableStepProperties;
tc.EnableDisableStepProperties += new StepTabRibbonEvent(EnableDisableStepProperties);
(tv.Nodes[0] as VETreeNode).InChildWindow = true; // tells us this folder's tree nodes are in the child window
} }
public void OpenItem(ItemInfo myItemInfo) public void OpenItem(ItemInfo myItemInfo)
{ {
tc.OpenItem(myItemInfo); tc.OpenItem(myItemInfo);
} }
public void RefreshItem(ItemInfo myItemInfo) public void RefreshItem(ItemInfo myItemInfo)
@@ -356,10 +351,9 @@ namespace VEPROMS
displayRO.TabControl = tc; // B2019-043 this was being passed in as a parameter for DisplayRO which caused issues with the Visual Studio designer displayRO.TabControl = tc; // B2019-043 this was being passed in as a parameter for DisplayRO which caused issues with the Visual Studio designer
bottomProgBar.ValueChanged += new EventHandler(bottomProgBar_ValueChanged); bottomProgBar.ValueChanged += new EventHandler(bottomProgBar_ValueChanged);
tc.EnableDisableStepProperties += new StepTabRibbonEvent(EnableDisableStepProperties);
// When creating an XY Plot, a System.Drawing.Graphics is needed and it requires a form. Use the main form. // When creating an XY Plot, a System.Drawing.Graphics is needed and it requires a form. Use the main form.
if (VlnSettings.DebugMode) if (VlnSettings.DebugMode)
{ {
MSWordToPDF.DebugStatus = 1; MSWordToPDF.DebugStatus = 1;
MSWordToPDF.OverrideColor = Color.Red; MSWordToPDF.OverrideColor = Color.Red;
@@ -969,18 +963,7 @@ namespace VEPROMS
{ {
pnl.ApplDisplayMode = displayApplicability.ViewMode; pnl.ApplDisplayMode = displayApplicability.ViewMode;
displayHistory.ApplDisplayMode = pnl.ApplDisplayMode; displayHistory.ApplDisplayMode = pnl.ApplDisplayMode;
//C2026-021 Expand Functionality of Viewing Mode
if (pnl.ApplDisplayMode > 0 && pnl.VwMode != E_ViewMode.View)
{
pnl.VwMode = E_ViewMode.View;
EnableDisableStepProperties(sender, new StepTabRibbonEventArgs(tc.SelectedDisplayTabItem.MyItemInfo, 0, pnl.VwMode));
MessageBox.Show("Changing to View Only Mode. Applicability Viewing Mode must be Master to return to Edit Mode. View Mode can be toggled off via the Ribbon->View tab.", "Changing to View Mode", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
pnl.MyStepTabPanel.MyStepTabRibbon.RefreshProcedure();
} }
} }
void tv_ViewPDF(object sender, vlnTreeViewPdfArgs args) void tv_ViewPDF(object sender, vlnTreeViewPdfArgs args)
@@ -1610,7 +1593,7 @@ namespace VEPROMS
displayRO.MyROFST = SelectedROFst; displayRO.MyROFST = SelectedROFst;
// B2023-021: force Load of Step Prop/RO panel RO tree by passing in // B2023-021: force Load of Step Prop/RO panel RO tree by passing in
// true to LoadTree // true to LoadTree
if (!_WeAreExitingPROMS) displayRO.LoadTree(true); displayRO.LoadTree(true);
} }
} }
@@ -2148,7 +2131,7 @@ namespace VEPROMS
//C2019-036 View Only mode work with Checked Out Procedures //C2019-036 View Only mode work with Checked Out Procedures
// View Only Mode is no longer checked out, so no longer has an OwnerID // View Only Mode is no longer checked out, so no longer has an OwnerID
// This will keep those tabs from auto-closing based on the timer // This will keep those tabs from auto-closing based on the timer
if (!myList.Contains(dti.OwnerID) && dti?.MyStepTabPanel?.MyStepPanel?.VwMode != E_ViewMode.View) if (!myList.Contains(dti.OwnerID) && dti.MyStepTabPanel.MyStepPanel.VwMode != E_ViewMode.View)
{ {
MyCloseTabList.PushDTI(dti); MyCloseTabList.PushDTI(dti);
} }
@@ -2411,7 +2394,6 @@ namespace VEPROMS
tv.MySessionInfo = MySessionInfo; tv.MySessionInfo = MySessionInfo;
tv.MyUserInfo = MyUserInfo; tv.MyUserInfo = MyUserInfo;
StepTabRibbon.MySessionInfo = MySessionInfo; StepTabRibbon.MySessionInfo = MySessionInfo;
displayRO.MySessionInfo = MySessionInfo;
// Initialize Caption with Server name and Database name. // Initialize Caption with Server name and Database name.
SetCaption(tv.TopNode as VETreeNode); SetCaption(tv.TopNode as VETreeNode);
@@ -3578,7 +3560,6 @@ namespace VEPROMS
{ {
if (parameter.StartsWith("/P=")) if (parameter.StartsWith("/P="))
{ {
BaseLnSettings.blBaseLine = true;
MSWordToPDF.Automatic = true; MSWordToPDF.Automatic = true;
PromsPrinter.BaselineTesting = true;// Set Baseline Testing property for PROMsPrinter PromsPrinter.BaselineTesting = true;// Set Baseline Testing property for PROMsPrinter
string[] dvstrs = parameter.Substring(3).Split(",".ToCharArray()); string[] dvstrs = parameter.Substring(3).Split(",".ToCharArray());
@@ -3624,7 +3605,7 @@ namespace VEPROMS
} }
ranAuto = true; ranAuto = true;
} }
BaseLnSettings.blBaseLine = false;
if (ranAuto) if (ranAuto)
{ {
this.Close(); this.Close();
@@ -4571,15 +4552,6 @@ namespace VEPROMS
SetCaption(tv.SelectedNode as VETreeNode); SetCaption(tv.SelectedNode as VETreeNode);
displayApplicability.MyDisplayTabItem = tc.SelectedDisplayTabItem; displayApplicability.MyDisplayTabItem = tc.SelectedDisplayTabItem;
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
// DisplayTab was changed
// need to clear the RTB selected
// without resetting the DVI or FST
// (those will be set manually / individually)
// this will prevent DVI and FST from changing to null then back again
// which will trigger reloads
displayRO.ClearRTB();
if (tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociationCount > 0) if (tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociationCount > 0)
{ {
displayRO.MyROFST = tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst; displayRO.MyROFST = tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst;
@@ -4589,24 +4561,9 @@ namespace VEPROMS
displayRO.MyROFST = null; displayRO.MyROFST = null;
} }
//C2026-008 Re-Architect RO.FST to include RO Modification date/time // B2022-026 RO Memory reduction coding (Jakes Merge)
// set the DocVersionInfo so that the FST and docversion are in sync // B2022-123: RO Tab Treeview not showing correct RO values when switching between procedures. (Added True for the forceLoad parameter)
SelectedDVI = tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion; displayRO.LoadTree(true);
if (displayRO.MyDvi != SelectedDVI)
{
displayRO.MyDvi = SelectedDVI;
}
Application.DoEvents();
// B2022-026 RO Memory reduction coding (Jakes Merge)
// B2022-123: RO Tab Treeview not showing correct RO values when switching between procedures. (Added True for the forceLoad parameter)
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
// if ROFST got updated,
// set the Selected FST so it is in sync
if (!_WeAreExitingPROMS && displayRO.LoadTree(true))
{
SelectedROFst = displayRO.MyROFST;
}
lblUser.Text = tc.SelectedDisplayTabItem.MyUserRole; lblUser.Text = tc.SelectedDisplayTabItem.MyUserRole;
@@ -4807,13 +4764,7 @@ namespace VEPROMS
// B2022-026 RO Memory reduction coding (Jakes Merge) // B2022-026 RO Memory reduction coding (Jakes Merge)
displayRO.ProgressBar = bottomProgBar; displayRO.ProgressBar = bottomProgBar;
displayRO.MyRTB = args.MyEditItem.MyStepRTB; displayRO.MyRTB = args.MyEditItem.MyStepRTB;
//C2026-008 Re-Architect RO.FST to include RO Modification date/time displayRO.LoadTree();
// if ROFST got updated,
// set the Selected FST so it is in sync
if (!_WeAreExitingPROMS && displayRO.LoadTree())
{
SelectedROFst = displayRO.MyROFST;
}
displayBookMarks.MyEditItem = args.MyEditItem; displayBookMarks.MyEditItem = args.MyEditItem;
displayHistory.MyEditItem = args.MyEditItem; displayHistory.MyEditItem = args.MyEditItem;
@@ -4843,7 +4794,7 @@ namespace VEPROMS
// B2022-026 RO Memory reduction coding (Jakes Merge) // B2022-026 RO Memory reduction coding (Jakes Merge)
displayRO.SetFindDocROButton(false); displayRO.SetFindDocROButton(false);
if (!_WeAreExitingPROMS) displayRO.LoadTree(); displayRO.LoadTree();
//C2019-036 View Only mode work with Checked Out Procedures //C2019-036 View Only mode work with Checked Out Procedures
//In View Only Mode - Step Properties should be disabled //In View Only Mode - Step Properties should be disabled
@@ -4884,31 +4835,15 @@ namespace VEPROMS
//In View Only Mode - Step Properties should be disabled //In View Only Mode - Step Properties should be disabled
public void EnableDisableStepProperties(object sender, StepTabRibbonEventArgs args) public void EnableDisableStepProperties(object sender, StepTabRibbonEventArgs args)
{ {
//C2026 - 021 Expand Functionality of Viewing Mode if (args.ViewMode == E_ViewMode.View && (infoTabs.Enabled || infoTabs.SelectedTab != infotabTags))
//B2026 - 048 View Only Mode freezes PROMS if last tab closed
if (args.ViewMode == E_ViewMode.View && (infotabControlPanelTags.Enabled || (infoTabs.SelectedTab != infotabTags && infoTabs.SelectedTab != infotabApplicability)))
{ {
if (infoTabs.SelectedTab != infotabApplicability) infoTabs.Enabled = true;
{ infoTabs.SelectedTab = infotabTags;
infoTabs.SelectedTab = infotabTags; infoTabs.Enabled = false;
}
infotabControlPanelTags.Enabled = false;
infotabControlPanelRO.Enabled = false;
infotabControlPanelTransitions.Enabled = false;
tabControlPanel1.Enabled = false;
displayApplicability.SetEnableDisableItemSelection(false);
tcpFoldoutMaint.Enabled = false;
} }
else if (args.ViewMode != E_ViewMode.View && !infotabControlPanelTags.Enabled) else if (args.ViewMode != E_ViewMode.View && !infoTabs.Enabled)
{ {
infotabControlPanelTags.Enabled = true; infoTabs.Enabled = true;
infotabControlPanelRO.Enabled = true;
infotabControlPanelTransitions.Enabled = true;
tabControlPanel1.Enabled = true;
displayApplicability.SetEnableDisableItemSelection(true);
tcpFoldoutMaint.Enabled = true;
} }
} }
@@ -4992,14 +4927,8 @@ namespace VEPROMS
displayRO.MyRTB = SelectedStepTabPanel.MyStepPanel.SelectedEditItem.MyStepRTB; displayRO.MyRTB = SelectedStepTabPanel.MyStepPanel.SelectedEditItem.MyStepRTB;
displayRO.CurROLink = args.MyLinkText.MyRoUsageInfo; displayRO.CurROLink = args.MyLinkText.MyRoUsageInfo;
// B2022-026 RO Memory reduction coding (Jakes Merge) // B2022-026 RO Memory reduction coding (Jakes Merge)
//C2026-008 Re-Architect RO.FST to include RO Modification date/time displayRO.LoadTree();
// if ROFST got updated,
// set the Selected FST so it is in sync
if (displayRO.LoadTree())
{
SelectedROFst = displayRO.MyROFST;
}
} }
#endregion #endregion
@@ -899,10 +899,10 @@ namespace VEPROMS
set set
{ {
if (ProgressBar == null) return; if (ProgressBar == null) return;
ProgressBar.Text = value; ProgressBar.Maximum = 100;
ProgressBar.Maximum = 100; ProgressBar.Value = 100;
ProgressBar.Value = 100; ProgressBar.Text = value;
Application.DoEvents(); Application.DoEvents();
} }
} }
@@ -1527,11 +1527,8 @@ namespace VEPROMS
Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
//must get id before ROFST gets updated so know what to refresh later // RO changes placed in file in the Documents\VEPROMS folder
int origfstid = SelectedROFst.ROFstID; swROUpdate = new System.IO.StreamWriter(ROFstInfo.ROUpdateResultsPath(_DocVersionConfig.MyDocVersion.MyDocVersionInfo));
// RO changes placed in file in the Documents\VEPROMS folder
swROUpdate = new System.IO.StreamWriter(ROFstInfo.ROUpdateResultsPath(_DocVersionConfig.MyDocVersion.MyDocVersionInfo));
DocVersion dv = _DocVersionConfig.MyDocVersion; DocVersion dv = _DocVersionConfig.MyDocVersion;
// B2022-026 RO Memory Reduction code - first load the new ro.fst so that we can assign the ROTableUpdate event to the correct roFstInfo // B2022-026 RO Memory Reduction code - first load the new ro.fst so that we can assign the ROTableUpdate event to the correct roFstInfo
if (dv.ROfstLoadingFigures || dv.NewerRoFst) // B2017-125 see if loading figures was completed if (dv.ROfstLoadingFigures || dv.NewerRoFst) // B2017-125 see if loading figures was completed
@@ -1539,32 +1536,13 @@ namespace VEPROMS
ROFstInfo.UpdateRoFst(SelectedROFst.MyRODb, dv, SelectedROFst, DoProgressBarRefresh); ROFstInfo.UpdateRoFst(SelectedROFst.MyRODb, dv, SelectedROFst, DoProgressBarRefresh);
SelectedROFst = null; // set to null to force getting the updated ROfst SelectedROFst = null; // set to null to force getting the updated ROfst
} }
else if (!dv.ROfstLastCompleted && origfstid == SelectedROFst.ROFstID)
{
//Handle issue where load failed without completing update
//previous RO FST did not load, get last loaded ID
//if none, use -1 which will check all ROs in the Working Draft
string cfg = dv.DocVersionAssociations[0].Config;
AssociationConfig ac = new AssociationConfig((cfg == null || cfg.Length == 0) ? "<Config />" : cfg);
if (dv.DocVersionAssociations[0]?.MyROFst != null)
{
if (!int.TryParse(ac.ROUpdate_PrevROFSTID, out origfstid))
{
origfstid = -1;
}
}
else
{
origfstid = -1;
}
}
ContentInfo.StaticContentInfoChange += ContentInfo_StaticContentInfoChange; // write changes to a text file ContentInfo.StaticContentInfoChange += ContentInfo_StaticContentInfoChange; // write changes to a text file
SelectedROFst.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate); SelectedROFst.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
ROFstInfo.RefreshROFstAtItemLevel(DocVersionInfo.Get(dv.VersionID), DoProgressBarRefresh, null, SelectedROFst, origfstid, SelectedROFst.ROFstID); ROFst newrofst = ROFstInfo.RefreshROFst(_DocVersionConfig.MyDocVersion, SelectedROFst, DoProgressBarRefresh, null);
ContentInfo.StaticContentInfoChange -= ContentInfo_StaticContentInfoChange; ContentInfo.StaticContentInfoChange -= ContentInfo_StaticContentInfoChange;
SelectedROFst.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate); SelectedROFst.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
swROUpdate.Close(); swROUpdate.Close();
@@ -124,26 +124,9 @@ namespace VEPROMS.CSLA.Library
_Xp["ROUpdate", "LoadingFigures"] = value; // save selected value _Xp["ROUpdate", "LoadingFigures"] = value; // save selected value
} }
} }
#endregion // ROUpdate
[Category("RO Update")] #region ToString
[DisplayName("Previous ROFSTID")] public override string ToString()
[RefreshProperties(RefreshProperties.All)]
[Description("Previous ROFSTID")]
public string ROUpdate_PrevROFSTID
{
get
{
string s = _Xp["ROUpdate", "PrevROFSTID"];// get the saved value
return s;
}
set
{
_Xp["ROUpdate", "PrevROFSTID"] = value; // save selected value
}
}
#endregion // ROUpdate
#region ToString
public override string ToString()
{ {
string s = _Xp.ToString(); string s = _Xp.ToString();
if (s == "<Config/>" || s == "<Config></config>") return string.Empty; if (s == "<Config/>" || s == "<Config></config>") return string.Empty;
+129 -203
View File
@@ -8,6 +8,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading; using System.Threading;
using static System.Net.Mime.MediaTypeNames;
namespace VEPROMS.CSLA.Library namespace VEPROMS.CSLA.Library
@@ -60,8 +61,7 @@ namespace VEPROMS.CSLA.Library
#region Structs / Internal Classes #region Structs / Internal Classes
[Serializable] [Serializable]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Keep Older Pre-existing naming conventions")] public struct roHdr
public struct roHdr
{ {
public int hSize; public int hSize;
public int hYear; public int hYear;
@@ -78,8 +78,7 @@ namespace VEPROMS.CSLA.Library
}; };
[Serializable] [Serializable]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Keep Older Pre-existing naming conventions")] public struct rodbi
public struct rodbi
{ {
public int dbiID; public int dbiID;
public int dbiType; public int dbiType;
@@ -92,20 +91,17 @@ namespace VEPROMS.CSLA.Library
}; };
[Serializable] [Serializable]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Keep Older Pre-existing naming conventions")] public struct rogrp
public struct rogrp
{ {
public string value; public string value;
public string appid; public string appid;
public int ID; public int ID;
public int ParentID; public int ParentID;
public DateTime? ModDateTime; //C2026-008 Re-Architect RO.FST to include RO Modification date/time public rochild[] children;
public rochild[] children;
}; };
[Serializable] [Serializable]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Keep Older Pre-existing naming conventions")] public struct rochild
public struct rochild
{ {
public int ID; public int ID;
public int ParentID; public int ParentID;
@@ -114,8 +110,7 @@ namespace VEPROMS.CSLA.Library
public string roid; // roid unique identifier public string roid; // roid unique identifier
public string appid; // accessory page id - user specified unique id public string appid; // accessory page id - user specified unique id
public string value; // return value, can be multiple values public string value; // return value, can be multiple values
public DateTime? ModDateTime; //C2026-008 Re-Architect RO.FST to include RO Modification date/time public rochild[] children;
public rochild[] children;
}; };
public class RoExtension public class RoExtension
@@ -136,7 +131,7 @@ namespace VEPROMS.CSLA.Library
private List<string> _baseAccPageKeys; private List<string> _baseAccPageKeys;
// RofstLookup/Conversion Variables // RofstLookup/Conversion Variables
private readonly int _rofstID; private int _rofstID;
private DocVersionInfo _myDocVersionInfo; private DocVersionInfo _myDocVersionInfo;
private int _selectedSlave; private int _selectedSlave;
private string _otherChild = string.Empty; private string _otherChild = string.Empty;
@@ -152,7 +147,7 @@ namespace VEPROMS.CSLA.Library
// B2022-107: Display Progress Bar Messages/Statuses when a new ROFST binary file is loaded into the database // B2022-107: Display Progress Bar Messages/Statuses when a new ROFST binary file is loaded into the database
private frmRofstLoadStatus _frmRofstLoadStatus = null; private frmRofstLoadStatus _frmRofstLoadStatus = null;
private Dictionary<int, int> _dicRoCounts = null; private Dictionary<int, int> _dicRoCounts = null;
private readonly bool _showLoadingStatus = true; private bool _showLoadingStatus = true;
private int _curRoCnt = 0; private int _curRoCnt = 0;
private int _dbRoCnt = 0; private int _dbRoCnt = 0;
@@ -417,6 +412,7 @@ namespace VEPROMS.CSLA.Library
ROFSTLookup.rochild rc = RofstDataGetChildByAccPageID(_rofstID, accPageBase); ROFSTLookup.rochild rc = RofstDataGetChildByAccPageID(_rofstID, accPageBase);
//if (rc.ID >=0 && rc.roid.Length < 16 && Regex.IsMatch(accPageKey, @".*\.[A-Z]") && rc.children != null && rc.children.Count() > 0)
if (rc.ID >= 0 && rc.roid.Length < 16 && !string.IsNullOrEmpty(accPageExt) && rc.children != null && rc.children.Count() > 0) if (rc.ID >= 0 && rc.roid.Length < 16 && !string.IsNullOrEmpty(accPageExt) && rc.children != null && rc.children.Count() > 0)
{ {
// Check if AccPageID/Key has a return value specific extension. Try to find the RoChild record with the specific return value type, // Check if AccPageID/Key has a return value specific extension. Try to find the RoChild record with the specific return value type,
@@ -509,6 +505,8 @@ namespace VEPROMS.CSLA.Library
// B2023-037: Handle <=, >=, +-, -> and <- symbols. Convert to unicode for output, i.e. print and edit/view (when editing // B2023-037: Handle <=, >=, +-, -> and <- symbols. Convert to unicode for output, i.e. print and edit/view (when editing
// step, will show as 2 characters, not unicode, unless ro inserted when code replaced link text with unicode. // step, will show as 2 characters, not unicode, unless ro inserted when code replaced link text with unicode.
//(_MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.UseDashGreaterLessThenForArrowsInROValue ||
// _MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.ConvertGTELTEPMinROValue))
bool arrows1 = myiteminfo.ActiveFormat.PlantFormat.FormatData.SectData.UseDashGreaterLessThenForArrowsInROValue; bool arrows1 = myiteminfo.ActiveFormat.PlantFormat.FormatData.SectData.UseDashGreaterLessThenForArrowsInROValue;
bool arrows2 = myiteminfo.ActiveFormat.PlantFormat.FormatData.SectData.ConvertGTELTEPMinROValue; bool arrows2 = myiteminfo.ActiveFormat.PlantFormat.FormatData.SectData.ConvertGTELTEPMinROValue;
@@ -681,25 +679,22 @@ namespace VEPROMS.CSLA.Library
if (minutes > 0) duration = string.Format("{0} min(s) ", minutes.ToString("n0")); if (minutes > 0) duration = string.Format("{0} min(s) ", minutes.ToString("n0"));
if (secs < 0) secs = 0.00; if (secs < 0) secs = 0.00;
duration += string.Format("{0,10:#####0.00} sec(s)", secs).Trim(); duration = duration + string.Format("{0,10:#####0.00} sec(s)", secs).Trim();
return duration; return duration;
//return string.Format("{0,10:#####0.00}", TimeSpan.FromTicks(DateTime.Now.Ticks - dtStart.Ticks).TotalSeconds);
} }
//C2026-008 Re-Architect RO.FST to include RO Modification date/time #endregion
//return new ROFstID if there is a newer ID that matches the same ROFSTDB
public int GetNewerFSTID() => RofstGetLatestID(RofstID);
#endregion #endregion
#endregion #region Private Methods
#region Private Methods #region (Database Calls)
#region (Database Calls) private bool RofstDataExists(int rofstID)
private bool RofstDataExists(int rofstID)
{ {
int headerStatusID = RofstDataGetHeaderLoadStatus(rofstID); int headerStatusID = RofstDataGetHeaderLoadStatus(rofstID);
@@ -893,7 +888,7 @@ namespace VEPROMS.CSLA.Library
} }
} }
private void RofstChildInsert(int rofstID, int id, int parentID, int dbiID, int type, string title, string roid, string appid, string value, DateTime? dt = null) private void RofstChildInsert(int rofstID, int id, int parentID, int dbiID, int type, string title, string roid, string appid, string value)
{ {
try try
{ {
@@ -922,10 +917,7 @@ namespace VEPROMS.CSLA.Library
if (!string.IsNullOrEmpty(this.RoMissingDefaultValue)) if (!string.IsNullOrEmpty(this.RoMissingDefaultValue))
cmd.Parameters.Add(new SqlParameter("@missingDefaultValue", SqlDbType.VarChar)).Value = this.RoMissingDefaultValue; cmd.Parameters.Add(new SqlParameter("@missingDefaultValue", SqlDbType.VarChar)).Value = this.RoMissingDefaultValue;
if (dt != null) cmd.ExecuteNonQuery();
cmd.Parameters.Add(new SqlParameter("@ModDateTime", SqlDbType.DateTime)).Value = dt;
cmd.ExecuteNonQuery();
} }
} }
} }
@@ -1307,37 +1299,11 @@ namespace VEPROMS.CSLA.Library
} }
} }
//C2026-008 Re-Architect RO.FST to include RO Modification date/time #endregion
//return new ROFstID if there is a newer ID that matches the same ROFSTDB
private int RofstGetLatestID(int rofstID)
{
try
{
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
{
using (SqlCommand cmd = cn.CreateCommand())
{
cmd.CommandTimeout = 0;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT ISNULL((SELECT TOP 1 ROFsts.ROFstID FROM ROFsts INNER JOIN ROFsts curFST ON curFST.RODbID = ROFsts.RODbID WHERE curFST.ROFstID = @FSTid order by ROFsts.DTS desc),-1)";
cmd.Parameters.Add(new SqlParameter("@FSTid", SqlDbType.Int)).Value = rofstID; #region (Core/Base logic for RO Values & UnitInfo RO Values)
return (int) cmd.ExecuteScalar(); private ROFSTLookup.rochild RofstDataGetChildByRoid(int rofstID, string roid, bool loadChildren = false, bool loadAllChildren = false)
}
}
}
catch (Exception ex)
{
throw new DbCslaException("RofstData.RofstGetLatestID", ex);
}
}
#endregion
#region (Core/Base logic for RO Values & UnitInfo RO Values)
private ROFSTLookup.rochild RofstDataGetChildByRoid(int rofstID, string roid, bool loadChildren = false, bool loadAllChildren = false)
{ {
try try
{ {
@@ -1474,22 +1440,21 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.roHdr ConvertFst2Objects(byte[] ab) private ROFSTLookup.roHdr ConvertFst2Objects(byte[] ab)
{ {
ROFSTLookup.roHdr roh = new ROFSTLookup.roHdr ROFSTLookup.roHdr roh = new ROFSTLookup.roHdr();
{
hSize = BitConverter.ToInt32(ab, 0),
hYear = BitConverter.ToInt16(ab, 4),
hMonth = ab[6],
hDay = ab[7],
hcYear = BitConverter.ToInt16(ab, 8),
hcMonth = ab[10],
hcDay = ab[11],
hcHour = ab[12],
hcMin = ab[13],
hcSec = ab[14],
hcHund = ab[15]
};
int hdrOffset = BitConverter.ToInt32(ab, 16); roh.hSize = BitConverter.ToInt32(ab, 0);
roh.hYear = BitConverter.ToInt16(ab, 4);
roh.hMonth = ab[6];
roh.hDay = ab[7];
roh.hcYear = BitConverter.ToInt16(ab, 8);
roh.hcMonth = ab[10];
roh.hcDay = ab[11];
roh.hcHour = ab[12];
roh.hcMin = ab[13];
roh.hcSec = ab[14];
roh.hcHund = ab[15];
int hdrOffset = BitConverter.ToInt32(ab, 16);
int dbs = BitConverter.ToInt16(ab, hdrOffset + 4); int dbs = BitConverter.ToInt16(ab, hdrOffset + 4);
roh.myDbs = new ROFSTLookup.rodbi[dbs]; roh.myDbs = new ROFSTLookup.rodbi[dbs];
@@ -1525,13 +1490,12 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.rogrp LoadGroup(byte[] ab, int offset, int tableID) private ROFSTLookup.rogrp LoadGroup(byte[] ab, int offset, int tableID)
{ {
ROFSTLookup.rogrp myGrp = new ROFSTLookup.rogrp ROFSTLookup.rogrp myGrp = new ROFSTLookup.rogrp();
{
ID = BitConverter.ToInt32(ab, offset),
ParentID = BitConverter.ToInt32(ab, offset + 4)
};
int numChildren = BitConverter.ToInt16(ab, offset + 8); myGrp.ID = BitConverter.ToInt32(ab, offset);
myGrp.ParentID = BitConverter.ToInt32(ab, offset + 4);
int numChildren = BitConverter.ToInt16(ab, offset + 8);
if (numChildren > 0) if (numChildren > 0)
{ {
@@ -1551,7 +1515,7 @@ namespace VEPROMS.CSLA.Library
myOffset += (7 + slen); myOffset += (7 + slen);
ROFSTLookup.rogrp tmpg = LoadGroup(ab, childOffset, tableID); ROFSTLookup.rogrp tmpg = LoadGroup(ab, childOffset, tableID);
tmp.ID = tmpg.ID; tmp.ID = tmpg.ID;
tmp.ParentID = tmpg.ParentID; tmp.ParentID = tmpg.ParentID;
@@ -1559,12 +1523,8 @@ namespace VEPROMS.CSLA.Library
tmp.appid = tmpg.appid; tmp.appid = tmpg.appid;
tmp.roid = tableID.ToString("X4") + tmp.ID.ToString("X8"); tmp.roid = tableID.ToString("X4") + tmp.ID.ToString("X8");
tmp.children = tmpg.children; tmp.children = tmpg.children;
if (tmpg.ModDateTime != null)
{
tmp.ModDateTime = tmpg.ModDateTime;
}
int j; int j;
for (j = i - 1; j >= 0 && tmp.ID < myGrp.children[j].ID; j--) for (j = i - 1; j >= 0 && tmp.ID < myGrp.children[j].ID; j--)
{ {
@@ -1582,13 +1542,7 @@ namespace VEPROMS.CSLA.Library
int slen2 = StringLength(ab, offset + 13 + slen); int slen2 = StringLength(ab, offset + 13 + slen);
myGrp.appid = Encoding.Default.GetString(ab, offset + 13 + slen, slen2); myGrp.appid = Encoding.Default.GetString(ab, offset + 13 + slen, slen2);
//C2026-008 Re-Architect RO.FST to include RO Modification date/time _dbRoCnt++;
if (myGrp.value != "" && DateTime.TryParseExact(Encoding.Default.GetString(ab, offset + 14 + slen + slen2, 14), "yyyyMMddHHmmss", null, System.Globalization.DateTimeStyles.None, out DateTime dt))
{
myGrp.ModDateTime = dt;
}
_dbRoCnt++;
} }
return myGrp; return myGrp;
@@ -1661,7 +1615,7 @@ namespace VEPROMS.CSLA.Library
} }
// Update Progress Bar Accordingly // Update Progress Bar Accordingly
if (_totalRoCnt > 0) _pctComplete += ((Convert.ToDouble(_dbRoCnt) / Convert.ToDouble(_totalRoCnt)) * 80.0); if (_totalRoCnt > 0) _pctComplete = _pctComplete + ((Convert.ToDouble(_dbRoCnt) / Convert.ToDouble(_totalRoCnt)) * 80.0);
OnProgressChanged(displayText, Convert.ToInt32(_pctComplete), 100); OnProgressChanged(displayText, Convert.ToInt32(_pctComplete), 100);
} }
@@ -1701,7 +1655,7 @@ namespace VEPROMS.CSLA.Library
private void LoadChild(int rofstID, int dbiID, ROFSTLookup.rochild child) private void LoadChild(int rofstID, int dbiID, ROFSTLookup.rochild child)
{ {
//Insert Rofst Child //Insert Rofst Child
RofstChildInsert(rofstID, child.ID, child.ParentID, dbiID, child.type, child.title, child.roid, child.appid, child.value, child.ModDateTime); RofstChildInsert(rofstID, child.ID, child.ParentID, dbiID, child.type, child.title, child.roid, child.appid, child.value);
//Increment RO Count if RoChild has a return value //Increment RO Count if RoChild has a return value
if (!string.IsNullOrEmpty(child.value)) _curRoCnt++; if (!string.IsNullOrEmpty(child.value)) _curRoCnt++;
@@ -1721,13 +1675,15 @@ namespace VEPROMS.CSLA.Library
protected virtual void OnProgressChanged(string title, string displayText, int curVal = 0, int maxVal = 100) protected virtual void OnProgressChanged(string title, string displayText, int curVal = 0, int maxVal = 100)
{ {
// If frmRofstLoadStatus is not null then call Update Progress Method // If frmRofstLoadStatus is not null then call Update Progress Method
_frmRofstLoadStatus?.UpdateProgress(title, displayText, curVal, maxVal); if (_frmRofstLoadStatus != null)
_frmRofstLoadStatus.UpdateProgress(title, displayText, curVal, maxVal);
} }
protected virtual void OnProgressChanged(string displayText, int curVal = 0, int maxVal = 100) protected virtual void OnProgressChanged(string displayText, int curVal = 0, int maxVal = 100)
{ {
// If frmRofstLoadStatus is not null then call Update Progress Method // If frmRofstLoadStatus is not null then call Update Progress Method
_frmRofstLoadStatus?.UpdateProgress(_frmRofstLoadStatus.Title, displayText, curVal, maxVal); if (_frmRofstLoadStatus != null)
_frmRofstLoadStatus.UpdateProgress(_frmRofstLoadStatus.Title, displayText, curVal, maxVal);
} }
#endregion #endregion
@@ -1738,22 +1694,21 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.roHdr ConvertToRoHdrObject(SafeDataReader dr, bool loadChildren) private ROFSTLookup.roHdr ConvertToRoHdrObject(SafeDataReader dr, bool loadChildren)
{ {
ROFSTLookup.roHdr rh = new ROFSTLookup.roHdr ROFSTLookup.roHdr rh = new ROFSTLookup.roHdr();
{
hSize = (int)dr.GetValue("hSize"),
hYear = (int)dr.GetValue("hYear"),
hMonth = (byte)dr.GetValue("hMonth"),
hDay = (byte)dr.GetValue("hDay"),
hcYear = (int)dr.GetValue("hcYear"),
hcMonth = (byte)dr.GetValue("hcMonth"),
hcDay = (byte)dr.GetValue("hcDay"),
hcHour = (byte)dr.GetValue("hcHour"),
hcMin = (byte)dr.GetValue("hcMin"),
hcSec = (byte)dr.GetValue("hcSec"),
hcHund = (byte)dr.GetValue("hcHund")
};
if (loadChildren) rh.hSize = (int)dr.GetValue("hSize");
rh.hYear = (int)dr.GetValue("hYear");
rh.hMonth = (byte)dr.GetValue("hMonth");
rh.hDay = (byte)dr.GetValue("hDay");
rh.hcYear = (int)dr.GetValue("hcYear");
rh.hcMonth = (byte)dr.GetValue("hcMonth");
rh.hcDay = (byte)dr.GetValue("hcDay");
rh.hcHour = (byte)dr.GetValue("hcHour");
rh.hcMin = (byte)dr.GetValue("hcMin");
rh.hcSec = (byte)dr.GetValue("hcSec");
rh.hcHund = (byte)dr.GetValue("hcHund");
if (loadChildren)
{ {
rh.myDbs = RofstDataGetDatabases(_rofstID); rh.myDbs = RofstDataGetDatabases(_rofstID);
} }
@@ -1763,18 +1718,17 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.rodbi ConvertToRodbiObject(SafeDataReader dr, bool loadChildren, bool loadAllChildren) private ROFSTLookup.rodbi ConvertToRodbiObject(SafeDataReader dr, bool loadChildren, bool loadAllChildren)
{ {
ROFSTLookup.rodbi rd = new ROFSTLookup.rodbi ROFSTLookup.rodbi rd = new ROFSTLookup.rodbi();
{
dbiID = (int)dr.GetValue("dbiID"),
dbiType = (int)dr.GetValue("dbiType"),
dbiAW = (int)dr.GetValue("dbiAW"),
dbiAP = (string)dr.GetValue("dbiAP"),
dbiTitle = (string)dr.GetValue("dbiTitle"),
ID = (int)dr.GetValue("ID"),
ParentID = (int)dr.GetValue("ParentID")
};
if (loadChildren || loadAllChildren) rd.dbiID = (int)dr.GetValue("dbiID");
rd.dbiType = (int)dr.GetValue("dbiType");
rd.dbiAW = (int)dr.GetValue("dbiAW");
rd.dbiAP = (string)dr.GetValue("dbiAP");
rd.dbiTitle = (string)dr.GetValue("dbiTitle");
rd.ID = (int)dr.GetValue("ID");
rd.ParentID = (int)dr.GetValue("ParentID");
if (loadChildren || loadAllChildren)
{ {
rd.children = RofstDataGetChildrenByID(_rofstID, rd.dbiID, rd.ID, false, loadAllChildren); rd.children = RofstDataGetChildrenByID(_rofstID, rd.dbiID, rd.ID, false, loadAllChildren);
} }
@@ -1784,16 +1738,15 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.rochild ConvertToRochildObject(SafeDataReader dr, bool loadChildren, bool loadAllChildren) private ROFSTLookup.rochild ConvertToRochildObject(SafeDataReader dr, bool loadChildren, bool loadAllChildren)
{ {
ROFSTLookup.rochild rc = new ROFSTLookup.rochild ROFSTLookup.rochild rc = new ROFSTLookup.rochild();
{
ID = (int)dr.GetValue("ID"),
ParentID = (int)dr.GetValue("ParentID"),
type = (int)dr.GetValue("type"),
title = (string)dr.GetValue("title"),
roid = (string)dr.GetValue("roid")
};
if (!string.IsNullOrEmpty((string)dr.GetValue("appid"))) rc.ID = (int)dr.GetValue("ID");
rc.ParentID = (int)dr.GetValue("ParentID");
rc.type = (int)dr.GetValue("type");
rc.title = (string)dr.GetValue("title");
rc.roid = (string)dr.GetValue("roid");
if (!string.IsNullOrEmpty((string)dr.GetValue("appid")))
{ {
rc.appid = (string)dr.GetValue("AccPageID"); rc.appid = (string)dr.GetValue("AccPageID");
@@ -1813,14 +1766,13 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.RoExtension ConvertToRoExtensionObject(SafeDataReader dr) private ROFSTLookup.RoExtension ConvertToRoExtensionObject(SafeDataReader dr)
{ {
ROFSTLookup.RoExtension re = new ROFSTLookup.RoExtension ROFSTLookup.RoExtension re = new ROFSTLookup.RoExtension();
{
Offset = (int)dr.GetValue("Offset"),
RoidExt = (string)dr.GetValue("RoidExt"),
AccPageExt = (string)dr.GetValue("AccPageExt")
};
return re; re.Offset = (int)dr.GetValue("Offset");
re.RoidExt = (string)dr.GetValue("RoidExt");
re.AccPageExt = (string)dr.GetValue("AccPageExt");
return re;
} }
#endregion #endregion
@@ -1878,6 +1830,7 @@ namespace VEPROMS.CSLA.Library
// Instead of returning the RoChildBase object with a single RoReturnVal object attached, just return the single Ro ReturnValue object. // Instead of returning the RoChildBase object with a single RoReturnVal object attached, just return the single Ro ReturnValue object.
var roRetVal = child.children.First(); var roRetVal = child.children.First();
//child.title = roRetVal.title;
child.appid = roRetVal.appid; child.appid = roRetVal.appid;
child.roid = roRetVal.roid; child.roid = roRetVal.roid;
child.value = roRetVal.value; child.value = roRetVal.value;
@@ -2131,71 +2084,44 @@ namespace VEPROMS.CSLA.Library
return ProcessRO(match, multiRtnVal); return ProcessRO(match, multiRtnVal);
} }
// Takes the RO text value and sees if a macro has been used. private string ProcessMacros(string str)
// If so it will perform the macro operation on the substring in the text value {
// Note** Right now the only macro is @HSP(), where every space between the "(" and ")" will be replaced with a hard space // Takes the RO text value and sees if a macro has been used.
private static string ProcessMacros(string str) // If so it will perform the macro operation on the substring in the text value
{ // Note** Right now the only macro is @HSP(), where every space between the "(" and ")" will be replaced with a hard space
if (string.IsNullOrEmpty(str) || str.ToUpper().IndexOf("@HSP(") < 0) if (string.IsNullOrEmpty(str))
return str; return str;
string rtnstr = str;
int indx;
string processingstr = str; //holds current string being processed while ((indx = rtnstr.ToUpper().IndexOf("@HSP(")) > -1)
int indx; //current position of @HSP( in string {
int endpos = 0; //end of last parens string resstr = rtnstr.Substring(0, indx);
int endHsp = rtnstr.IndexOf(")", indx);
StringBuilder sb = new StringBuilder(); //B2026 - 002 handle if parens inside a HSP
Stack<char> endparens = new Stack<char>(); int startpos = indx + 5;
while (rtnstr.Substring(startpos, endHsp - startpos).Contains("("))
{
startpos = rtnstr.IndexOf("(", startpos + 1, endHsp - startpos) + 1;
endHsp = rtnstr.IndexOf(")", endHsp + 1);
}
while ((indx = processingstr.ToUpper().IndexOf("@HSP(")) > -1) string tmpstr = rtnstr.Substring(indx + 5, endHsp - indx - 5);
{
sb.Append(processingstr.Substring(0, indx)); // initial string before @HSP(
for (int i = indx + 5; i < processingstr.Length; i++) // B2017-012 Don't convert space to hard spaces for XY Plots.
{ if (!tmpstr.Contains("<<G")) tmpstr = tmpstr.Replace(" ", @"\u160?");
char ch = processingstr[i];
if (ch == '(') resstr = resstr + tmpstr;
{ rtnstr = resstr + rtnstr.Substring(endHsp + 1);
//if opening paren inside HSP add it to the stack to look for a closing parens }
endparens.Push(ch);
}
else if (ch == ')' && endparens.Count > 0)
{
//if cloing parens and it matches an opening parens inside of HSP, remove a level
_ = endparens.Pop();
}
else if (ch == ')' && endparens.Count == 0)
{
//if closing parens and at same level as HSP, break out since found correct closing parens
endpos = i;
break;
}
else if (i == processingstr.Length - 1)
{
//if hit the end of the string and no matching closing parens found, take to the end of the string
endpos = processingstr.Length;
}
}
//Add the text inside the @HSP(...) return rtnstr;
string tmpstr = processingstr.Substring(indx + 5, endpos - indx - 5); }
// B2017-012 Don't convert space to hard spaces for XY Plots.
if (!tmpstr.Contains("<<G")) tmpstr = tmpstr.Replace(" ", @"\u160?");
sb.Append(tmpstr);
//Set the processing string to after the ending parens found in case multiple @HSP private int StringLength(byte[] ab, int offset)
processingstr = endpos + 1 >= processingstr.Length ? "" : processingstr.Substring(endpos + 1);
}
//add text after last end parens
sb.Append(processingstr);
return sb.ToString();
}
private int StringLength(byte[] ab, int offset)
{ {
int i = 0; int i = 0;
while (ab[i + offset] != 0) i++; while (ab[i + offset] != 0) i++;
@@ -2304,7 +2230,7 @@ namespace VEPROMS.CSLA.Library
{ {
rc.roid = FormatRoidKey(roid).Substring(0, 12); rc.roid = FormatRoidKey(roid).Substring(0, 12);
DocVersionConfig dvc = _myDocVersionInfo?.DocVersionConfig; DocVersionConfig dvc = (_myDocVersionInfo != null) ? _myDocVersionInfo.DocVersionConfig : null;
if (dvc != null) dvc.SelectedSlave = this.SelectedSlave; if (dvc != null) dvc.SelectedSlave = this.SelectedSlave;
switch (rc.roid) switch (rc.roid)
@@ -2312,49 +2238,49 @@ namespace VEPROMS.CSLA.Library
case "FFFF00000001": case "FFFF00000001":
rc.title = "Number"; rc.title = "Number";
rc.appid = "U-NUMBER"; rc.appid = "U-NUMBER";
rc.value = dvc?.Unit_Number; rc.value = (dvc != null) ? dvc.Unit_Number : null;
break; break;
case "FFFF00000002": case "FFFF00000002":
rc.title = "Other Number"; rc.title = "Other Number";
rc.appid = "U-OTHERNUMBER"; rc.appid = "U-OTHERNUMBER";
rc.value = dvc?.Other_Unit_Number; rc.value = (dvc != null) ? dvc.Other_Unit_Number : null;
break; break;
case "FFFF00000003": case "FFFF00000003":
rc.title = "Text"; rc.title = "Text";
rc.appid = "U-TEXT"; rc.appid = "U-TEXT";
rc.value = dvc?.Unit_Text; rc.value = (dvc != null) ? dvc.Unit_Text : null;
break; break;
case "FFFF00000004": case "FFFF00000004":
rc.title = "Other Text"; rc.title = "Other Text";
rc.appid = "U-OTHERTEXT"; rc.appid = "U-OTHERTEXT";
rc.value = dvc?.Other_Unit_Text; rc.value = (dvc != null) ? dvc.Other_Unit_Text : null;
break; break;
case "FFFF00000005": case "FFFF00000005":
rc.title = "ID"; rc.title = "ID";
rc.appid = "U-ID"; rc.appid = "U-ID";
rc.value = dvc?.Unit_ID; rc.value = (dvc != null) ? dvc.Unit_ID : null;
break; break;
case "FFFF00000006": case "FFFF00000006":
rc.title = "Other ID"; rc.title = "Other ID";
rc.appid = "U-OTHERID"; rc.appid = "U-OTHERID";
rc.value = dvc?.Other_Unit_ID; rc.value = (dvc != null) ? dvc.Other_Unit_ID : null;
break; break;
case "FFFF00000007": case "FFFF00000007":
rc.title = "Name"; rc.title = "Name";
rc.appid = "U-NAME"; rc.appid = "U-NAME";
rc.value = dvc?.Unit_Name; rc.value = (dvc != null) ? dvc.Unit_Name : null;
break; break;
case "FFFF00000008": case "FFFF00000008":
rc.title = "Other Name"; rc.title = "Other Name";
rc.appid = "U-OTHERNAME"; rc.appid = "U-OTHERNAME";
rc.value = dvc?.Other_Unit_Name; rc.value = (dvc != null) ? dvc.Other_Unit_Name : null;
break; break;
} }
@@ -88,9 +88,9 @@ namespace VEPROMS.CSLA.Library
} }
public override string ToString() public override string ToString()
{ {
string itemTitle = Regex.Replace(this.Path, "^..+?\\u0007", ""); string itemTitle = Regex.Replace(this.Path, "^..+?\\u0007", "");
itemTitle = itemTitle.Replace("\x11", itemTitle[0] == '\x11' ? "" : " - ").Replace("\\u8209?", "-").Replace(@"\u9586?",@"\"); itemTitle = itemTitle.Replace("\x11", itemTitle[0] == '\x11' ? "" : " - ").Replace("\\u8209?", "-").Replace(@"\u9586?",@"\");
return string.Format("{4} item {0} by {1} on {2} @ {3}", this.ActionWhat, this.UserID, this.ActionWhen == DateTime.MinValue ? this.DTS.ToShortDateString() : this.ActionWhen.ToShortDateString(), this.ActionWhen == DateTime.MinValue ? this.DTS.ToString("HH:mm:ss") : this.ActionWhen.ToString("HH:mm:ss"), itemTitle); return string.Format("{4} item {0} by {1} on {2} @ {3}", this.ActionWhat, this.UserID, this.ActionWhen == DateTime.MinValue ? this.DTS.ToShortDateString() : this.ActionWhen.ToShortDateString(), this.ActionWhen == DateTime.MinValue ? this.DTS.ToShortTimeString() : this.ActionWhen.ToShortTimeString(), itemTitle);
//return string.Format("{0} by {1} on {2}", this.DeleteStatus == 0 ? "Changed" : "Deleted", this.UserID, this.DTS.ToString("MM/dd/yyyy @ HH:mm:ss")); //return string.Format("{0} by {1} on {2}", this.DeleteStatus == 0 ? "Changed" : "Deleted", this.UserID, this.DTS.ToString("MM/dd/yyyy @ HH:mm:ss"));
//return string.Format("{0} - {1} {2}", this.UserID, this.DTS, this.DeleteStatus == 0 ? "" : "Deleted"); //return string.Format("{0} - {1} {2}", this.UserID, this.DTS, this.DeleteStatus == 0 ? "" : "Deleted");
} }
@@ -102,7 +102,7 @@ namespace VEPROMS.CSLA.Library
who = string.Format(" by {0}", this.UserID); who = string.Format(" by {0}", this.UserID);
if (this.DTS != DateTime.Parse("1/1/1980")) if (this.DTS != DateTime.Parse("1/1/1980"))
when = string.Format(" on {0}", this.DTS.ToString("MM/dd/yyyy @ HH:mm:ss")); when = string.Format(" on {0}", this.DTS.ToString("MM/dd/yyyy @ HH:mm:ss"));
return string.Format("{0}{1}{2}", this.ActionWhat, who, when); return string.Format("{0}{1}{2}", this.ActionWhat, who, when);
} }
} }
@@ -177,7 +177,7 @@ namespace VEPROMS.CSLA.Library
public override string ToString() public override string ToString()
{ {
return string.Format("{0}{1} deleted by {2} on {3}", this.Level == 0 ? "Previous " : this.Level == 1 ? "Next " : "", this.ItemType, this.UserID, this.DTS.ToString("MM/dd/yyyy @ HH:mm:ss")); return string.Format("{0}{1} deleted by {2} on {3} @ {4}", this.Level == 0 ? "Previous " : this.Level == 1 ? "Next " : "", this.ItemType, this.UserID, this.DTS.ToShortDateString(), this.DTS.ToShortTimeString());
// return string.Format("Deleted by {0} on {1} @ {2}", this.UserID, this.DTS.ToShortDateString(), this.DTS.ToShortTimeString()); // return string.Format("Deleted by {0} on {1} @ {2}", this.UserID, this.DTS.ToShortDateString(), this.DTS.ToShortTimeString());
// return string.Format("(ItemID: {4}, DeleteID: {5}, {0} by {1} on {2} Level: {3}", this.DeleteStatus == 0 ? "Changed" : "Deleted", this.UserID, this.DTS.ToString("MM/dd/yyyy @ HH:mm:ss"), Level.ToString(), this.ItemID.ToString(), this.DeleteStatus.ToString()); // return string.Format("(ItemID: {4}, DeleteID: {5}, {0} by {1} on {2} Level: {3}", this.DeleteStatus == 0 ? "Changed" : "Deleted", this.UserID, this.DTS.ToString("MM/dd/yyyy @ HH:mm:ss"), Level.ToString(), this.ItemID.ToString(), this.DeleteStatus.ToString());
// return string.Format("Level: {3}, {0} - {1} {2}", this.UserID, this.DTS, this.DeleteStatus == 0 ? "" : "Deleted", this.Level.ToString()); // return string.Format("Level: {3}, {0} - {1} {2}", this.UserID, this.DTS, this.DeleteStatus == 0 ? "" : "Deleted", this.Level.ToString());
@@ -1258,7 +1258,7 @@ namespace VEPROMS.CSLA.Library
int lastStart = sel == null ? 0 : sel.Start; int lastStart = sel == null ? 0 : sel.Start;
while (sel != null) while (sel != null)
{ {
if (!string.IsNullOrEmpty(sel.Text)) if (!string.IsNullOrEmpty(sel.Text))
{ {
@@ -1438,7 +1438,7 @@ namespace VEPROMS.CSLA.Library
lastStart = sel.Start; lastStart = sel.Start;
sel = FindRO(); sel = FindRO();
if (sel != null && !string.IsNullOrEmpty(sel.Text) && sel.Start == lastStart) if (sel != null && !string.IsNullOrEmpty(sel.Text) && sel.Start == lastStart)
{ {
@@ -2124,22 +2124,22 @@ namespace VEPROMS.CSLA.Library
bool executeResult = false; bool executeResult = false;
LBSelection sel = null; LBSelection sel = null;
while (!executeResult) while (!executeResult)
{ {
sel = MyApp.Selection; sel = MyApp.Selection;
LBFind find = sel.Find; LBFind find = sel.Find;
find.ClearFormatting(); find.ClearFormatting();
// Search string format - this is MSWord wildcard format // Search string format - this is MSWord wildcard format
// If you do a search in MSWord, make sure wildcard box is checked and then press the // If you do a search in MSWord, make sure wildcard box is checked and then press the
// Special button to see the definitions of the various wildcards // Special button to see the definitions of the various wildcards
// [<] - Less-Than Character // [<] - Less-Than Character
// [!<> -]@ - 1 or more characters not including Less-Than, Greater-Than, Dash or Space // [!<> -]@ - 1 or more characters not including Less-Than, Greater-Than, Dash or Space
// - Dash // - Dash
// [!<>]@ - 1 or more characters not including Less-Than, Greater-Than. // [!<>]@ - 1 or more characters not including Less-Than, Greater-Than.
// a space be included as part of the accessory page id (Callaway, EOP Addendum 37) // a space be included as part of the accessory page id (Callaway, EOP Addendum 37)
// [>] - Greater-Than Character // [>] - Greater-Than Character
find.Text = "[<][!<> -]@-[!<>]@[>]"; find.Text = "[<][!<> -]@-[!<>]@[>]";
find.Wrap = LBWdFindWrap.wdFindContinue; find.Wrap = LBWdFindWrap.wdFindContinue;
find.MatchCase = false; find.MatchCase = false;
find.MatchWholeWord = false; find.MatchWholeWord = false;
@@ -2159,18 +2159,14 @@ namespace VEPROMS.CSLA.Library
{ {
tryagain = false; tryagain = false;
executeResult = find.Execute(); executeResult = find.Execute();
// B2022-053 if the found text does not begin with a "<" and end with a ">", then // B2022-053 if the found text does not begin with a "<" and end with a ">", then
// move past that text and try the Word Find function again. // move past that text and try the Word Find function again.
// B2022-088: [JPR] Find Doc Ro button not working in Word Sections // B2022-088: [JPR] Find Doc Ro button not working in Word Sections
// B2022-098: [JPR] ROs not being resolved in Word Sections // B2022-098: [JPR] ROs not being resolved in Word Sections
// B2026-070: When there is a less-then sign (<) followed by a numeric value in a Word attachment (inside of a table), PROMS thinks the user put in an RO token will generate an RO not found error in the following table row who's text contains <U-Name>.
if (executeResult && !string.IsNullOrEmpty(sel.Text) && !sel.Text.StartsWith("<") && !sel.Text.EndsWith(">")) if (executeResult && !string.IsNullOrEmpty(sel.Text) && !sel.Text.StartsWith("<") && !sel.Text.EndsWith(">"))
{ {
int location = sel.Start + sel.Text.Length - 1; //do not do this inline - this needs captured before WholeStory sel.MoveStart(LBWdUnits.wdCharacter, sel.Text.Length - 1);
tryagain = true;
sel.WholeStory();
sel.MoveStart(LBWdUnits.wdCharacter, location);
tryagain = true;
} }
} while (tryagain); } while (tryagain);
@@ -2195,7 +2191,7 @@ namespace VEPROMS.CSLA.Library
sel.MoveStart(LBWdUnits.wdCharacter, 1); sel.MoveStart(LBWdUnits.wdCharacter, 1);
executeResult = false; executeResult = false;
} }
} }
if (executeResult) return sel; if (executeResult) return sel;
+28 -94
View File
@@ -1093,17 +1093,8 @@ namespace VEPROMS.CSLA.Library
} }
} }
} }
// B2022-026 RO Memory Reduction code - pass in ROFstInfo
//C2026-008 Re-Architect RO.FST to include RO Modification date/time internal static void MyRefreshReferenceObjects(ItemInfo itemInfo, IVEDrillDownReadOnly itemParent, SectionInfo sectionInfo, DocVersionInfo docVersionInfo, ROFstInfo origROFst)
//Refresh at item level
public static void RefreshReferenceObjects(ItemInfo tmp, ROFstInfo origROFst)
{
if (tmp.MyDocVersion.DocVersionConfig.SelectedSlave <= 0)
MyRefreshReferenceObjects(tmp, null, tmp.GetSectionInfo(), tmp.MyDocVersion, origROFst);
}
// B2022-026 RO Memory Reduction code - pass in ROFstInfo
internal static void MyRefreshReferenceObjects(ItemInfo itemInfo, IVEDrillDownReadOnly itemParent, SectionInfo sectionInfo, DocVersionInfo docVersionInfo, ROFstInfo origROFst)
{ {
if (itemInfo.MyContent.ContentPartCount > 0) if (itemInfo.MyContent.ContentPartCount > 0)
{ {
@@ -1228,47 +1219,31 @@ namespace VEPROMS.CSLA.Library
return true; return true;
} }
//C2026-008 Re-Architect RO.FST to include RO Modification date/time #region Debug Code
public static List<ItemInfo> GetItemInfoWithChangedROs(int docversionid, int origfstid, int newfstid)
{
List<ItemInfo> lst = new List<ItemInfo>();
foreach (DataRow r in Data_GetItemsWithChangedROs(docversionid, origfstid, newfstid).Rows) //private static void ShowDifference(string oldText, string newText)
{ //{
using (ItemInfo itm = Get((int)r["ItemID"])) // string nt = newText.Replace(@"\u8209?", "-").Replace(@"\u160?", " ").Replace("\xA0", " ");
{ // string ot = oldText.Replace(@"\u8209?", "-").Replace(@"\u160?", " ").Replace("\xA0", " ");
lst.Add(itm); // ShowText("OldText", ot);
} // ShowText("NewText", nt);
} //}
//private static void ShowText(string title, string newText)
//{
// StringBuilder sb = new StringBuilder();
// foreach (char c in newText)
// {
// if(c<' ' || c> '\x7F')
// sb.Append(string.Format("\\x{0:X2}",((int) c)));
// else
// sb.Append(c);
// }
// Console.WriteLine("{0}='{1}'",title,sb.ToString());
//}
return lst; #endregion // debug
}
#region Debug Code internal static void SetParentSectionAndDocVersionPageNum(ItemInfo itemInfo, IVEDrillDownReadOnly itemParent, SectionInfo sectionInfo, ProcedureInfo procInfo, DocVersionInfo docVersionInfo, TransitionLookup tranLookup)
//private static void ShowDifference(string oldText, string newText)
//{
// string nt = newText.Replace(@"\u8209?", "-").Replace(@"\u160?", " ").Replace("\xA0", " ");
// string ot = oldText.Replace(@"\u8209?", "-").Replace(@"\u160?", " ").Replace("\xA0", " ");
// ShowText("OldText", ot);
// ShowText("NewText", nt);
//}
//private static void ShowText(string title, string newText)
//{
// StringBuilder sb = new StringBuilder();
// foreach (char c in newText)
// {
// if(c<' ' || c> '\x7F')
// sb.Append(string.Format("\\x{0:X2}",((int) c)));
// else
// sb.Append(c);
// }
// Console.WriteLine("{0}='{1}'",title,sb.ToString());
//}
#endregion // debug
internal static void SetParentSectionAndDocVersionPageNum(ItemInfo itemInfo, IVEDrillDownReadOnly itemParent, SectionInfo sectionInfo, ProcedureInfo procInfo, DocVersionInfo docVersionInfo, TransitionLookup tranLookup)
{ {
if (itemInfo.MyContent.ContentPartCount > 0) if (itemInfo.MyContent.ContentPartCount > 0)
{ {
@@ -1915,44 +1890,10 @@ namespace VEPROMS.CSLA.Library
foreach (ItemInfo itemInfo in partInfo.MyItems) foreach (ItemInfo itemInfo in partInfo.MyItems)
itemInfo.SpinThroughChildren(); itemInfo.SpinThroughChildren();
} }
#endregion
//C2026-008 Re-Architect RO.FST to include RO Modification date/time #region LoadAtOnce
private static DataTable Data_GetItemsWithChangedROs(int docversionid, int origfstid, int newfstid) // Method to Get Item and children
{ public static ItemInfo GetItemAndChildren(int? itemID, int? parentID)
try
{
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
{
using (SqlCommand cm = cn.CreateCommand())
{
cm.CommandType = CommandType.StoredProcedure;
cm.CommandText = "getItemsWithNewROs";
cm.Parameters.AddWithValue("@VersionID", docversionid);
cm.Parameters.AddWithValue("@OrigFSTid", origfstid);
cm.Parameters.AddWithValue("@NewFSTid", newfstid);
cm.CommandTimeout = Database.DefaultTimeout;
using (SqlDataAdapter da = new SqlDataAdapter(cm))
{
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
}
}
}
catch (Exception ex)
{
Database.LogException("ItemInfoList.Data_GetItemsWithChangedROs", ex);
throw new DbCslaException("ItemInfoList.Data_GetItemsWithChangedROs", ex);
}
}
#endregion
#region LoadAtOnce
// Method to Get Item and children
public static ItemInfo GetItemAndChildren(int? itemID, int? parentID)
{ {
try try
{ {
@@ -4113,9 +4054,6 @@ namespace VEPROMS.CSLA.Library
// date). Print_ViewableAfterChangeBarDate was created to get only that user specified date, if it exists. If it does exist, we compare // date). Print_ViewableAfterChangeBarDate was created to get only that user specified date, if it exists. If it does exist, we compare
// that with the Content datetime, otherwise we proceed as before. // that with the Content datetime, otherwise we proceed as before.
DateTime? viewableStartingDateTime = (MyProcedure.MyConfig as ProcedureConfig).Print_ViewableStartingChangeBarDate; DateTime? viewableStartingDateTime = (MyProcedure.MyConfig as ProcedureConfig).Print_ViewableStartingChangeBarDate;
// B2026-060 & B2026-061 removed the check of SelectedSlave (aka the selected child) from the IF statement,
// This was causing some step to print with change bars when there should not have been - because of the use of
// the Show Change Bars After date. The logic we need is built into the get of ChangeBarDate and Print_ViewableStartingChangeBarDate.
if (viewableStartingDateTime != null && viewableStartingDateTime > MyProcedure.ChangeBarDate) if (viewableStartingDateTime != null && viewableStartingDateTime > MyProcedure.ChangeBarDate)
return (MyContent.DTS > viewableStartingDateTime); return (MyContent.DTS > viewableStartingDateTime);
return (MyContent.DTS > MyProcedure.ChangeBarDate); return (MyContent.DTS > MyProcedure.ChangeBarDate);
@@ -8126,10 +8064,6 @@ namespace VEPROMS.CSLA.Library
} }
set { _ChangeBarDate = value; } set { _ChangeBarDate = value; }
} }
//C2026-021 Expand Functionality of Viewing Mode
public void ResetChangeBar() => _ChangeBarDate = null;
public Dictionary<int, ItemInfo> MyLookup = null; public Dictionary<int, ItemInfo> MyLookup = null;
public override void SetupTags() public override void SetupTags()
{ {
+50 -40
View File
@@ -61,47 +61,57 @@ namespace VEPROMS.CSLA.Library
throw new DbCslaException("Pdf.DataPortal_Delete", ex); throw new DbCslaException("Pdf.DataPortal_Delete", ex);
} }
} }
// used to remove word section PDFs to force ROs to be updated when printed or saved
public static void DeleteAllDocVersion(int versionID)
{
if (!CanDeleteObject())
throw new System.Security.SecurityException("User not authorized to remove a Pdf");
try
{
DataPortal.Delete(new VersionIDCriteria(versionID));
}
catch (Exception ex)
{
throw new DbCslaException("Error on Pdf.DeleteAllDocVersion", ex);
}
}
[Serializable()]
protected class VersionIDCriteria
{
private int _VersionID;
public int VersionID
{ get { return _VersionID; } }
public VersionIDCriteria(int versionID)
{
_VersionID = versionID;
}
}
[Transactional(TransactionalTypes.TransactionScope)]
private void DataPortal_Delete(VersionIDCriteria criteria)
{
if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] Pdf.DataPortal_Delete", GetHashCode());
try
{
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
{
using (SqlCommand cm = cn.CreateCommand())
{
cm.CommandType = CommandType.StoredProcedure;
cm.CommandTimeout = Database.SQLTimeout;
cm.CommandText = "deleteAllDocVersionPdfs";
cm.Parameters.AddWithValue("@VersionID", criteria.VersionID);
cm.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
if (_MyLog.IsErrorEnabled) _MyLog.Error("Pdf.DataPortal_Delete", ex);
_ErrorMessage = ex.Message;
throw new DbCslaException("Pdf.DataPortal_Delete", ex);
}
}
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
// used to remove word section PDFs to force ROs to be updated when printed or saved
public static void DeleteDocVersionPDFsWithNewROs(int versionID, int origfstid, int newfstid)
{
if (!CanDeleteObject())
throw new System.Security.SecurityException("User not authorized to remove a Pdf");
try
{
DeleteWithNewROs(versionID, origfstid, newfstid);
}
catch (Exception ex)
{
throw new DbCslaException("Error on Pdf.DeleteAllDocVersion", ex);
}
}
static private void DeleteWithNewROs(int docversionID, int origfstid, int newfstid)
{
try
{
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
{
using (SqlCommand cm = cn.CreateCommand())
{
cm.CommandType = CommandType.StoredProcedure;
cm.CommandTimeout = Database.SQLTimeout;
cm.CommandText = "deleteDocVersionPdfsWithNewROs";
cm.Parameters.AddWithValue("@VersionID", docversionID);
cm.Parameters.AddWithValue("@OrigFSTid", origfstid);
cm.Parameters.AddWithValue("@NewFSTid", newfstid);
cm.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
if (_MyLog.IsErrorEnabled) _MyLog.Error("Pdf.DeleteWithNewROs", ex);
throw new DbCslaException("Pdf.DeleteWithNewROs", ex);
}
}
} }
public partial class PdfInfo public partial class PdfInfo
{ {
+246 -82
View File
@@ -225,64 +225,41 @@ namespace VEPROMS.CSLA.Library
} }
} }
//C2026-008 Re-Architect RO.FST to include RO Modification date/time // B2022-026 RO Memory Reduction code - pass in the ROFstInfo
// Refresh at item level public static int RefreshROFst(DocVersionInfo dvi, ROFstInfoProgressBarRefresh myProgressBarRefresh, System.Windows.Forms.TextBox tbStatus, ROFstInfo origROFst)
public static int RefreshROFstAtItemLevel(DocVersionInfo dvi, ROFstInfoProgressBarRefresh myProgressBarRefresh, System.Windows.Forms.TextBox tbStatus, ROFstInfo localROFst, int origfstid, int newfstid) {
{ int fixedROs = 0;
int fixedROs = 0;
if (dvi.DocVersionConfig.SelectedSlave <= 0) if (dvi.DocVersionConfig.SelectedSlave <= 0)
{ {
// remove word section PDFs to force update of RO values when printed myProgressBarRefresh(1, 100, "Update MS Word ROs");
myProgressBarRefresh(1, 100, "Updating MS Word ROs In Progress");
Pdf.DeleteDocVersionPDFsWithNewROs(dvi.VersionID, origfstid, newfstid);
//Loop Through ROs in this docversion that are different than the previous fst Pdf.DeleteAllDocVersion(dvi.VersionID); // remove word section PDFs to force update of RO values when printed
myProgressBarRefresh(50, 100, "Updating ROs In PROMS Steps In Progress"); int i = 0;
int i = 0;
List<ItemInfo> list = ItemInfo.GetItemInfoWithChangedROs(dvi.VersionID, origfstid, newfstid);
foreach (ItemInfo itm in list)
{
DateTime start = DateTime.Now;
ItemInfo.ResetROCounters(); foreach (ProcedureInfo proc in dvi.Procedures)
myProgressBarRefresh(++i, list.Count, string.Format("{0} ({1}/{2} ROs {3})", itm.MyProcedure.DisplayNumber, i, list.Count, fixedROs)); {
ItemInfo.RefreshReferenceObjects(itm, localROFst); DateTime start = DateTime.Now;
fixedROs += ItemInfo.ROFixCount;
TimeSpan ts = DateTime.Now - start; ProcedureInfo.ResetROCounters();
myProgressBarRefresh(++i, dvi.Procedures.Count, string.Format("{0} ({1}/{2} ROs {3})", proc.DisplayNumber, i, dvi.Procedures.Count, fixedROs));
ProcedureInfo.RefreshReferenceObjects(proc, origROFst);
fixedROs += ProcedureInfo.ROFixCount;
if (tbStatus != null) TimeSpan ts = DateTime.Now - start;
tbStatus.AppendText(string.Format("Procedure: {1}{0}, Checked {2} Referenced Objects{0}, Fixed {3} Referenced Objects{0}, Elapsed Seconds:{4}{0}{0}", Environment.NewLine, itm.MyProcedure.DisplayNumber, ItemInfo.ROCheckCount, ItemInfo.ROFixCount, ts.TotalSeconds));
}
//Update the DocVersion Associations to link to the new RO FST id and current date/time if (tbStatus != null)
using (DocVersion dv = DocVersion.Get(dvi.VersionID)) tbStatus.AppendText(string.Format("Procedure: {1}{0}, Checked {2} Referenced Objects{0}, Fixed {3} Referenced Objects{0}, Elapsed Seconds:{4}{0}{0}", Environment.NewLine, proc.DisplayNumber, ProcedureInfo.ROCheckCount, ProcedureInfo.ROFixCount, ts.TotalSeconds));
{ }
if (dvi.DocVersionAssociations[0].MyROFst.ROFstID != newfstid) }
{
dv.DocVersionAssociations[0].MyROFst = localROFst.GetJustROFst();
}
// B2026-066 moved this out of if statement above
// - was not resetting the datetime and thus not disabling the Update RO Values button and menu item
SetAssociationLastCompleted(dv, DateTime.Now.ToString());
}
}
// pop up a message window telling the user the RO Update has completed and how many ROs were updated return fixedROs;
// If we are updating RO from the Admin Tools (from the V button) and we are updating more than on procedure set, then just append the "RO Update Complete" text }
// To the MessageList. Once completed will all procedure sets, Admin Tools will display one message box with all the results in it.
if (MessageList == null)
FlexibleMessageBox.Show(fixedROs == 0 ? "No ROs Required Updating" : string.Format("{0} ROs Updated for {1}", fixedROs, dvi.MyFolder.Name), "RO Update Complete");
else
MessageList.AppendLine((fixedROs == 0 ? "No ROs Required Updating for " : string.Format("{0} ROs Updated for ", fixedROs)) + dvi.MyFolder.Name);
return fixedROs;
}
//C2022-028 for Admin tool to check for bad RO links //C2022-028 for Admin tool to check for bad RO links
//B2022-144 we now loop through checked procedures list from Admin Tools and call this method for each procedure we want to process //B2022-144 we now loop through checked procedures list from Admin Tools and call this method for each procedure we want to process
public static int CheckROLinksInThisProcedure(ProcedureInfo proc, System.Windows.Forms.TextBox tbStatus) public static int CheckROLinksInThisProcedure(ProcedureInfo proc, System.Windows.Forms.TextBox tbStatus)
{ {
int FoundBadROLinks = 0; int FoundBadROLinks = 0;
DocVersionInfo dvi = DocVersionInfo.Get(proc.MyDocVersion.VersionID); DocVersionInfo dvi = DocVersionInfo.Get(proc.MyDocVersion.VersionID);
@@ -314,6 +291,34 @@ namespace VEPROMS.CSLA.Library
return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS\ROUpdateReport_" + ValidFileName.FixFileName(dvi.MyFolder.Name.Replace(" ", "_") + "_" + DateTime.Now.ToString("MM-dd-yyyy_HH-mm-ss") + ".txt"); return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS\ROUpdateReport_" + ValidFileName.FixFileName(dvi.MyFolder.Name.Replace(" ", "_") + "_" + DateTime.Now.ToString("MM-dd-yyyy_HH-mm-ss") + ".txt");
} }
// B2022-026 RO Memory Reduction code - moved the call to UpdateROFst() to before we call RefreshROFst
// so that we used the correct ROFstInfo which as the needed event methods set when updated RO Table types
public static ROFst RefreshROFst(DocVersion docver, ROFstInfo origROFst, ROFstInfoProgressBarRefresh myProgressBarRefresh, System.Windows.Forms.TextBox tbStatus)
{
ROFst rofst = null;
rofst = docver.DocVersionAssociations[0].MyROFst;
DocVersionInfo dvi = DocVersionInfo.Get(docver.VersionID);
SetAssociationLastCompleted(docver, string.Empty);
int fixedROs = RefreshROFst(dvi, myProgressBarRefresh, tbStatus, origROFst);
SetAssociationLastCompleted(docver, DateTime.Now.ToString()); // RO Update completed successfully and un-interrupted, save the date/time to the Doc Version Association config
myProgressBarRefresh(100, 100, "RO Update Complete"); // update the progress bar
System.Windows.Forms.Application.DoEvents();
// pop up a message window telling the user the RO Update has completed and how many ROs were updated
// If we are updating RO from the Admin Tools (from the V button) and we are updating more than on procedure set, then just append the "RO Update Complete" text
// To the MessageList. Once completed will all procedure sets, Admin Tools will display one message box with all the results in it.
if (MessageList == null)
FlexibleMessageBox.Show(fixedROs == 0 ? "No ROs Required Updating" : string.Format("{0} ROs Updated for {1}", fixedROs, dvi.MyFolder.Name), "RO Update Complete");
else
MessageList.AppendLine((fixedROs == 0 ? "No ROs Required Updating for " : string.Format("{0} ROs Updated for ", fixedROs)) + dvi.MyFolder.Name);
return rofst;
}
/// <summary> /// <summary>
/// Updates an ro.fst into a sql database. /// Updates an ro.fst into a sql database.
/// </summary> /// </summary>
@@ -328,13 +333,9 @@ namespace VEPROMS.CSLA.Library
// all of the calls aways set the flags to not update the RO values // all of the calls aways set the flags to not update the RO values
public static ROFst UpdateRoFst(RODbInfo rdi, DocVersion docver, ROFstInfo origROFst, ROFstInfoProgressBarRefresh myProgressBarRefresh) public static ROFst UpdateRoFst(RODbInfo rdi, DocVersion docver, ROFstInfo origROFst, ROFstInfoProgressBarRefresh myProgressBarRefresh)
{ {
ROWorkingDraftAsk.ClearWorkingDrafts(); if (myProgressBarRefresh != null) myProgressBarRefresh(0, 100, "Starting Update");
if (myProgressBarRefresh != null) myProgressBarRefresh(0, 100, "Starting Update"); DirectoryInfo di = new DirectoryInfo(rdi.FolderPath);
int origFSTid = origROFst.ROFstID;
DirectoryInfo di = new DirectoryInfo(rdi.FolderPath);
string rofstfilepath = rdi.FolderPath + @"\ro.fst"; string rofstfilepath = rdi.FolderPath + @"\ro.fst";
FileStream fsIn = new FileStream(rofstfilepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); FileStream fsIn = new FileStream(rofstfilepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
FileInfo rofstFI = new FileInfo(rofstfilepath); FileInfo rofstFI = new FileInfo(rofstfilepath);
@@ -360,9 +361,8 @@ namespace VEPROMS.CSLA.Library
docver.DocVersionAssociations[0].MyROFst = rofst; docver.DocVersionAssociations[0].MyROFst = rofst;
SetAssociationLastCompleted(docver, string.Empty); SetAssociationLastCompleted(docver, string.Empty);
SetPrevFSTID(docver, origFSTid); // //C2026-008 Re-Architect RO.FST to include RO Modification date/time
return rofst; return rofst;
} }
// Read in the rofst & make the rofst record. // Read in the rofst & make the rofst record.
@@ -384,10 +384,7 @@ namespace VEPROMS.CSLA.Library
// Keep a list of ROIDs for Images that have changed. // Keep a list of ROIDs for Images that have changed.
List<string> MyChangedFigureROIDs = UpdateROFigures(rdi, myProgressBarRefresh, rofst, rodb, myLookup, docver); List<string> MyChangedFigureROIDs = UpdateROFigures(rdi, myProgressBarRefresh, rofst, rodb, myLookup, docver);
//C2026-008 Re-Architect RO.FST to include RO Modification date/time return rofst;
SetPrevFSTID(docver, origFSTid);
return rofst;
} }
} }
@@ -487,22 +484,8 @@ namespace VEPROMS.CSLA.Library
docver.Save(); docver.Save();
} }
//C2026-008 Re-Architect RO.FST to include RO Modification date/time // Place the status of loading the RO Figures when updating RO Values
// Place the previous ROFSTID in the config in case network error or computer crashes while updating RO Values private static void SetAssociationROFiguresLoading(DocVersion docver, string value)
private static void SetPrevFSTID(DocVersion docver, int value)
{
if (docver.DocVersionAssociations[0]?.MyROFst != null && value != -1)
{
string cfg = docver.DocVersionAssociations[0].Config;
AssociationConfig ac = new AssociationConfig((cfg == null || cfg.Length == 0) ? "<Config />" : cfg);
ac.ROUpdate_PrevROFSTID = value.ToString();
docver.DocVersionAssociations[0].Config = ac.ToString();
docver.Save();
}
}
// Place the status of loading the RO Figures when updating RO Values
private static void SetAssociationROFiguresLoading(DocVersion docver, string value)
{ {
string cfg = docver.DocVersionAssociations[0].Config; string cfg = docver.DocVersionAssociations[0].Config;
@@ -687,7 +670,188 @@ namespace VEPROMS.CSLA.Library
return sb.ToString(); return sb.ToString();
} }
private static DateTime ShowDuration(DateTime dtLast, string message) private static void UpdateROValuesText(ROFstInfo origROFstInfo, ROFst newROFst, DocVersionInfo dvi, ROFstInfoProgressBarRefresh myProgressBarRefresh, List<string> MyChangedFigureROIDs)
{
if (myProgressBarRefresh != null) myProgressBarRefresh(0, 100, "Update Ro Values");
string versionList = dvi.VersionID.ToString();
ROFSTLookup origLookup = new ROFSTLookup(origROFstInfo.ROFstID, dvi);
ROFSTLookup newLookup = new ROFSTLookup(newROFst.ROFstID, dvi);
List<string> delList = new List<string>();
List<string> chgList = newLookup.GetValueDifferences(origROFstInfo.ROFstID, ref delList);
// Any figures which have been changed will be included in the list of values that have changed.
if (MyChangedFigureROIDs != null)
{
foreach (string roid in MyChangedFigureROIDs)
{
if (!chgList.Contains(roid)) chgList.Add(roid);
}
}
string RoidList = GetRoidList(newROFst.RODbID, chgList);
if (myProgressBarRefresh != null) myProgressBarRefresh(0, chgList.Count, "Getting List of ROs Used");
List<string> activeRoids = BuildActiveROIDsForRoUsages12(RoidList, versionList);
if (myProgressBarRefresh != null) myProgressBarRefresh(0, chgList.Count, "Updating RO Values");
int iCount = 0;
if (activeRoids.Count > 0)
{
foreach (string chg in chgList)
{
if (myProgressBarRefresh != null) myProgressBarRefresh(++iCount, chgList.Count, "Updating RO Values");
if (activeRoids.Contains(chg.Substring(0, 12)))
{
ROFSTLookup.rochild roch = newLookup.GetRoChild(chg);
string desc = string.Format("Change in RO Values: Old value = {0}, New value = {1}", origLookup.GetRoChild(chg).value, roch.value);
// roid's are stored in database as 16 characters long in the RoUsages table. They may be stored as 12 characters in the ro.fst.
// string padroid = chg.Length <= 12 ? chg + "0000" : chg;
// B2022-088: Find Doc Ro button not working in Word Sections
string padroid = ROFSTLookup.FormatRoidKey(chg, true);
using (RoUsageInfoList affected = RoUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroid, desc, "Changed", versionList))
{
foreach (RoUsageInfo roUsg in affected)
{
using (Content content = Content.Get(roUsg.MyContent.ContentID))
{
foreach (ItemInfo ii in roUsg.MyContent.ContentItems)
{
string val = newLookup.GetTranslatedRoValue(padroid, ii.ActiveFormat.PlantFormat.FormatData.SectData.ConvertCaretToDelta, ii.ActiveFormat.PlantFormat.FormatData.SectData.UseTildaPoundCharsForSuperSubScriptInROValues, false, ii);
content.FixContentText(roUsg, val, roch.type, origROFstInfo, true);
if (content.IsDirty)
{
// Update UserID and DTS when RO Value is updated.
content.UserID = Volian.Base.Library.VlnSettings.UserID;
content.DTS = DateTime.Now;
content.Save();
if (content.MyGrid != null)
{
GridInfo.Refresh(content.MyGrid);
}
}
}
}
}
}
}
}
}
if (myProgressBarRefresh != null) myProgressBarRefresh(0, chgList.Count, "Getting List of ROs Used");
List<string> activeDRoids = BuildActiveROIDsForDRoUsages12(RoidList, versionList);
iCount = 0;
if (activeDRoids.Count > 0)
{
foreach (string chg in chgList)
{
// B2022-088: Find Doc Ro button not working in Word Sections
// string padroid = chg.Length <= 12 ? chg + "0000" : chg;
string padroid = ROFSTLookup.FormatRoidKey(chg, true);
if (myProgressBarRefresh != null) myProgressBarRefresh(++iCount, chgList.Count, "Updating RO Values");
if (activeDRoids.Contains(chg.Substring(0, 12)))
{
ROFSTLookup.rochild roch = newLookup.GetRoChild(chg);
string desc = string.Format("Change in RO Values: Old value = {0}, New value = {1}", origLookup.GetRoChild(chg).value, roch.value);
// roid's are stored in database as 16 characters long in the rousages table. They may be stored as 12 characters in the ro.fst.
using (DROUsageInfoList affected = DROUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroid, desc, "Changed", versionList))
{
foreach (DROUsageInfo droUsg in affected)
{
Pdf.DeleteAll(droUsg.DocID);
}
}
}
}
}
iCount = 0;
string RoidDelList = GetRoidList(newROFst.RODbID, delList);
if (myProgressBarRefresh != null) myProgressBarRefresh(0, chgList.Count, "Getting List of ROs Used");
activeRoids = BuildActiveROIDsForRoUsages12(RoidDelList, versionList);
if (activeRoids.Count > 0)
{
foreach (string del in delList)
{
// B2022-088: Find Doc Ro button not working in Word Sections
//string padroiddel = del.Length <= 12 ? del + "0000" : del;
string padroiddel = ROFSTLookup.FormatRoidKey(del, true);
if (myProgressBarRefresh != null) myProgressBarRefresh(++iCount, chgList.Count, "Removing Old RO Values");
string desc = string.Format("Deleted RO: Value = {0}", origLookup.GetRoChild(del).value);
if (activeRoids.Contains(del.Substring(0, 12).ToUpper()))
{
using (RoUsageInfoList affected = RoUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroiddel, desc, "Deleted", versionList))
{
foreach (RoUsageInfo roUsg in affected)
{
using (Content content = Content.Get(roUsg.MyContent.ContentID))
{
content.FixContentText(roUsg, "?", 0, origROFstInfo);
if (content.IsDirty)
{
// Update UserID and DTS when RO Value is updated.
content.UserID = Volian.Base.Library.VlnSettings.UserID;
content.DTS = DateTime.Now;
content.Save();
}
}
}
}
}
}
}
if (myProgressBarRefresh != null) myProgressBarRefresh(0, chgList.Count, "Getting List of ROs Used");
activeDRoids = BuildActiveROIDsForDRoUsages12(RoidDelList, versionList);
iCount = 0;
if (activeDRoids.Count > 0)
{
foreach (string del in delList)
{
// B2022-088: Find Doc Ro button not working in Word Sections
string padroiddel = ROFSTLookup.FormatRoidKey(del, true);
if (myProgressBarRefresh != null) myProgressBarRefresh(++iCount, chgList.Count, "Removing Old RO Values");
string desc = string.Format("Deleted RO: Value = {0}", origLookup.GetRoChild(del).value);
// If there's an issue then maybe try getting the RoChild with the Padded roid instead
//string desc = string.Format("Deleted RO: Value = {0}", origLookup.GetRoChild(padroiddel).value);
if (activeDRoids.Contains(del.Substring(0, 12).ToUpper()))
{
using (DROUsageInfoList Daffected = DROUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroiddel, desc, "Deleted", versionList))
{
foreach (DROUsageInfo droUsg in Daffected)
{
if (myProgressBarRefresh != null) myProgressBarRefresh(++iCount, chgList.Count, "Removing Old RO Values");
Pdf.DeleteAll(droUsg.DocID);
}
}
}
}
}
if (myProgressBarRefresh != null) myProgressBarRefresh(100, 100, "RO Values Updated");
}
private static DateTime ShowDuration(DateTime dtLast, string message)
{ {
DateTime dtNext = DateTime.Now; DateTime dtNext = DateTime.Now;
Console.WriteLine("{0,10:#####0.00},'{1}'", TimeSpan.FromTicks(dtNext.Ticks - dtLast.Ticks).TotalSeconds, message); Console.WriteLine("{0,10:#####0.00},'{1}'", TimeSpan.FromTicks(dtNext.Ticks - dtLast.Ticks).TotalSeconds, message);
@@ -935,10 +1099,10 @@ namespace VEPROMS.CSLA.Library
} }
} }
#endregion #endregion
} }
public class ROFstInfoROTableUpdateEventArgs public class ROFstInfoROTableUpdateEventArgs
{ {
private string _ROText; private string _ROText;
public string ROText public string ROText
@@ -1088,5 +1252,5 @@ namespace VEPROMS.CSLA.Library
this.RaiseListChangedEvents = true; this.RaiseListChangedEvents = true;
} }
} }
} }
@@ -1,18 +0,0 @@

using System.Collections.Generic;
namespace VEPROMS.CSLA.Library
{
public static class ROWorkingDraftAsk
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
private static List<int> WorkingDrafts = new List<int>();
public static void AddWorkingDrafts(int wd) => WorkingDrafts.Add(wd);
public static void ClearWorkingDrafts() => WorkingDrafts.Clear();
public static bool ContainsWorkingDraft(int wd) => WorkingDrafts.Contains(wd);
}
}
@@ -396,7 +396,6 @@
<Compile Include="Minimal\UserReports.cs" /> <Compile Include="Minimal\UserReports.cs" />
<Compile Include="Minimal\UserSettings.cs" /> <Compile Include="Minimal\UserSettings.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Session\ROWorkingDraftAsk.cs" />
<Compile Include="VEObjects\VEDrillDown.cs" /> <Compile Include="VEObjects\VEDrillDown.cs" />
<Compile Include="VEObjects\VETreeNode.cs" /> <Compile Include="VEObjects\VETreeNode.cs" />
</ItemGroup> </ItemGroup>
@@ -1,8 +0,0 @@

namespace Volian.Base.Library
{
public static class BaseLnSettings
{
public static bool blBaseLine { get; set; } = false;
}
}
@@ -90,7 +90,6 @@
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="BaseLnSettings.cs" />
<Compile Include="BigNum.cs" /> <Compile Include="BigNum.cs" />
<Compile Include="ByteArrayCompare.cs" /> <Compile Include="ByteArrayCompare.cs" />
<Compile Include="DebugPrint.cs" /> <Compile Include="DebugPrint.cs" />
@@ -1,17 +1,16 @@
using JR.Utils.GUI.Forms;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.Data;
using System.Text; using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms; using System.Windows.Forms;
using System.Xml;
using VEPROMS.CSLA.Library; using VEPROMS.CSLA.Library;
using Volian.Base.Library; using Volian.Base.Library;
using Volian.Pipe.Library; using Volian.Pipe.Library;
using System.Xml;
using System.Diagnostics;
using JR.Utils.GUI.Forms;
namespace Volian.Controls.Library namespace Volian.Controls.Library
{ {
@@ -221,10 +220,7 @@ namespace Volian.Controls.Library
{ {
if (!DesignMode) // B2019-043 need to check if we are just saving changes to the user interface if (!DesignMode) // B2019-043 need to check if we are just saving changes to the user interface
{ {
if (value != null) rtxbComment.Text = value;
{
rtxbComment.Text = Regex.Replace(value, @"\\u([0-9]{1,4})\?", m => Convert.ToChar(int.Parse(m.Groups[1].Value)).ToString());
}
if (rtxbComment.Text != string.Empty) if (rtxbComment.Text != string.Empty)
rtxbComment.SelectionStart = rtxbComment.TextLength; // position cursor to end of text rtxbComment.SelectionStart = rtxbComment.TextLength; // position cursor to end of text
} }
+1 -9
View File
@@ -613,15 +613,7 @@ namespace Volian.Controls.Library
_In_DSOTabPanel_Enter = false; _In_DSOTabPanel_Enter = false;
_MyDisplayTabControl.SelectedDisplayTabItem = MyDisplayTabItem; _MyDisplayTabControl.SelectedDisplayTabItem = MyDisplayTabItem;
// B2018-070 Position the text cursor - Activate MS Word Panel // B2018-070 Position the text cursor - Activate MS Word Panel
try _MyEdWord.GotoItem(EDWordLib.WdGoToItem.wdGoToObject, EDWordLib.WdGoToDirection.wdGoToNext, 0, null);
{
_MyEdWord.GotoItem(EDWordLib.WdGoToItem.wdGoToObject, EDWordLib.WdGoToDirection.wdGoToNext, 0, null);
}
catch
{
//B2026-067 - Do nothing if cannot Position cursor
}
} }
#endregion #endregion
#region Public Methods #region Public Methods
@@ -23,6 +23,7 @@ namespace Volian.Controls.Library
base.Dispose(disposing); base.Dispose(disposing);
} }
#region Component Designer generated code #region Component Designer generated code
/// <summary> /// <summary>
@@ -33,6 +34,7 @@ namespace Volian.Controls.Library
{ {
this.gpMode = new DevComponents.DotNetBar.Controls.GroupPanel(); this.gpMode = new DevComponents.DotNetBar.Controls.GroupPanel();
this.gpItem = new DevComponents.DotNetBar.Controls.GroupPanel(); this.gpItem = new DevComponents.DotNetBar.Controls.GroupPanel();
this.btnApplicabilitychg2 = new DevComponents.DotNetBar.ButtonItem();
this.btnApplicabilitychg = new DevComponents.DotNetBar.ButtonX(); this.btnApplicabilitychg = new DevComponents.DotNetBar.ButtonX();
this.superTooltip1 = new DevComponents.DotNetBar.SuperTooltip(); this.superTooltip1 = new DevComponents.DotNetBar.SuperTooltip();
this.gpItem.SuspendLayout(); this.gpItem.SuspendLayout();
@@ -40,14 +42,14 @@ namespace Volian.Controls.Library
// //
// btnApplicabilitychg // btnApplicabilitychg
// //
this.btnApplicabilitychg.Location = new System.Drawing.Point(90, 8); this.btnApplicabilitychg.Location = new System.Drawing.Point(60, 8);
this.btnApplicabilitychg.Margin = new System.Windows.Forms.Padding(4); this.btnApplicabilitychg.Margin = new System.Windows.Forms.Padding(4);
this.btnApplicabilitychg.BackColor = System.Drawing.SystemColors.Control; this.btnApplicabilitychg.BackColor = System.Drawing.SystemColors.Control;
this.btnApplicabilitychg.Name = "btnApplicabilitychg"; this.btnApplicabilitychg.Name = "btnApplicabilitychg";
this.btnApplicabilitychg.Size = new System.Drawing.Size(87, 22); this.btnApplicabilitychg.Size = new System.Drawing.Size(80, 22);
this.btnApplicabilitychg.Margin = new System.Windows.Forms.Padding(2); this.btnApplicabilitychg.Margin = new System.Windows.Forms.Padding(2);
this.btnApplicabilitychg.RightToLeft = System.Windows.Forms.RightToLeft.No; this.btnApplicabilitychg.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.superTooltip1.SetSuperTooltip(this.btnApplicabilitychg, new DevComponents.DotNetBar.SuperTooltipInfo("Set All at Level", "", "When clicked, all steps at that level of the current step will be set to the selected applicability. Note that the Set All at Level button is disabled for RNO step types unless they are substeps off of a RNO step.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); // C2026-034 fix tool tip text. 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.TabIndex = 0;
this.btnApplicabilitychg.Text = "Set All at Level"; this.btnApplicabilitychg.Text = "Set All at Level";
this.btnApplicabilitychg.ColorTable = DevComponents.DotNetBar.eButtonColor.BlueOrb; this.btnApplicabilitychg.ColorTable = DevComponents.DotNetBar.eButtonColor.BlueOrb;
@@ -104,12 +106,13 @@ namespace Volian.Controls.Library
this.gpItem.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.gpItem.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.gpItem.CanvasColor = System.Drawing.SystemColors.Control; this.gpItem.CanvasColor = System.Drawing.SystemColors.Control;
this.gpItem.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.Office2007; this.gpItem.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.Office2007;
//this.gpItem.Controls.Add(this.btnApplicabilitychg);
this.gpItem.DisabledBackColor = System.Drawing.Color.Empty; this.gpItem.DisabledBackColor = System.Drawing.Color.Empty;
this.gpItem.Dock = System.Windows.Forms.DockStyle.Top; this.gpItem.Dock = System.Windows.Forms.DockStyle.Top;
this.gpItem.Location = new System.Drawing.Point(0, 49); this.gpItem.Location = new System.Drawing.Point(0, 49);
this.gpItem.Margin = new System.Windows.Forms.Padding(4); this.gpItem.Margin = new System.Windows.Forms.Padding(4);
this.gpItem.Name = "gpItem"; this.gpItem.Name = "gpItem";
this.gpItem.Padding = new System.Windows.Forms.Padding(0, 20, 0, 0); this.gpItem.Padding = new System.Windows.Forms.Padding(13, 12, 13, 37);
this.gpItem.Size = new System.Drawing.Size(432, 85); this.gpItem.Size = new System.Drawing.Size(432, 85);
// //
// //
@@ -166,6 +169,7 @@ namespace Volian.Controls.Library
private DevComponents.DotNetBar.Controls.GroupPanel gpMode; private DevComponents.DotNetBar.Controls.GroupPanel gpMode;
private DevComponents.DotNetBar.Controls.GroupPanel gpItem; private DevComponents.DotNetBar.Controls.GroupPanel gpItem;
private DevComponents.DotNetBar.ButtonItem btnApplicabilitychg2;
private DevComponents.DotNetBar.ButtonX btnApplicabilitychg; private DevComponents.DotNetBar.ButtonX btnApplicabilitychg;
private DevComponents.DotNetBar.SuperTooltip superTooltip1; private DevComponents.DotNetBar.SuperTooltip superTooltip1;
@@ -21,24 +21,20 @@ namespace Volian.Controls.Library
if (ApplicabilityViewModeChanged != null) if (ApplicabilityViewModeChanged != null)
ApplicabilityViewModeChanged(this, new EventArgs()); ApplicabilityViewModeChanged(this, new EventArgs());
} }
private DisplayTabItem _MyDisplayTabItem = null; private DisplayTabItem _MyDisplayTabItem = null;
public DisplayTabItem MyDisplayTabItem public DisplayTabItem MyDisplayTabItem
{ {
get { return _MyDisplayTabItem; } get { return _MyDisplayTabItem; }
set set
{ {
if (DesignMode) return; // B2019-043 need to check if we are just saving changes to the user interface if (DesignMode) return; // B2019-043 need to check if we are just saving changes to the user interface
_MyDisplayTabItem = value; _MyDisplayTabItem = value;
gpMode.Controls.Clear(); gpMode.Controls.Clear();
gpItem.Controls.Clear(); gpItem.Controls.Clear();
MyCheckBoxes.Clear(); MyCheckBoxes.Clear();
if (_MyDisplayTabItem != null) if (_MyDisplayTabItem != null)
{ {
//B2026-043 Fix "Set All At Level" button. DocVersionConfig dcfg = _MyDisplayTabItem.MyItemInfo.MyDocVersion.MyConfig as DocVersionConfig;
DevComponents.DotNetBar.Controls.GroupPanel gpSubItem = InitializegpSubItem();
DocVersionConfig dcfg = _MyDisplayTabItem.MyItemInfo.MyDocVersion.MyConfig as DocVersionConfig;
List<string> names = new List<string>(); List<string> names = new List<string>();
for (int n = 1; n <= dcfg.Unit_Count; n++) for (int n = 1; n <= dcfg.Unit_Count; n++)
{ {
@@ -46,6 +42,7 @@ namespace Volian.Controls.Library
names.Add(dcfg.Unit_Name); names.Add(dcfg.Unit_Name);
} }
dcfg.SelectedSlave = 0; dcfg.SelectedSlave = 0;
// string[] names = dcfg.Unit_Name.Split(',');
int apple = -1; int apple = -1;
if(_MyDisplayTabItem.MyStepTabPanel != null) if(_MyDisplayTabItem.MyStepTabPanel != null)
apple = _MyDisplayTabItem.MyStepTabPanel.MyStepPanel.ApplDisplayMode; apple = _MyDisplayTabItem.MyStepTabPanel.MyStepPanel.ApplDisplayMode;
@@ -54,16 +51,14 @@ namespace Volian.Controls.Library
foreach (string name in names) foreach (string name in names)
{ {
i++; i++;
AddViewMode($"{name.Trim()} (View Only)", i.ToString(), apple == i); AddViewMode(name.Trim(), i.ToString(), apple == i);
} }
AddItemMode("All", "-1", ref gpSubItem); AddItemMode("All", "-1");
i = 0; i = 0;
foreach (string name in names) foreach (string name in names)
AddItemMode(name.Trim(), (++i).ToString(), ref gpSubItem); AddItemMode(name.Trim(), (++i).ToString());
AddItemMode("None", "0", ref gpSubItem); AddItemMode("None", "0");
gpItem.Controls.Add(gpSubItem);
gpSubItem.BringToFront();
gpItem.Controls.Add(btnApplicabilitychg); gpItem.Controls.Add(btnApplicabilitychg);
btnApplicabilitychg.BringToFront(); btnApplicabilitychg.BringToFront();
if (_MyDisplayTabItem.MyStepTabPanel != null) if (_MyDisplayTabItem.MyStepTabPanel != null)
@@ -74,6 +69,14 @@ namespace Volian.Controls.Library
{ {
MyItemInfo = _MyDisplayTabItem.MyItemInfo; 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;
}
} }
} }
} }
@@ -90,34 +93,6 @@ namespace Volian.Controls.Library
return 0; return 0;
} }
} }
private DevComponents.DotNetBar.Controls.GroupPanel InitializegpSubItem() //B2026-043 Fix "Set All At Level" button.
{
DevComponents.DotNetBar.Controls.GroupPanel gpSubItem;
gpSubItem = new DevComponents.DotNetBar.Controls.GroupPanel
{
AutoSize = true,
AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink,
CanvasColor = System.Drawing.SystemColors.Control,
ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.Office2007,
DisabledBackColor = System.Drawing.Color.Empty,
Dock = System.Windows.Forms.DockStyle.Top,
Location = new System.Drawing.Point(0, 49),
Margin = new System.Windows.Forms.Padding(4),
Name = "gpSubItem",
Padding = new System.Windows.Forms.Padding(13, 12, 13, 37)
};
gpSubItem.BackColor = Color.Transparent;
gpSubItem.Style.TextAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center;
gpSubItem.Style.TextColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText;
gpSubItem.Style.TextLineAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Near;
gpSubItem.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square;
gpSubItem.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square;
gpSubItem.TabIndex = 1;
gpSubItem.Text = "";
gpSubItem.Location = new System.Drawing.Point(0, 49);
gpSubItem.Size = new System.Drawing.Size(400, 250);
return gpSubItem;
}
private Dictionary<int, CheckBox> MyCheckBoxes = new Dictionary<int, CheckBox>(); private Dictionary<int, CheckBox> MyCheckBoxes = new Dictionary<int, CheckBox>();
private string _MyApplicability = string.Empty; private string _MyApplicability = string.Empty;
public string MyApplicability public string MyApplicability
@@ -126,29 +101,55 @@ namespace Volian.Controls.Library
set { _MyApplicability = value; } set { _MyApplicability = value; }
} }
//C2026-021 Expand Functionality of Viewing Mode //private ProcedureInfo _MyProcedureInfo;
public bool ShowItemSelection = true; //public ProcedureInfo MyProcedureInfo
public void SetEnableDisableItemSelection(bool value) => gpItem.Enabled = ShowItemSelection = value; //{
//get { return _MyProcedureInfo; }
private void AddItemMode(string name, string value, ref DevComponents.DotNetBar.Controls.GroupPanel gpSubItem) //set
//{
// _MyProcedureInfo = value;
// if (_MyProcedureInfo != null && _MyProcedureInfo.IsProcedure)
// {
// DocVersionConfig cfg = new DocVersionConfig(_MyProcedureInfo.MyDocVersion);
// if (cfg.Unit_Name == string.Empty)
// this.Visible = false;
// else
// {
// string[] names = cfg.Unit_Name.Split(',');
// gpMode.Controls.Clear();
// gpItem.Controls.Clear();
// MyCheckBoxes.Clear();
// AddViewMode("Master", "-1", true);
// int i = 0;
// foreach (string name in names)
// {
// AddViewMode(name.Trim(), (++i).ToString());
// }
// AddItemMode("All", "-1");
// i = 0;
// foreach (string name in names)
// AddItemMode(name.Trim(), (++i).ToString());
// AddItemMode("None", "0");
// //if(!this.Visible)
// // this.Visible = true;
// }
// }
//}
//}
private void AddItemMode(string name, string value)
{ {
CheckBox cb = new CheckBox(); CheckBox cb = new CheckBox();
cb.BackColor = Color.Transparent; cb.BackColor = Color.Transparent;
cb.Height = 24;
cb.Width = 75;
cb.AutoSize = true;
cb.Text = name; cb.Text = name;
cb.Tag = value; cb.Tag = value;
cb.Dock = DockStyle.Top; cb.Dock = DockStyle.Top;
gpSubItem.Controls.Add(cb); gpItem.Controls.Add(cb);
cb.BringToFront(); cb.BringToFront();
cb.CheckedChanged += new EventHandler(cb_CheckedChanged); cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
MyCheckBoxes.Add(value == null ? -1 : int.Parse(value), cb); MyCheckBoxes.Add(value == null ? -1 : int.Parse(value), cb);
} }
private void cb_CheckedChanged(object sender, EventArgs e) private void cb_CheckedChanged(object sender, EventArgs e)
{ {
EditItem ei = MyDisplayTabItem.MyStepTabPanel.SelectedEditItem;
ei.SaveCurrentAndContents(); // C2026-035 save unsaved step text.
UnwireCheckboxes(false); UnwireCheckboxes(false);
CheckBox cb = sender as CheckBox; CheckBox cb = sender as CheckBox;
CheckState cs = cb.CheckState; CheckState cs = cb.CheckState;
@@ -216,6 +217,18 @@ namespace Volian.Controls.Library
} }
} }
} }
//IItemConfig cfg = MyItemInfo.MyConfig as IItemConfig;
//cfg.MasterSlave_Applicability.SetFlags(MyApplicability);
//Content c = Content.Get(MyItemInfo.MyContent.ContentID);
//c.Save();
//foreach (TransitionInfo ti in MyItemInfo.ItemTransitions_ToID)
//{
// if (!ti.MyItemToID.IsApplicable(MyApplicability))
// {
// MessageBox.Show("you can't do this");
// return;
// }
//}
List<InvalidTransition> invalidTrans = WillTransitionsBeValidCommand.Execute(MyItemInfo.ItemID, MyApplicability); List<InvalidTransition> invalidTrans = WillTransitionsBeValidCommand.Execute(MyItemInfo.ItemID, MyApplicability);
// B2021-149: for Procedure level PC/PC, continue processing if all 'invalid' transitions are internal (query used // B2021-149: for Procedure level PC/PC, continue processing if all 'invalid' transitions are internal (query used
// return internal and external for the procedure level) // return internal and external for the procedure level)
@@ -260,6 +273,20 @@ namespace Volian.Controls.Library
// C2021 - 027: Procedure level PC/PC - checkbox for applicability changed, fix ribbon's menus // C2021 - 027: Procedure level PC/PC - checkbox for applicability changed, fix ribbon's menus
if (MyItemInfo.IsProcedure) _MyDisplayTabItem.MyStepTabPanel.MyStepTabRibbon.SetParentChildCreatePDFButton(MyItemInfo.MyDocVersion.UnitNames, MyItemInfo); if (MyItemInfo.IsProcedure) _MyDisplayTabItem.MyStepTabPanel.MyStepTabRibbon.SetParentChildCreatePDFButton(MyItemInfo.MyDocVersion.UnitNames, MyItemInfo);
//using (Content cnt = Content.Get(MyItemInfo.MyContent.ContentID))
//{
// cnt.DTS = DateTime.Now;
// cnt.UserID = Volian.Base.Library.VlnSettings.UserID;
// //cnt.Save();
//}
//using (Step s = Step.Get(MyItemInfo.ItemID))
//{
// IItemConfig cfg = new StepConfig(s);
// cfg.MasterSlave_Applicability = new Volian.Base.Library.BigNum(MyApplicability);
// s.MyContent.Config = cfg.ToString();
// s.Save();
//}
} }
private void BtnApplicabilitychg_Click(object sender, System.EventArgs e) private void BtnApplicabilitychg_Click(object sender, System.EventArgs e)
{ {
@@ -268,12 +295,8 @@ namespace Volian.Controls.Library
MasterSlave_ApplicabilityTmp = sc.MasterSlave_Applicability; MasterSlave_ApplicabilityTmp = sc.MasterSlave_Applicability;
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
EditItem ei = MyDisplayTabItem.MyStepTabPanel.SelectedEditItem;
ei.SaveCurrentAndContents(); // C2026-035 save unsaved step text.
ItemInfo startitm = MyItemInfo.FirstSibling;
ItemInfo startitm = MyItemInfo.FirstSibling;
while (startitm != null) while (startitm != null)
{ {
@@ -379,7 +402,7 @@ namespace Volian.Controls.Library
if (_MyItemInfo != null) if (_MyItemInfo != null)
{ {
if (this.Visible == false) return; if (this.Visible == false) return;
if (_MyItemInfo.IsRNOPart == true) // Check if step is an RNO disable "Set All To Level" button. if (_MyItemInfo.IsRNOPart == true) // C2026-027 disable Set_At_All_Level button on the Applicability tab when RNO step is active.
{ {
btnApplicabilitychg.Enabled = false; btnApplicabilitychg.Enabled = false;
} }
@@ -482,14 +505,14 @@ namespace Volian.Controls.Library
public DisplayApplicability() public DisplayApplicability()
{ {
InitializeComponent(); //B2026-043 Fix "Set All At Level" button. InitializeComponent();
this.VisibleChanged += new EventHandler(DisplayApplicability_VisibleChanged); this.VisibleChanged += new EventHandler(DisplayApplicability_VisibleChanged);
} }
void DisplayApplicability_VisibleChanged(object sender, EventArgs e) void DisplayApplicability_VisibleChanged(object sender, EventArgs e)
{ {
MyItemInfo = MyItemInfo; MyItemInfo = MyItemInfo;
gpItem.Enabled = ShowItemSelection && UserInfo.CanEdit(MyUserInfo,(MyItemInfo == null) ? null : MyItemInfo.MyDocVersion); //Can Change Applicability gpItem.Enabled = UserInfo.CanEdit(MyUserInfo,(MyItemInfo == null) ? null : MyItemInfo.MyDocVersion); //Can Change Applicability
} }
} }
} }
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -145,6 +145,12 @@ namespace Volian.Controls.Library
return (verIdList.Count > 1); return (verIdList.Count > 1);
} }
} }
//public event ItemSelectedChangedEvent OpenEnhancedDocument;
//public void OnOpenEnhancedDocument(ItemSelectedChangedEventArgs args)
//{
// if (OpenEnhancedDocument != null)
// OpenEnhancedDocument(this, args);
//}
public event ItemSelectedChangedEvent OpenInSeparateWindow; public event ItemSelectedChangedEvent OpenInSeparateWindow;
public void OnOpenInSeparateWindow(ItemSelectedChangedEventArgs args) public void OnOpenInSeparateWindow(ItemSelectedChangedEventArgs args)
{ {
@@ -188,15 +194,15 @@ namespace Volian.Controls.Library
CopyStepSelected(this, args); CopyStepSelected(this, args);
} }
#region Private Fields #region Private Fields
/// <summary> /// <summary>
/// This is a lookup table for all of the DisplayTabItems that are currently open /// This is a lookup table for all of the DisplayTabItems that are currently open
/// The key is: /// The key is:
/// "Item - " + Procedure ItemID for step pages /// "Item - " + Procedure ItemID for step pages
/// "Doc - " + DocumentID for Word Documents /// "Doc - " + DocumentID for Word Documents
/// </summary> /// </summary>
public Dictionary<string, DisplayTabItem> _MyDisplayTabItems; public Dictionary<string, DisplayTabItem> _MyDisplayTabItems;
/// <summary> /// <summary>
/// When a Tab is closed it is added to this list. /// When a Tab is closed it is added to this list.
@@ -543,15 +549,7 @@ namespace Volian.Controls.Library
if (((Bar)sender).Items == null) return; if (((Bar)sender).Items == null) return;
if (((Bar)sender).Items.Count == 1)// Remove bar if last item is closed... if (((Bar)sender).Items.Count == 1)// Remove bar if last item is closed...
{ {
//B2026 - 048 View Only Mode freezes PROMS if last tab closed Bar bar = sender as Bar;
//if last item is closing, need to re-enable Step Properties
//so if closing in view only mode will not freeze when re-opening
if (MyEditItem != null && MyEditItem.MyStepPanel.VwMode == E_ViewMode.View)
{
OnEnableDisableStepProperties(new StepTabRibbonEventArgs(MyEditItem.MyItemInfo, 0, E_ViewMode.Edit));
}
Bar bar = sender as Bar;
if (bar != null) if (bar != null)
{ {
if (dotNetBarManager1.Bars.Contains(bar.Name)) if (dotNetBarManager1.Bars.Contains(bar.Name))
@@ -570,16 +568,9 @@ namespace Volian.Controls.Library
ActivateRemainingTab((Bar)sender); ActivateRemainingTab((Bar)sender);
} }
} }
#endregion
public event StepTabRibbonEvent EnableDisableStepProperties; #region Public Methods
private void OnEnableDisableStepProperties(StepTabRibbonEventArgs args) public void RefreshItem(ItemInfo myItemInfo)
{
if (EnableDisableStepProperties != null)
EnableDisableStepProperties(this, args);
}
#endregion
#region Public Methods
public void RefreshItem(ItemInfo myItemInfo)
{ {
ItemInfo proc = myItemInfo.MyProcedure; // Find procedure Item ItemInfo proc = myItemInfo.MyProcedure; // Find procedure Item
string key = "Item - " + proc.ItemID.ToString(); string key = "Item - " + proc.ItemID.ToString();
@@ -896,18 +887,9 @@ namespace Volian.Controls.Library
Bar b = myTabItem.ContainerControl as Bar; Bar b = myTabItem.ContainerControl as Bar;
if (b != null) if (b != null)
{ {
try b.CloseDockTab(myTabItem);
{ //b.Items.Remove(myTabItem);
b.CloseDockTab(myTabItem); RemoveItem(myTabItem);
}
catch
{
//This is to work around a bug inside 3rd party DotNetBar
//The bug occurs when events happen out of order and it tries
//to remove a TabItem from the Collection the has already been removed
}
RemoveItem(myTabItem);
} }
} }
/// <summary> /// <summary>
+7 -27
View File
@@ -245,20 +245,6 @@ namespace Volian.Controls.Library
} }
protected void MyContent_Changed(object sender) protected void MyContent_Changed(object sender)
{ {
//C2026-021 Expand Functionality of Viewing Mode
if (MyStepPanel.ApplDisplayMode > 0)
{
MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = MyStepPanel.ApplDisplayMode;
MyItemInfo.MyProcedure.ProcedureConfig.SelectedSlave = MyStepPanel.ApplDisplayMode;
}
else
{
MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
MyItemInfo.MyProcedure.ProcedureConfig.SelectedSlave = 0;
}
MyItemInfo.MyProcedure.ResetChangeBar();
// Update the text to reflect the content change // Update the text to reflect the content change
MyItemInfo.RefreshItemAnnotations(); MyItemInfo.RefreshItemAnnotations();
ChangeBar = MyItemInfo.HasChangeBar; ChangeBar = MyItemInfo.HasChangeBar;
@@ -3684,14 +3670,15 @@ namespace Volian.Controls.Library
{ {
ROFSTLookup myLookup = MySection.MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(MySection.MyDocVersion, null); ROFSTLookup myLookup = MySection.MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(MySection.MyDocVersion, null);
//B2022-083: Support Conditional RO Values string accpgid = accpageid;
//C2026-047 first try the RO Lookup with the ascii dash character in the accpageid. If not found, try again with the unicode dash
ROFSTLookup.rochild roc = myLookup.GetROChildByAccPageID(string.Format("<{0}.{1}>", accpageid.Replace(@"\u8209?", "-"), multiid), MySection.MyDocVersion.DocVersionConfig.RODefaults_setpointprefix, MySection.MyDocVersion.DocVersionConfig.RODefaults_graphicsprefix); //B2022 - 083: Support Conditional RO Values
ROFSTLookup.rochild roc = myLookup.GetROChildByAccPageID(string.Format("<{0}.{1}>", accpgid, multiid), MySection.MyDocVersion.DocVersionConfig.RODefaults_setpointprefix, MySection.MyDocVersion.DocVersionConfig.RODefaults_graphicsprefix);
if (roc.value == null) if (roc.value == null)
{ {
// try again but this time with the unicode dash accpgid = accpgid.Replace(@"\u8209?", "-");
roc = myLookup.GetROChildByAccPageID(string.Format("<{0}.{1}>", accpageid, multiid), MySection.MyDocVersion.DocVersionConfig.RODefaults_setpointprefix, MySection.MyDocVersion.DocVersionConfig.RODefaults_graphicsprefix); roc = myLookup.GetROChildByAccPageID(string.Format("<{0}.{1}>", accpgid, multiid), MySection.MyDocVersion.DocVersionConfig.RODefaults_setpointprefix, MySection.MyDocVersion.DocVersionConfig.RODefaults_graphicsprefix);
} }
if (!deflt.StartsWith("[") && !string.IsNullOrEmpty(roc.value) && roc.value.Trim().Length > 0) // don't return val if it's an empty or blank string - jsj 01-28-2019 if (!deflt.StartsWith("[") && !string.IsNullOrEmpty(roc.value) && roc.value.Trim().Length > 0) // don't return val if it's an empty or blank string - jsj 01-28-2019
@@ -4127,14 +4114,7 @@ namespace Volian.Controls.Library
} }
} }
} }
//// TIMING: DisplayItem.TimeIt("CSLARTB Parent"); //// TIMING: DisplayItem.TimeIt("CSLARTB Parent");
//C2026-021 Expand Functionality of Viewing Mode
if (MyStepPanel.ApplDisplayMode > 0)
MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = MyStepPanel.ApplDisplayMode;
else
MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
SetText(); SetText();
if (itemInfo.IsSupInfoPart) if (itemInfo.IsSupInfoPart)
{ {
+373 -77
View File
@@ -25,6 +25,7 @@ namespace Volian.Controls.Library
public delegate void StepRTBLocationEvent(object sender, StepRTBLocationEventArgs args); public delegate void StepRTBLocationEvent(object sender, StepRTBLocationEventArgs args);
public delegate void StepRTBMouseEvent(object sender, MouseEventArgs args); public delegate void StepRTBMouseEvent(object sender, MouseEventArgs args);
public delegate void StepRTBRoEvent(object sender, StepRTBRoEventArgs args); public delegate void StepRTBRoEvent(object sender, StepRTBRoEventArgs args);
//public delegate void StepRTBMouseWheelEvent(object sender, MouseEventArgs args);
public partial class StepRTB : RichTextBox // , IStepRTB public partial class StepRTB : RichTextBox // , IStepRTB
{ {
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
@@ -176,6 +177,18 @@ namespace Volian.Controls.Library
{ {
if (CursorMovement != null) CursorMovement(sender, args); if (CursorMovement != null) CursorMovement(sender, args);
} }
//public event StepRTBModeChangeEvent ModeChange;
//private void OnModeChange(object sender, StepRTBModeChangeEventArgs args)
//{
// //_MyModeChangeEventArgs = args;
// if (ModeChange != null) ModeChange(sender, args);
// else MessageBox.Show("StepRTB - no mode change defined");
//}
//public event StepRTBMouseWheelEvent MouseWheel;
//private void OnMouseWheel(object sender, MouseEventArgs args)
//{
// if (MouseWheel != null) MouseWheel(sender, args);
//}
/// <summary> /// <summary>
/// This event is not raised during all the in-between changes for link deletions /// This event is not raised during all the in-between changes for link deletions
@@ -279,6 +292,23 @@ namespace Volian.Controls.Library
} }
} }
} }
// use newer rich text box....
//[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
//static extern IntPtr LoadLibrary(string lpFileName);
//protected override CreateParams CreateParams
//{
// get
// {
// CreateParams prams = base.CreateParams;
// if (LoadLibrary("msftedit.dll") != IntPtr.Zero)
// {
// //prams.ExStyle |= 0x020; // transparent
// prams.ClassName = "RICHEDIT50W";
// }
// return prams;
// }
//}
private E_FieldToEdit _FieldToEdit = E_FieldToEdit.StepText; private E_FieldToEdit _FieldToEdit = E_FieldToEdit.StepText;
public E_FieldToEdit FieldToEdit public E_FieldToEdit FieldToEdit
{ {
@@ -291,12 +321,14 @@ namespace Volian.Controls.Library
get get
{ {
//B2020-100 RHM Use SelectionFont rather than the font from the format file. //B2020-100 RHM Use SelectionFont rather than the font from the format file.
StringBuilder selectedRtfSB = new StringBuilder(); //if (_RtfPrefix == null)
//{
StringBuilder selectedRtfSB = new StringBuilder();
//AddFontTable(selectedRtfSB, FormatFont, FontIsFixed(FormatFont));
// B2021-100: if SelectionFont is null, use the FormatFont // B2021-100: if SelectionFont is null, use the FormatFont
AddFontTable(selectedRtfSB, SelectionFont==null?FormatFont:SelectionFont, FontIsFixed(FormatFont)); AddFontTable(selectedRtfSB, SelectionFont==null?FormatFont:SelectionFont, FontIsFixed(FormatFont));
_RtfPrefix = selectedRtfSB.ToString(); _RtfPrefix = selectedRtfSB.ToString();
//}
return _RtfPrefix + @"\f1\fs" + FormatFont.SizeInPoints * 2 + " "; return _RtfPrefix + @"\f1\fs" + FormatFont.SizeInPoints * 2 + " ";
} }
} }
@@ -343,6 +375,14 @@ namespace Volian.Controls.Library
get { if (_MyClassName == string.Empty)_MyClassName = CreateParams.ClassName; return _MyClassName; } get { if (_MyClassName == string.Empty)_MyClassName = CreateParams.ClassName; return _MyClassName; }
set { _MyClassName = value; } set { _MyClassName = value; }
} }
//private E_EditPrintMode _epMode = E_EditPrintMode.Edit;
//public E_EditPrintMode EpMode
//{
// get { return _epMode; }
// set {
// if (value == E_EditPrintMode.Print) Console.WriteLine("");
// _epMode = value; }
//}
private E_ViewMode _vwMode = E_ViewMode.Edit; private E_ViewMode _vwMode = E_ViewMode.Edit;
public E_ViewMode VwMode public E_ViewMode VwMode
{ {
@@ -450,63 +490,66 @@ namespace Volian.Controls.Library
ActiveMode = activeMode; ActiveMode = activeMode;
OnAdjustTableWidth(this, new StepRTBTableWidthEventArgs(true)); OnAdjustTableWidth(this, new StepRTBTableWidthEventArgs(true));
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 2");
_InitializingRTB = true; _InitializingRTB = true;
DisplayText vlntxt = new DisplayText(MyItemInfo, E_EditPrintMode.Edit, VwMode, !ActiveMode, FieldToEdit, true,null, null,false);
//C2026-021 Expand Functionality of Viewing Mode //Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 3");
StepPanel pnl = (Parent as RTBItem)?.MyStepPanel; //if (_origDisplayText != null && vlntxt.StartText == _origDisplayText.StartText)
if (pnl?.ApplDisplayMode > 0) //{
{ // ReadOnly = !(EpMode == E_EditPrintMode.Edit && VwMode == E_ViewMode.Edit);
MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = pnl.ApplDisplayMode; // if (!ReadOnly && !edit) ReadOnly = true;
} // return;
else //}
{ OrigDisplayText = vlntxt;
MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
}
DisplayText vlntxt = new DisplayText(MyItemInfo, E_EditPrintMode.Edit, VwMode, !ActiveMode, FieldToEdit, true,null, null,false);
if (pnl?.ApplDisplayMode > 0 && MyItemInfo.MyContent.ContentRoUsageCount > 0)
{
vlntxt.StartText = RefreshROsWithUnitStartText(vlntxt.StartText, pnl.ApplDisplayMode);
}
OrigDisplayText = vlntxt;
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 4"); //Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 4");
// RHM 20101201 - Don't reset the text. Calculate the text and compare it with the existing text in AddRTFText // RHM 20101201 - Don't reset the text. Calculate the text and compare it with the existing text in AddRTFText
//Text = ""; // Initialize text before add text //Text = ""; // Initialize text before add text
// IMPORTANT: SetLineSpacing must be set before Links, otherwise it // IMPORTANT: SetLineSpacing must be set before Links, otherwise it
// was confusing the 'handle' of the rtf box. // was confusing the 'handle' of the rtf box.
//Console.WriteLine("'font',{0}", Font);
//if(Text == "")SelectionFont = Font; // Initialize SelectionFont
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "1");
if (FieldToEdit == E_FieldToEdit.StepText) if (FieldToEdit == E_FieldToEdit.StepText)
{ {
if (MyItemInfo != null) if (MyItemInfo != null)
{ {
//if (MyItemInfo.IsStep) Font = MyFontFamily == null ? MyItemInfo.FormatStepData.Font.WindowsFont : new Font(MyFontFamily, MyItemInfo.FormatStepData.Font.WindowsFont.Size, MyItemInfo.FormatStepData.Font.WindowsFont.Style);
//else Font = Font = MyFontFamily == null ? MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont : new Font(MyFontFamily, MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont.Size, MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont.Style);
if (MyItemInfo.IsStep) if (MyItemInfo.IsStep)
{ {
if (MyFontFamily == null) if (MyFontFamily == null)
{ {
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "Before WindowsFont1");
System.Drawing.Font fnt = MyItemInfo.FormatStepData.Font.WindowsFont; System.Drawing.Font fnt = MyItemInfo.FormatStepData.Font.WindowsFont;
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "After WindowsFont1a");
Application.DoEvents(); Application.DoEvents();
if (FontKey(Font) != FontKey(fnt)) if (FontKey(Font) != FontKey(fnt))
Font = fnt; Font = fnt;
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "After WindowsFont1b");
} }
else else
Font = VE_Font.GetWinSysFont(MyFontFamily, MyItemInfo.FormatStepData.Font.WindowsFont.Size, MyItemInfo.FormatStepData.Font.WindowsFont.Style); Font = VE_Font.GetWinSysFont(MyFontFamily, MyItemInfo.FormatStepData.Font.WindowsFont.Size, MyItemInfo.FormatStepData.Font.WindowsFont.Style);
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 4");
} }
else else
{ {
if (MyFontFamily == null) if (MyFontFamily == null)
{ {
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "Before WindowsFont2");
Font = MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont; Font = MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont;
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "After WindowsFont2");
} }
else else
Font = VE_Font.GetWinSysFont(MyFontFamily, MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont.Size, MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont.Style); Font = VE_Font.GetWinSysFont(MyFontFamily, MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont.Size, MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont.Style);
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 5");
} }
LastRtf = Rtf; LastRtf = Rtf;
} }
} }
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "StepRTB.RefreshDisplay Before SetLineSpacing");
RTBAPI.SetLineSpacing(this, RTBAPI.ParaSpacing.PFS_EXACT); RTBAPI.SetLineSpacing(this, RTBAPI.ParaSpacing.PFS_EXACT);
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "StepRTB.RefreshDisplay After SetLineSpacing");
bool readOnlyStep = MyItemInfo == null || MyItemInfo.FormatStepData == null ? false : MyItemInfo.FormatStepData.ReadOnly; bool readOnlyStep = MyItemInfo == null || MyItemInfo.FormatStepData == null ? false : MyItemInfo.FormatStepData.ReadOnly;
if (!readOnlyStep) if (!readOnlyStep)
{ {
@@ -514,9 +557,10 @@ namespace Volian.Controls.Library
if (IsDerived(sc) && !MyItemInfo.EnhAllowMod()) readOnlyStep = true; if (IsDerived(sc) && !MyItemInfo.EnhAllowMod()) readOnlyStep = true;
} }
ReadOnly = readOnlyStep || VwMode == E_ViewMode.View || ActiveMode == false; ReadOnly = readOnlyStep || VwMode == E_ViewMode.View || ActiveMode == false;
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "Before AddRTFText");
AddRtfText(vlntxt.StartText); AddRtfText(vlntxt.StartText);
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "After AddRTFText");
//AddRtfStyles();
// set readonly based on initial modes, however, these may change if // set readonly based on initial modes, however, these may change if
// user selected view mode. // user selected view mode.
ClearUndo(); ClearUndo();
@@ -543,7 +587,10 @@ namespace Volian.Controls.Library
{ {
RemoveEventHandlers(); RemoveEventHandlers();
OnAdjustTableWidth(this, new StepRTBTableWidthEventArgs(false));// View Mode OnAdjustTableWidth(this, new StepRTBTableWidthEventArgs(false));// View Mode
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "Before SelectAll");
SelectAll(); SelectAll();
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "After SelectAll");
//if (SelectionHangingIndent !=0) SelectionHangingIndent = 0;
int indchar = 0; int indchar = 0;
string indentToken = MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.IndentToken; string indentToken = MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.IndentToken;
if (indentToken == null || indentToken == "0") indentToken = "\x5"; if (indentToken == null || indentToken == "0") indentToken = "\x5";
@@ -551,6 +598,7 @@ namespace Volian.Controls.Library
// this line of code was moved before the find for the indent so that // this line of code was moved before the find for the indent so that
// the window gets resized if the indent changes the height, i.e. more line(s) in window. // the window gets resized if the indent changes the height, i.e. more line(s) in window.
AddEventHandlers(); AddEventHandlers();
//if (MyItemInfo.InList(186722)) Console.WriteLine("here");
if ((indchar = Find(indentToken, indchar, RichTextBoxFinds.None)) >= 0) if ((indchar = Find(indentToken, indchar, RichTextBoxFinds.None)) >= 0)
{ {
int nindents = 0; int nindents = 0;
@@ -604,51 +652,11 @@ namespace Volian.Controls.Library
_InitializingRTB = false; _InitializingRTB = false;
AdjustSizeForContents(!ActiveMode); AdjustSizeForContents(!ActiveMode);
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "After RefreshDisplay");
Application.DoEvents(); Application.DoEvents();
} }
//C2026-021 Expand Functionality of Viewing Mode private bool IsDerived(StepConfig sc)
//regex for finding Referenced object links
private static Regex regRefObj = new Regex(@"\#Link\:ReferencedObject:([0-9]*) ([0-9a-zA-Z]*) ([0-9]*)", RegexOptions.Singleline);
//Replace the Default RO text with Unit Specific RO text
private string RefreshROsWithUnitStartText(string startText, int unitID)
{
ROFSTLookup lookup = MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(MyItemInfo.MyDocVersion);
MatchCollection mc = regRefObj.Matches(startText);
if (mc.Count == 0)
return startText;
StringBuilder sb = new StringBuilder();
int lastindex = 0;
foreach (Match match in mc)
{
//get where ther default text for the RO starts
int indx = startText.LastIndexOf(@"\v <START]\v0", match.Index) + 13;
//get the RO, value will be the unit related value
ROFSTLookup.rochild roc = lookup.GetRoChild(ROFSTLookup.FormatRoidKey(match.Groups[2].Value, true));
// append before tags up through the <START]\v0
//note if multiple tags this will also append the end up the previous tags
sb.Append(startText.Substring(lastindex, indx - lastindex));
//append the unit specific RO value (replacing where the default RO value was)
sb.Append($@"\cf1 {roc.value}\cf0\v");
lastindex = match.Index;
}
//append referenced object tag & text after tag
sb.Append(startText.Substring(lastindex));
return sb.ToString();
}
private bool IsDerived(StepConfig sc)
{ {
foreach (EnhancedDocument ed in sc.MyEnhancedDocuments) foreach (EnhancedDocument ed in sc.MyEnhancedDocuments)
if (ed.Type == 0) //New Design if (ed.Type == 0) //New Design
@@ -744,6 +752,8 @@ namespace Volian.Controls.Library
protected override void OnMouseWheel(MouseEventArgs e) protected override void OnMouseWheel(MouseEventArgs e)
{ {
OnDoMouseWheel(this, e); OnDoMouseWheel(this, e);
//MyRTBItem.MyStepPanel.MouseWheel(e);
//base.OnMouseWheel(e);
} }
// When a border style is changed, the richtextbox's handle is 'destroyed', so that the handleDestroyed // When a border style is changed, the richtextbox's handle is 'destroyed', so that the handleDestroyed
// event is done. This was causing the event handlers to be removed (RemoveEventHandler) so that the // event is done. This was causing the event handlers to be removed (RemoveEventHandler) so that the
@@ -886,6 +896,10 @@ namespace Volian.Controls.Library
{ {
_MouseDown = false; _MouseDown = false;
} }
//void MyConfig_PropertyChanged(object sender, PropertyChangedEventArgs e)
//{
// SaveConfig();
//}
private void StepRTB_Click(object sender, EventArgs e) private void StepRTB_Click(object sender, EventArgs e)
{ {
if (ReadOnly) return; if (ReadOnly) return;
@@ -943,6 +957,44 @@ namespace Volian.Controls.Library
} }
#endregion #endregion
#region ApplicationSupport #region ApplicationSupport
// Used in StepTabRibbon:
//public void ToggleEditView(E_ViewMode vwMode)
//{
// OnDoSaveContents(this, new EventArgs()); // SaveText();
// //ItemInfo tmp = MyItemInfo;
// //MyItemInfo = null;
// //ReadOnly = !ReadOnly;
// //EpMode = ReadOnly ? E_EditPrintMode.Print : E_EditPrintMode.Edit;
// VwMode = vwMode;
// ReadOnly = VwMode == E_ViewMode.View;
// ViewRTB = ReadOnly;
// Clear();
// RefreshDisplay(!ViewRTB);
// //MyItemInfo = tmp;
// SelectionStart = 0;
// SelectionLength = 0;
// //OnModeChange(this, new StepRTBModeChangeEventArgs(ViewRTB?E_ViewMode.View:E_ViewMode.Edit));
//}
//public string InsertSymbolInRO(string val)
//{
// string retval = val;
// C2019-043 convert a "->" to the Right Arrow symbol and a "<-" to the Left Arrow Symbol
// note that at the dash character gets convert to a non-breaking hyphen "\u8209?"
//if (MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.UseDashGreaterLessThenForArrowsInROValue)
//{
// retval = retval.Replace("\\u8209?>", GetAddSymbolTextForROs(@"\u8594?")); // Right Arrow
// retval = retval.Replace("<\\u8209?", GetAddSymbolTextForROs(@"\u8592?")); // Left Arrow
//}
//// C2022-021 convert a "<=" to a less than or equal symbol, a ">=" to a greather than or equal symbol and +- to a
//// plus/minus symbol in ROs
//if (MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.ConvertGTELTEPMinROValue)
//{
// retval = retval.Replace("<=", GetAddSymbolTextForROs(@"\u8804?")); // Less than or Equal
// retval = retval.Replace(">=", GetAddSymbolTextForROs(@"\u8805?")); // Greater than or Equal
// retval = retval.Replace("+\\u8209?", @"\'b1"); // plus/minus - note - is stored as \u8209 and plus/minus is < 256, i.e. handled differently
//}
// return retval;
//}
public void InsertRO(string value, string link) public void InsertRO(string value, string link)
{ {
// B2023-037: Remove code that saves the unicode characters for <=, >=, +-, <- and -> into the link text. The characters // B2023-037: Remove code that saves the unicode characters for <=, >=, +-, <- and -> into the link text. The characters
@@ -1120,6 +1172,8 @@ namespace Volian.Controls.Library
return; return;
} }
//Console.WriteLine("ItemID:{0}", MyItemInfo.ItemID); //Console.WriteLine("ItemID:{0}", MyItemInfo.ItemID);
//if(MyItemInfo.ItemID==10256)
// Volian.Base.Library.vlnStackTrace.ShowStackLocal("ItemID:{0}", MyItemInfo.ItemID.ToString());
StringBuilder selectedRtfSB = new StringBuilder(); StringBuilder selectedRtfSB = new StringBuilder();
AddFontTable(selectedRtfSB, FormatFont, FontIsFixed(FormatFont)); AddFontTable(selectedRtfSB, FormatFont, FontIsFixed(FormatFont));
_RtfPrefix = selectedRtfSB.ToString(); _RtfPrefix = selectedRtfSB.ToString();
@@ -1143,12 +1197,27 @@ namespace Volian.Controls.Library
} }
// B2017-048, B2017-052, B2017-055 ROs sometimes have two start tokens which make them uneditable. // B2017-048, B2017-052, B2017-055 ROs sometimes have two start tokens which make them uneditable.
newRtf = newRtf.Replace("<START]<START]", "<START]"); newRtf = newRtf.Replace("<START]<START]", "<START]");
//Point linkIssues = FindLinkIssues(newRtf);
//if (linkIssues.X != linkIssues.Y)
// newRtf = FixBadLinks(newRtf,linkIssues);
SelectedRtf = _LastRtf = newRtf; SelectedRtf = _LastRtf = newRtf;
_lastReadOnly = ReadOnly; _lastReadOnly = ReadOnly;
} }
FindAllLinks(); FindAllLinks();
if (txt == "") SelectionFont = FormatFont; if (txt == "") SelectionFont = FormatFont;
} }
//private string FixBadLinks(string newRtf, Point linkIssues)
//{
// Console.WriteLine("Bad Link rtf = Starts={0}, Ends={1}, \"{2}\"", linkIssues.X,linkIssues.Y, newRtf);
// //Volian.Base.Library.vlnStackTrace.ShowStack();
// return newRtf;
//}
//private static Point FindLinkIssues(string rtf)
//{
// MatchCollection mcStart = Regex.Matches(rtf, @"\<START\]");
// MatchCollection mcEnd = Regex.Matches(rtf, @"\[END\>");
// return new Point(mcStart.Count, mcEnd.Count);
//}
public void SetTableGridCellRTFPrefix(Font myfont) public void SetTableGridCellRTFPrefix(Font myfont)
{ {
if (_FormatFont == null) if (_FormatFont == null)
@@ -1213,7 +1282,7 @@ namespace Volian.Controls.Library
sbbeg.Append(@"\i"); sbbeg.Append(@"\i");
sbend.Insert(0, @"\i0"); sbend.Insert(0, @"\i0");
} }
selectedRtfSB.Append(@"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset2 " + myFont.FontFamily.Name + @";}"); selectedRtfSB.Append(@"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset2 " + myFont.FontFamily.Name + @";}"); //}\f0\fs" + this.Font.SizeInPoints * 2 + @" " + myDisplayTextElement.Text + @"}}";
if (!isFixed) if (!isFixed)
selectedRtfSB.Append(@"{\f1\fnil\fcharset0 " + Volian.Base.Library.vlnFont.ProportionalSymbolFont + @";}}{\colortbl ;\red255\green0\blue0;\red0\green0\blue255;}"); // C2017-036 get best available proportional font for symbols - B2025-039 add Blue for Colored Replace Words selectedRtfSB.Append(@"{\f1\fnil\fcharset0 " + Volian.Base.Library.vlnFont.ProportionalSymbolFont + @";}}{\colortbl ;\red255\green0\blue0;\red0\green0\blue255;}"); // C2017-036 get best available proportional font for symbols - B2025-039 add Blue for Colored Replace Words
else else
@@ -1222,7 +1291,7 @@ namespace Volian.Controls.Library
// use styles to construct rtf commands to insert into next line (where \b, etc is) // use styles to construct rtf commands to insert into next line (where \b, etc is)
// B2015-134 Hanging Indent with Hard Returns was not being saved- removed \sl-240\slmult0 // B2015-134 Hanging Indent with Hard Returns was not being saved- removed \sl-240\slmult0
selectedRtfSB.Append(@"\viewkind4\uc1\pard" + sbbeg.ToString() + @"\fs" + Convert.ToInt32(myFont.SizeInPoints * 2).ToString() + @" "); // \f0\fs" + this.Font.SizeInPoints * 2 + @" " + myDisplayTextElement.Text + @"}"; selectedRtfSB.Append(@"\viewkind4\uc1\pard" + sbbeg.ToString() + @"\fs" + Convert.ToInt32(myFont.SizeInPoints * 2).ToString() + @" "); // \f0\fs" + this.Font.SizeInPoints * 2 + @" " + myDisplayTextElement.Text + @"}";
//selectedRtfSB.Append(@"\viewkind4\uc1\pard\sl-240\slmult0" + sbbeg.ToString() + @"\fs" + Convert.ToInt32(myFont.SizeInPoints * 2).ToString() + @" "); // \f0\fs" + this.Font.SizeInPoints * 2 + @" " + myDisplayTextElement.Text + @"}";
} }
private bool FontIsFixed(Font myFont) private bool FontIsFixed(Font myFont)
@@ -1327,6 +1396,7 @@ namespace Volian.Controls.Library
{ {
string fonttab = FontTable; string fonttab = FontTable;
string fontsize = FontSize; string fontsize = FontSize;
//if (this.DetectUrls) this.DetectUrls = false;
if (SelectionLength > 0)HandleDeleteKeyWithSelectedText(new KeyEventArgs(Keys.None), null); if (SelectionLength > 0)HandleDeleteKeyWithSelectedText(new KeyEventArgs(Keys.None), null);
int position = SelectionStart; int position = SelectionStart;
SelectionLength = 0; SelectionLength = 0;
@@ -1356,6 +1426,7 @@ namespace Volian.Controls.Library
} }
private void AddLink50(string linkValue, string linkUrl) private void AddLink50(string linkValue, string linkUrl)
{ {
//this.DetectUrls = false;
int position = SelectionStart; int position = SelectionStart;
SelectionLength = 0; SelectionLength = 0;
SelectedRtf = string.Format(@"{{\rtf\field{{\*\fldinst{{HYPERLINK ""www.volian.com #{0}"" }}}}{{\fldrslt{{\cf2\ul {1}}}}}}}", linkUrl, linkValue); SelectedRtf = string.Format(@"{{\rtf\field{{\*\fldinst{{HYPERLINK ""www.volian.com #{0}"" }}}}{{\fldrslt{{\cf2\ul {1}}}}}}}", linkUrl, linkValue);
@@ -1408,6 +1479,9 @@ namespace Volian.Controls.Library
{ {
Size offset = Size - ClientSize; Size offset = Size - ClientSize;
int widthNew = (this is TableCellEditor) ? Width : (ContentsSize.Width + offset.Width + AdjustSize.Width); int widthNew = (this is TableCellEditor) ? Width : (ContentsSize.Width + offset.Width + AdjustSize.Width);
//int widthNew = Width;
//if (!(this is TableCellEditor))
// widthNew = ContentsSize.Width + offset.Width + AdjustSize.Width;
int heightNew = ContentsSize.Height + offset.Height + AdjustSize.Height; int heightNew = ContentsSize.Height + offset.Height + AdjustSize.Height;
// Don't make the window narrower unless it has text - RHM - 20100107 // Don't make the window narrower unless it has text - RHM - 20100107
Size szNew = new Size(((Text != "" && adjustWidth) ? widthNew : (widthNew > Width ? widthNew : Width)), heightNew); Size szNew = new Size(((Text != "" && adjustWidth) ? widthNew : (widthNew > Width ? widthNew : Width)), heightNew);
@@ -1545,6 +1619,22 @@ namespace Volian.Controls.Library
} }
#endregion #endregion
#region ColorSupport - Not currently used. #region ColorSupport - Not currently used.
//private void SetBackGroundColor(ItemInfo itemInfo)
//{
// string backcolor = null;
// int type = (int)itemInfo.MyContent.Type;
// FormatInfo formatinfo = itemInfo.ActiveFormat;
// if (type == (int)E_FromType.Procedure)
// backcolor = formatinfo.PlantFormat.FormatData.ProcData.BackColor;
// else if (type == (int)E_FromType.Section)
// backcolor = formatinfo.PlantFormat.FormatData.SectData.BackColor;
// else
// {
// int typindx = (int)itemInfo.MyContent.Type - 20000; // what to do for other types rather than steps
// backcolor = formatinfo.PlantFormat.FormatData.StepDataList[typindx].StepLayoutData.BackColor;
// }
// BackColor = Color.FromName(backcolor);
//}
#endregion #endregion
#region EventSupport #region EventSupport
#region LinkEvents #region LinkEvents
@@ -1577,6 +1667,8 @@ namespace Volian.Controls.Library
#region TextAndContentsEvents #region TextAndContentsEvents
void StepRTB_TextChanged(object sender, EventArgs e) void StepRTB_TextChanged(object sender, EventArgs e)
{ {
//if (Rtf.Contains("<START]<START]"))
// Volian.Base.Library.vlnStackTrace.ShowStackLocal(2, 10, "Start Start ItemID={0}", MyItemInfo.ItemID);
if (_InitializingRTB || _IsExperimenting) return; if (_InitializingRTB || _IsExperimenting) return;
// Was setting _IsDirty to true here, but this was getting called from // Was setting _IsDirty to true here, but this was getting called from
// 'dotnetbar' when text was NOT Changed. So _IsDirty was made into // 'dotnetbar' when text was NOT Changed. So _IsDirty was made into
@@ -1612,6 +1704,7 @@ namespace Volian.Controls.Library
private void HandleLocalSelectionChange() private void HandleLocalSelectionChange()
{ {
if (this.MyItemInfo != null && this.MyItemInfo.IsRtfRaw) return; // B2017-023 null reference check for empty workdraft set information dialog if (this.MyItemInfo != null && this.MyItemInfo.IsRtfRaw) return; // B2017-023 null reference check for empty workdraft set information dialog
//if (MyRTBItem != null && MyRTBItem.MyStepPanel.SelectedStepRTB != this)
if (OnIsNotCurrentSelection(this, new EventArgs())) if (OnIsNotCurrentSelection(this, new EventArgs()))
return; return;
@@ -1627,6 +1720,8 @@ namespace Volian.Controls.Library
SelectAll(); SelectAll();
_HandlingCtrlA = false; _HandlingCtrlA = false;
} }
//HandleOverWrite();
//vlnStackTrace.ShowStackLocal("HandleSelectionChangeStack", 1, 10);
bool startingValue = _AdjustingSelection; bool startingValue = _AdjustingSelection;
if (_IdentifyingLinks || _ProcessingDelete) return; if (_IdentifyingLinks || _ProcessingDelete) return;
// If the cursor is beyond the end of the line then move the cursor back one character // If the cursor is beyond the end of the line then move the cursor back one character
@@ -1736,6 +1831,14 @@ namespace Volian.Controls.Library
return false; return false;
} }
//private void HandleOverWrite()
//{
// if (!_OverWrite) return;
// if (SelectionLength > 0) return;
// if (SelectionStart == TextLength) return;
// Console.WriteLine("Handle Overwrite, SelectionStart = {0}, SelectionLength = {1}", SelectionStart, SelectionLength);
// SelectionLength = 1;
//}
private bool _CheckSelection = false; private bool _CheckSelection = false;
#endregion #endregion
#region Delete Handlers #region Delete Handlers
@@ -1754,7 +1857,7 @@ namespace Volian.Controls.Library
DeleteCurrentSelection(keychars); DeleteCurrentSelection(keychars);
e.SuppressKeyPress = true; e.SuppressKeyPress = true;
break; break;
case RangeStatus.Before_Between: case RangeStatus.Before_Between: //myRTB1.SelectedText.EndsWith(@"[END><START]")
DeleteEndBetweenLinks(keychars); DeleteEndBetweenLinks(keychars);
e.SuppressKeyPress = true; e.SuppressKeyPress = true;
break; break;
@@ -1824,15 +1927,19 @@ namespace Volian.Controls.Library
/// <param name="setSelect"></param> /// <param name="setSelect"></param>
private void InsertCharBetweenLinks(LinkLocation ll, char charToAdd, bool setSelect) private void InsertCharBetweenLinks(LinkLocation ll, char charToAdd, bool setSelect)
{ {
//_InsertingSpaceBetweenLinks = true;
DebugPrint("ICBLvvvvvvvvvvvvvvv>>>"); DebugPrint("ICBLvvvvvvvvvvvvvvv>>>");
Rtf = Rtf.Substring(0, ll.StartRtf) + @"\v0 " + charToAdd.ToString() + @"\v " + Rtf.Substring(ll.StartRtf); Rtf = Rtf.Substring(0, ll.StartRtf) + @"\v0 " + charToAdd.ToString() + @"\v " + Rtf.Substring(ll.StartRtf);
//_InsertingSpaceBetweenLinks = false;
if (setSelect) if (setSelect)
SelectionStart = ll.Start - 6; // account for <START] - 1 for the character typed SelectionStart = ll.Start - 6; // account for <START] - 1 for the character typed
DebugPrint("ICBL^^^^^^^^^^^^^^^>>>"); DebugPrint("ICBL^^^^^^^^^^^^^^^>>>");
} }
private void ExpandSelectionToIncludeStart() private void ExpandSelectionToIncludeStart()
{ {
//_AdjustingSelection = true;
SetSelection(SelectionStart - 7, SelectionLength + 7); // Expand selection to include start SetSelection(SelectionStart - 7, SelectionLength + 7); // Expand selection to include start
//_AdjustingSelection = false;
} }
public string GetSelectionForClipBoard() public string GetSelectionForClipBoard()
{ {
@@ -1879,6 +1986,7 @@ namespace Volian.Controls.Library
{ {
_SendBackSpace = true; _SendBackSpace = true;
RtbSendKeys("{BS}"); // remove X RtbSendKeys("{BS}"); // remove X
//this.ClearUndo(); // undo was redisplay 'X' and then deleted text
Application.DoEvents(); Application.DoEvents();
DebugSelection("After BS"); DebugSelection("After BS");
} }
@@ -1897,7 +2005,9 @@ namespace Volian.Controls.Library
int slen = SelectionLength + 1 - 7; int slen = SelectionLength + 1 - 7;
// This puts a space at the link that starts at the end of the selection // This puts a space at the link that starts at the end of the selection
InsertCharBetweenLinks(_RangeEndLink.NextLink); InsertCharBetweenLinks(_RangeEndLink.NextLink);
//_AdjustingSelection = true;
DeleteSelection(sstart, slen, keychars); DeleteSelection(sstart, slen, keychars);
//_AdjustingSelection = false;
_ProcessingKeys--; _ProcessingKeys--;
} }
private void DeleteStartBetweenLinks(string keychars) private void DeleteStartBetweenLinks(string keychars)
@@ -1906,6 +2016,7 @@ namespace Volian.Controls.Library
DebugSelection("DeleteStartBetweenLinks"); DebugSelection("DeleteStartBetweenLinks");
int slen = SelectionLength + 8; int slen = SelectionLength + 8;
int sstart = SelectionStart - 7; int sstart = SelectionStart - 7;
//LinkLocation ll = FindBetweenLinks(SelectionStart);
InsertCharBetweenLinks(_RangeStartLink); InsertCharBetweenLinks(_RangeStartLink);
DeleteSelection(sstart, slen, keychars); DeleteSelection(sstart, slen, keychars);
_ProcessingKeys--; _ProcessingKeys--;
@@ -1916,6 +2027,7 @@ namespace Volian.Controls.Library
DebugSelection("DeleteFromStartOfBox"); DebugSelection("DeleteFromStartOfBox");
int slen = SelectionLength; int slen = SelectionLength;
SetSelection(0, 0); SetSelection(0, 0);
//RtbSendKeys(" "); // open for space between links which separates END/START tokens
SelectedText = " "; SelectedText = " ";
DeleteSelection(0, slen + 8, keychars); DeleteSelection(0, slen + 8, keychars);
_ProcessingKeys--; _ProcessingKeys--;
@@ -1926,8 +2038,12 @@ namespace Volian.Controls.Library
DebugSelection("DeleteFromStartOfBoxEndBetweenLinks"); DebugSelection("DeleteFromStartOfBoxEndBetweenLinks");
// This puts a space at the link that starts at the end of the selection // This puts a space at the link that starts at the end of the selection
int sLen = SelectionStart + SelectionLength - 7 + 2;// -7 for <START] + 2 for the spaces that are added int sLen = SelectionStart + SelectionLength - 7 + 2;// -7 for <START] + 2 for the spaces that are added
//LinkLocation ll = FindBetweenLinks(SelectionStart + SelectionLength);
InsertCharBetweenLinks(_RangeEndLink.NextLink); InsertCharBetweenLinks(_RangeEndLink.NextLink);
//RtbSendKeys("{RIGHT} "); // open for space between links which separates END/START tokens
//int sLen = myRTB1.SelectionStart;
SetSelection(0, 0); SetSelection(0, 0);
//RtbSendKeys(" "); // open for space between links which separates END/START tokens
SelectedText = " "; // open for space between links which separates END/START tokens SelectedText = " "; // open for space between links which separates END/START tokens
DeleteSelection(0, sLen, keychars); DeleteSelection(0, sLen, keychars);
_ProcessingKeys--; _ProcessingKeys--;
@@ -2034,7 +2150,7 @@ namespace Volian.Controls.Library
srtb.Rtf = this.SelectedRtf.Replace(@"\u8209?", "-"); srtb.Rtf = this.SelectedRtf.Replace(@"\u8209?", "-");
srtb.Rtf = srtb.Rtf.Replace(@"\u9586?", @"\\"); srtb.Rtf = srtb.Rtf.Replace(@"\u9586?", @"\\");
string rtnstr = ""; string rtnstr = "";
string ctxt = srtb.Text; string ctxt = srtb.Text;//this.SelectedText;
if (ctxt.EndsWith("<START]")) if (ctxt.EndsWith("<START]"))
ctxt = ctxt.Substring(0, ctxt.Length - 7); ctxt = ctxt.Substring(0, ctxt.Length - 7);
int idx = 0; int idx = 0;
@@ -2163,6 +2279,7 @@ namespace Volian.Controls.Library
if (MyItemInfo != null && MyItemInfo.IsRtfRaw && MyItemInfo.FormatStepData.Type.ToUpper().Contains("EQUATION") && !hasEquation) if (MyItemInfo != null && MyItemInfo.IsRtfRaw && MyItemInfo.FormatStepData.Type.ToUpper().Contains("EQUATION") && !hasEquation)
{ {
FlexibleMessageBox.Show("Cannot paste non-equation data into an equation step type.", "Invalid data", MessageBoxButtons.OK); FlexibleMessageBox.Show("Cannot paste non-equation data into an equation step type.", "Invalid data", MessageBoxButtons.OK);
//richTextBox1.Dispose();
e.Handled = true; e.Handled = true;
return; return;
} }
@@ -2170,6 +2287,7 @@ namespace Volian.Controls.Library
else if (hasEquation && (MyItemInfo == null || (MyItemInfo != null && !MyItemInfo.IsRtfRaw && !MyItemInfo.FormatStepData.Type.ToUpper().Contains("EQUATION")))) else if (hasEquation && (MyItemInfo == null || (MyItemInfo != null && !MyItemInfo.IsRtfRaw && !MyItemInfo.FormatStepData.Type.ToUpper().Contains("EQUATION"))))
{ {
FlexibleMessageBox.Show("Cannot paste equation data into an non-equation step type.", "Invalid data", MessageBoxButtons.OK); FlexibleMessageBox.Show("Cannot paste equation data into an non-equation step type.", "Invalid data", MessageBoxButtons.OK);
//richTextBox1.Dispose();
e.Handled = true; e.Handled = true;
return; return;
} }
@@ -2428,6 +2546,16 @@ namespace Volian.Controls.Library
if (SelectionLength > 0) HandleDeleteKeyWithSelectedText(e, null); if (SelectionLength > 0) HandleDeleteKeyWithSelectedText(e, null);
break; break;
case Keys.Insert: case Keys.Insert:
//_OverWrite = !_OverWrite;
//if (_OverWrite)
//{
// HandleSelectionChange();
//}
//else
//{
// SelectionLength = 0;
// HandleSelectionChange();
//}
// For now, don't allow for toggling between insert/overwrite mode - see // For now, don't allow for toggling between insert/overwrite mode - see
// comment on _OverWrite // comment on _OverWrite
e.Handled = true; e.Handled = true;
@@ -2441,11 +2569,21 @@ namespace Volian.Controls.Library
if (e.Shift) if (e.Shift)
{ {
e.Handled = true; e.Handled = true;
ItemInfo myCopyStep = (this.Parent.Parent.Parent as StepTabPanel).MyDisplayTabControl.MyCopyStep; ItemInfo myCopyStep = (this.Parent.Parent.Parent as StepTabPanel).MyDisplayTabControl.MyCopyStep;
if (myCopyStep != null) if (myCopyStep != null)
{ {
OnSetMenu(this, new StepRTBMenuEventArgs("StepPaste")); // commented out as part of bug fix B2016-148 to fix the <Shift><F5> not popping up the paste options
} //if (this.MyItemInfo.IsSection && myCopyStep.IsSection)
// OnSetMenu(this, new StepRTBMenuEventArgs("StepPaste"));
//if (this.MyItemInfo.IsStep && myCopyStep.IsStep)
//{
// if ((this.MyItemInfo.IsHigh && myCopyStep.IsHigh) || (!this.MyItemInfo.IsHigh && !myCopyStep.IsHigh))
// OnSetMenu(this, new StepRTBMenuEventArgs("StepPaste"));
//}
OnSetMenu(this, new StepRTBMenuEventArgs("StepPaste"));
}
//if (!OnCheckClipboard(this, new EventArgs())) return; // check if 'clipboard' contains a step.
//OnSetMenu(this, new StepRTBMenuEventArgs("StepPaste"));
} }
else if (!e.Control && !e.Alt) else if (!e.Control && !e.Alt)
{ {
@@ -2650,6 +2788,7 @@ namespace Volian.Controls.Library
} }
if (Text == "" && Parent != null && Parent is VlnFlexGrid) if (Text == "" && Parent != null && Parent is VlnFlexGrid)
{ {
//ShowMyParentsFonts();
SelectionFont = Parent.Font; SelectionFont = Parent.Font;
} }
// add the character with its font depending on the char.... // add the character with its font depending on the char....
@@ -2903,6 +3042,7 @@ namespace Volian.Controls.Library
_AdjustingSelection = true; _AdjustingSelection = true;
PushSelection(); PushSelection();
FindLinks(); FindLinks();
//IdentifyLinks();
PopSelection(); PopSelection();
LinkLocation llx = FindLinkLocation(); LinkLocation llx = FindLinkLocation();
if (_CheckSelection) if (_CheckSelection)
@@ -3117,6 +3257,98 @@ namespace Volian.Controls.Library
Select(locStart, locLength); Select(locStart, locLength);
} }
#endregion #endregion
//#region FontAndStylesSupport
//private void ToggleFontStyle(FontStyle style, bool att_on)
//{
// int start = SelectionStart;
// int len = SelectionLength;
// System.Drawing.Font currentFont;
// FontStyle fs;
// for (int i = 0; i < len; ++i)
// {
// Select(start + i, 1);
// currentFont = SelectionFont;
// fs = currentFont.Style;
// //add or remove style
// if (!att_on)fs = fs | style;
// else fs = fs & ~style;
// SelectionFont = new Font(
// currentFont.FontFamily,
// currentFont.Size,
// fs
// );
// }
//}
/// <summary>
/// Returns a Font with:
/// 1) The font applying to the entire selection, if none is the default font.
/// 2) The font size applying to the entire selection, if none is the size of the default font.
/// 3) A style containing the attributes that are common to the entire selection, default regular.
/// </summary>
///
//public Font GetFontDetails()
//{
// //This method should handle cases that occur when multiple fonts/styles are selected
// int start = SelectionStart;
// int len = SelectionLength;
// int TempStart = 0;
// if (len <= 1)
// {
// // Return the selection or default font
// if (SelectionFont != null)
// return SelectionFont;
// else
// return Font; // should be default from format.
// }
// // Step through the selected text one char at a time
// // after setting defaults from first char
// _rtbTemp.Rtf = SelectedRtf;
// //Turn everything on so we can turn it off one by one
// FontStyle replystyle =
// FontStyle.Bold | FontStyle.Italic | FontStyle.Underline;
// // Set reply font, size and style to that of first char in selection.
// _rtbTemp.Select(TempStart, 1);
// string replyfont = _rtbTemp.SelectionFont.Name;
// float replyfontsize = _rtbTemp.SelectionFont.Size;
// replystyle = replystyle & _rtbTemp.SelectionFont.Style;
// // Search the rest of the selection
// for (int i = 1; i < len; ++i)
// {
// _rtbTemp.Select(TempStart + i, 1);
// // Check reply for different style
// replystyle = replystyle & _rtbTemp.SelectionFont.Style;
// // Check font
// if (replyfont != _rtbTemp.SelectionFont.FontFamily.Name)
// replyfont = "";
// // Check font size
// if (replyfontsize != _rtbTemp.SelectionFont.Size)
// replyfontsize = (float)0.0;
// }
// // Now set font and size if more than one font or font size was selected
// if (replyfont == "")
// replyfont = _rtbTemp.Font.FontFamily.Name;
// if (replyfontsize == 0.0)
// replyfontsize = _rtbTemp.Font.Size;
// // generate reply font
// Font reply
// = new Font(replyfont, replyfontsize, replystyle);
// return reply;
//}
//#endregion
#region EnumsSelectionRange #region EnumsSelectionRange
private enum StartStatus : int private enum StartStatus : int
{ {
@@ -3193,6 +3425,12 @@ namespace Volian.Controls.Library
DebugPrint("SelectionStart {0}, SelectionEnd {1}, TextLength {2}", DebugPrint("SelectionStart {0}, SelectionEnd {1}, TextLength {2}",
SelectionStart, SelectionStart + SelectionLength, SelectionStart, SelectionStart + SelectionLength,
TextLength); TextLength);
//if (_RangeStartLink != null)
// _RangeStartLink.Show("startLink");
//if (_RangeEndLink != null)
// _RangeEndLink.Show("endLink");
//if (foundLink != null)
// foundLink.Show("foundLink");
if (foundLink == null) if (foundLink == null)
return RTBRangeStatus = RangeStatus.NoContainedLinks; return RTBRangeStatus = RangeStatus.NoContainedLinks;
@@ -3511,6 +3749,7 @@ namespace Volian.Controls.Library
static void tsi_Click(object sender, EventArgs e) static void tsi_Click(object sender, EventArgs e)
{ {
ToolStripMenuItem tsmi = sender as ToolStripMenuItem; ToolStripMenuItem tsmi = sender as ToolStripMenuItem;
//_ContextMenuStepRTB.MyRTBItem.MyStepPanel.MyStepTabPanel.MyStepTabRibbon.OpenContextMenu(tsmi.Owner.Location);
_ContextMenuStepRTB.OnOpenContextMenu(sender, new StepRTBLocationEventArgs(tsmi.Owner.Location)); _ContextMenuStepRTB.OnOpenContextMenu(sender, new StepRTBLocationEventArgs(tsmi.Owner.Location));
} }
// This is our customized Spell Check dialog // This is our customized Spell Check dialog
@@ -3905,6 +4144,63 @@ namespace Volian.Controls.Library
if (NextLink != null) if (NextLink != null)
Console.WriteLine("LinkLocation: {0}.NextLink {1}", str, NextLink); Console.WriteLine("LinkLocation: {0}.NextLink {1}", str, NextLink);
} }
// #region ClipboardHandler
// private const int WM_CUT = 0x0300;
// private const int WM_COPY = 0x0301;
// private const int WM_PASTE = 0x0302;
// public delegate void ClipboardEventHandler(object sender, ClipboardEventArgs e);
// [Category("Clipboard")]
// public event ClipboardEventHandler CutText;
// [Category("Clipboard")]
// public event ClipboardEventHandler CopiedText;
// [Category("Clipboard")]
// public event ClipboardEventHandler PastedText;
// protected override void WndProc(ref Message m)
// {
// if (m.Msg == WM_CUT)
// {
// if (CutText != null)
// CutText(this, new ClipboardEventArgs(this.SelectedText));
// }
// else if (m.Msg == WM_COPY)
// {
// if (CopiedText != null)
// CopiedText(this, new ClipboardEventArgs(this.SelectedText));
// }
// else if (m.Msg == WM_PASTE)
// {
// if (PastedText != null)
// PastedText(this, new ClipboardEventArgs(Clipboard.GetText()));
// }
// base.WndProc(ref m);
// }
//}
//public class ClipboardEventArgs : EventArgs
//{
// private string clipboardText;
// public string ClipboardText
// {
// get
// {
// return clipboardText;
// }
// set
// {
// clipboardText = value;
// }
// }
// public ClipboardEventArgs(string clipboardText)
// {
// this.clipboardText = clipboardText;
// }
// #endregion
} }
#endregion #endregion
+9 -40
View File
@@ -3367,14 +3367,7 @@ namespace Volian.Controls.Library
MessageBox.Show(this, message, "Procedure Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning); MessageBox.Show(this, message, "Procedure Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return; return;
} }
//C2026-021 Expand Functionality of Viewing Mode else if (MyEditItem.MyStepPanel.VwMode == E_ViewMode.View)
if (MyEditItem.MyStepPanel.VwMode == E_ViewMode.View && MyEditItem.MyStepPanel.ApplDisplayMode > 0)
{
//Procedure Viewing Mode is set to a specific Unit - so cannot exit vie only mode
MessageBox.Show(this, "Procedures with multiple units are only editable when the Viewing Mode is set to Master. To change out of View Only Mode, first open the Step Propeties panel->Applicability tab and change the Viewing Mode to be Master. Then you can disable View Only Mode.", "Procedure Viewing Mode Incompatiple with Edits", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
else if (MyEditItem.MyStepPanel.VwMode == E_ViewMode.View)
{ {
//swapping into edit mode, so check out procedure and Setup Security //swapping into edit mode, so check out procedure and Setup Security
(this.Parent as StepTabPanel).MyDisplayTabItem.OwnerID = MySessionInfo.CheckOutItem(MyEditItem.MyItemInfo.MyProcedure.ItemID, 0); (this.Parent as StepTabPanel).MyDisplayTabItem.OwnerID = MySessionInfo.CheckOutItem(MyEditItem.MyItemInfo.MyProcedure.ItemID, 0);
@@ -3563,10 +3556,7 @@ namespace Volian.Controls.Library
MyEditItem.SaveContents(); MyEditItem.SaveContents();
using (DocVersion dv = DocVersion.Get(Mydvi.VersionID)) using (DocVersion dv = DocVersion.Get(Mydvi.VersionID))
{ {
//must get id before ROFST gets updated so know what to refresh later swROUpdate = new System.IO.StreamWriter(ROFstInfo.ROUpdateResultsPath(Mydvi));
int origfstid = roFstInfo.ROFstID;
swROUpdate = new System.IO.StreamWriter(ROFstInfo.ROUpdateResultsPath(Mydvi));
// B2022-026 RO Memory Reduction code - first load the new ro.fst so that we can assign the ROTableUpdate event to the correct roFstInfo // B2022-026 RO Memory Reduction code - first load the new ro.fst so that we can assign the ROTableUpdate event to the correct roFstInfo
if (dv.ROfstLoadingFigures || dv.NewerRoFst) // B2017-125 see if loading figures was completed if (dv.ROfstLoadingFigures || dv.NewerRoFst) // B2017-125 see if loading figures was completed
{ {
@@ -3574,30 +3564,10 @@ namespace Volian.Controls.Library
ROFstInfo.UpdateRoFst(roFstInfo.MyRODb, dv, roFstInfo, DoProgressBarRefresh); ROFstInfo.UpdateRoFst(roFstInfo.MyRODb, dv, roFstInfo, DoProgressBarRefresh);
roFstInfo = Mydvi.DocVersionAssociations[0].MyROFst; roFstInfo = Mydvi.DocVersionAssociations[0].MyROFst;
} }
else if (!dv.ROfstLastCompleted && origfstid == roFstInfo.ROFstID)
{
//Handle issue where load failed without completing update
//previous RO FST did not load, get last loaded ID
//if none, use -1 which will check all ROs in the Working Draft
string cfg = dv.DocVersionAssociations[0].Config;
AssociationConfig ac = new AssociationConfig((cfg == null || cfg.Length == 0) ? "<Config />" : cfg);
if (dv.DocVersionAssociations[0]?.MyROFst != null)
{
if (!int.TryParse(ac.ROUpdate_PrevROFSTID, out origfstid))
{
origfstid = -1;
}
}
else
{
origfstid = -1;
}
}
roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate); roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
ContentInfo.StaticContentInfoChange += ContentInfo_StaticContentInfoChange; // write changes to a text file ContentInfo.StaticContentInfoChange += ContentInfo_StaticContentInfoChange; // write changes to a text file
ROFstInfo.RefreshROFstAtItemLevel(DocVersionInfo.Get(dv.VersionID), DoProgressBarRefresh, null, roFstInfo, origfstid, roFstInfo.ROFstID); ROFst newrofst = ROFstInfo.RefreshROFst(dv, roFstInfo, DoProgressBarRefresh, null);
swROUpdate.Close(); swROUpdate.Close();
ContentInfo.StaticContentInfoChange -= ContentInfo_StaticContentInfoChange; ContentInfo.StaticContentInfoChange -= ContentInfo_StaticContentInfoChange;
roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate); roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
StepPanelTabDisplayEventArgs args = new StepPanelTabDisplayEventArgs("DisplayROUpdateROFST"); StepPanelTabDisplayEventArgs args = new StepPanelTabDisplayEventArgs("DisplayROUpdateROFST");
@@ -3605,7 +3575,7 @@ namespace Volian.Controls.Library
} }
Cursor = Cursors.Default; Cursor = Cursors.Default;
FinalProgressBarMessage = "ROs values updated"; FinalProgressBarMessage = "ROs values updated";
} }
private System.IO.StreamWriter swROUpdate; private System.IO.StreamWriter swROUpdate;
// write the RO reference changes to a text file, include the old/new text, location, and the itemid of the step element // write the RO reference changes to a text file, include the old/new text, location, and the itemid of the step element
void ContentInfo_StaticContentInfoChange(object sender, StaticContentInfoEventArgs args) void ContentInfo_StaticContentInfoChange(object sender, StaticContentInfoEventArgs args)
@@ -3645,11 +3615,10 @@ namespace Volian.Controls.Library
set set
{ {
if (ProgressBar == null) return; if (ProgressBar == null) return;
ProgressBar.Value = 100;
ProgressBar.Text = value; ProgressBar.Maximum = 100;
ProgressBar.Maximum = 100; ProgressBar.Text = value;
ProgressBar.Value = 100; Application.DoEvents();
Application.DoEvents();
} }
} }
+8 -32
View File
@@ -2465,11 +2465,7 @@ namespace Volian.Controls.Library
} }
Cursor = Cursors.WaitCursor; // C2023-002: move wait cursor after check out error Cursor = Cursors.WaitCursor; // C2023-002: move wait cursor after check out error
int ownerid = MySessionInfo.CheckOutItem(MyDVI.VersionID, CheckOutType.DocVersion); int ownerid = MySessionInfo.CheckOutItem(MyDVI.VersionID, CheckOutType.DocVersion);
using (DocVersion dv = DocVersion.Get(MyDVI.VersionID))
//must get id before ROFST gets updated so know what to refresh later
int origfstid = roFstInfo.ROFstID;
using (DocVersion dv = DocVersion.Get(MyDVI.VersionID))
{ {
swROUpdate = new System.IO.StreamWriter(ROFstInfo.ROUpdateResultsPath(MyDVI)); // RO changes placed in file in the Documents\VEPROMS folder swROUpdate = new System.IO.StreamWriter(ROFstInfo.ROUpdateResultsPath(MyDVI)); // RO changes placed in file in the Documents\VEPROMS folder
// B2022-026 RO Memory Reduction code - first load the new ro.fst so that we can assign the ROTableUpdate event to the correct roFstInfo // B2022-026 RO Memory Reduction code - first load the new ro.fst so that we can assign the ROTableUpdate event to the correct roFstInfo
@@ -2479,30 +2475,10 @@ namespace Volian.Controls.Library
ROFstInfo.UpdateRoFst(roFstInfo.MyRODb, dv, roFstInfo, DoProgressBarRefresh); ROFstInfo.UpdateRoFst(roFstInfo.MyRODb, dv, roFstInfo, DoProgressBarRefresh);
roFstInfo = MyDVI.DocVersionAssociations[0].MyROFst; roFstInfo = MyDVI.DocVersionAssociations[0].MyROFst;
} }
else if (!dv.ROfstLastCompleted && origfstid == roFstInfo.ROFstID) roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
{
//Handle issue where load failed without completing update
//previous RO FST did not load, get last loaded ID
//if none, use -1 which will check all ROs in the Working Draft
string cfg = dv.DocVersionAssociations[0].Config;
AssociationConfig ac = new AssociationConfig((cfg == null || cfg.Length == 0) ? "<Config />" : cfg);
if (dv.DocVersionAssociations[0]?.MyROFst != null)
{
if (!int.TryParse(ac.ROUpdate_PrevROFSTID, out origfstid))
{
origfstid = -1;
}
}
else
{
origfstid = -1;
}
}
roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
ContentInfo.StaticContentInfoChange += ContentInfo_StaticContentInfoChange; // write changes to a text file ContentInfo.StaticContentInfoChange += ContentInfo_StaticContentInfoChange; // write changes to a text file
ROFstInfo.RefreshROFstAtItemLevel(DocVersionInfo.Get(dv.VersionID), DoProgressBarRefresh, null, roFstInfo, origfstid, roFstInfo.ROFstID); ROFst newrofst = ROFstInfo.RefreshROFst(dv, roFstInfo, DoProgressBarRefresh, null);
swROUpdate.Close(); swROUpdate.Close();
ContentInfo.StaticContentInfoChange -= ContentInfo_StaticContentInfoChange; ContentInfo.StaticContentInfoChange -= ContentInfo_StaticContentInfoChange;
roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate); roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
OnTabDisplay(this, new StepPanelTabDisplayEventArgs("DisplayROUpdateROFST")); OnTabDisplay(this, new StepPanelTabDisplayEventArgs("DisplayROUpdateROFST"));
@@ -2550,10 +2526,10 @@ namespace Volian.Controls.Library
set set
{ {
if (ProgressBar == null) return; if (ProgressBar == null) return;
ProgressBar.Text = value; ProgressBar.Value = 100;
ProgressBar.Maximum = 100; ProgressBar.Maximum = 100;
ProgressBar.Value = 100; ProgressBar.Text = value;
Application.DoEvents(); Application.DoEvents();
} }
} }
public List<string> roFstInfo_ROTableUpdate(object sender, ROFstInfoROTableUpdateEventArgs args) public List<string> roFstInfo_ROTableUpdate(object sender, ROFstInfoROTableUpdateEventArgs args)
+1 -9
View File
@@ -1418,9 +1418,7 @@ namespace Volian.Print.Library
float yoff = 0; float yoff = 0;
if (_MyHelper.DidFirstPageDocStyle) yoff = origYoff - (float)mySection.MyDocStyle.Layout.TopMargin; if (_MyHelper.DidFirstPageDocStyle) yoff = origYoff - (float)mySection.MyDocStyle.Layout.TopMargin;
// C2018-004 create meta file for baseline compares // C2018-004 create meta file for baseline compares
Volian.Base.Library.BaselineMetaFile.WriteLine("WD Height={0} Width={1} scPgCnt={2} locEnd={3} pdfSz={4} xOff={5} yOff={6} ScPgNum {7}", fgPage.Height, fgPage.Width, sectPageCount, locEndOfWordDoc, pdfSize, (float)(mySection.MyDocStyle.Layout.MSWordXAdj ?? 0.0), (float)(mySection.MyDocStyle.Layout.MSWordYAdj ?? 0.0) + yoff, pageNumber);
Volian.Base.Library.BaselineMetaFile.WriteLine("WD Height={0} Width={1} scPgCnt={2} locEnd={3} pdfSz={4} xOff={5} yOff={6} ScPgNum {7}", fgPage.Height, fgPage.Width, sectPageCount, Truncate(locEndOfWordDoc, 2), Truncate(pdfSize, 2), (float)(mySection.MyDocStyle.Layout.MSWordXAdj ?? 0.0), (float)(mySection.MyDocStyle.Layout.MSWordYAdj ?? 0.0) + yoff, pageNumber);
AddImportedPageToLayer(cb.PdfWriter.DirectContent, _MSWordLayer, fgPage, (float)(mySection.MyDocStyle.Layout.MSWordXAdj ?? 0), (float)(mySection.MyDocStyle.Layout.MSWordYAdj ?? 0) + yoff); AddImportedPageToLayer(cb.PdfWriter.DirectContent, _MSWordLayer, fgPage, (float)(mySection.MyDocStyle.Layout.MSWordXAdj ?? 0), (float)(mySection.MyDocStyle.Layout.MSWordYAdj ?? 0) + yoff);
// B2019-102 Handle PDF Destinations for Word Sections // B2019-102 Handle PDF Destinations for Word Sections
if (ii == 0 && _MyHelper.MyPromsPrinter.SaveLinks) if (ii == 0 && _MyHelper.MyPromsPrinter.SaveLinks)
@@ -1535,12 +1533,6 @@ namespace Volian.Print.Library
} }
ProfileTimer.Pop(profileDepth); ProfileTimer.Pop(profileDepth);
} }
public static float Truncate(float value, int digits)
{
double mult = Math.Pow(10.0, digits);
double result = Math.Truncate(mult * value) / mult;
return (float)result;
}
// B2019-152: AddMergedLandscapePage adds entries to the dictionary that keeps track of what pages in a pdf are landscape // B2019-152: AddMergedLandscapePage adds entries to the dictionary that keeps track of what pages in a pdf are landscape
// so that if merge is done, the pages that are landscaped can have landscaped page numbers placed on them // 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) public static void AddMergedLandscapePage(VlnSvgPageHelper _MyHelper, string PDFFile)
@@ -1660,13 +1660,13 @@ i = 0;
{ {
ROFSTLookup myLookup = MySection.MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(MySection.MyDocVersion, overrideChild); ROFSTLookup myLookup = MySection.MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(MySection.MyDocVersion, overrideChild);
//C2026-047 first try the RO Lookup with the ascii dash character in the accpageid. If not found, try again with the unicode dash string accpgid = accpageid;
ROFSTLookup.rochild roc = myLookup.GetROChildByAccPageID("<" + accpageid.Replace(@"\u8209?", "-") + "." + multiid + ">", MySection.MyDocVersion.DocVersionConfig.RODefaults_setpointprefix, MySection.MyDocVersion.DocVersionConfig.RODefaults_graphicsprefix); ROFSTLookup.rochild roc = myLookup.GetROChildByAccPageID("<" + accpgid + "." + multiid + ">", MySection.MyDocVersion.DocVersionConfig.RODefaults_setpointprefix, MySection.MyDocVersion.DocVersionConfig.RODefaults_graphicsprefix);
if (roc.value == null) if (roc.value == null)
{ {
// try again but this time with the unicode dash accpgid = accpgid.Replace(@"\u8209?", "-");
roc = myLookup.GetROChildByAccPageID("<" + accpageid + "." + multiid + ">", MySection.MyDocVersion.DocVersionConfig.RODefaults_setpointprefix, MySection.MyDocVersion.DocVersionConfig.RODefaults_graphicsprefix); roc = myLookup.GetROChildByAccPageID("<" + accpgid + "." + multiid + ">", MySection.MyDocVersion.DocVersionConfig.RODefaults_setpointprefix, MySection.MyDocVersion.DocVersionConfig.RODefaults_graphicsprefix);
} }
if (!deflt.StartsWith("[") && !string.IsNullOrEmpty(roc.value) && roc.value.Trim().Length > 0) // don't return val if it's an empty or blank string - jsj 01-28-2019 if (!deflt.StartsWith("[") && !string.IsNullOrEmpty(roc.value) && roc.value.Trim().Length > 0) // don't return val if it's an empty or blank string - jsj 01-28-2019
+12 -32
View File
@@ -1,10 +1,15 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
//using System.Drawing;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.IO; using System.IO;
using iTextSharp.text.pdf; using iTextSharp.text.pdf;
using iTextSharp.text; using iTextSharp.text;
using Itenso.Rtf;
using Itenso.Rtf.Parser;
using Itenso.Rtf.Interpreter;
using Itenso.Rtf.Support;
using Volian.Controls.Library; using Volian.Controls.Library;
using VEPROMS.CSLA.Library; using VEPROMS.CSLA.Library;
using Volian.Base.Library; using Volian.Base.Library;
@@ -155,44 +160,13 @@ namespace Volian.Print.Library
childItemInfo.SetHeader(childItemInfo.FormatStepData.TabData.Font, lastHeader); childItemInfo.SetHeader(childItemInfo.FormatStepData.TabData.Font, lastHeader);
lastHeader = null; lastHeader = null;
} }
// B2026-072 Caution/Note off of an RNO sub-step was printing on top of the parent AER sub-step text
// ex: Farley Unit 1 AOPs 1-AOP-1.0, Procedure Steps section, step 8.4.1
// if printing a Caution or Note type that is in the RNO column and we are a printing a two column section
if ((childItemInfo.IsCaution || childItemInfo.IsNote) && childItemInfo.IsInRNO && childItemInfo.ColumnMode>0)
{
// get the starting positon of the RNO column
float colR = float.Parse(formatInfo.MyStepSectionLayoutData.ColRTable.Split(",".ToCharArray())[childItemInfo.ColumnMode]);
// get the starting position of the Caution or Note
float startColOfCautionNote = xoff;
if (bxIndx != null)
{
// if it is a boxed Caution or Note, then get the starting colun of the box
Box bx = childItemInfo.ActiveFormat.PlantFormat.FormatData.BoxList[(int)bxIndx];
startColOfCautionNote = bx.Start??0;
}
// If the starting positon of Caution/Note is in the AER column, find the y position of the last text line of
// the AER parent to the RNO step.
if (startColOfCautionNote < colR)
{
vlnParagraph tparent = Parent;
while (tparent.MyItemInfo.IsInRNO) tparent = tparent.MyParent; // find the parent AER sub-step
if (tparent != Parent && tparent.MyItemInfo.IsInSubStep)
{
// add the height of the AER sub-step text to its starting yoffset
float tyoff = tparent.YOffset + tparent.Height;
// while the position in the AER column (tyoff) is greater then or equal to starting position
// of the Note or Caution, move down the page a line at time.
// SixLinesPerInch adjusts for when we are printing in compress mode.
while (tyoff >= yoff) yoff += vlnPrintObject.SixLinesPerInch;
}
}
}
// if the format has MatchUpRNOCautNote, then add a line to yoff, if not at top of rno column. // if the format has MatchUpRNOCautNote, then add a line to yoff, if not at top of rno column.
if (childItemInfo.FormatStepData != null && childItemInfo.FormatStepData.MatchUpRNO) if (childItemInfo.FormatStepData != null && childItemInfo.FormatStepData.MatchUpRNO)
{ {
if (childItemInfo.MyParent != null && childItemInfo.MyParent.MyParent != null && !childItemInfo.MyParent.MyParent.IsHigh) if (childItemInfo.MyParent != null && childItemInfo.MyParent.MyParent != null && !childItemInfo.MyParent.MyParent.IsHigh)
{ {
yoff += vlnPrintObject.SixLinesPerInch; yoff += vlnPrintObject.SixLinesPerInch;
Parent.AdjustForMatchUpRNO = vlnPrintObject.SixLinesPerInch; // B2020-112
} }
} }
// if this is a caution/note and it has a caution/note substep, do it before this caution/note, so that // if this is a caution/note and it has a caution/note substep, do it before this caution/note, so that
@@ -1580,6 +1554,7 @@ namespace Volian.Print.Library
} }
private static bool DoSubs = true; // flag whether to print substeps (don't if doing continued checklist header) private static bool DoSubs = true; // flag whether to print substeps (don't if doing continued checklist header)
public float AdjustForXBlankW1stLevSub = 0; // B2020-112 this & next line public float AdjustForXBlankW1stLevSub = 0; // B2020-112 this & next line
public float AdjustForMatchUpRNO = 0;
protected float _ContinueHeight = 0; protected float _ContinueHeight = 0;
public virtual float ContinueHeight public virtual float ContinueHeight
{ {
@@ -7195,6 +7170,11 @@ namespace Volian.Print.Library
// //Console.WriteLine("Adjust Add extra Line (flag) = '{0}'", para); // //Console.WriteLine("Adjust Add extra Line (flag) = '{0}'", para);
// adjust -= para.MyParent.AdjustForXBlankW1stLevSub; // adjust -= para.MyParent.AdjustForXBlankW1stLevSub;
//} //}
//if (para.AdjustForMatchUpRNO != 0 && (para.ChildrenAbove == null || para.ChildrenAbove.Count == 0))
// adjust -= para.AdjustForMatchUpRNO;
//else if (para.MyParent.AdjustForMatchUpRNO != 0 && (para.MyParent.ChildrenAbove != null && para.MyParent.ChildrenAbove.Count > 0)
// && para.MyParent.ChildrenAbove[0] == para)
// adjust -= para.MyParent.AdjustForMatchUpRNO;
if (!this[stepLevel].ContainsKey(-(yLocation + adjust))) if (!this[stepLevel].ContainsKey(-(yLocation + adjust)))
this[stepLevel].Add(-(yLocation + adjust), para); this[stepLevel].Add(-(yLocation + adjust), para);
+19 -42
View File
@@ -6,7 +6,6 @@ using System.Windows.Forms;
using System.Text; using System.Text;
using System.Drawing; using System.Drawing;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using Volian.Base.Library;
using VG; using VG;
namespace XYPlots namespace XYPlots
@@ -283,12 +282,9 @@ namespace XYPlots
{ {
if (!File.Exists(FileName)) if (!File.Exists(FileName))
{ {
if (!BaseLnSettings.blBaseLine) // B2026-056 suppress messages when running baseline. // File does not exist, show error message
{ MessageBox.Show(String.Format("X/Y Plot File {0} Does Not Exist", FileName), "Error Opening X/Y Plot File");
// File does not exist, show error message return false;
MessageBox.Show(String.Format("X/Y Plot File {0} Does Not Exist", FileName), "Error Opening X/Y Plot File");
return false;
}
} }
// Open the X/Y Plot file // Open the X/Y Plot file
try try
@@ -297,12 +293,9 @@ namespace XYPlots
} }
catch (Exception e) catch (Exception e)
{ {
if (!BaseLnSettings.blBaseLine) // B2026-056 suppress messages when running baseline. // cannot open the x/y plot file
{ MessageBox.Show(e.Message, String.Format("Error Opening {0} for Reading", FileName));
// cannot open the x/y plot file return false;
MessageBox.Show(e.Message, String.Format("Error Opening {0} for Reading", FileName));
return false;
}
} }
int blen = (int)XYPlotFile.Length; int blen = (int)XYPlotFile.Length;
int bread = 0; int bread = 0;
@@ -316,11 +309,8 @@ namespace XYPlots
} }
catch (Exception e) catch (Exception e)
{ {
if (!BaseLnSettings.blBaseLine) // B2026-056 suppress messages when running baseline. MessageBox.Show(e.Message, String.Format("Error Reading {0}", FileName));
{ return false;
MessageBox.Show(e.Message, String.Format("Error Reading {0}", FileName));
return false;
}
} }
try try
{ {
@@ -328,11 +318,8 @@ namespace XYPlots
} }
catch (Exception e) catch (Exception e)
{ {
if (!BaseLnSettings.blBaseLine) // B2026-056 suppress messages when running baseline. MessageBox.Show(e.Message, String.Format("Error Closing {0}", FileName));
{ return false;
MessageBox.Show(e.Message, String.Format("Error Closing {0}", FileName));
return false;
}
} }
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (int i = 0; i < bbuf.Length; i++) for (int i = 0; i < bbuf.Length; i++)
@@ -459,7 +446,7 @@ namespace XYPlots
char retval; char retval;
StringBuilder Lbuff = new StringBuilder(); StringBuilder Lbuff = new StringBuilder();
retval = NextChar(); retval = NextChar();
if (retval != '"' && retval != '\x1C' && !BaseLnSettings.blBaseLine) // open double quote if (retval != '"' && retval != '\x1C') // open double quote
MessageBox.Show("Double Quote not found", "Syntax problem in XY Plot"); MessageBox.Show("Double Quote not found", "Syntax problem in XY Plot");
retval = NextChar(); retval = NextChar();
while (retval != 0 && retval != '\n') while (retval != 0 && retval != '\n')
@@ -1453,10 +1440,7 @@ namespace XYPlots
} }
private void PrintStackError(string relation, int limit) private void PrintStackError(string relation, int limit)
{ {
if (!BaseLnSettings.blBaseLine) // B2026-056 suppress messages when running baseline. MessageBox.Show(String.Format("Position Stack Pointer {0} {1}", relation, limit.ToString()), "Print Stack Error");
{
MessageBox.Show(String.Format("Position Stack Pointer {0} {1}", relation, limit.ToString()), "Print Stack Error");
}
} }
private void SavePosition() private void SavePosition()
{ {
@@ -1674,11 +1658,8 @@ namespace XYPlots
} }
private void err_exit(string msg, string msg2) private void err_exit(string msg, string msg2)
{ {
if (!BaseLnSettings.blBaseLine) // B2026-056 suppress messages when running baseline. MessageBox.Show(msg + "\n" + msg2 + "\n\n This p=Process Will Terminate", "\n## ERROR ## - ");
{ Environment.Exit(255);
MessageBox.Show(msg + "\n" + msg2 + "\n\n This p=Process Will Terminate", "\n## ERROR ## - ");
Environment.Exit(255);
}
} }
private void FindBoxesinArea(int ptval, int flag) private void FindBoxesinArea(int ptval, int flag)
{ {
@@ -1935,7 +1916,7 @@ namespace XYPlots
{ {
// MSWord enters left and right double-quotes when you press the double-quote key // MSWord enters left and right double-quotes when you press the double-quote key
//B2017 - Replace left and right double-quotes with normal double-quotes //B2017 - Replace left and right double-quotes with normal double-quotes
PlotCommands = PlotCommands.Replace('\u201C', '"').Replace('\u201D', '"'); PlotCommands = PlotCommands.Replace('\u201C', '"').Replace('\u201D', '"');
LoadBuffFromString(PlotCommands); LoadBuffFromString(PlotCommands);
Setup(); Setup();
//#if DEBUG //#if DEBUG
@@ -2010,14 +1991,10 @@ namespace XYPlots
AxisLabel[1] = getint(); AxisLabel[1] = getint();
break; break;
default: default:
if (BaseLnSettings.blBaseLine == false) // B2026-056 suppress messages when running baseline. if (PrevCommand.Equals(null))
{ MessageBox.Show("Check the first line of the X/Y Plot definition.", "Unrecognized Graph Command");
if (PrevCommand.Equals(null)) else
MessageBox.Show("Check the first line of the X/Y Plot definition.", "Unrecognized Graph Command"); MessageBox.Show(string.Format("Problem with the X/Y Plot Command after {0}", PrevCommand.ToString()), "Unrecognized Graph Command");
else
MessageBox.Show(string.Format("Problem with the X/Y Plot Command after {0}", PrevCommand.ToString()), "Unrecognized Graph Command");
break;
}
break; break;
} }
PrevCommand = Command; PrevCommand = Command;
-4
View File
@@ -176,10 +176,6 @@
<Project>{52D74078-3822-410E-889B-464BD21AAB9E}</Project> <Project>{52D74078-3822-410E-889B-464BD21AAB9E}</Project>
<Name>VG</Name> <Name>VG</Name>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\Volian.Base.Library\Volian.Base.Library.csproj">
<Project>{aeee9fd1-6892-45e2-a67e-418c06d46ff9}</Project>
<Name>Volian.Base.Library</Name>
</ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="Properties\" /> <Folder Include="Properties\" />