B2026 053 find unlinked values of selected #795
@@ -179,6 +179,7 @@
|
||||
<Content Include="fmtall\CPL_00all.xml" />
|
||||
<Content Include="fmtall\CPL_01all.xml" />
|
||||
<Content Include="fmtall\CPL_02all.xml" />
|
||||
<Content Include="fmtall\CPL_04all.xml" />
|
||||
<Content Include="fmtall\CPL_03all.xml" />
|
||||
<Content Include="fmtall\CPSAMGDataall.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.
@@ -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
|
||||
from tblContents ii inner join deleted dd on dd.ContentID = ii.ContentID
|
||||
where ii.DeleteStatus > 0
|
||||
update ga set ga.contentauditid = (select max(auditid) from contentaudits where contentid = ga.contentid and deletestatus = ga.deletestatus)
|
||||
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
|
||||
|
||||
@@ -24990,6 +24990,34 @@ IF (@@Error = 0) PRINT 'Procedure Creation: getRevisionByItemIDandRevisionNumber
|
||||
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 |
|
||||
@@ -25023,8 +25051,8 @@ BEGIN TRY -- Try Block
|
||||
DECLARE @RevDate varchar(255)
|
||||
DECLARE @RevDescription varchar(255)
|
||||
|
||||
set @RevDate = '05/26/2026 7:00 AM'
|
||||
set @RevDescription = 'Get Most Recent Revision when Duplicates'
|
||||
set @RevDate = '06/29/2026 7:00 AM'
|
||||
set @RevDescription = 'Update to Grid Deletion Audits'
|
||||
|
||||
Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription
|
||||
PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription
|
||||
|
||||
@@ -8,7 +8,6 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using static System.Net.Mime.MediaTypeNames;
|
||||
|
||||
|
||||
namespace VEPROMS.CSLA.Library
|
||||
@@ -61,6 +60,7 @@ namespace VEPROMS.CSLA.Library
|
||||
#region Structs / Internal Classes
|
||||
|
||||
[Serializable]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Keep Older Pre-existing naming conventions")]
|
||||
public struct roHdr
|
||||
{
|
||||
public int hSize;
|
||||
@@ -78,6 +78,7 @@ namespace VEPROMS.CSLA.Library
|
||||
};
|
||||
|
||||
[Serializable]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Keep Older Pre-existing naming conventions")]
|
||||
public struct rodbi
|
||||
{
|
||||
public int dbiID;
|
||||
@@ -91,6 +92,7 @@ namespace VEPROMS.CSLA.Library
|
||||
};
|
||||
|
||||
[Serializable]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Keep Older Pre-existing naming conventions")]
|
||||
public struct rogrp
|
||||
{
|
||||
public string value;
|
||||
@@ -102,6 +104,7 @@ namespace VEPROMS.CSLA.Library
|
||||
};
|
||||
|
||||
[Serializable]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Keep Older Pre-existing naming conventions")]
|
||||
public struct rochild
|
||||
{
|
||||
public int ID;
|
||||
@@ -133,7 +136,7 @@ namespace VEPROMS.CSLA.Library
|
||||
private List<string> _baseAccPageKeys;
|
||||
|
||||
// RofstLookup/Conversion Variables
|
||||
private int _rofstID;
|
||||
private readonly int _rofstID;
|
||||
private DocVersionInfo _myDocVersionInfo;
|
||||
private int _selectedSlave;
|
||||
private string _otherChild = string.Empty;
|
||||
@@ -149,7 +152,7 @@ namespace VEPROMS.CSLA.Library
|
||||
// B2022-107: Display Progress Bar Messages/Statuses when a new ROFST binary file is loaded into the database
|
||||
private frmRofstLoadStatus _frmRofstLoadStatus = null;
|
||||
private Dictionary<int, int> _dicRoCounts = null;
|
||||
private bool _showLoadingStatus = true;
|
||||
private readonly bool _showLoadingStatus = true;
|
||||
|
||||
private int _curRoCnt = 0;
|
||||
private int _dbRoCnt = 0;
|
||||
@@ -414,7 +417,6 @@ namespace VEPROMS.CSLA.Library
|
||||
|
||||
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)
|
||||
{
|
||||
// Check if AccPageID/Key has a return value specific extension. Try to find the RoChild record with the specific return value type,
|
||||
@@ -507,8 +509,6 @@ namespace VEPROMS.CSLA.Library
|
||||
// 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.
|
||||
|
||||
//(_MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.UseDashGreaterLessThenForArrowsInROValue ||
|
||||
// _MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.ConvertGTELTEPMinROValue))
|
||||
bool arrows1 = myiteminfo.ActiveFormat.PlantFormat.FormatData.SectData.UseDashGreaterLessThenForArrowsInROValue;
|
||||
bool arrows2 = myiteminfo.ActiveFormat.PlantFormat.FormatData.SectData.ConvertGTELTEPMinROValue;
|
||||
|
||||
@@ -681,11 +681,10 @@ namespace VEPROMS.CSLA.Library
|
||||
|
||||
if (minutes > 0) duration = string.Format("{0} min(s) ", minutes.ToString("n0"));
|
||||
if (secs < 0) secs = 0.00;
|
||||
duration = duration + string.Format("{0,10:#####0.00} sec(s)", secs).Trim();
|
||||
duration += string.Format("{0,10:#####0.00} sec(s)", secs).Trim();
|
||||
|
||||
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
|
||||
@@ -1475,19 +1474,20 @@ namespace VEPROMS.CSLA.Library
|
||||
|
||||
private ROFSTLookup.roHdr ConvertFst2Objects(byte[] ab)
|
||||
{
|
||||
ROFSTLookup.roHdr roh = new ROFSTLookup.roHdr();
|
||||
|
||||
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];
|
||||
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);
|
||||
int dbs = BitConverter.ToInt16(ab, hdrOffset + 4);
|
||||
@@ -1525,10 +1525,11 @@ namespace VEPROMS.CSLA.Library
|
||||
|
||||
private ROFSTLookup.rogrp LoadGroup(byte[] ab, int offset, int tableID)
|
||||
{
|
||||
ROFSTLookup.rogrp myGrp = new ROFSTLookup.rogrp();
|
||||
|
||||
myGrp.ID = BitConverter.ToInt32(ab, offset);
|
||||
myGrp.ParentID = BitConverter.ToInt32(ab, offset + 4);
|
||||
ROFSTLookup.rogrp myGrp = new ROFSTLookup.rogrp
|
||||
{
|
||||
ID = BitConverter.ToInt32(ab, offset),
|
||||
ParentID = BitConverter.ToInt32(ab, offset + 4)
|
||||
};
|
||||
|
||||
int numChildren = BitConverter.ToInt16(ab, offset + 8);
|
||||
|
||||
@@ -1660,7 +1661,7 @@ namespace VEPROMS.CSLA.Library
|
||||
}
|
||||
|
||||
// Update Progress Bar Accordingly
|
||||
if (_totalRoCnt > 0) _pctComplete = _pctComplete + ((Convert.ToDouble(_dbRoCnt) / Convert.ToDouble(_totalRoCnt)) * 80.0);
|
||||
if (_totalRoCnt > 0) _pctComplete += ((Convert.ToDouble(_dbRoCnt) / Convert.ToDouble(_totalRoCnt)) * 80.0);
|
||||
|
||||
OnProgressChanged(displayText, Convert.ToInt32(_pctComplete), 100);
|
||||
}
|
||||
@@ -1720,15 +1721,13 @@ namespace VEPROMS.CSLA.Library
|
||||
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 != null)
|
||||
_frmRofstLoadStatus.UpdateProgress(title, displayText, curVal, maxVal);
|
||||
_frmRofstLoadStatus?.UpdateProgress(title, displayText, curVal, maxVal);
|
||||
}
|
||||
|
||||
protected virtual void OnProgressChanged(string displayText, int curVal = 0, int maxVal = 100)
|
||||
{
|
||||
// If frmRofstLoadStatus is not null then call Update Progress Method
|
||||
if (_frmRofstLoadStatus != null)
|
||||
_frmRofstLoadStatus.UpdateProgress(_frmRofstLoadStatus.Title, displayText, curVal, maxVal);
|
||||
_frmRofstLoadStatus?.UpdateProgress(_frmRofstLoadStatus.Title, displayText, curVal, maxVal);
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -1739,19 +1738,20 @@ namespace VEPROMS.CSLA.Library
|
||||
|
||||
private ROFSTLookup.roHdr ConvertToRoHdrObject(SafeDataReader dr, bool loadChildren)
|
||||
{
|
||||
ROFSTLookup.roHdr rh = new ROFSTLookup.roHdr();
|
||||
|
||||
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");
|
||||
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)
|
||||
{
|
||||
@@ -1763,15 +1763,16 @@ namespace VEPROMS.CSLA.Library
|
||||
|
||||
private ROFSTLookup.rodbi ConvertToRodbiObject(SafeDataReader dr, bool loadChildren, bool loadAllChildren)
|
||||
{
|
||||
ROFSTLookup.rodbi rd = new ROFSTLookup.rodbi();
|
||||
|
||||
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");
|
||||
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)
|
||||
{
|
||||
@@ -1783,13 +1784,14 @@ namespace VEPROMS.CSLA.Library
|
||||
|
||||
private ROFSTLookup.rochild ConvertToRochildObject(SafeDataReader dr, bool loadChildren, bool loadAllChildren)
|
||||
{
|
||||
ROFSTLookup.rochild rc = new ROFSTLookup.rochild();
|
||||
|
||||
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");
|
||||
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")))
|
||||
{
|
||||
@@ -1811,11 +1813,12 @@ namespace VEPROMS.CSLA.Library
|
||||
|
||||
private ROFSTLookup.RoExtension ConvertToRoExtensionObject(SafeDataReader dr)
|
||||
{
|
||||
ROFSTLookup.RoExtension re = new ROFSTLookup.RoExtension();
|
||||
|
||||
re.Offset = (int)dr.GetValue("Offset");
|
||||
re.RoidExt = (string)dr.GetValue("RoidExt");
|
||||
re.AccPageExt = (string)dr.GetValue("AccPageExt");
|
||||
ROFSTLookup.RoExtension re = new ROFSTLookup.RoExtension
|
||||
{
|
||||
Offset = (int)dr.GetValue("Offset"),
|
||||
RoidExt = (string)dr.GetValue("RoidExt"),
|
||||
AccPageExt = (string)dr.GetValue("AccPageExt")
|
||||
};
|
||||
|
||||
return re;
|
||||
}
|
||||
@@ -1875,7 +1878,6 @@ namespace VEPROMS.CSLA.Library
|
||||
// Instead of returning the RoChildBase object with a single RoReturnVal object attached, just return the single Ro ReturnValue object.
|
||||
var roRetVal = child.children.First();
|
||||
|
||||
//child.title = roRetVal.title;
|
||||
child.appid = roRetVal.appid;
|
||||
child.roid = roRetVal.roid;
|
||||
child.value = roRetVal.value;
|
||||
@@ -2129,41 +2131,68 @@ namespace VEPROMS.CSLA.Library
|
||||
return ProcessRO(match, multiRtnVal);
|
||||
}
|
||||
|
||||
private string ProcessMacros(string str)
|
||||
{
|
||||
// Takes the RO text value and sees if a macro has been used.
|
||||
// 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
|
||||
private static string ProcessMacros(string str)
|
||||
{
|
||||
|
||||
if (string.IsNullOrEmpty(str))
|
||||
if (string.IsNullOrEmpty(str) || str.ToUpper().IndexOf("@HSP(") < 0)
|
||||
return str;
|
||||
|
||||
string rtnstr = str;
|
||||
int indx;
|
||||
|
||||
while ((indx = rtnstr.ToUpper().IndexOf("@HSP(")) > -1)
|
||||
{
|
||||
string resstr = rtnstr.Substring(0, indx);
|
||||
int endHsp = rtnstr.IndexOf(")", indx);
|
||||
string processingstr = str; //holds current string being processed
|
||||
int indx; //current position of @HSP( in string
|
||||
int endpos = 0; //end of last parens
|
||||
|
||||
//B2026 - 002 handle if parens inside a HSP
|
||||
int startpos = indx + 5;
|
||||
while (rtnstr.Substring(startpos, endHsp - startpos).Contains("("))
|
||||
StringBuilder sb = new StringBuilder();
|
||||
Stack<char> endparens = new Stack<char>();
|
||||
|
||||
while ((indx = processingstr.ToUpper().IndexOf("@HSP(")) > -1)
|
||||
{
|
||||
startpos = rtnstr.IndexOf("(", startpos + 1, endHsp - startpos) + 1;
|
||||
endHsp = rtnstr.IndexOf(")", endHsp + 1);
|
||||
sb.Append(processingstr.Substring(0, indx)); // initial string before @HSP(
|
||||
|
||||
for (int i = indx + 5; i < processingstr.Length; i++)
|
||||
{
|
||||
char ch = processingstr[i];
|
||||
|
||||
if (ch == '(')
|
||||
{
|
||||
//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;
|
||||
}
|
||||
}
|
||||
|
||||
string tmpstr = rtnstr.Substring(indx + 5, endHsp - indx - 5);
|
||||
|
||||
//Add the text inside the @HSP(...)
|
||||
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);
|
||||
|
||||
resstr = resstr + tmpstr;
|
||||
rtnstr = resstr + rtnstr.Substring(endHsp + 1);
|
||||
//Set the processing string to after the ending parens found in case multiple @HSP
|
||||
processingstr = endpos + 1 >= processingstr.Length ? "" : processingstr.Substring(endpos + 1);
|
||||
}
|
||||
|
||||
return rtnstr;
|
||||
//add text after last end parens
|
||||
sb.Append(processingstr);
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
private int StringLength(byte[] ab, int offset)
|
||||
@@ -2275,7 +2304,7 @@ namespace VEPROMS.CSLA.Library
|
||||
{
|
||||
rc.roid = FormatRoidKey(roid).Substring(0, 12);
|
||||
|
||||
DocVersionConfig dvc = (_myDocVersionInfo != null) ? _myDocVersionInfo.DocVersionConfig : null;
|
||||
DocVersionConfig dvc = _myDocVersionInfo?.DocVersionConfig;
|
||||
if (dvc != null) dvc.SelectedSlave = this.SelectedSlave;
|
||||
|
||||
switch (rc.roid)
|
||||
@@ -2283,49 +2312,49 @@ namespace VEPROMS.CSLA.Library
|
||||
case "FFFF00000001":
|
||||
rc.title = "Number";
|
||||
rc.appid = "U-NUMBER";
|
||||
rc.value = (dvc != null) ? dvc.Unit_Number : null;
|
||||
rc.value = dvc?.Unit_Number;
|
||||
break;
|
||||
|
||||
case "FFFF00000002":
|
||||
rc.title = "Other Number";
|
||||
rc.appid = "U-OTHERNUMBER";
|
||||
rc.value = (dvc != null) ? dvc.Other_Unit_Number : null;
|
||||
rc.value = dvc?.Other_Unit_Number;
|
||||
break;
|
||||
|
||||
case "FFFF00000003":
|
||||
rc.title = "Text";
|
||||
rc.appid = "U-TEXT";
|
||||
rc.value = (dvc != null) ? dvc.Unit_Text : null;
|
||||
rc.value = dvc?.Unit_Text;
|
||||
break;
|
||||
|
||||
case "FFFF00000004":
|
||||
rc.title = "Other Text";
|
||||
rc.appid = "U-OTHERTEXT";
|
||||
rc.value = (dvc != null) ? dvc.Other_Unit_Text : null;
|
||||
rc.value = dvc?.Other_Unit_Text;
|
||||
break;
|
||||
|
||||
case "FFFF00000005":
|
||||
rc.title = "ID";
|
||||
rc.appid = "U-ID";
|
||||
rc.value = (dvc != null) ? dvc.Unit_ID : null;
|
||||
rc.value = dvc?.Unit_ID;
|
||||
break;
|
||||
|
||||
case "FFFF00000006":
|
||||
rc.title = "Other ID";
|
||||
rc.appid = "U-OTHERID";
|
||||
rc.value = (dvc != null) ? dvc.Other_Unit_ID : null;
|
||||
rc.value = dvc?.Other_Unit_ID;
|
||||
break;
|
||||
|
||||
case "FFFF00000007":
|
||||
rc.title = "Name";
|
||||
rc.appid = "U-NAME";
|
||||
rc.value = (dvc != null) ? dvc.Unit_Name : null;
|
||||
rc.value = dvc?.Unit_Name;
|
||||
break;
|
||||
|
||||
case "FFFF00000008":
|
||||
rc.title = "Other Name";
|
||||
rc.appid = "U-OTHERNAME";
|
||||
rc.value = (dvc != null) ? dvc.Other_Unit_Name : null;
|
||||
rc.value = dvc?.Other_Unit_Name;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,13 +2,12 @@ using DevComponents.DotNetBar;
|
||||
using JR.Utils.GUI.Forms;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using VEPROMS.CSLA.Library;
|
||||
using Volian.Base.Library;
|
||||
@@ -92,6 +91,10 @@ namespace Volian.Controls.Library
|
||||
//This flag will be set when the docversion gets updated to let it know that the full tree needs a refresh
|
||||
private bool changedDocVersion = false;
|
||||
|
||||
//B2026-057 PROMS Crash when Closing Tabs
|
||||
// this flag will prevent multiple asking in a row if should updste ROs
|
||||
private static bool askedAboutchangedDocVersion = false;
|
||||
|
||||
public ROFstInfo MyROFST
|
||||
{
|
||||
get { return _myROFST; }
|
||||
@@ -135,6 +138,7 @@ namespace Volian.Controls.Library
|
||||
if (_docVersionInfo?.VersionID != value?.VersionID)
|
||||
{
|
||||
changedDocVersion = true;
|
||||
askedAboutchangedDocVersion = false;
|
||||
}
|
||||
|
||||
_docVersionInfo = value;
|
||||
@@ -648,9 +652,10 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
//do nothing - is still checked out
|
||||
}
|
||||
else if (changedDocVersion && MessageBox.Show($"There exists a newer ROFST for this RO database that was loaded for other sets.\r\n\r\nDo you want to update this set's ROs to be consistent/use the latest loaded ROFST?", "Load ROs", MessageBoxButtons.YesNo) == DialogResult.Yes)
|
||||
else if (changedDocVersion && !askedAboutchangedDocVersion)
|
||||
{
|
||||
if (MessageBox.Show($"There exists a newer ROFST for this RO database that was loaded for other sets.\r\n\r\nDo you want to update this set's ROs to be consistent/use the latest loaded ROFST?", "Load ROs", MessageBoxButtons.YesNo) == DialogResult.Yes)
|
||||
{
|
||||
|
||||
InitialProgressBarMessage = "Updating ROs";
|
||||
|
||||
ROFstInfo roFstInfo = ROFstInfo.Get(fstid);
|
||||
@@ -664,6 +669,14 @@ namespace Volian.Controls.Library
|
||||
MyROFST = roFstInfo;
|
||||
|
||||
updatedROs = true;
|
||||
|
||||
askedAboutchangedDocVersion = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
askedAboutchangedDocVersion = true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -15,6 +15,8 @@ using System.Linq;
|
||||
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
#pragma warning disable IDE1006 // Naming Styles
|
||||
#pragma warning disable IDE0044 // Add readonly modifier
|
||||
public partial class DisplaySearch : UserControl
|
||||
{
|
||||
#region Public Events/Handlers
|
||||
@@ -24,14 +26,12 @@ namespace Volian.Controls.Library
|
||||
|
||||
private void OnPrintRequest(DisplaySearchEventArgs args)
|
||||
{
|
||||
if (PrintRequest != null)
|
||||
PrintRequest(this, args);
|
||||
PrintRequest?.Invoke(this, args);
|
||||
}
|
||||
|
||||
private void OnSearchComplete(DisplaySearchEventArgs args)
|
||||
{
|
||||
if (SearchComplete != null)
|
||||
SearchComplete(this, args);
|
||||
SearchComplete?.Invoke(this, args);
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -218,8 +218,10 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
if (_TmrRefresh == null)
|
||||
{
|
||||
_TmrRefresh = new Timer();
|
||||
_TmrRefresh.Interval = 1000;
|
||||
_TmrRefresh = new Timer
|
||||
{
|
||||
Interval = 1000
|
||||
};
|
||||
_TmrRefresh.Tick += _TmrRefresh_Tick;
|
||||
}
|
||||
return _TmrRefresh;
|
||||
@@ -324,7 +326,6 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
if (tabSearchTypes.SelectedTab == tabSearchTypes.Tabs[2])
|
||||
{ // RO Search
|
||||
ROFSTLookup.rochild[] chld = null;
|
||||
ROFSTLookup.rochild ch;
|
||||
if (cmboTreeROs.SelectedNode != null)
|
||||
{
|
||||
@@ -336,18 +337,16 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
else
|
||||
{
|
||||
if (cmboTreeROs.SelectedNode.Tag is ROFSTLookup.rodbi)
|
||||
if (cmboTreeROs.SelectedNode.Tag is ROFSTLookup.rodbi db)
|
||||
{
|
||||
ROFSTLookup.rodbi db = (ROFSTLookup.rodbi)cmboTreeROs.SelectedNode.Tag;
|
||||
return _MyRODbID.ToString() + ":" + string.Format("{0}", db.dbiID.ToString("X4"));
|
||||
return $"{_MyRODbID.ToString()}:{string.Format("{0}", db.dbiID.ToString("X4"))}";
|
||||
}
|
||||
else if (cmboTreeROs.SelectedNode.Tag is ROFSTLookup.rochild)
|
||||
else if (cmboTreeROs.SelectedNode.Tag is ROFSTLookup.rochild roch)
|
||||
{
|
||||
ch = (ROFSTLookup.rochild)cmboTreeROs.SelectedNode.Tag;
|
||||
chld = ch.children;
|
||||
ROFSTLookup.rochild[] chld = roch.children;
|
||||
// build a list of ROs to search
|
||||
// B2022-118: remove the ending comma otherwise query will fail
|
||||
string strRtnStr = _MyRODbID.ToString() + ":" + GetROsToSearch(chld);
|
||||
string strRtnStr = $"{_MyRODbID.ToString()}:{GetROsToSearch(chld)}";
|
||||
if (strRtnStr.EndsWith(","))
|
||||
strRtnStr = strRtnStr.Substring(0, strRtnStr.Length - 1);
|
||||
return strRtnStr;
|
||||
@@ -391,7 +390,6 @@ namespace Volian.Controls.Library
|
||||
cmbResultsStyle.Enabled = false;
|
||||
tabSearchTypes.SelectedTabChanged += new TabStrip.SelectedTabChangedEventHandler(tabSearchTypes_SelectedTabChanged);
|
||||
// Don't do this here. If you do then the /DB parameter has not yet been set, which will cause the database menu to be displayed
|
||||
//SetupContextMenu(); // so that the symbol list is available without selecting a procedure set or procedure
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -447,20 +445,6 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
btnSearch.Enabled = (cbxTranCategory.Items.Count > 0); // B2017-038 disable search button if no format selected
|
||||
//enable-disable doc version nodes based on version type if selected
|
||||
if (cbxTranVersion.SelectedIndex > -1)
|
||||
{
|
||||
if (dicExpandedFolderNodes.Count > 0)
|
||||
{
|
||||
foreach (DevComponents.AdvTree.Node n in dicExpandedFolderNodes.Keys)
|
||||
{
|
||||
DocVersionInfo dvi = (DocVersionInfo)n.Tag;
|
||||
if (cbxTranVersion.Tag.ToString().Contains(dvi.VersionID.ToString()))
|
||||
n.Enabled = true;
|
||||
else
|
||||
n.Enabled = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
//setup transition format versions
|
||||
this.Cursor = Cursors.WaitCursor;
|
||||
if (myFormatVersionList == null)
|
||||
@@ -468,15 +452,22 @@ namespace Volian.Controls.Library
|
||||
this.Refresh();
|
||||
myFormatVersionList = FormatVersionList.GetFormatVersions();
|
||||
cbxTranVersion.DisplayMember = "Title";
|
||||
int lastLastFormatID = 0;
|
||||
foreach (FormatVersion fv in myFormatVersionList)
|
||||
{
|
||||
if (fv.FormatID != lastLastFormatID)
|
||||
|
||||
List<FormatVersion> fvlst = myFormatVersionList.GroupBy(x => x.FormatID).Select(group => new
|
||||
FormatVersion(title: group.Max(x => x.Title),
|
||||
formatID: group.Key,
|
||||
versionID: group.Max(x => x.VersionID)
|
||||
)).OrderBy(y => y.Title).ToList();
|
||||
|
||||
//B2026-055 – Transition Search Improvements
|
||||
//Added an All option to allow resetting of the enabling/disabling tree options
|
||||
cbxTranVersion.Items.Add(new FormatVersion("All", -1, -1));
|
||||
|
||||
foreach (FormatVersion fv in fvlst)
|
||||
{
|
||||
cbxTranVersion.Items.Add(fv);
|
||||
lastLastFormatID = fv.FormatID;
|
||||
}
|
||||
}
|
||||
|
||||
cbxTranVersion.SelectedIndexChanged -= new EventHandler(cbxTranVersion_SelectedIndexChanged);
|
||||
cbxTranVersion.SelectedIndexChanged += new EventHandler(cbxTranVersion_SelectedIndexChanged);
|
||||
cbxTranFormat.SelectedIndexChanged -= new EventHandler(cbxTranFormat_SelectedIndexChanged);
|
||||
@@ -501,32 +492,6 @@ namespace Volian.Controls.Library
|
||||
|
||||
public void cbxTranFormat_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
#region 1st cut
|
||||
//if (cbxTranFormat.SelectedItem.ToString() == "All")
|
||||
//{
|
||||
// cbxTranCategory.Items.Clear();
|
||||
// cbxTranCategory.Items.Add("All");
|
||||
// cbxTranCategory.Items.Add("Internal");
|
||||
// cbxTranCategory.Items.Add("External");
|
||||
// cbxTranCategory.Items.Add("Outside");
|
||||
// cbxTranCategory.SelectedIndex = 0;
|
||||
//}
|
||||
//else if (cbxTranFormat.SelectedItem.ToString().Contains("{Proc"))
|
||||
//{
|
||||
// cbxTranCategory.Items.Clear();
|
||||
// cbxTranCategory.Items.Add("All");
|
||||
// cbxTranCategory.Items.Add("External");
|
||||
// cbxTranCategory.Items.Add("Outside");
|
||||
// cbxTranCategory.SelectedIndex = 0;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// cbxTranCategory.Items.Clear();
|
||||
// cbxTranCategory.Items.Add("Internal");
|
||||
// cbxTranCategory.SelectedIndex = 0;
|
||||
//}
|
||||
#endregion
|
||||
|
||||
#region 2nd cut
|
||||
if (cbxTranFormat.SelectedItem.ToString().Contains("{Proc"))
|
||||
{
|
||||
@@ -556,41 +521,21 @@ namespace Volian.Controls.Library
|
||||
string versionList = string.Empty;
|
||||
string sep = string.Empty;
|
||||
FormatVersion sfv = cbxTranVersion.SelectedItem as FormatVersion;
|
||||
foreach (FormatVersion fv in myFormatVersionList)
|
||||
{
|
||||
if (fv.FormatID == sfv.FormatID)
|
||||
{
|
||||
versionList += sep + fv.VersionID;
|
||||
sep = ",";
|
||||
}
|
||||
}
|
||||
|
||||
versionList = string.Join(",", myFormatVersionList.Where(x => x.FormatID == sfv?.FormatID).Select(y => y.VersionID));
|
||||
|
||||
cbxTranVersion.Tag = versionList;
|
||||
cbxTranFormatFillIn(versionList);
|
||||
if (dicExpandedFolderNodes.Count > 0)
|
||||
{
|
||||
foreach (DevComponents.AdvTree.Node n in dicExpandedFolderNodes.Keys)
|
||||
{
|
||||
FolderInfo fi = (FolderInfo)n.Tag;
|
||||
// if this folder has a docversion, use its id:
|
||||
string svid = null;
|
||||
if (fi.FolderDocVersionCount > 0)
|
||||
svid = fi.FolderDocVersions[0].VersionID.ToString();
|
||||
if (cbxTranVersion.Tag.ToString().Contains(svid))
|
||||
n.Enabled = true;
|
||||
else
|
||||
n.Enabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
List<DevComponents.AdvTree.Node> uncheckNodes = new List<Node>();
|
||||
List<DevComponents.AdvTree.Node> uncheckNodes = new List<DevComponents.AdvTree.Node>();
|
||||
foreach (DevComponents.AdvTree.Node n in dicSelectedFolderNodes.Keys)
|
||||
{
|
||||
FolderInfo fi = (FolderInfo)n.Tag; // this was crashing in old version of code
|
||||
FolderInfo fi = n.Tag as FolderInfo; // this was crashing in old version of code
|
||||
// if this folder has a docversion, use its id:
|
||||
string svid = null;
|
||||
if (fi.FolderDocVersionCount > 0)
|
||||
if (fi?.FolderDocVersionCount > 0)
|
||||
svid = fi.FolderDocVersions[0].VersionID.ToString();
|
||||
if (svid != null && !versionList.Contains(svid))
|
||||
if (svid != null && !string.IsNullOrEmpty(versionList) && !versionList.Split(',').Contains(svid))
|
||||
uncheckNodes.Add(n);
|
||||
else
|
||||
n.Enabled = true;
|
||||
@@ -616,13 +561,17 @@ namespace Volian.Controls.Library
|
||||
dicSelectedFolderNodes.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
//B2026-055 – Transition Search Improvements
|
||||
//Update Enabling/Disabling of Tree Elements
|
||||
TraverseTree(advTreeProcSets.Nodes[0], cbxTranVersion.Tag?.ToString().Split(','));
|
||||
|
||||
this.Cursor = Cursors.Default;
|
||||
}
|
||||
|
||||
// C2020-033: Update the search panel for Incoming transitions. This gets called from the tree view & the ribbon
|
||||
public void UpdateSearchIncTransResults()
|
||||
{
|
||||
//IncTransSelectedCount = 0;
|
||||
tabSearchTypes.SelectedTab = tabSearchTypes.Tabs[4];
|
||||
|
||||
lbSrchResultsIncTrans.DataSource = null;
|
||||
@@ -699,13 +648,6 @@ namespace Volian.Controls.Library
|
||||
DevComponents.AdvTree.Node newnode;
|
||||
advTreeStepTypes.Nodes.Clear();
|
||||
// Add a dummy node for searching Word Sections (MS Word sections)
|
||||
//newnode = new DevComponents.AdvTree.Node();
|
||||
//newnode.Text = "Word Sections";
|
||||
//newnode.Selectable = true;
|
||||
//newnode.CheckBoxAlignment = DevComponents.AdvTree.eCellPartAlignment.NearCenter;
|
||||
//newnode.CheckBoxStyle = eCheckBoxStyle.CheckBox;
|
||||
//newnode.CheckBoxThreeState = false;
|
||||
//newnode.CheckBoxVisible = true;
|
||||
newnode = NewAdvTreeNode("WORD Sections", true, true); // C2020-010: Change Accessory Sections to Word Sections
|
||||
wordSectionTreeNode = newnode;
|
||||
// C2021-028: RNO Only search, disable Word section tree node
|
||||
@@ -723,16 +665,6 @@ namespace Volian.Controls.Library
|
||||
StepData sd = sdl[sdr.Index]; // get the step type record
|
||||
string parentName = sd.ParentType; // this gets the parent of the this step/substep type
|
||||
|
||||
//Console.WriteLine("{0} {1} - {2}", parentName,sd.Type,sdr.Name);
|
||||
//newnode = new DevComponents.AdvTree.Node();
|
||||
//newnode.Text = sdr.Name;
|
||||
//newnode.Name = sd.Type; // this needed for the FindNodeByName() function
|
||||
//newnode.Tag = sd;
|
||||
//newnode.Selectable = true;
|
||||
//newnode.CheckBoxAlignment = DevComponents.AdvTree.eCellPartAlignment.NearCenter;
|
||||
//newnode.CheckBoxStyle = eCheckBoxStyle.CheckBox;
|
||||
//newnode.CheckBoxThreeState = false;
|
||||
//newnode.CheckBoxVisible = true;
|
||||
if (parentName.Equals("Base"))
|
||||
{
|
||||
newnode = NewAdvTreeNode(sdr.Name, true, true);
|
||||
@@ -826,8 +758,7 @@ namespace Volian.Controls.Library
|
||||
//C2023-010: Select all child nodes when a subtype is selected
|
||||
private void pnode_selected(object sender, EventArgs e)
|
||||
{
|
||||
DevComponents.AdvTree.Node pnode = sender as DevComponents.AdvTree.Node;
|
||||
if (pnode != null && pnode.HasChildNodes)
|
||||
if (sender is DevComponents.AdvTree.Node pnode && pnode.HasChildNodes)
|
||||
{
|
||||
CheckTreeNodeChildren(pnode.Nodes);
|
||||
}
|
||||
@@ -842,18 +773,21 @@ namespace Volian.Controls.Library
|
||||
int fiCount = fi.ChildFolderCount;
|
||||
advTreeProcSets.Nodes.Clear();
|
||||
lstCheckedDocVersions.Clear();
|
||||
topnode = new DevComponents.AdvTree.Node();
|
||||
topnode.Text = "Available Procedure Sets";
|
||||
topnode.Tag = fi;
|
||||
topnode.DataKey = fi.FolderID;
|
||||
topnode = new DevComponents.AdvTree.Node
|
||||
{
|
||||
Text = "Available Procedure Sets",
|
||||
Tag = fi,
|
||||
DataKey = fi.FolderID
|
||||
};
|
||||
advTreeProcSets.Nodes.Add(topnode);
|
||||
//advTreeProcSets.AfterNodeInsert += new TreeNodeCollectionEventHandler(advTreeProcSets_AfterNodeInsert);
|
||||
|
||||
//B2023-076: Adding option to select all procedure sets
|
||||
DevComponents.AdvTree.Node selectAllNode = new Node();
|
||||
selectAllNode.Text = SelectAllProcedureSetsText;
|
||||
selectAllNode.Tag = SelectAllProcedureSetsText;
|
||||
selectAllNode.CheckBoxVisible = true;
|
||||
DevComponents.AdvTree.Node selectAllNode = new Node
|
||||
{
|
||||
Text = SelectAllProcedureSetsText,
|
||||
Tag = SelectAllProcedureSetsText,
|
||||
CheckBoxVisible = true
|
||||
};
|
||||
selectAllNode.NodeClick += new EventHandler(AllProcedureSets_clicked);
|
||||
topnode.Nodes.Add(selectAllNode);
|
||||
|
||||
@@ -861,18 +795,22 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
foreach (FolderInfo fic in fi.SortedChildFolders)
|
||||
{
|
||||
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node();
|
||||
newnode.Text = fic.ToString();
|
||||
newnode.Tag = fic;
|
||||
newnode.DataKey = fi.FolderID;
|
||||
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node
|
||||
{
|
||||
Text = fic.ToString(),
|
||||
Tag = fic,
|
||||
DataKey = fi.FolderID
|
||||
};
|
||||
AddCheckBox(true, newnode);//C2016-045 Allow Folders to be selected.
|
||||
cntnd++;
|
||||
if (fic.ChildFolderCount > 0 || fic.FolderDocVersionCount > 0) // allow for '+' for tree expansion
|
||||
{
|
||||
if (fic.ChildFolderCount > 0) // B2017-176: Do not display the Working Draft node (don't create dummy for expander)
|
||||
{
|
||||
DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node();
|
||||
tnt.Text = DummyNodeText;
|
||||
DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node
|
||||
{
|
||||
Text = DummyNodeText
|
||||
};
|
||||
newnode.Nodes.Add(tnt);
|
||||
}
|
||||
topnode.Nodes.Add(newnode);
|
||||
@@ -881,10 +819,12 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
else
|
||||
{
|
||||
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node();
|
||||
newnode.Text = fi.ToString();
|
||||
newnode.Tag = fi;
|
||||
newnode.DataKey = fi.FolderID;
|
||||
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node
|
||||
{
|
||||
Text = fi.ToString(),
|
||||
Tag = fi,
|
||||
DataKey = fi.FolderID
|
||||
};
|
||||
AddCheckBox(true, newnode);//C2016-045 Allow Folders to be selected.
|
||||
topnode.Nodes.Add(newnode);
|
||||
lstCheckedDocVersions.Add(Mydocversion);
|
||||
@@ -895,8 +835,10 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
cntnd++;
|
||||
fi = Mydocversion.MyFolder;
|
||||
topnode = new DevComponents.AdvTree.Node();
|
||||
topnode.Text = fi.ToString();
|
||||
topnode = new DevComponents.AdvTree.Node
|
||||
{
|
||||
Text = fi.ToString()
|
||||
};
|
||||
advTreeProcSets.Nodes.Add(topnode);
|
||||
topnode.Tag = fi;
|
||||
topnode.DataKey = fi.FolderID;
|
||||
@@ -931,30 +873,35 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
foreach (FolderInfo fic in fi.SortedChildFolders)
|
||||
{
|
||||
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node();
|
||||
newnode.Text = fic.ToString();
|
||||
newnode.Tag = fic;
|
||||
newnode.DataKey = fic.FolderID;
|
||||
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node
|
||||
{
|
||||
Text = fic.ToString(),
|
||||
Tag = fic,
|
||||
DataKey = fic.FolderID
|
||||
};
|
||||
par.Nodes.Add(newnode);
|
||||
AddCheckBox(true, newnode);//C2016-045 Allow Folders to be selected.
|
||||
newnode.Enabled = true;
|
||||
|
||||
if (fic.ChildFolderCount > 0) // B2017-176: Only expand if folder has folders (not working draft nodes)
|
||||
{
|
||||
DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node();
|
||||
tnt.Text = DummyNodeText;
|
||||
DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node
|
||||
{
|
||||
Text = DummyNodeText
|
||||
};
|
||||
newnode.Nodes.Add(tnt);
|
||||
// B2017-176: Only expand if folder has folders (not working draft nodes): the following was moved from the code
|
||||
// that would check if this should be enabled if seraching for transition types. The transition controls
|
||||
// had a list of associated docversions, so needed to get the docversion in the folder:
|
||||
if (tabSearchTypes.SelectedTab == tabTranSearch && !dicSelectedFolderNodes.ContainsKey(newnode))
|
||||
dicSelectedFolderNodes.Add(newnode, false);
|
||||
}
|
||||
|
||||
if (tabSearchTypes.SelectedTab == tabTranSearch)
|
||||
{
|
||||
if (!dicSelectedFolderNodes.ContainsKey(newnode)) dicSelectedFolderNodes.Add(newnode, false);
|
||||
// get the docversion for this folder, if it has one and determine whether it is enabled for transitions:
|
||||
string svid = null;
|
||||
if (fic.FolderDocVersionCount > 0)
|
||||
svid = fic.FolderDocVersions[0].VersionID.ToString();
|
||||
newnode.Enabled = svid != null && cbxTranVersion.Tag != null ? cbxTranVersion.Tag.ToString().Contains(svid) : false;
|
||||
}
|
||||
//B2026-055 – Transition Search Improvements
|
||||
//Update Enabling/Disabling of Tree Elements
|
||||
TraverseTree(advTreeProcSets.Nodes[0], cbxTranVersion.Tag?.ToString().Split(','));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -964,10 +911,10 @@ namespace Volian.Controls.Library
|
||||
public void AdvTree_AfterExpandorCollapse(object sender, AdvTreeNodeEventArgs e)
|
||||
{
|
||||
Node bottomNode = BottomTreeNode(cmboTreeROs.AdvTree.Nodes);
|
||||
Node lastNode = cmboTreeROs.AdvTree.Nodes[cmboTreeROs.AdvTree.Nodes.Count - 1];
|
||||
_ = cmboTreeROs.AdvTree.Nodes[cmboTreeROs.AdvTree.Nodes.Count - 1]; //LastNode
|
||||
|
||||
int top = cmboTreeROs.AdvTree.Nodes[0].Bounds.Top;
|
||||
int bottom = bottomNode.Bounds.Bottom + 5;
|
||||
int bottom;
|
||||
int hScrollBarHeight = cmboTreeROs.AdvTree.HScrollBar != null ? cmboTreeROs.AdvTree.HScrollBar.Height : 0;
|
||||
bottom = bottomNode.Bounds.Bottom + 5;
|
||||
cmboTreeROs.AdvTree.Size = new Size(cmboTreeROs.AdvTree.Size.Width, Math.Min(525, bottom - top + hScrollBarHeight));
|
||||
@@ -976,10 +923,7 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
int yLookFor = (bottom - cmboTreeROs.AdvTree.Size.Height) + 2 * hScrollBarHeight;
|
||||
Node topNode = FindTreeNodeAt(cmboTreeROs.AdvTree.Nodes, yLookFor);
|
||||
if (topNode != null)
|
||||
{
|
||||
topNode.EnsureVisible();
|
||||
}
|
||||
topNode?.EnsureVisible();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -990,8 +934,10 @@ namespace Volian.Controls.Library
|
||||
public void SetupAnnotationSearch(AnnotationDetails annotationDetails, DisplayTabControl tc)
|
||||
{
|
||||
_AnnotationDetails = annotationDetails;
|
||||
List<AnnotationTypeSearch> annoTypes = new List<AnnotationTypeSearch>();
|
||||
annoTypes.Add(new AnnotationTypeSearch("All Annotations", string.Empty));
|
||||
List<AnnotationTypeSearch> annoTypes = new List<AnnotationTypeSearch>
|
||||
{
|
||||
new AnnotationTypeSearch("All Annotations", string.Empty)
|
||||
};
|
||||
AnnotationTypeInfoList annoList = AnnotationTypeInfoList.Get();
|
||||
foreach (AnnotationTypeInfo ati in annoList)
|
||||
annoTypes.Add(new AnnotationTypeSearch(ati.Name, ati.TypeID.ToString()));
|
||||
@@ -1058,14 +1004,15 @@ namespace Volian.Controls.Library
|
||||
|
||||
foreach (Symbol sym in sl)
|
||||
{
|
||||
DevComponents.DotNetBar.ButtonItem btnCM = new DevComponents.DotNetBar.ButtonItem();
|
||||
|
||||
btnCM.Text = string.Format("{0}", (char)sym.Unicode);
|
||||
DevComponents.DotNetBar.ButtonItem btnCM = new DevComponents.DotNetBar.ButtonItem
|
||||
{
|
||||
Text = string.Format("{0}", (char)sym.Unicode),
|
||||
// to name button use unicode rather than desc, desc may have spaces or odd chars
|
||||
btnCM.Name = "btnCM" + sym.Unicode.ToString();
|
||||
btnCM.Tooltip = sym.Desc;
|
||||
btnCM.Tag = string.Format(@"{0}", sym.Unicode);
|
||||
btnCM.FontBold = true;
|
||||
Name = $"btnCM{sym.Unicode.ToString()}",
|
||||
Tooltip = sym.Desc,
|
||||
Tag = string.Format(@"{0}", sym.Unicode),
|
||||
FontBold = true
|
||||
};
|
||||
btnCM.Click += new System.EventHandler(btnSym_Click);
|
||||
galSymbols.SubItems.Add(btnCM);
|
||||
}
|
||||
@@ -1114,9 +1061,11 @@ namespace Volian.Controls.Library
|
||||
private DevComponents.AdvTree.Node NewAdvTreeNode(string nodetext, bool selectable, bool chxbxvisable)
|
||||
{
|
||||
DevComponents.AdvTree.Node newnode;
|
||||
newnode = new DevComponents.AdvTree.Node();
|
||||
newnode.Text = nodetext;
|
||||
newnode.Selectable = selectable;
|
||||
newnode = new DevComponents.AdvTree.Node
|
||||
{
|
||||
Text = nodetext,
|
||||
Selectable = selectable
|
||||
};
|
||||
AddCheckBox(chxbxvisable, newnode);//C2016-045 Allow Folders to be selected.
|
||||
return newnode;
|
||||
}
|
||||
@@ -1163,7 +1112,7 @@ namespace Volian.Controls.Library
|
||||
// folder properties dialog
|
||||
bool allowNonAdmin = IncTranCvtPerm();
|
||||
List<int> itmsEditable = new List<int>(); // return this list
|
||||
int listCount = 0;
|
||||
int listCount;
|
||||
if (all) // Check all in list
|
||||
{
|
||||
listCount = _SearchResults.Count;
|
||||
@@ -1187,14 +1136,13 @@ namespace Volian.Controls.Library
|
||||
// not all can be converted to text. If count of itmsEditable & lbis are different some cannot be edited.
|
||||
if (itmsEditable.Count == 0)
|
||||
{
|
||||
FlexibleMessageBox.Show("You do not have permission to edit any of the procedures, sections, and/or steps" + (all ? "." : " that are selected."),
|
||||
FlexibleMessageBox.Show($"You do not have permission to edit any of the procedures, sections, and/or steps{(all ? "." : " that are selected.")}",
|
||||
"Convert Transition to Text", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
return null;
|
||||
}
|
||||
else if (itmsEditable.Count != listCount)
|
||||
{
|
||||
DialogResult ans = FlexibleMessageBox.Show("You only have permission to edit some of the procedures, sections, and/or steps that are selected.procedures, sections, and/or steps" + (all ? "." : " that are selected.") +
|
||||
"\r\n\r\n Should the conversion of the transitions to text continue?",
|
||||
DialogResult ans = FlexibleMessageBox.Show($"You only have permission to edit some of the procedures, sections, and/or steps that are selected.procedures, sections, and/or steps{(all ? "." : " that are selected.")}\r\n\r\n Should the conversion of the transitions to text continue?",
|
||||
"Convert Transition to Text", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
|
||||
if (ans == DialogResult.No) return null;
|
||||
}
|
||||
@@ -1215,7 +1163,7 @@ namespace Volian.Controls.Library
|
||||
private void btnTranCvtSelToTxt_Click(object sender, EventArgs e)
|
||||
{
|
||||
// First see if all selected can be converted, i.e. user has permission to edit
|
||||
List<ListBoxItem> lbis = lbSrchResultsIncTrans.CheckedItems;
|
||||
_ = lbSrchResultsIncTrans.CheckedItems;
|
||||
List<int> itmsEditable = TranCvtCheckPermission(false);
|
||||
if (itmsEditable == null || itmsEditable.Count == 0) return;
|
||||
TranCvtToTxt(itmsEditable);
|
||||
@@ -1448,8 +1396,10 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
ROFSTLookup.rodbi db = dbs[i];
|
||||
|
||||
DevComponents.AdvTree.Node tn = new DevComponents.AdvTree.Node(db.dbiTitle);
|
||||
tn.Tag = db;
|
||||
DevComponents.AdvTree.Node tn = new DevComponents.AdvTree.Node(db.dbiTitle)
|
||||
{
|
||||
Tag = db
|
||||
};
|
||||
cmboTreeROs.Nodes.Add(tn);
|
||||
|
||||
AddDummyGroup(db, tn);
|
||||
@@ -1502,17 +1452,14 @@ namespace Volian.Controls.Library
|
||||
if (tn.HasChildNodes && tn.Nodes[0].Text != DummyNodeText) return; // already loaded.
|
||||
if (tn.HasChildNodes && tn.Nodes[0].Text == DummyNodeText) tn.Nodes[0].Remove();
|
||||
|
||||
ROFSTLookup.rochild[] chld = null;
|
||||
|
||||
if (tn.Tag is ROFSTLookup.rodbi)
|
||||
ROFSTLookup.rochild[] chld;
|
||||
if (tn.Tag is ROFSTLookup.rodbi db)
|
||||
{
|
||||
ROFSTLookup.rodbi db = (ROFSTLookup.rodbi)tn.Tag;
|
||||
MyROFSTLookup.LoadChildren(ref db);
|
||||
chld = db.children;
|
||||
}
|
||||
else if (tn.Tag is ROFSTLookup.rochild)
|
||||
else if (tn.Tag is ROFSTLookup.rochild ch)
|
||||
{
|
||||
ROFSTLookup.rochild ch = (ROFSTLookup.rochild)tn.Tag;
|
||||
MyROFSTLookup.LoadChildren(ref ch);
|
||||
chld = ch.children;
|
||||
}
|
||||
@@ -1531,8 +1478,6 @@ namespace Volian.Controls.Library
|
||||
for (int i = 0; i < chld.Length; i++)
|
||||
{
|
||||
ProgressBar_SetValue(i);
|
||||
DevComponents.AdvTree.Node tmp = null;
|
||||
|
||||
ROFSTLookup.rochild roc = chld[i];
|
||||
|
||||
// if this is a group, i.e. type 0, add a dummy node
|
||||
@@ -1556,10 +1501,13 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
|
||||
|
||||
Node tmp;
|
||||
if (roc.value == null)
|
||||
{
|
||||
tmp = new DevComponents.AdvTree.Node(roc.title);
|
||||
tmp.Tag = roc;
|
||||
tmp = new DevComponents.AdvTree.Node(roc.title)
|
||||
{
|
||||
Tag = roc
|
||||
};
|
||||
|
||||
int index = FindIndex(tn.Nodes, tmp.Text);
|
||||
tn.Nodes.Insert(index, tmp);
|
||||
@@ -1569,8 +1517,10 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = new DevComponents.AdvTree.Node(roc.title);
|
||||
tmp.Tag = roc;
|
||||
tmp = new DevComponents.AdvTree.Node(roc.title)
|
||||
{
|
||||
Tag = roc
|
||||
};
|
||||
|
||||
if (roc.roid.Length == 16)
|
||||
{
|
||||
@@ -1610,9 +1560,8 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
cbxFndUnLnkROVals.Enabled = false;
|
||||
}
|
||||
else if (cmboTreeROs.SelectedNode.Tag is ROFSTLookup.rochild)
|
||||
else if (cmboTreeROs.SelectedNode.Tag is ROFSTLookup.rochild ro)
|
||||
{
|
||||
ROFSTLookup.rochild ro = (ROFSTLookup.rochild)cmboTreeROs.SelectedNode.Tag;
|
||||
// B2022-026 RO Memory Reduction code - check children length
|
||||
cbxFndUnLnkROVals.Enabled = (ro.children == null || ro.children.Length <= 0);
|
||||
}
|
||||
@@ -1634,12 +1583,7 @@ namespace Volian.Controls.Library
|
||||
bool keeplooking = true;
|
||||
//build a stack (bread crumb trail) of where is procedure set came from within the tree.
|
||||
Stack<string> crumbs = new Stack<string>();
|
||||
//crumbs.Push(Mydocversion.Name); // ex: "working draft"
|
||||
//crumbs.Push(Mydocversion.MyFolder.Name); // ex: "Emergency Procedures"
|
||||
//crumbs.Push(Mydocversion.MyFolder.MyParent.Name); // ex: "STPNOC-South Texas"
|
||||
//crumbs.Push(advTreeProcSets.Nodes[0].Text); //top node of my tree
|
||||
|
||||
//crumbs.Push(Mydocversion.Name); // ex: "working draft"
|
||||
crumbs.Push(Mydocversion.MyFolder.Name); // ex: "Emergency Procedures"
|
||||
FolderInfo fi = Mydocversion.MyFolder.MyParent;
|
||||
while (fi != null)
|
||||
@@ -1824,13 +1768,11 @@ namespace Volian.Controls.Library
|
||||
// item to be clicked and to turn on/off the btnTranCvtSelToTxt button for converting selected to test.
|
||||
private void lbSrchResultsIncTrans_ItemClicked(object sender, EventArgs e)
|
||||
{
|
||||
ListBoxItem lbi = sender as ListBoxItem;
|
||||
if (lbi != null)
|
||||
if (sender is ListBoxItem lbi)
|
||||
{
|
||||
ItemBindingData ibd = lbi.Tag as ItemBindingData;
|
||||
ItemInfo ii = ibd.DataItem as ItemInfo;
|
||||
bool allowNonAdmin = IncTranCvtPerm();
|
||||
if (lbi.CheckState == CheckState.Checked && ii != null)
|
||||
if (lbi.CheckState == CheckState.Checked && ibd.DataItem is ItemInfo ii)
|
||||
{
|
||||
if (!allowNonAdmin && !UserInfo.CanEdit(MyUserInfo, ii.MyDocVersion))
|
||||
{
|
||||
@@ -2041,11 +1983,8 @@ namespace Volian.Controls.Library
|
||||
bool includeSpecialChars = (TextSearchString != @"\?"); // true;
|
||||
// Build list of selected types that were searched
|
||||
string typstr = null;
|
||||
foreach (string s in lstCheckedStepTypesStr) typstr = typstr == null ? s : typstr + ", " + s;
|
||||
TypesSelected = "Filtered By: " + ((typstr != null) ? typstr : "All Step Types");
|
||||
//TypesSelected = "Step Types Searched: " + ((typstr != null) ? typstr : "all step types");
|
||||
//TypesSelected = "Searched Step Types: " + ((typstr != null) ? typstr : "all step types");
|
||||
//TypesSelected = (typstr != null) ? "Searched Step Types: " + typstr : "Searched All Step Types";
|
||||
foreach (string s in lstCheckedStepTypesStr) typstr = typstr == null ? s : $"{typstr}, {s}";
|
||||
TypesSelected = $"Filtered By: {typstr ?? "All Step Types"}";
|
||||
string unitPrefix = string.Empty;
|
||||
if (Mydocversion != null)
|
||||
unitPrefix = Mydocversion.DocVersionConfig.Unit_ProcedureNumber;
|
||||
@@ -2065,11 +2004,8 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
else
|
||||
{
|
||||
//string typstr = null;
|
||||
//foreach (string s in lstCheckedStepTypesStr) typstr = typstr==null?s:typstr + ", " + s;
|
||||
//ReportTitle = "Search for Selected Types"; //"Proms - Search by Type: " + typstr;
|
||||
ReportTitle = "Step Element Report"; //"Proms - Search by Type: " + typstr;
|
||||
TypesSelected = "Filtered By: " + typstr;
|
||||
TypesSelected = $"Filtered By: {typstr}";
|
||||
SearchString = null;
|
||||
// B2022-031 - added a cbxProcSectSrch to filter out procedure and section titles from global search results.
|
||||
SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, string.Empty, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Value, includeRTFformat, includeSpecialChars, unitPrefix, string.Empty, string.Empty);
|
||||
@@ -2078,14 +2014,6 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
else
|
||||
{
|
||||
//if (textSearchString.Equals(string.Empty))
|
||||
//{
|
||||
// MessageBox.Show("Please enter some search text, then click the Search button", "No Search Text");
|
||||
// cbxTextSearchText.Focus();
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
//ReportTitle = string.Format("Proms - {0} Search for '{1}'", cbxBooleanTxtSrch.Checked ? "Boolean" : "Text", TextSearchString);
|
||||
ReportTitle = string.Format("Search for '{0}'", TextSearchString);
|
||||
|
||||
// C2020-009: Search - Allow search 'By Word'.
|
||||
@@ -2116,8 +2044,6 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
}
|
||||
SearchString = TextSearchString;
|
||||
//TypesSelected = (typstr != null) ? "Searched Step Types: " + typstr : "Searched All Step Types";
|
||||
//TypesSelected = "Searched Step Types: " + ((typstr != null) ? typstr : "All Step Types");
|
||||
// B2022-031 - added a cbxProcSectSrch to filter out procedure and section titles from global search results.
|
||||
SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, TextSearchString /*.Replace(@"\",@"\u9586?")*/, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, cbxIncROTextSrch.Checked ? ItemSearchIncludeLinks.Value : ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, byWordPrefix, byWordSuffix);
|
||||
|
||||
@@ -2131,7 +2057,6 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
LastSearchWasAnnotations = true; // B2019-119 only refresh annotation search results if an annotation search was done
|
||||
SearchString = null;
|
||||
//ReportTitle = string.Format("Proms - Annotation Search for '{0}'", cbxTextSearchAnnotation.Text);
|
||||
if (cbxTextSearchAnnotation.Text == null || cbxTextSearchAnnotation.Text == string.Empty)
|
||||
{
|
||||
ReportTitle = string.Format("Find {0}{1}", cbxAnnoTypes.Text, (cbxAnnoTypes.SelectedIndex > 0) ? " Annotations" : string.Empty);
|
||||
@@ -2140,14 +2065,8 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
ReportTitle = string.Format("Search {0}{1} For '{2}'", cbxAnnoTypes.Text, (cbxAnnoTypes.SelectedIndex > 0) ? " Annotations" : string.Empty, cbxTextSearchAnnotation.Text);
|
||||
}
|
||||
//ReportTitle = string.Format("Search Annotations for '{0}'", cbxTextSearchAnnotation.Text);
|
||||
//string srchStr = ConvertSpecialChars(cbxTextSearchAnnotation.Text);//cbxTextSearchAnnotation.Text;
|
||||
//TypesSelected = "Searched Step Types: " + ((typstr != null) ? typstr : "All Step Types");
|
||||
|
||||
//SearchResults = ItemInfoList.GetListFromAnnotationSearch(dviSearchList, typeSearchList, textSearchString, srchStr, cbxCaseSensitiveAnnoText.Checked);
|
||||
|
||||
SearchResults = ItemInfoList.GetListFromAnnotationSearch(DVISearchList, TypeSearchList, AnnotationSearchType, cbxTextSearchAnnotation.Text, cbxCaseSensitiveAnnoText.Checked, unitPrefix);
|
||||
//UpdateAnnotationSearchResults();
|
||||
cmbResultsStyleIndex = 2; // display annotation text in results
|
||||
// C2019-001: Search in RNO steps only
|
||||
if (cbxRnoOnlyAnnot.Checked) GetInRNOResults();
|
||||
@@ -2155,9 +2074,7 @@ namespace Volian.Controls.Library
|
||||
else if (tabSearchTypes.SelectedTab == tabSearchTypes.Tabs[2]) // RO Search
|
||||
{
|
||||
SearchString = null;
|
||||
//ReportTitle = "Proms - Referenced Object Search";
|
||||
ReportTitle = string.Format("Search For Referenced Object:\n{0}", cmboTreeROs.Text);
|
||||
//TypesSelected = "Searched Step Types: " + ((typstr != null) ? typstr : "All Step Types");
|
||||
|
||||
if (cbxFndUnLnkROVals.Enabled && cbxFndUnLnkROVals.Checked)
|
||||
{
|
||||
@@ -2177,22 +2094,37 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
ReportTitle = string.Format("Search For Transitions: Transition Type: {0}, Transition Category: {1}", cbxTranFormat.SelectedItem, cbxTranCategory.SelectedItem);
|
||||
string docVersionList = string.Empty;
|
||||
bool bypassSearch = false;
|
||||
if (lstCheckedDocVersions.Count == 0)
|
||||
docVersionList = cbxTranVersion.Tag.ToString();
|
||||
else
|
||||
{
|
||||
string sep = string.Empty;
|
||||
foreach (DocVersionInfo dvi in lstCheckedDocVersions)
|
||||
//B2026-055 – Transition Search Improvements
|
||||
//Changed matching to take Filtered Formats into account if both tree
|
||||
//Items selected and Format dropdown filtered
|
||||
if (string.IsNullOrEmpty(cbxTranVersion.Tag?.ToString()))
|
||||
{
|
||||
docVersionList += sep + dvi.VersionID.ToString();
|
||||
sep = ",";
|
||||
docVersionList = string.Join(",", lstCheckedDocVersions.Select(y => y.VersionID.ToString()));
|
||||
}
|
||||
else
|
||||
{
|
||||
var fromatversionslst = cbxTranVersion.Tag.ToString().Split(',').Select(int.Parse);
|
||||
var selectedversionlst = lstCheckedDocVersions.Select(y => y.VersionID);
|
||||
docVersionList = string.Join(",", fromatversionslst.Intersect(selectedversionlst));
|
||||
|
||||
if (string.IsNullOrEmpty(docVersionList))
|
||||
{
|
||||
bypassSearch = true;
|
||||
FlexibleMessageBox.Show("No Matches Found.", "Search");
|
||||
}
|
||||
}
|
||||
}
|
||||
// B2018-134 to search specifically for Outside Transitions, set docVeronList to empty string so that all procedure sets are considered
|
||||
if (cbxTranCategory.SelectedItem.ToString() == "Outside")
|
||||
if (cbxTranCategory.SelectedItem?.ToString() == "Outside")
|
||||
docVersionList = string.Empty;
|
||||
// added TypeSearchList for bug fix B2015-055
|
||||
SearchResults = ItemInfoList.GetListFromTransitionSearch(docVersionList, cbxTranFormat.SelectedIndex - 1, cbxTranCategory.SelectedItem.ToString() == "All" ? string.Empty : cbxTranCategory.SelectedItem.ToString(), TypeSearchList);
|
||||
if (cbxTranFormat.SelectedIndex == -1) cbxTranFormatFillIn(docVersionList);
|
||||
if (!bypassSearch) SearchResults = ItemInfoList.GetListFromTransitionSearch(docVersionList, cbxTranFormat.SelectedIndex - 1, cbxTranCategory.SelectedItem?.ToString() == "All" ? string.Empty : (cbxTranCategory.SelectedItem?.ToString() ?? string.Empty), TypeSearchList);
|
||||
cmbResultsStyleIndex = 3; // display step text in results
|
||||
// C2019-001: Search in RNO steps only
|
||||
if (cbxRnoOnlyTrans.Checked) GetInRNOResults();
|
||||
@@ -2249,16 +2181,13 @@ namespace Volian.Controls.Library
|
||||
string tmpmsg = (cbxBooleanTxtSrch.Checked && ex.Message.Contains("Syntax error") && ex.Message.Contains("full-text search")) ?
|
||||
"Place \"\" around words that you are searching for, so that parser can better understand what you are trying to find" :
|
||||
ex.Message;
|
||||
FlexibleMessageBox.Show(tmpmsg, "Search Error: " + ex.GetType().Name);
|
||||
FlexibleMessageBox.Show(tmpmsg, $"Search Error: {ex.GetType().Name}");
|
||||
}
|
||||
|
mschill marked this conversation as resolved
Outdated
|
||||
finally
|
||||
{
|
||||
Cursor = savcursor;
|
||||
}
|
||||
//Console.WriteLine("{0} Milliseconds", TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks).TotalMilliseconds);
|
||||
OnSearchComplete(new DisplaySearchEventArgs(TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks)));
|
||||
//if (VlnSettings.DebugMode)
|
||||
// MessageBox.Show(string.Format("{0} Milliseconds", TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks).TotalMilliseconds));
|
||||
}
|
||||
|
||||
private void ClearResults() // B2021-103 if no results when RNO only, clear results list. (moved from btnSearch_Click)
|
||||
@@ -2319,7 +2248,7 @@ namespace Volian.Controls.Library
|
||||
if (ii.SearchAnnotationText == null) ii.SearchAnnotationText = AnnotationInfo.Get(ii.ItemAnnotations[0].AnnotationID).SearchText;
|
||||
}
|
||||
|
||||
if (ii.SearchAnnotationText == null) ii.SearchAnnotationText = "None - [" + ii.DisplayText + "]";
|
||||
if (ii.SearchAnnotationText == null) ii.SearchAnnotationText = $"None - [{ii.DisplayText}]";
|
||||
else
|
||||
{
|
||||
hasAnnot = true;
|
||||
@@ -2469,7 +2398,7 @@ namespace Volian.Controls.Library
|
||||
//C2025-005 Find Step Elements
|
||||
//Need to refresh the Doc List and Available Step Types
|
||||
//if All Procedure Sets was selected
|
||||
if (n.Tag == SelectAllProcedureSetsText)
|
||||
if (n.Tag is string txt && txt == SelectAllProcedureSetsText)
|
||||
{
|
||||
if (n.Checked)
|
||||
{
|
||||
@@ -2520,7 +2449,6 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
if (tn.Checked)
|
||||
{
|
||||
//tn.Style = DevComponents.AdvTree.NodeStyles.Apple; // sets green background on selected folder(s)
|
||||
//B2023-112: Don't crash if on top 'All' node (did not have associated folder)
|
||||
FolderInfo fi = tn.Tag as FolderInfo;
|
||||
// if this folder has a docversion, use its id:
|
||||
@@ -2567,8 +2495,10 @@ namespace Volian.Controls.Library
|
||||
lstCheckedStepTypesStr.Clear();
|
||||
foreach (string str in strs)
|
||||
{
|
||||
Node newnode = new DevComponents.AdvTree.Node();
|
||||
newnode.Text = str;
|
||||
Node newnode = new DevComponents.AdvTree.Node
|
||||
{
|
||||
Text = str
|
||||
};
|
||||
advTreeStepTypes.Nodes.Add(newnode);
|
||||
}
|
||||
buildStepTypePannelTitle();
|
||||
@@ -2657,16 +2587,23 @@ namespace Volian.Controls.Library
|
||||
private void cbxTranFormatFillIn(string vid)
|
||||
{
|
||||
vid = vid.IndexOf(",") < 0 ? vid : vid.Substring(0, cbxTranVersion.Tag.ToString().IndexOf(","));
|
||||
//B2026-055 – Transition Search Improvements
|
||||
//Change the order of items happening
|
||||
//previous order was causing an error when clicked downdownlist to
|
||||
//show all items and then didn't select an item in the list
|
||||
cbxTranFormat.Items.Clear();
|
||||
cbxTranFormat.Items.Add("All");
|
||||
|
||||
if (!string.IsNullOrEmpty(vid))
|
||||
{
|
||||
DocVersionInfo dvi = DocVersionInfo.Get(int.Parse(vid));
|
||||
TransTypeList ttl = dvi.ActiveFormat.PlantFormat.FormatData.TransData.TransTypeList;
|
||||
|
||||
cbxTranFormat.Items.Clear();
|
||||
cbxTranFormat.Items.Add("All");
|
||||
|
||||
for (int i = 0; i < ttl.MaxIndex; i++)
|
||||
{
|
||||
cbxTranFormat.Items.Add(new TransItem(ttl[i].TransMenu.Replace("?.", string.Empty), ttl[i].TransFormat.Replace("?.", string.Empty)));
|
||||
}
|
||||
}
|
||||
|
||||
cbxTranFormat.SelectedIndex = 0;
|
||||
@@ -2717,9 +2654,9 @@ namespace Volian.Controls.Library
|
||||
|
||||
if (advTreeStepTypes.Nodes.Count == 1 && n.Checked)
|
||||
{
|
||||
if (n.Tag is DocVersionInfo) // Only set MyDocVersion if it is a DocVersion
|
||||
if (n.Tag is DocVersionInfo info) // Only set MyDocVersion if it is a DocVersion
|
||||
{
|
||||
Mydocversion = (DocVersionInfo)n.Tag;
|
||||
Mydocversion = info;
|
||||
StartAdvTreeStepTypesFillIn();// B2016-258 Hang after selecting a procedure if the Step Type panel is open on the search panel
|
||||
}
|
||||
}
|
||||
@@ -2744,8 +2681,6 @@ namespace Volian.Controls.Library
|
||||
|
||||
if (n.Checked)
|
||||
{
|
||||
//n.Style = DevComponents.AdvTree.NodeStyles.Apple; // B2023-112: coloring of proc set tree nodes was not working correctly
|
||||
|
||||
if (sd == null)
|
||||
{
|
||||
//C2023-010: Since the tag is null for Word Sections and HLS types, we need to determine which one has been selected. Word sections we need
|
||||
@@ -2874,7 +2809,7 @@ namespace Volian.Controls.Library
|
||||
|
||||
xpStepTypes.TitleStyle.BackColor1.Color = saveXpStepTypeTitleColor;
|
||||
}
|
||||
else //lstCheckedStepTypes.Count > 0
|
||||
else
|
||||
{
|
||||
// show how many selected whether panel is expanded or not
|
||||
xpStepTypes.TitleText = string.Format("{0} Step Element{1} Selected", lstCheckedStepTypes.Count, (lstCheckedStepTypes.Count > 1) ? "s" : string.Empty); // B2018-132 changed second {0} to {1}
|
||||
@@ -2946,7 +2881,6 @@ namespace Volian.Controls.Library
|
||||
private bool OnlyWordSectTypeSel()
|
||||
{
|
||||
// B2021-100: Enable/disable the RNO Only checkbox & WORD Sections tree node in Step Elements to Search.
|
||||
// lstCheckedStepTypes[x] = 0 for Word sections:
|
||||
if (lstCheckedStepTypes != null && lstCheckedStepTypes.Count == 1 && lstCheckedStepTypes[0] == 0)
|
||||
return true;
|
||||
|
||||
@@ -3145,11 +3079,6 @@ namespace Volian.Controls.Library
|
||||
lbSrchResults.DataSource = null;
|
||||
lbSrchResults.Items.Clear();
|
||||
toolTip1.SetToolTip(lbSrchResults, null);
|
||||
string unitPrefix = string.Empty;
|
||||
if (Mydocversion != null)
|
||||
unitPrefix = Mydocversion.DocVersionConfig.Unit_ProcedureNumber;
|
||||
if (unitPrefix.EndsWith("#"))
|
||||
unitPrefix = unitPrefix.Replace("#", string.Empty);
|
||||
Cursor = Cursors.WaitCursor;
|
||||
|
||||
try // B2021-045: don't crash if xml file cannot be loaded.
|
||||
@@ -3179,7 +3108,7 @@ namespace Volian.Controls.Library
|
||||
Node tnode = advTreeProcSets.FindNodeByDataKey(folderID);
|
||||
if (tnode != null) tnode.Checked = true;
|
||||
}
|
||||
Mydocversion = tmpdvi == null ? fromLoadFiledvi : tmpdvi;
|
||||
Mydocversion = tmpdvi ?? fromLoadFiledvi;
|
||||
}
|
||||
|
||||
AdvTreeStepTypesFillIn();
|
||||
@@ -3202,10 +3131,10 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
|
||||
string typstr = null;
|
||||
foreach (string s in lstCheckedStepTypesStr) typstr = typstr == null ? s : typstr + ", " + s;
|
||||
TypesSelected = "Filtered By: " + ((typstr != null) ? typstr : "All Step Types");
|
||||
foreach (string s in lstCheckedStepTypesStr) typstr = typstr == null ? s : $"{typstr}, {s}";
|
||||
TypesSelected = $"Filtered By: {typstr ?? "All Step Types"}";
|
||||
ReportTitle = "Step Element Report"; //"Proms - Search by Type: " + typstr;
|
||||
TypesSelected = "Filtered By: " + typstr;
|
||||
TypesSelected = $"Filtered By: {typstr}";
|
||||
advTreeStepTypes.RefreshItems();
|
||||
buildStepTypePannelTitle();
|
||||
}
|
||||
@@ -3298,7 +3227,7 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
catch (Exception)
|
||||
{
|
||||
FlexibleMessageBox.Show("An error occurred while reading the xml file.\r\n\r\nThis can happen when the file selected for the Load is not saved\r\n" +
|
||||
"from a PROMS Search or if some of the steps no longer exist.", "Search Load Failed", MessageBoxButtons.OK);
|
||||
@@ -3478,6 +3407,46 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
}
|
||||
|
||||
//B2026-055 – Transition Search Improvements
|
||||
//Update Enabling/Disabling of Tree Elements
|
||||
public bool TraverseTree(DevComponents.AdvTree.Node node, string[] versions)
|
||||
{
|
||||
bool result = true;
|
||||
int numhiddenchildnodes = 0;
|
||||
|
||||
// Recursively call this method for each child node
|
||||
foreach (DevComponents.AdvTree.Node childNode in node.Nodes)
|
||||
{
|
||||
if (!TraverseTree(childNode, versions))
|
||||
{
|
||||
numhiddenchildnodes++;
|
||||
}
|
||||
}
|
||||
|
||||
// Process the current node (e.g., enable it if it is contained)
|
||||
|
||||
//Select all always shows
|
||||
//also Enable Dummy Nodes by default
|
||||
if (versions == null || (versions.Length == 1 && string.IsNullOrEmpty(versions[0])) || node.Tag == null || (node.Tag is string txt && txt == SelectAllProcedureSetsText))
|
||||
{
|
||||
node.Enabled = true;
|
||||
return true;
|
||||
}
|
||||
//if all child nodes are hidden, hide the parent
|
||||
else if (numhiddenchildnodes == node.Nodes.Count)
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
|
||||
FolderInfo fi = (FolderInfo)node.Tag;
|
||||
if (fi.FolderDocVersionCount > 0)
|
||||
{
|
||||
result = versions.Contains(fi.FolderDocVersions[0].VersionID.ToString());
|
||||
}
|
||||
|
||||
node.Enabled = result;
|
||||
return result;
|
||||
}
|
||||
private void btnCopySearchResults_Click(object sender, EventArgs e)
|
||||
{
|
||||
ICollection<ItemInfo> myList = lbSrchResults.DataSource as ICollection<ItemInfo>;
|
||||
@@ -3543,7 +3512,6 @@ namespace Volian.Controls.Library
|
||||
private bool IncTransCvtAllToTextPerm()
|
||||
{
|
||||
if (_SearchResults == null) return false;
|
||||
int cnt = 0;
|
||||
bool allowNonAdmin = IncTranCvtPerm();
|
||||
foreach (ItemInfo ii in _SearchResults)
|
||||
{
|
||||
@@ -3659,6 +3627,8 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma warning restore IDE1006 // Naming Styles
|
||||
#pragma warning restore IDE0044 // Add readonly modifier
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
Reference in New Issue
Block a user
Previous comments regarding Regexes still apply -- also it appears now we have 2 variables that we declared but did not use in string byWordPrefix & string byWordSuffix
I removed the two unneeded variable declarations. I used what was previous used for the regex string. If you notice both tests are looking to see what the first character is and not the whole searchstring and from that it selects different regex strings. On account of this I am not sure char.IsNumeric will work because there are searchstrings that start with a number but are a mix of numbers and characters. Example 5% code: "if (Regex.IsMatch(ss, @"^[\d.]")) // starts with a number or '.' decimal pt"