Compare commits

..

31 Commits

Author SHA1 Message Date
mschill a13b03a136 C2026-044 – ve_GetParentItem Performance Improvement
Added Included columns to Index
2026-07-16 08:48:11 -04:00
mschill 48054f5bf1 C2026-044 – ve_GetParentItem Performance Improvement 2026-07-16 08:26:52 -04:00
mschill 51f2897a33 C2026-044 – ve_GetParentItem Performance Improvement 2026-07-16 08:26:07 -04:00
jjenko 7c3cfca86c Merge pull request 'B2026-055 – Transition Search Improvements' (#790) from B2026-055 into Development
good for testing
2026-07-15 13:54:03 -04:00
mschill 352af15984 B2026-055 – Transition Search Improvements 2026-07-15 12:43:38 -04:00
jjenko 2c42933d58 Merge pull request 'F2026-016 Robinson- created a new sub-format for a Foldout section that uses a smaller font size.' (#789) from F2026-016_Robinson_Foldout_Format into Development
format only change. good for testing
2026-07-10 09:57:15 -04:00
jjenko 2e68362836 F2026-016 Robinson- created a new sub-format for a Foldout section that uses a smaller font size. 2026-07-10 09:56:58 -04:00
jjenko c6736db7ea Merge pull request 'B2026-065 Adjusted the Callaway Two Column format for the position of RNO tables.' (#788) from B2026-065_RNO_TablePositionAdjustment into Development
format only change.  Good for testing
2026-07-09 10:41:42 -04:00
jjenko c005f03af8 B2026-065 Adjusted the Callaway Two Column format for the position of RNO tables. 2026-07-09 10:41:46 -04:00
jjenko 459aabcc86 Merge pull request 'B2026-064 – Updating ROs from Display ROs should not error' (#787) from B2026-064 into Development
good for testing
2026-07-07 11:01:30 -04:00
mschill ad33097d5e B2026-064 – Updating ROs from Display ROs should not error 2026-07-07 10:59:51 -04:00
jjenko 8d7735735e Merge pull request 'F2026_015 Moved the change bar position to the right one space to accommodate the wider Caution and Note boxes' (#786) from F2026-015_SouthTexas_ChgBars into Development
format only change.  Ready for testing
2026-07-01 09:15:24 -04:00
jjenko 25bbc46925 F2026_015 Moved the change bar position to the right one space to accommodate the wider Caution and Note boxes 2026-07-01 09:17:23 -04:00
jjenko 5a26b0ee35 Merge pull request 'B2026-054 - When performing a Transition search, the Formats dropdown list is repeating several times.' (#785) from B2026-054 into Development
good for testing phase
2026-07-01 08:19:38 -04:00
mschill 09a397bed2 B2026-054 - When performing a Transition search, the Formats dropdown list is repeating several times. 2026-07-01 07:21:25 -04:00
jjenko a33039bcae Merge pull request 'F2026-014 South Texas EOP format – adjusted the Caution and Note box width. Also remove the extra space between bullets and multiple Caution/Note text' (#784) from F2026-014_SouthTexas_Caution_Box_Width into Development
format only changes - ready for testing
2026-06-30 14:34:22 -04:00
jjenko 0ebd125266 F2026-014 South Texas EOP format – adjusted the Caution and Note box width. Also remove the extra space between bullets and multiple Caution/Note text 2026-06-30 14:35:28 -04:00
jjenko fd16a6b6c3 Merge pull request 'B2026-063 - Issue Deleting Steps with Grids' (#783) from B2026-063 into Development
good for testing
2026-06-30 13:50:22 -04:00
mschill cf19f764c7 Copy / Paste Error when updating Revision Comment 2026-06-30 13:49:37 -04:00
jjenko 88850d6c25 Merge pull request 'B2026-063 - Issue Deleting Steps with Grids' (#782) from B2026-063 into Development
good for testing phase
2026-06-30 09:28:28 -04:00
mschill b173c61575 B2026-063 - Issue Deleting Steps with Grids 2026-06-30 09:11:43 -04:00
jjenko 3b866f0952 Merge pull request 'B2026-057 - Issue when ROs are out of date and swapping between sets – sometimes asked if want to update ROs twice if said no the first time.' (#781) from B2026-057 into Development
good for testing phase
2026-06-29 10:00:42 -04:00
mschill 94db524a11 B2026-057 - Issue when ROs are out of date and swapping between sets – sometimes asked if want to update ROs twice if said no the first time. 2026-06-29 09:51:48 -04:00
jjenko f27616ce1f Merge pull request 'B2026-052 - Issue when parens inside a Hardspaced Multi-RO Return Values.' (#780) from B2026-052 into Development
good for testing phase
2026-06-29 08:47:11 -04:00
mschill 7f75af7119 B2026-052 - Issue when parens inside a Hardspaced Multi-RO Return Values.
PROMS crashes when doing an update ROFst.
2026-06-25 15:46:25 -04:00
mschill 38e42723af Merge pull request 'B2026-060, B2026-061, Fixed issue where change bars were printing when they should not have been.' (#778) from B2026-60_B2026-61 into Development
Looks Good. Ready for QA!
2026-06-18 14:18:24 -04:00
jjenko f4ec60c9e0 B2026-060, B2026-061, Fixed issue where change bars were printing when they should not have been. 2026-06-18 14:06:30 -04:00
jjenko 01394b1978 Merge pull request 'B2026 058' (#777) from B2026-058 into Development
good for testing
2026-06-12 15:15:39 -04:00
mschill 9b7db08fcf update unicode 2026-06-12 15:02:01 -04:00
mschill 6d7cdef223 B2026-058 – If approving multiple procedures at the same time with a multiunit set and one of the procedures is open, PROMS sometimes loses that it is set for an individual unit. 2026-06-12 14:57:42 -04:00
jjenko d9c35fe02a Merge pull request 'C2026 021 b2026 048' (#775) from C2026-021_B2026-048 into Development
good for testing
2026-05-29 09:47:07 -04:00
13 changed files with 2995 additions and 2921 deletions
+1
View File
@@ -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.
+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
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
+59 -14
View File
@@ -5547,6 +5547,12 @@ ELSE PRINT 'Function: ve_GetItemDerivedApplicability Error on Creation'
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 ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[ve_GetParentItem]') AND OBJECTPROPERTY(id,N'IsScalarFunction') = 1)
DROP FUNCTION [ve_GetParentItem];
@@ -5555,35 +5561,46 @@ GO
Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
Copyright 2012 - Volian Enterprises, Inc. All rights reserved.
*****************************************************************************/
CREATE FUNCTION [dbo].[ve_GetParentItem] (@ItemID int) RETURNS int
CREATE OR ALTER FUNCTION [dbo].[ve_GetParentItem] (@ItemID int) RETURNS int
WITH EXECUTE AS OWNER
AS
BEGIN
DECLARE @ParentID int;
WITH Itemz([ItemID],[IsFound]) as
WITH Itemz([ItemID]) as
(
select ii.itemid,0 from items ii where ii.itemid = @ItemID
select ii.itemid from items ii WITH (NOLOCK) where ii.itemid = @ItemID
union all
select ii.previousid,0 from items ii
select ii.previousid from items ii WITH (NOLOCK)
join itemz zz on ii.itemid = zz.itemid
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 = itemid from itemz
where isfound = 1 OPTION (MAXRECURSION 10000)
select top 1 @ParentID = ii.itemid
from itemz
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
END
GO
IF (@@Error = 0) PRINT 'ScalerFunction [vefn_GetParentItem] Succeeded'
ELSE PRINT 'ScalerFunction [vefn_GetParentItem] Error on Creation'
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 ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[vefn_CanTransitionBeCreated]') AND OBJECTPROPERTY(id,N'IsScalarFunction') = 1)
DROP FUNCTION [vefn_CanTransitionBeCreated];
@@ -24990,6 +25007,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 +25068,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 = '07/16/2026 8:30 AM'
set @RevDescription = 'Reworked ve_GetParentItem for Performance improvement'
Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription
PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription
@@ -67,6 +67,7 @@ namespace VEPROMS
MyFrmVEPROMS = myFrmVEPROMS;// Save frmVEPROMS for Import to shutoff SessionPing
_MyApproval = new ApprovalInfo(myFrmVEPROMS);// Save frmVEPROMS for Import to shutoff SessionPing
ApplicabilityIndex = myDocVersion.DocVersionConfig.SelectedSlave;
_MyApproval.SavedSlave = ApplicabilityIndex;
this.ConsistencyPrintRequest -= new DisplayConsistencyReportEvent(dlgApproveProcedure_ConsistencyPrintRequest);
this.ConsistencyPrintRequest += new DisplayConsistencyReportEvent(dlgApproveProcedure_ConsistencyPrintRequest);
_MyDocVersion = myDocVersion;
@@ -292,6 +293,7 @@ namespace VEPROMS
expAddProcConChk.Expanded = true;
_initializing = true;
ApplicabilityIndex = myDocVersion.DocVersionConfig.SelectedSlave;
_MyApproval.SavedSlave = ApplicabilityIndex;
InitializePanelApprove();
InitializePanelSelect();
_initializing = false;
@@ -306,6 +308,7 @@ namespace VEPROMS
_MyDocVersion = myProcedure.MyDocVersion;
_MyDocVersion.ResetProcedures(); // B2021-035: Pasted, modified number and deleted procedures not refreshed so missing from list
ApplicabilityIndex = _MyDocVersion.DocVersionConfig.SelectedSlave; // B2022-033 set the child being approved or workflow so other procedure list can populate
_MyApproval.SavedSlave = ApplicabilityIndex;
InitializeComponent();
FlexGridAddEvents();
SetupComboBoxes();
@@ -914,6 +917,11 @@ namespace VEPROMS
get { return _MyProcedures; }
//set { _MyProcedures = value; }
}
//B2026-058 - If approving multiple procedures at the same time with a multiunit set and one of the procedures is open, PROMS sometimes loses that it is set for an individual unit.
// this will save the SectedSlave in case a refresh causes it to get lost
public int SavedSlave { get; set; } = 0;
public ApprovalInfo(frmVEPROMS myFrmVEPROMS)
{
MyFrmVEPROMS = myFrmVEPROMS;// Save frmVEPROMS for Import to shutoff SessionPing
@@ -1173,9 +1181,14 @@ namespace VEPROMS
string pdfPath = string.Format(@"{0}\{1}", VlnSettings.TemporaryFolder, pdfTmp);
if (!TryToDelete(summaryPDF, "Change Summary")) break;
if (!TryToDelete(pdfPath,revisionStage)) break;
if (SavedSlave > 0 && ap.ProcInfo.MyDocVersion.DocVersionConfig.SelectedSlave < 1)
{
//B2026-058 - If approving multiple procedures at the same time with a multiunit set and one of the procedures is open, PROMS sometimes loses that it is set for an individual unit.
ap.ProcInfo.MyDocVersion.DocVersionConfig.SelectedSlave = SavedSlave;
}
procsApproved.Add(ap.ProcInfo.DisplayNumber + " " + ap.ProcInfo.DisplayText);
RevisionInfo ric = pi.MyDocVersion.DocVersionConfig.SelectedSlave > 0 ? RevisionInfo.GetCurrentByItemIDandUnitID(pi.ItemID, pi.MyDocVersion.DocVersionConfig.SelectedSlave) : RevisionInfo.GetCurrentByItemID(pi.ItemID);
// RevisionInfo rip = RevisionInfo.GetPreviousByItemID(pi.ItemID);
// RevisionInfo rip = RevisionInfo.GetPreviousByItemID(pi.ItemID);
DateTime myDTS = pi.DTS; // pi.DTS is date of last approval
string cbDTS = (pi.MyConfig as ProcedureConfig).Print_ChangeBarDate;
// pi.DTS was the field that was used to store the approval date before master/slave code was added. Use ChangeBarDate if it is set - this is set either manually if no approval date (from treeview menu) or
+122 -93
View File
@@ -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;
}
@@ -4113,7 +4113,10 @@ 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
// that with the Content datetime, otherwise we proceed as before.
DateTime? viewableStartingDateTime = (MyProcedure.MyConfig as ProcedureConfig).Print_ViewableStartingChangeBarDate;
if (viewableStartingDateTime != null && viewableStartingDateTime > MyProcedure.ChangeBarDate && (MyProcedure.MyConfig as ProcedureConfig).SelectedSlave == 0)
// 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)
return (MyContent.DTS > viewableStartingDateTime);
return (MyContent.DTS > MyProcedure.ChangeBarDate);
}
+17 -4
View File
@@ -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;
}
}
}
+222 -252
View File
@@ -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}");
}
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