Compare commits

..

30 Commits

Author SHA1 Message Date
mschill 3a2dd0b0aa C2026-046 - Decrease check if need to update ROs. 2026-07-21 10:24:46 -04:00
jjenko 0fed1acfd8 Merge pull request 'F2026-017 Blank line was sometimes missing after the Note and Caution text. This was a 64-bit build difference that affected the text width calculations.' (#792) from F2026-017_SummerCautionNoteAdj into Development
Format only change - good for testing phase
2026-07-17 10:11:25 -04:00
jjenko d7c2300021 F2026-017 Blank line was sometimes missing after the Note and Caution text. This was a 64-bit build difference that affected the text width calculations. 2026-07-17 10:11:43 -04:00
jjenko fca333299d Merge pull request 'C2026 044' (#791) from C2026-044 into Development
good for testing phase
2026-07-16 08:53:54 -04:00
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
16 changed files with 1574 additions and 1492 deletions
+1
View File
@@ -179,6 +179,7 @@
<Content Include="fmtall\CPL_00all.xml" /> <Content Include="fmtall\CPL_00all.xml" />
<Content Include="fmtall\CPL_01all.xml" /> <Content Include="fmtall\CPL_01all.xml" />
<Content Include="fmtall\CPL_02all.xml" /> <Content Include="fmtall\CPL_02all.xml" />
<Content Include="fmtall\CPL_04all.xml" />
<Content Include="fmtall\CPL_03all.xml" /> <Content Include="fmtall\CPL_03all.xml" />
<Content Include="fmtall\CPSAMGDataall.xml" /> <Content Include="fmtall\CPSAMGDataall.xml" />
<Content Include="fmtall\CPSAMGDEVall.xml" /> <Content Include="fmtall\CPSAMGDEVall.xml" />
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1817,7 +1817,7 @@ ALTER trigger [dbo].[tr_Contents_Delete] on [dbo].[Contents] instead of delete a
select ii.ContentID,ii.Number,ii.Text,ii.Type,ii.FormatID,ii.Config,ii.DTS,ii.UserID,ii.DeleteStatus,ii.ActionDTS select ii.ContentID,ii.Number,ii.Text,ii.Type,ii.FormatID,ii.Config,ii.DTS,ii.UserID,ii.DeleteStatus,ii.ActionDTS
from tblContents ii inner join deleted dd on dd.ContentID = ii.ContentID from tblContents ii inner join deleted dd on dd.ContentID = ii.ContentID
where ii.DeleteStatus > 0 where ii.DeleteStatus > 0
update ga set ga.contentauditid = (select 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 from gridaudits ga join deleted dd on ga.contentid = dd.contentid where ga.contentauditid = 0
end end
go go
+59 -14
View File
@@ -5547,6 +5547,12 @@ ELSE PRINT 'Function: ve_GetItemDerivedApplicability Error on Creation'
GO GO
------- -------
-- =============================================
-- Author: Matthew Schill
-- Modify date: 07/14/2026
-- Description: Reworked ve_GetParentItem for Performance improvement
-- =============================================
/****** Object: UserDefinedFunction [dbo].[vefn_GetParentItem] Script Date: 03/28/2012 17:58:48 ******/ /****** Object: UserDefinedFunction [dbo].[vefn_GetParentItem] Script Date: 03/28/2012 17:58:48 ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[ve_GetParentItem]') AND OBJECTPROPERTY(id,N'IsScalarFunction') = 1) IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[ve_GetParentItem]') AND OBJECTPROPERTY(id,N'IsScalarFunction') = 1)
DROP FUNCTION [ve_GetParentItem]; DROP FUNCTION [ve_GetParentItem];
@@ -5555,35 +5561,46 @@ GO
Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
Copyright 2012 - Volian Enterprises, Inc. All rights reserved. Copyright 2012 - Volian Enterprises, Inc. All rights reserved.
*****************************************************************************/ *****************************************************************************/
CREATE FUNCTION [dbo].[ve_GetParentItem] (@ItemID int) RETURNS int CREATE OR ALTER FUNCTION [dbo].[ve_GetParentItem] (@ItemID int) RETURNS int
WITH EXECUTE AS OWNER WITH EXECUTE AS OWNER
AS AS
BEGIN BEGIN
DECLARE @ParentID int; DECLARE @ParentID int;
WITH Itemz([ItemID],[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 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 join itemz zz on ii.itemid = zz.itemid
where ii.previousid is not null where ii.previousid is not null
and zz.isfound = 0
union all
select ii.itemid,1
from parts pp
join itemz zz on pp.itemid = zz.itemid
join items ii on ii.contentid = pp.contentid
) )
select top 1 @ParentID = itemid from itemz select top 1 @ParentID = ii.itemid
where isfound = 1 OPTION (MAXRECURSION 10000) 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 RETURN @ParentID
END END
GO GO
IF (@@Error = 0) PRINT 'ScalerFunction [vefn_GetParentItem] Succeeded' IF (@@Error = 0) PRINT 'ScalerFunction [vefn_GetParentItem] Succeeded'
ELSE PRINT 'ScalerFunction [vefn_GetParentItem] Error on Creation' ELSE PRINT 'ScalerFunction [vefn_GetParentItem] Error on Creation'
go go
IF EXISTS (SELECT * FROM dbo.sysIndexes WHERE name like 'IX_PartsItemID')
DROP INDEX [IX_PartsItemID] ON [dbo].[tblParts];
GO
CREATE NONCLUSTERED INDEX IX_PartsItemID
ON [dbo].[tblParts] ([ItemID] ASC)
INCLUDE([ContentID],[DeleteStatus],[FromType]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
PRINT 'Added IX_PartsItemID Index. Speeds up Getting Parent Items'
GO
/****** Object: UserDefinedFunction [dbo].[vefn_CanTransitionBeCreated] Script Date: 10/14/2012 02:03:30 ******/ /****** Object: UserDefinedFunction [dbo].[vefn_CanTransitionBeCreated] Script Date: 10/14/2012 02:03:30 ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[vefn_CanTransitionBeCreated]') AND OBJECTPROPERTY(id,N'IsScalarFunction') = 1) IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[vefn_CanTransitionBeCreated]') AND OBJECTPROPERTY(id,N'IsScalarFunction') = 1)
DROP FUNCTION [vefn_CanTransitionBeCreated]; DROP FUNCTION [vefn_CanTransitionBeCreated];
@@ -24990,6 +25007,34 @@ IF (@@Error = 0) PRINT 'Procedure Creation: getRevisionByItemIDandRevisionNumber
ELSE PRINT 'Procedure Creation: getRevisionByItemIDandRevisionNumber Error on Creation' ELSE PRINT 'Procedure Creation: getRevisionByItemIDandRevisionNumber Error on Creation'
GO GO
/*
==========================================================================================================
Author: Matthew Schill
Create Date: 06/29/2026
Description: Added an ISNULL check when setting GridAudits.contentauditid.
Was Causing Deletion of some Grids to fail.
==========================================================================================================
*/
/****** Object: Trigger [tr_Contents_Delete] ******/
ALTER trigger [dbo].[tr_Contents_Delete] on [dbo].[Contents] instead of delete as
begin
update ii set DeleteStatus = (select max(DeleteID) from DeleteLog where SPID = @@spid), ActionDTS = getdate(),
UserID = (select top 1 UserID from DeleteLog where SPID = @@spid order by deleteid desc)
from tblContents ii inner join deleted dd on dd.ContentID = ii.ContentID
insert into ContentAudits(ContentID,Number,Text,Type,FormatID,Config,DTS,UserID,DeleteStatus,ActionDTS)
select ii.ContentID,ii.Number,ii.Text,ii.Type,ii.FormatID,ii.Config,ii.DTS,ii.UserID,ii.DeleteStatus,ii.ActionDTS
from tblContents ii inner join deleted dd on dd.ContentID = ii.ContentID
where ii.DeleteStatus > 0
update ga set ga.contentauditid = (select ISNULL(max(auditid),0) from contentaudits where contentid = ga.contentid and deletestatus = ga.deletestatus)
from gridaudits ga join deleted dd on ga.contentid = dd.contentid where ga.contentauditid = 0
end
go
-- Display the status of Trigger alter
IF (@@Error = 0) PRINT 'Trigger Alteration: tr_Contents_Delete Succeeded'
ELSE PRINT 'Trigger Alteration: tr_Contents_Delete Error on Creation'
GO
/* /*
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
| ADD New Code Before this Block | | ADD New Code Before this Block |
@@ -25023,8 +25068,8 @@ BEGIN TRY -- Try Block
DECLARE @RevDate varchar(255) DECLARE @RevDate varchar(255)
DECLARE @RevDescription varchar(255) DECLARE @RevDescription varchar(255)
set @RevDate = '05/26/2026 7:00 AM' set @RevDate = '07/16/2026 8:30 AM'
set @RevDescription = 'Get Most Recent Revision when Duplicates' set @RevDescription = 'Reworked ve_GetParentItem for Performance improvement'
Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription
PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription
+122 -93
View File
@@ -8,7 +8,6 @@ using System.Linq;
using System.Text; using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading; using System.Threading;
using static System.Net.Mime.MediaTypeNames;
namespace VEPROMS.CSLA.Library namespace VEPROMS.CSLA.Library
@@ -61,6 +60,7 @@ namespace VEPROMS.CSLA.Library
#region Structs / Internal Classes #region Structs / Internal Classes
[Serializable] [Serializable]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Keep Older Pre-existing naming conventions")]
public struct roHdr public struct roHdr
{ {
public int hSize; public int hSize;
@@ -78,6 +78,7 @@ namespace VEPROMS.CSLA.Library
}; };
[Serializable] [Serializable]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Keep Older Pre-existing naming conventions")]
public struct rodbi public struct rodbi
{ {
public int dbiID; public int dbiID;
@@ -91,6 +92,7 @@ namespace VEPROMS.CSLA.Library
}; };
[Serializable] [Serializable]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Keep Older Pre-existing naming conventions")]
public struct rogrp public struct rogrp
{ {
public string value; public string value;
@@ -102,6 +104,7 @@ namespace VEPROMS.CSLA.Library
}; };
[Serializable] [Serializable]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Keep Older Pre-existing naming conventions")]
public struct rochild public struct rochild
{ {
public int ID; public int ID;
@@ -133,7 +136,7 @@ namespace VEPROMS.CSLA.Library
private List<string> _baseAccPageKeys; private List<string> _baseAccPageKeys;
// RofstLookup/Conversion Variables // RofstLookup/Conversion Variables
private int _rofstID; private readonly int _rofstID;
private DocVersionInfo _myDocVersionInfo; private DocVersionInfo _myDocVersionInfo;
private int _selectedSlave; private int _selectedSlave;
private string _otherChild = string.Empty; 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 // B2022-107: Display Progress Bar Messages/Statuses when a new ROFST binary file is loaded into the database
private frmRofstLoadStatus _frmRofstLoadStatus = null; private frmRofstLoadStatus _frmRofstLoadStatus = null;
private Dictionary<int, int> _dicRoCounts = null; private Dictionary<int, int> _dicRoCounts = null;
private bool _showLoadingStatus = true; private readonly bool _showLoadingStatus = true;
private int _curRoCnt = 0; private int _curRoCnt = 0;
private int _dbRoCnt = 0; private int _dbRoCnt = 0;
@@ -414,7 +417,6 @@ namespace VEPROMS.CSLA.Library
ROFSTLookup.rochild rc = RofstDataGetChildByAccPageID(_rofstID, accPageBase); ROFSTLookup.rochild rc = RofstDataGetChildByAccPageID(_rofstID, accPageBase);
//if (rc.ID >=0 && rc.roid.Length < 16 && Regex.IsMatch(accPageKey, @".*\.[A-Z]") && rc.children != null && rc.children.Count() > 0)
if (rc.ID >= 0 && rc.roid.Length < 16 && !string.IsNullOrEmpty(accPageExt) && rc.children != null && rc.children.Count() > 0) if (rc.ID >= 0 && rc.roid.Length < 16 && !string.IsNullOrEmpty(accPageExt) && rc.children != null && rc.children.Count() > 0)
{ {
// Check if AccPageID/Key has a return value specific extension. Try to find the RoChild record with the specific return value type, // Check if AccPageID/Key has a return value specific extension. Try to find the RoChild record with the specific return value type,
@@ -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 // B2023-037: Handle <=, >=, +-, -> and <- symbols. Convert to unicode for output, i.e. print and edit/view (when editing
// step, will show as 2 characters, not unicode, unless ro inserted when code replaced link text with unicode. // step, will show as 2 characters, not unicode, unless ro inserted when code replaced link text with unicode.
//(_MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.UseDashGreaterLessThenForArrowsInROValue ||
// _MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.ConvertGTELTEPMinROValue))
bool arrows1 = myiteminfo.ActiveFormat.PlantFormat.FormatData.SectData.UseDashGreaterLessThenForArrowsInROValue; bool arrows1 = myiteminfo.ActiveFormat.PlantFormat.FormatData.SectData.UseDashGreaterLessThenForArrowsInROValue;
bool arrows2 = myiteminfo.ActiveFormat.PlantFormat.FormatData.SectData.ConvertGTELTEPMinROValue; bool arrows2 = myiteminfo.ActiveFormat.PlantFormat.FormatData.SectData.ConvertGTELTEPMinROValue;
@@ -681,11 +681,10 @@ namespace VEPROMS.CSLA.Library
if (minutes > 0) duration = string.Format("{0} min(s) ", minutes.ToString("n0")); if (minutes > 0) duration = string.Format("{0} min(s) ", minutes.ToString("n0"));
if (secs < 0) secs = 0.00; if (secs < 0) secs = 0.00;
duration = 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 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 //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) private ROFSTLookup.roHdr ConvertFst2Objects(byte[] ab)
{ {
ROFSTLookup.roHdr roh = new ROFSTLookup.roHdr(); ROFSTLookup.roHdr roh = new ROFSTLookup.roHdr
{
roh.hSize = BitConverter.ToInt32(ab, 0); hSize = BitConverter.ToInt32(ab, 0),
roh.hYear = BitConverter.ToInt16(ab, 4); hYear = BitConverter.ToInt16(ab, 4),
roh.hMonth = ab[6]; hMonth = ab[6],
roh.hDay = ab[7]; hDay = ab[7],
roh.hcYear = BitConverter.ToInt16(ab, 8); hcYear = BitConverter.ToInt16(ab, 8),
roh.hcMonth = ab[10]; hcMonth = ab[10],
roh.hcDay = ab[11]; hcDay = ab[11],
roh.hcHour = ab[12]; hcHour = ab[12],
roh.hcMin = ab[13]; hcMin = ab[13],
roh.hcSec = ab[14]; hcSec = ab[14],
roh.hcHund = ab[15]; hcHund = ab[15]
};
int hdrOffset = BitConverter.ToInt32(ab, 16); int hdrOffset = BitConverter.ToInt32(ab, 16);
int dbs = BitConverter.ToInt16(ab, hdrOffset + 4); 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) private ROFSTLookup.rogrp LoadGroup(byte[] ab, int offset, int tableID)
{ {
ROFSTLookup.rogrp myGrp = new ROFSTLookup.rogrp(); ROFSTLookup.rogrp myGrp = new ROFSTLookup.rogrp
{
myGrp.ID = BitConverter.ToInt32(ab, offset); ID = BitConverter.ToInt32(ab, offset),
myGrp.ParentID = BitConverter.ToInt32(ab, offset + 4); ParentID = BitConverter.ToInt32(ab, offset + 4)
};
int numChildren = BitConverter.ToInt16(ab, offset + 8); int numChildren = BitConverter.ToInt16(ab, offset + 8);
@@ -1660,7 +1661,7 @@ namespace VEPROMS.CSLA.Library
} }
// Update Progress Bar Accordingly // 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); 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) protected virtual void OnProgressChanged(string title, string displayText, int curVal = 0, int maxVal = 100)
{ {
// If frmRofstLoadStatus is not null then call Update Progress Method // If frmRofstLoadStatus is not null then call Update Progress Method
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) protected virtual void OnProgressChanged(string displayText, int curVal = 0, int maxVal = 100)
{ {
// If frmRofstLoadStatus is not null then call Update Progress Method // If frmRofstLoadStatus is not null then call Update Progress Method
if (_frmRofstLoadStatus != null) _frmRofstLoadStatus?.UpdateProgress(_frmRofstLoadStatus.Title, displayText, curVal, maxVal);
_frmRofstLoadStatus.UpdateProgress(_frmRofstLoadStatus.Title, displayText, curVal, maxVal);
} }
#endregion #endregion
@@ -1739,19 +1738,20 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.roHdr ConvertToRoHdrObject(SafeDataReader dr, bool loadChildren) private ROFSTLookup.roHdr ConvertToRoHdrObject(SafeDataReader dr, bool loadChildren)
{ {
ROFSTLookup.roHdr rh = new ROFSTLookup.roHdr(); ROFSTLookup.roHdr rh = new ROFSTLookup.roHdr
{
rh.hSize = (int)dr.GetValue("hSize"); hSize = (int)dr.GetValue("hSize"),
rh.hYear = (int)dr.GetValue("hYear"); hYear = (int)dr.GetValue("hYear"),
rh.hMonth = (byte)dr.GetValue("hMonth"); hMonth = (byte)dr.GetValue("hMonth"),
rh.hDay = (byte)dr.GetValue("hDay"); hDay = (byte)dr.GetValue("hDay"),
rh.hcYear = (int)dr.GetValue("hcYear"); hcYear = (int)dr.GetValue("hcYear"),
rh.hcMonth = (byte)dr.GetValue("hcMonth"); hcMonth = (byte)dr.GetValue("hcMonth"),
rh.hcDay = (byte)dr.GetValue("hcDay"); hcDay = (byte)dr.GetValue("hcDay"),
rh.hcHour = (byte)dr.GetValue("hcHour"); hcHour = (byte)dr.GetValue("hcHour"),
rh.hcMin = (byte)dr.GetValue("hcMin"); hcMin = (byte)dr.GetValue("hcMin"),
rh.hcSec = (byte)dr.GetValue("hcSec"); hcSec = (byte)dr.GetValue("hcSec"),
rh.hcHund = (byte)dr.GetValue("hcHund"); hcHund = (byte)dr.GetValue("hcHund")
};
if (loadChildren) if (loadChildren)
{ {
@@ -1763,15 +1763,16 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.rodbi ConvertToRodbiObject(SafeDataReader dr, bool loadChildren, bool loadAllChildren) private ROFSTLookup.rodbi ConvertToRodbiObject(SafeDataReader dr, bool loadChildren, bool loadAllChildren)
{ {
ROFSTLookup.rodbi rd = new ROFSTLookup.rodbi(); ROFSTLookup.rodbi rd = new ROFSTLookup.rodbi
{
rd.dbiID = (int)dr.GetValue("dbiID"); dbiID = (int)dr.GetValue("dbiID"),
rd.dbiType = (int)dr.GetValue("dbiType"); dbiType = (int)dr.GetValue("dbiType"),
rd.dbiAW = (int)dr.GetValue("dbiAW"); dbiAW = (int)dr.GetValue("dbiAW"),
rd.dbiAP = (string)dr.GetValue("dbiAP"); dbiAP = (string)dr.GetValue("dbiAP"),
rd.dbiTitle = (string)dr.GetValue("dbiTitle"); dbiTitle = (string)dr.GetValue("dbiTitle"),
rd.ID = (int)dr.GetValue("ID"); ID = (int)dr.GetValue("ID"),
rd.ParentID = (int)dr.GetValue("ParentID"); ParentID = (int)dr.GetValue("ParentID")
};
if (loadChildren || loadAllChildren) if (loadChildren || loadAllChildren)
{ {
@@ -1783,13 +1784,14 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.rochild ConvertToRochildObject(SafeDataReader dr, bool loadChildren, bool loadAllChildren) private ROFSTLookup.rochild ConvertToRochildObject(SafeDataReader dr, bool loadChildren, bool loadAllChildren)
{ {
ROFSTLookup.rochild rc = new ROFSTLookup.rochild(); ROFSTLookup.rochild rc = new ROFSTLookup.rochild
{
rc.ID = (int)dr.GetValue("ID"); ID = (int)dr.GetValue("ID"),
rc.ParentID = (int)dr.GetValue("ParentID"); ParentID = (int)dr.GetValue("ParentID"),
rc.type = (int)dr.GetValue("type"); type = (int)dr.GetValue("type"),
rc.title = (string)dr.GetValue("title"); title = (string)dr.GetValue("title"),
rc.roid = (string)dr.GetValue("roid"); roid = (string)dr.GetValue("roid")
};
if (!string.IsNullOrEmpty((string)dr.GetValue("appid"))) if (!string.IsNullOrEmpty((string)dr.GetValue("appid")))
{ {
@@ -1811,11 +1813,12 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.RoExtension ConvertToRoExtensionObject(SafeDataReader dr) private ROFSTLookup.RoExtension ConvertToRoExtensionObject(SafeDataReader dr)
{ {
ROFSTLookup.RoExtension re = new ROFSTLookup.RoExtension(); ROFSTLookup.RoExtension re = new ROFSTLookup.RoExtension
{
re.Offset = (int)dr.GetValue("Offset"); Offset = (int)dr.GetValue("Offset"),
re.RoidExt = (string)dr.GetValue("RoidExt"); RoidExt = (string)dr.GetValue("RoidExt"),
re.AccPageExt = (string)dr.GetValue("AccPageExt"); AccPageExt = (string)dr.GetValue("AccPageExt")
};
return re; 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. // Instead of returning the RoChildBase object with a single RoReturnVal object attached, just return the single Ro ReturnValue object.
var roRetVal = child.children.First(); var roRetVal = child.children.First();
//child.title = roRetVal.title;
child.appid = roRetVal.appid; child.appid = roRetVal.appid;
child.roid = roRetVal.roid; child.roid = roRetVal.roid;
child.value = roRetVal.value; child.value = roRetVal.value;
@@ -2129,41 +2131,68 @@ namespace VEPROMS.CSLA.Library
return ProcessRO(match, multiRtnVal); return ProcessRO(match, multiRtnVal);
} }
private string ProcessMacros(string str)
{
// Takes the RO text value and sees if a macro has been used. // 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 // 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 // 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; return str;
string rtnstr = str;
int indx;
while ((indx = rtnstr.ToUpper().IndexOf("@HSP(")) > -1) string processingstr = str; //holds current string being processed
{ int indx; //current position of @HSP( in string
string resstr = rtnstr.Substring(0, indx); int endpos = 0; //end of last parens
int endHsp = rtnstr.IndexOf(")", indx);
//B2026 - 002 handle if parens inside a HSP StringBuilder sb = new StringBuilder();
int startpos = indx + 5; Stack<char> endparens = new Stack<char>();
while (rtnstr.Substring(startpos, endHsp - startpos).Contains("("))
while ((indx = processingstr.ToUpper().IndexOf("@HSP(")) > -1)
{ {
startpos = rtnstr.IndexOf("(", startpos + 1, endHsp - startpos) + 1; sb.Append(processingstr.Substring(0, indx)); // initial string before @HSP(
endHsp = rtnstr.IndexOf(")", endHsp + 1);
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. // B2017-012 Don't convert space to hard spaces for XY Plots.
if (!tmpstr.Contains("<<G")) tmpstr = tmpstr.Replace(" ", @"\u160?"); if (!tmpstr.Contains("<<G")) tmpstr = tmpstr.Replace(" ", @"\u160?");
sb.Append(tmpstr);
resstr = resstr + tmpstr; //Set the processing string to after the ending parens found in case multiple @HSP
rtnstr = resstr + rtnstr.Substring(endHsp + 1); 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) private int StringLength(byte[] ab, int offset)
@@ -2275,7 +2304,7 @@ namespace VEPROMS.CSLA.Library
{ {
rc.roid = FormatRoidKey(roid).Substring(0, 12); 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; if (dvc != null) dvc.SelectedSlave = this.SelectedSlave;
switch (rc.roid) switch (rc.roid)
@@ -2283,49 +2312,49 @@ namespace VEPROMS.CSLA.Library
case "FFFF00000001": case "FFFF00000001":
rc.title = "Number"; rc.title = "Number";
rc.appid = "U-NUMBER"; rc.appid = "U-NUMBER";
rc.value = (dvc != null) ? dvc.Unit_Number : null; rc.value = dvc?.Unit_Number;
break; break;
case "FFFF00000002": case "FFFF00000002":
rc.title = "Other Number"; rc.title = "Other Number";
rc.appid = "U-OTHERNUMBER"; rc.appid = "U-OTHERNUMBER";
rc.value = (dvc != null) ? dvc.Other_Unit_Number : null; rc.value = dvc?.Other_Unit_Number;
break; break;
case "FFFF00000003": case "FFFF00000003":
rc.title = "Text"; rc.title = "Text";
rc.appid = "U-TEXT"; rc.appid = "U-TEXT";
rc.value = (dvc != null) ? dvc.Unit_Text : null; rc.value = dvc?.Unit_Text;
break; break;
case "FFFF00000004": case "FFFF00000004":
rc.title = "Other Text"; rc.title = "Other Text";
rc.appid = "U-OTHERTEXT"; rc.appid = "U-OTHERTEXT";
rc.value = (dvc != null) ? dvc.Other_Unit_Text : null; rc.value = dvc?.Other_Unit_Text;
break; break;
case "FFFF00000005": case "FFFF00000005":
rc.title = "ID"; rc.title = "ID";
rc.appid = "U-ID"; rc.appid = "U-ID";
rc.value = (dvc != null) ? dvc.Unit_ID : null; rc.value = dvc?.Unit_ID;
break; break;
case "FFFF00000006": case "FFFF00000006":
rc.title = "Other ID"; rc.title = "Other ID";
rc.appid = "U-OTHERID"; rc.appid = "U-OTHERID";
rc.value = (dvc != null) ? dvc.Other_Unit_ID : null; rc.value = dvc?.Other_Unit_ID;
break; break;
case "FFFF00000007": case "FFFF00000007":
rc.title = "Name"; rc.title = "Name";
rc.appid = "U-NAME"; rc.appid = "U-NAME";
rc.value = (dvc != null) ? dvc.Unit_Name : null; rc.value = dvc?.Unit_Name;
break; break;
case "FFFF00000008": case "FFFF00000008":
rc.title = "Other Name"; rc.title = "Other Name";
rc.appid = "U-OTHERNAME"; rc.appid = "U-OTHERNAME";
rc.value = (dvc != null) ? dvc.Other_Unit_Name : null; rc.value = dvc?.Other_Unit_Name;
break; break;
} }
@@ -326,6 +326,8 @@ namespace VEPROMS.CSLA.Library
// all of the calls aways set the flags to not update the RO values // all of the calls aways set the flags to not update the RO values
public static ROFst UpdateRoFst(RODbInfo rdi, DocVersion docver, ROFstInfo origROFst, ROFstInfoProgressBarRefresh myProgressBarRefresh) public static ROFst UpdateRoFst(RODbInfo rdi, DocVersion docver, ROFstInfo origROFst, ROFstInfoProgressBarRefresh myProgressBarRefresh)
{ {
ROWorkingDraftAsk.ClearWorkingDrafts();
if (myProgressBarRefresh != null) myProgressBarRefresh(0, 100, "Starting Update"); if (myProgressBarRefresh != null) myProgressBarRefresh(0, 100, "Starting Update");
int origFSTid = origROFst.ROFstID; int origFSTid = origROFst.ROFstID;
@@ -0,0 +1,18 @@
using System.Collections.Generic;
namespace VEPROMS.CSLA.Library
{
public static class ROWorkingDraftAsk
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
private static List<int> WorkingDrafts = new List<int>();
public static void AddWorkingDrafts(int wd) => WorkingDrafts.Add(wd);
public static void ClearWorkingDrafts() => WorkingDrafts.Clear();
public static bool ContainsWorkingDraft(int wd) => WorkingDrafts.Contains(wd);
}
}
@@ -396,6 +396,7 @@
<Compile Include="Minimal\UserReports.cs" /> <Compile Include="Minimal\UserReports.cs" />
<Compile Include="Minimal\UserSettings.cs" /> <Compile Include="Minimal\UserSettings.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Session\ROWorkingDraftAsk.cs" />
<Compile Include="VEObjects\VEDrillDown.cs" /> <Compile Include="VEObjects\VEDrillDown.cs" />
<Compile Include="VEObjects\VETreeNode.cs" /> <Compile Include="VEObjects\VETreeNode.cs" />
</ItemGroup> </ItemGroup>
+20 -4
View File
@@ -2,13 +2,12 @@ using DevComponents.DotNetBar;
using JR.Utils.GUI.Forms; using JR.Utils.GUI.Forms;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.Data; using System.Data;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using VEPROMS.CSLA.Library; using VEPROMS.CSLA.Library;
using Volian.Base.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 //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; 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 public ROFstInfo MyROFST
{ {
get { return _myROFST; } get { return _myROFST; }
@@ -135,6 +138,7 @@ namespace Volian.Controls.Library
if (_docVersionInfo?.VersionID != value?.VersionID) if (_docVersionInfo?.VersionID != value?.VersionID)
{ {
changedDocVersion = true; changedDocVersion = true;
askedAboutchangedDocVersion = false;
} }
_docVersionInfo = value; _docVersionInfo = value;
@@ -648,9 +652,10 @@ namespace Volian.Controls.Library
{ {
//do nothing - is still checked out //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 && !ROWorkingDraftAsk.ContainsWorkingDraft(_docVersionInfo.VersionID))
{
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"; InitialProgressBarMessage = "Updating ROs";
ROFstInfo roFstInfo = ROFstInfo.Get(fstid); ROFstInfo roFstInfo = ROFstInfo.Get(fstid);
@@ -664,6 +669,17 @@ namespace Volian.Controls.Library
MyROFST = roFstInfo; MyROFST = roFstInfo;
updatedROs = true; updatedROs = true;
askedAboutchangedDocVersion = false;
ROWorkingDraftAsk.ClearWorkingDrafts();
}
else
{
askedAboutchangedDocVersion = true;
if (!ROWorkingDraftAsk.ContainsWorkingDraft(_docVersionInfo.VersionID))
ROWorkingDraftAsk.AddWorkingDrafts(_docVersionInfo.VersionID);
}
} }
} }
+222 -252
View File
@@ -15,6 +15,8 @@ using System.Linq;
namespace Volian.Controls.Library namespace Volian.Controls.Library
{ {
#pragma warning disable IDE1006 // Naming Styles
#pragma warning disable IDE0044 // Add readonly modifier
public partial class DisplaySearch : UserControl public partial class DisplaySearch : UserControl
{ {
#region Public Events/Handlers #region Public Events/Handlers
@@ -24,14 +26,12 @@ namespace Volian.Controls.Library
private void OnPrintRequest(DisplaySearchEventArgs args) private void OnPrintRequest(DisplaySearchEventArgs args)
{ {
if (PrintRequest != null) PrintRequest?.Invoke(this, args);
PrintRequest(this, args);
} }
private void OnSearchComplete(DisplaySearchEventArgs args) private void OnSearchComplete(DisplaySearchEventArgs args)
{ {
if (SearchComplete != null) SearchComplete?.Invoke(this, args);
SearchComplete(this, args);
} }
#endregion #endregion
@@ -218,8 +218,10 @@ namespace Volian.Controls.Library
{ {
if (_TmrRefresh == null) if (_TmrRefresh == null)
{ {
_TmrRefresh = new Timer(); _TmrRefresh = new Timer
_TmrRefresh.Interval = 1000; {
Interval = 1000
};
_TmrRefresh.Tick += _TmrRefresh_Tick; _TmrRefresh.Tick += _TmrRefresh_Tick;
} }
return _TmrRefresh; return _TmrRefresh;
@@ -324,7 +326,6 @@ namespace Volian.Controls.Library
{ {
if (tabSearchTypes.SelectedTab == tabSearchTypes.Tabs[2]) if (tabSearchTypes.SelectedTab == tabSearchTypes.Tabs[2])
{ // RO Search { // RO Search
ROFSTLookup.rochild[] chld = null;
ROFSTLookup.rochild ch; ROFSTLookup.rochild ch;
if (cmboTreeROs.SelectedNode != null) if (cmboTreeROs.SelectedNode != null)
{ {
@@ -336,18 +337,16 @@ namespace Volian.Controls.Library
} }
else 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; ROFSTLookup.rochild[] chld = roch.children;
chld = ch.children;
// build a list of ROs to search // build a list of ROs to search
// B2022-118: remove the ending comma otherwise query will fail // 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(",")) if (strRtnStr.EndsWith(","))
strRtnStr = strRtnStr.Substring(0, strRtnStr.Length - 1); strRtnStr = strRtnStr.Substring(0, strRtnStr.Length - 1);
return strRtnStr; return strRtnStr;
@@ -391,7 +390,6 @@ namespace Volian.Controls.Library
cmbResultsStyle.Enabled = false; cmbResultsStyle.Enabled = false;
tabSearchTypes.SelectedTabChanged += new TabStrip.SelectedTabChangedEventHandler(tabSearchTypes_SelectedTabChanged); 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 // 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 #endregion
@@ -447,20 +445,6 @@ namespace Volian.Controls.Library
} }
btnSearch.Enabled = (cbxTranCategory.Items.Count > 0); // B2017-038 disable search button if no format selected 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 //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 //setup transition format versions
this.Cursor = Cursors.WaitCursor; this.Cursor = Cursors.WaitCursor;
if (myFormatVersionList == null) if (myFormatVersionList == null)
@@ -468,15 +452,22 @@ namespace Volian.Controls.Library
this.Refresh(); this.Refresh();
myFormatVersionList = FormatVersionList.GetFormatVersions(); myFormatVersionList = FormatVersionList.GetFormatVersions();
cbxTranVersion.DisplayMember = "Title"; cbxTranVersion.DisplayMember = "Title";
int lastLastFormatID = 0;
foreach (FormatVersion fv in myFormatVersionList) List<FormatVersion> fvlst = myFormatVersionList.GroupBy(x => x.FormatID).Select(group => new
{ FormatVersion(title: group.Max(x => x.Title),
if (fv.FormatID != lastLastFormatID) 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); cbxTranVersion.Items.Add(fv);
lastLastFormatID = fv.FormatID;
}
} }
cbxTranVersion.SelectedIndexChanged -= new EventHandler(cbxTranVersion_SelectedIndexChanged); cbxTranVersion.SelectedIndexChanged -= new EventHandler(cbxTranVersion_SelectedIndexChanged);
cbxTranVersion.SelectedIndexChanged += new EventHandler(cbxTranVersion_SelectedIndexChanged); cbxTranVersion.SelectedIndexChanged += new EventHandler(cbxTranVersion_SelectedIndexChanged);
cbxTranFormat.SelectedIndexChanged -= new EventHandler(cbxTranFormat_SelectedIndexChanged); cbxTranFormat.SelectedIndexChanged -= new EventHandler(cbxTranFormat_SelectedIndexChanged);
@@ -501,32 +492,6 @@ namespace Volian.Controls.Library
public void cbxTranFormat_SelectedIndexChanged(object sender, EventArgs e) 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 #region 2nd cut
if (cbxTranFormat.SelectedItem.ToString().Contains("{Proc")) if (cbxTranFormat.SelectedItem.ToString().Contains("{Proc"))
{ {
@@ -556,41 +521,21 @@ namespace Volian.Controls.Library
string versionList = string.Empty; string versionList = string.Empty;
string sep = string.Empty; string sep = string.Empty;
FormatVersion sfv = cbxTranVersion.SelectedItem as FormatVersion; FormatVersion sfv = cbxTranVersion.SelectedItem as FormatVersion;
foreach (FormatVersion fv in myFormatVersionList)
{ versionList = string.Join(",", myFormatVersionList.Where(x => x.FormatID == sfv?.FormatID).Select(y => y.VersionID));
if (fv.FormatID == sfv.FormatID)
{
versionList += sep + fv.VersionID;
sep = ",";
}
}
cbxTranVersion.Tag = versionList; cbxTranVersion.Tag = versionList;
cbxTranFormatFillIn(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) 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: // if this folder has a docversion, use its id:
string svid = null; string svid = null;
if (fi.FolderDocVersionCount > 0) if (fi?.FolderDocVersionCount > 0)
svid = fi.FolderDocVersions[0].VersionID.ToString(); 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); uncheckNodes.Add(n);
else else
n.Enabled = true; n.Enabled = true;
@@ -616,13 +561,17 @@ namespace Volian.Controls.Library
dicSelectedFolderNodes.Clear(); 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; this.Cursor = Cursors.Default;
} }
// C2020-033: Update the search panel for Incoming transitions. This gets called from the tree view & the ribbon // C2020-033: Update the search panel for Incoming transitions. This gets called from the tree view & the ribbon
public void UpdateSearchIncTransResults() public void UpdateSearchIncTransResults()
{ {
//IncTransSelectedCount = 0;
tabSearchTypes.SelectedTab = tabSearchTypes.Tabs[4]; tabSearchTypes.SelectedTab = tabSearchTypes.Tabs[4];
lbSrchResultsIncTrans.DataSource = null; lbSrchResultsIncTrans.DataSource = null;
@@ -699,13 +648,6 @@ namespace Volian.Controls.Library
DevComponents.AdvTree.Node newnode; DevComponents.AdvTree.Node newnode;
advTreeStepTypes.Nodes.Clear(); advTreeStepTypes.Nodes.Clear();
// Add a dummy node for searching Word Sections (MS Word sections) // 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 newnode = NewAdvTreeNode("WORD Sections", true, true); // C2020-010: Change Accessory Sections to Word Sections
wordSectionTreeNode = newnode; wordSectionTreeNode = newnode;
// C2021-028: RNO Only search, disable Word section tree node // 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 StepData sd = sdl[sdr.Index]; // get the step type record
string parentName = sd.ParentType; // this gets the parent of the this step/substep type 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")) if (parentName.Equals("Base"))
{ {
newnode = NewAdvTreeNode(sdr.Name, true, true); 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 //C2023-010: Select all child nodes when a subtype is selected
private void pnode_selected(object sender, EventArgs e) private void pnode_selected(object sender, EventArgs e)
{ {
DevComponents.AdvTree.Node pnode = sender as DevComponents.AdvTree.Node; if (sender is DevComponents.AdvTree.Node pnode && pnode.HasChildNodes)
if (pnode != null && pnode.HasChildNodes)
{ {
CheckTreeNodeChildren(pnode.Nodes); CheckTreeNodeChildren(pnode.Nodes);
} }
@@ -842,18 +773,21 @@ namespace Volian.Controls.Library
int fiCount = fi.ChildFolderCount; int fiCount = fi.ChildFolderCount;
advTreeProcSets.Nodes.Clear(); advTreeProcSets.Nodes.Clear();
lstCheckedDocVersions.Clear(); lstCheckedDocVersions.Clear();
topnode = new DevComponents.AdvTree.Node(); topnode = new DevComponents.AdvTree.Node
topnode.Text = "Available Procedure Sets"; {
topnode.Tag = fi; Text = "Available Procedure Sets",
topnode.DataKey = fi.FolderID; Tag = fi,
DataKey = fi.FolderID
};
advTreeProcSets.Nodes.Add(topnode); advTreeProcSets.Nodes.Add(topnode);
//advTreeProcSets.AfterNodeInsert += new TreeNodeCollectionEventHandler(advTreeProcSets_AfterNodeInsert);
//B2023-076: Adding option to select all procedure sets //B2023-076: Adding option to select all procedure sets
DevComponents.AdvTree.Node selectAllNode = new Node(); DevComponents.AdvTree.Node selectAllNode = new Node
selectAllNode.Text = SelectAllProcedureSetsText; {
selectAllNode.Tag = SelectAllProcedureSetsText; Text = SelectAllProcedureSetsText,
selectAllNode.CheckBoxVisible = true; Tag = SelectAllProcedureSetsText,
CheckBoxVisible = true
};
selectAllNode.NodeClick += new EventHandler(AllProcedureSets_clicked); selectAllNode.NodeClick += new EventHandler(AllProcedureSets_clicked);
topnode.Nodes.Add(selectAllNode); topnode.Nodes.Add(selectAllNode);
@@ -861,18 +795,22 @@ namespace Volian.Controls.Library
{ {
foreach (FolderInfo fic in fi.SortedChildFolders) foreach (FolderInfo fic in fi.SortedChildFolders)
{ {
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node(); DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node
newnode.Text = fic.ToString(); {
newnode.Tag = fic; Text = fic.ToString(),
newnode.DataKey = fi.FolderID; Tag = fic,
DataKey = fi.FolderID
};
AddCheckBox(true, newnode);//C2016-045 Allow Folders to be selected. AddCheckBox(true, newnode);//C2016-045 Allow Folders to be selected.
cntnd++; cntnd++;
if (fic.ChildFolderCount > 0 || fic.FolderDocVersionCount > 0) // allow for '+' for tree expansion 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) 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(); DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node
tnt.Text = DummyNodeText; {
Text = DummyNodeText
};
newnode.Nodes.Add(tnt); newnode.Nodes.Add(tnt);
} }
topnode.Nodes.Add(newnode); topnode.Nodes.Add(newnode);
@@ -881,10 +819,12 @@ namespace Volian.Controls.Library
} }
else else
{ {
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node(); DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node
newnode.Text = fi.ToString(); {
newnode.Tag = fi; Text = fi.ToString(),
newnode.DataKey = fi.FolderID; Tag = fi,
DataKey = fi.FolderID
};
AddCheckBox(true, newnode);//C2016-045 Allow Folders to be selected. AddCheckBox(true, newnode);//C2016-045 Allow Folders to be selected.
topnode.Nodes.Add(newnode); topnode.Nodes.Add(newnode);
lstCheckedDocVersions.Add(Mydocversion); lstCheckedDocVersions.Add(Mydocversion);
@@ -895,8 +835,10 @@ namespace Volian.Controls.Library
{ {
cntnd++; cntnd++;
fi = Mydocversion.MyFolder; fi = Mydocversion.MyFolder;
topnode = new DevComponents.AdvTree.Node(); topnode = new DevComponents.AdvTree.Node
topnode.Text = fi.ToString(); {
Text = fi.ToString()
};
advTreeProcSets.Nodes.Add(topnode); advTreeProcSets.Nodes.Add(topnode);
topnode.Tag = fi; topnode.Tag = fi;
topnode.DataKey = fi.FolderID; topnode.DataKey = fi.FolderID;
@@ -931,30 +873,35 @@ namespace Volian.Controls.Library
{ {
foreach (FolderInfo fic in fi.SortedChildFolders) foreach (FolderInfo fic in fi.SortedChildFolders)
{ {
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node(); DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node
newnode.Text = fic.ToString(); {
newnode.Tag = fic; Text = fic.ToString(),
newnode.DataKey = fic.FolderID; Tag = fic,
DataKey = fic.FolderID
};
par.Nodes.Add(newnode); par.Nodes.Add(newnode);
AddCheckBox(true, newnode);//C2016-045 Allow Folders to be selected. AddCheckBox(true, newnode);//C2016-045 Allow Folders to be selected.
newnode.Enabled = true; newnode.Enabled = true;
if (fic.ChildFolderCount > 0) // B2017-176: Only expand if folder has folders (not working draft nodes) if (fic.ChildFolderCount > 0) // B2017-176: Only expand if folder has folders (not working draft nodes)
{ {
DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node(); DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node
tnt.Text = DummyNodeText; {
Text = DummyNodeText
};
newnode.Nodes.Add(tnt); newnode.Nodes.Add(tnt);
// B2017-176: Only expand if folder has folders (not working draft nodes): the following was moved from the code // 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 // 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: // 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 (tabSearchTypes.SelectedTab == tabTranSearch)
{ {
if (!dicSelectedFolderNodes.ContainsKey(newnode)) dicSelectedFolderNodes.Add(newnode, false); //B2026-055 Transition Search Improvements
// get the docversion for this folder, if it has one and determine whether it is enabled for transitions: //Update Enabling/Disabling of Tree Elements
string svid = null; TraverseTree(advTreeProcSets.Nodes[0], cbxTranVersion.Tag?.ToString().Split(','));
if (fic.FolderDocVersionCount > 0)
svid = fic.FolderDocVersions[0].VersionID.ToString();
newnode.Enabled = svid != null && cbxTranVersion.Tag != null ? cbxTranVersion.Tag.ToString().Contains(svid) : false;
}
} }
} }
} }
@@ -964,10 +911,10 @@ namespace Volian.Controls.Library
public void AdvTree_AfterExpandorCollapse(object sender, AdvTreeNodeEventArgs e) public void AdvTree_AfterExpandorCollapse(object sender, AdvTreeNodeEventArgs e)
{ {
Node bottomNode = BottomTreeNode(cmboTreeROs.AdvTree.Nodes); 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 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; int hScrollBarHeight = cmboTreeROs.AdvTree.HScrollBar != null ? cmboTreeROs.AdvTree.HScrollBar.Height : 0;
bottom = bottomNode.Bounds.Bottom + 5; bottom = bottomNode.Bounds.Bottom + 5;
cmboTreeROs.AdvTree.Size = new Size(cmboTreeROs.AdvTree.Size.Width, Math.Min(525, bottom - top + hScrollBarHeight)); 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; int yLookFor = (bottom - cmboTreeROs.AdvTree.Size.Height) + 2 * hScrollBarHeight;
Node topNode = FindTreeNodeAt(cmboTreeROs.AdvTree.Nodes, yLookFor); 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) public void SetupAnnotationSearch(AnnotationDetails annotationDetails, DisplayTabControl tc)
{ {
_AnnotationDetails = annotationDetails; _AnnotationDetails = annotationDetails;
List<AnnotationTypeSearch> annoTypes = new List<AnnotationTypeSearch>(); List<AnnotationTypeSearch> annoTypes = new List<AnnotationTypeSearch>
annoTypes.Add(new AnnotationTypeSearch("All Annotations", string.Empty)); {
new AnnotationTypeSearch("All Annotations", string.Empty)
};
AnnotationTypeInfoList annoList = AnnotationTypeInfoList.Get(); AnnotationTypeInfoList annoList = AnnotationTypeInfoList.Get();
foreach (AnnotationTypeInfo ati in annoList) foreach (AnnotationTypeInfo ati in annoList)
annoTypes.Add(new AnnotationTypeSearch(ati.Name, ati.TypeID.ToString())); annoTypes.Add(new AnnotationTypeSearch(ati.Name, ati.TypeID.ToString()));
@@ -1058,14 +1004,15 @@ namespace Volian.Controls.Library
foreach (Symbol sym in sl) foreach (Symbol sym in sl)
{ {
DevComponents.DotNetBar.ButtonItem btnCM = new DevComponents.DotNetBar.ButtonItem(); DevComponents.DotNetBar.ButtonItem btnCM = new DevComponents.DotNetBar.ButtonItem
{
btnCM.Text = string.Format("{0}", (char)sym.Unicode); Text = string.Format("{0}", (char)sym.Unicode),
// to name button use unicode rather than desc, desc may have spaces or odd chars // to name button use unicode rather than desc, desc may have spaces or odd chars
btnCM.Name = "btnCM" + sym.Unicode.ToString(); Name = $"btnCM{sym.Unicode.ToString()}",
btnCM.Tooltip = sym.Desc; Tooltip = sym.Desc,
btnCM.Tag = string.Format(@"{0}", sym.Unicode); Tag = string.Format(@"{0}", sym.Unicode),
btnCM.FontBold = true; FontBold = true
};
btnCM.Click += new System.EventHandler(btnSym_Click); btnCM.Click += new System.EventHandler(btnSym_Click);
galSymbols.SubItems.Add(btnCM); galSymbols.SubItems.Add(btnCM);
} }
@@ -1114,9 +1061,11 @@ namespace Volian.Controls.Library
private DevComponents.AdvTree.Node NewAdvTreeNode(string nodetext, bool selectable, bool chxbxvisable) private DevComponents.AdvTree.Node NewAdvTreeNode(string nodetext, bool selectable, bool chxbxvisable)
{ {
DevComponents.AdvTree.Node newnode; DevComponents.AdvTree.Node newnode;
newnode = new DevComponents.AdvTree.Node(); newnode = new DevComponents.AdvTree.Node
newnode.Text = nodetext; {
newnode.Selectable = selectable; Text = nodetext,
Selectable = selectable
};
AddCheckBox(chxbxvisable, newnode);//C2016-045 Allow Folders to be selected. AddCheckBox(chxbxvisable, newnode);//C2016-045 Allow Folders to be selected.
return newnode; return newnode;
} }
@@ -1163,7 +1112,7 @@ namespace Volian.Controls.Library
// folder properties dialog // folder properties dialog
bool allowNonAdmin = IncTranCvtPerm(); bool allowNonAdmin = IncTranCvtPerm();
List<int> itmsEditable = new List<int>(); // return this list List<int> itmsEditable = new List<int>(); // return this list
int listCount = 0; int listCount;
if (all) // Check all in list if (all) // Check all in list
{ {
listCount = _SearchResults.Count; 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. // not all can be converted to text. If count of itmsEditable & lbis are different some cannot be edited.
if (itmsEditable.Count == 0) 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); "Convert Transition to Text", MessageBoxButtons.OK, MessageBoxIcon.Information);
return null; return null;
} }
else if (itmsEditable.Count != listCount) 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.") + 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?",
"\r\n\r\n Should the conversion of the transitions to text continue?",
"Convert Transition to Text", MessageBoxButtons.YesNo, MessageBoxIcon.Question); "Convert Transition to Text", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (ans == DialogResult.No) return null; if (ans == DialogResult.No) return null;
} }
@@ -1215,7 +1163,7 @@ namespace Volian.Controls.Library
private void btnTranCvtSelToTxt_Click(object sender, EventArgs e) private void btnTranCvtSelToTxt_Click(object sender, EventArgs e)
{ {
// First see if all selected can be converted, i.e. user has permission to edit // 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); List<int> itmsEditable = TranCvtCheckPermission(false);
if (itmsEditable == null || itmsEditable.Count == 0) return; if (itmsEditable == null || itmsEditable.Count == 0) return;
TranCvtToTxt(itmsEditable); TranCvtToTxt(itmsEditable);
@@ -1448,8 +1396,10 @@ namespace Volian.Controls.Library
{ {
ROFSTLookup.rodbi db = dbs[i]; ROFSTLookup.rodbi db = dbs[i];
DevComponents.AdvTree.Node tn = new DevComponents.AdvTree.Node(db.dbiTitle); DevComponents.AdvTree.Node tn = new DevComponents.AdvTree.Node(db.dbiTitle)
tn.Tag = db; {
Tag = db
};
cmboTreeROs.Nodes.Add(tn); cmboTreeROs.Nodes.Add(tn);
AddDummyGroup(db, 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) return; // already loaded.
if (tn.HasChildNodes && tn.Nodes[0].Text == DummyNodeText) tn.Nodes[0].Remove(); if (tn.HasChildNodes && tn.Nodes[0].Text == DummyNodeText) tn.Nodes[0].Remove();
ROFSTLookup.rochild[] chld = null; ROFSTLookup.rochild[] chld;
if (tn.Tag is ROFSTLookup.rodbi db)
if (tn.Tag is ROFSTLookup.rodbi)
{ {
ROFSTLookup.rodbi db = (ROFSTLookup.rodbi)tn.Tag;
MyROFSTLookup.LoadChildren(ref db); MyROFSTLookup.LoadChildren(ref db);
chld = db.children; 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); MyROFSTLookup.LoadChildren(ref ch);
chld = ch.children; chld = ch.children;
} }
@@ -1531,8 +1478,6 @@ namespace Volian.Controls.Library
for (int i = 0; i < chld.Length; i++) for (int i = 0; i < chld.Length; i++)
{ {
ProgressBar_SetValue(i); ProgressBar_SetValue(i);
DevComponents.AdvTree.Node tmp = null;
ROFSTLookup.rochild roc = chld[i]; ROFSTLookup.rochild roc = chld[i];
// if this is a group, i.e. type 0, add a dummy node // 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) if (roc.value == null)
{ {
tmp = new DevComponents.AdvTree.Node(roc.title); tmp = new DevComponents.AdvTree.Node(roc.title)
tmp.Tag = roc; {
Tag = roc
};
int index = FindIndex(tn.Nodes, tmp.Text); int index = FindIndex(tn.Nodes, tmp.Text);
tn.Nodes.Insert(index, tmp); tn.Nodes.Insert(index, tmp);
@@ -1569,8 +1517,10 @@ namespace Volian.Controls.Library
} }
else else
{ {
tmp = new DevComponents.AdvTree.Node(roc.title); tmp = new DevComponents.AdvTree.Node(roc.title)
tmp.Tag = roc; {
Tag = roc
};
if (roc.roid.Length == 16) if (roc.roid.Length == 16)
{ {
@@ -1610,9 +1560,8 @@ namespace Volian.Controls.Library
{ {
cbxFndUnLnkROVals.Enabled = false; 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 // B2022-026 RO Memory Reduction code - check children length
cbxFndUnLnkROVals.Enabled = (ro.children == null || ro.children.Length <= 0); cbxFndUnLnkROVals.Enabled = (ro.children == null || ro.children.Length <= 0);
} }
@@ -1634,12 +1583,7 @@ namespace Volian.Controls.Library
bool keeplooking = true; bool keeplooking = true;
//build a stack (bread crumb trail) of where is procedure set came from within the tree. //build a stack (bread crumb trail) of where is procedure set came from within the tree.
Stack<string> crumbs = new Stack<string>(); 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" crumbs.Push(Mydocversion.MyFolder.Name); // ex: "Emergency Procedures"
FolderInfo fi = Mydocversion.MyFolder.MyParent; FolderInfo fi = Mydocversion.MyFolder.MyParent;
while (fi != null) 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. // 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) private void lbSrchResultsIncTrans_ItemClicked(object sender, EventArgs e)
{ {
ListBoxItem lbi = sender as ListBoxItem; if (sender is ListBoxItem lbi)
if (lbi != null)
{ {
ItemBindingData ibd = lbi.Tag as ItemBindingData; ItemBindingData ibd = lbi.Tag as ItemBindingData;
ItemInfo ii = ibd.DataItem as ItemInfo;
bool allowNonAdmin = IncTranCvtPerm(); 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)) if (!allowNonAdmin && !UserInfo.CanEdit(MyUserInfo, ii.MyDocVersion))
{ {
@@ -2041,11 +1983,8 @@ namespace Volian.Controls.Library
bool includeSpecialChars = (TextSearchString != @"\?"); // true; bool includeSpecialChars = (TextSearchString != @"\?"); // true;
// Build list of selected types that were searched // Build list of selected types that were searched
string typstr = null; string typstr = null;
foreach (string s in lstCheckedStepTypesStr) typstr = typstr == null ? s : typstr + ", " + s; foreach (string s in lstCheckedStepTypesStr) typstr = typstr == null ? s : $"{typstr}, {s}";
TypesSelected = "Filtered By: " + ((typstr != null) ? typstr : "All Step Types"); TypesSelected = $"Filtered By: {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";
string unitPrefix = string.Empty; string unitPrefix = string.Empty;
if (Mydocversion != null) if (Mydocversion != null)
unitPrefix = Mydocversion.DocVersionConfig.Unit_ProcedureNumber; unitPrefix = Mydocversion.DocVersionConfig.Unit_ProcedureNumber;
@@ -2065,11 +2004,8 @@ namespace Volian.Controls.Library
} }
else 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; ReportTitle = "Step Element Report"; //"Proms - Search by Type: " + typstr;
TypesSelected = "Filtered By: " + typstr; TypesSelected = $"Filtered By: {typstr}";
SearchString = null; SearchString = null;
// B2022-031 - added a cbxProcSectSrch to filter out procedure and section titles from global search results. // 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); 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 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); ReportTitle = string.Format("Search for '{0}'", TextSearchString);
// C2020-009: Search - Allow search 'By Word'. // C2020-009: Search - Allow search 'By Word'.
@@ -2116,8 +2044,6 @@ namespace Volian.Controls.Library
} }
} }
SearchString = TextSearchString; 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. // 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); 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 LastSearchWasAnnotations = true; // B2019-119 only refresh annotation search results if an annotation search was done
SearchString = null; SearchString = null;
//ReportTitle = string.Format("Proms - Annotation Search for '{0}'", cbxTextSearchAnnotation.Text);
if (cbxTextSearchAnnotation.Text == null || cbxTextSearchAnnotation.Text == string.Empty) if (cbxTextSearchAnnotation.Text == null || cbxTextSearchAnnotation.Text == string.Empty)
{ {
ReportTitle = string.Format("Find {0}{1}", cbxAnnoTypes.Text, (cbxAnnoTypes.SelectedIndex > 0) ? " Annotations" : 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 {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); SearchResults = ItemInfoList.GetListFromAnnotationSearch(DVISearchList, TypeSearchList, AnnotationSearchType, cbxTextSearchAnnotation.Text, cbxCaseSensitiveAnnoText.Checked, unitPrefix);
//UpdateAnnotationSearchResults();
cmbResultsStyleIndex = 2; // display annotation text in results cmbResultsStyleIndex = 2; // display annotation text in results
// C2019-001: Search in RNO steps only // C2019-001: Search in RNO steps only
if (cbxRnoOnlyAnnot.Checked) GetInRNOResults(); if (cbxRnoOnlyAnnot.Checked) GetInRNOResults();
@@ -2155,9 +2074,7 @@ namespace Volian.Controls.Library
else if (tabSearchTypes.SelectedTab == tabSearchTypes.Tabs[2]) // RO Search else if (tabSearchTypes.SelectedTab == tabSearchTypes.Tabs[2]) // RO Search
{ {
SearchString = null; SearchString = null;
//ReportTitle = "Proms - Referenced Object Search";
ReportTitle = string.Format("Search For Referenced Object:\n{0}", cmboTreeROs.Text); 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) 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); ReportTitle = string.Format("Search For Transitions: Transition Type: {0}, Transition Category: {1}", cbxTranFormat.SelectedItem, cbxTranCategory.SelectedItem);
string docVersionList = string.Empty; string docVersionList = string.Empty;
bool bypassSearch = false;
if (lstCheckedDocVersions.Count == 0) if (lstCheckedDocVersions.Count == 0)
docVersionList = cbxTranVersion.Tag.ToString(); docVersionList = cbxTranVersion.Tag.ToString();
else else
{ {
string sep = string.Empty; //B2026-055 Transition Search Improvements
foreach (DocVersionInfo dvi in lstCheckedDocVersions) //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(); docVersionList = string.Join(",", lstCheckedDocVersions.Select(y => y.VersionID.ToString()));
sep = ","; }
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 // 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; docVersionList = string.Empty;
// added TypeSearchList for bug fix B2015-055 // 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 cmbResultsStyleIndex = 3; // display step text in results
// C2019-001: Search in RNO steps only // C2019-001: Search in RNO steps only
if (cbxRnoOnlyTrans.Checked) GetInRNOResults(); 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")) ? 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" : "Place \"\" around words that you are searching for, so that parser can better understand what you are trying to find" :
ex.Message; ex.Message;
FlexibleMessageBox.Show(tmpmsg, "Search Error: " + ex.GetType().Name); FlexibleMessageBox.Show(tmpmsg, $"Search Error: {ex.GetType().Name}");
} }
finally finally
{ {
Cursor = savcursor; Cursor = savcursor;
} }
//Console.WriteLine("{0} Milliseconds", TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks).TotalMilliseconds);
OnSearchComplete(new DisplaySearchEventArgs(TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks))); 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) 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 = 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 else
{ {
hasAnnot = true; hasAnnot = true;
@@ -2469,7 +2398,7 @@ namespace Volian.Controls.Library
//C2025-005 Find Step Elements //C2025-005 Find Step Elements
//Need to refresh the Doc List and Available Step Types //Need to refresh the Doc List and Available Step Types
//if All Procedure Sets was selected //if All Procedure Sets was selected
if (n.Tag == SelectAllProcedureSetsText) if (n.Tag is string txt && txt == SelectAllProcedureSetsText)
{ {
if (n.Checked) if (n.Checked)
{ {
@@ -2520,7 +2449,6 @@ namespace Volian.Controls.Library
{ {
if (tn.Checked) 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) //B2023-112: Don't crash if on top 'All' node (did not have associated folder)
FolderInfo fi = tn.Tag as FolderInfo; FolderInfo fi = tn.Tag as FolderInfo;
// if this folder has a docversion, use its id: // if this folder has a docversion, use its id:
@@ -2567,8 +2495,10 @@ namespace Volian.Controls.Library
lstCheckedStepTypesStr.Clear(); lstCheckedStepTypesStr.Clear();
foreach (string str in strs) foreach (string str in strs)
{ {
Node newnode = new DevComponents.AdvTree.Node(); Node newnode = new DevComponents.AdvTree.Node
newnode.Text = str; {
Text = str
};
advTreeStepTypes.Nodes.Add(newnode); advTreeStepTypes.Nodes.Add(newnode);
} }
buildStepTypePannelTitle(); buildStepTypePannelTitle();
@@ -2657,16 +2587,23 @@ namespace Volian.Controls.Library
private void cbxTranFormatFillIn(string vid) private void cbxTranFormatFillIn(string vid)
{ {
vid = vid.IndexOf(",") < 0 ? vid : vid.Substring(0, cbxTranVersion.Tag.ToString().IndexOf(",")); 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)); DocVersionInfo dvi = DocVersionInfo.Get(int.Parse(vid));
TransTypeList ttl = dvi.ActiveFormat.PlantFormat.FormatData.TransData.TransTypeList; TransTypeList ttl = dvi.ActiveFormat.PlantFormat.FormatData.TransData.TransTypeList;
cbxTranFormat.Items.Clear();
cbxTranFormat.Items.Add("All");
for (int i = 0; i < ttl.MaxIndex; i++) 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.Items.Add(new TransItem(ttl[i].TransMenu.Replace("?.", string.Empty), ttl[i].TransFormat.Replace("?.", string.Empty)));
}
} }
cbxTranFormat.SelectedIndex = 0; cbxTranFormat.SelectedIndex = 0;
@@ -2717,9 +2654,9 @@ namespace Volian.Controls.Library
if (advTreeStepTypes.Nodes.Count == 1 && n.Checked) 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 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) if (n.Checked)
{ {
//n.Style = DevComponents.AdvTree.NodeStyles.Apple; // B2023-112: coloring of proc set tree nodes was not working correctly
if (sd == null) 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 //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; xpStepTypes.TitleStyle.BackColor1.Color = saveXpStepTypeTitleColor;
} }
else //lstCheckedStepTypes.Count > 0 else
{ {
// show how many selected whether panel is expanded or not // 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} 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() private bool OnlyWordSectTypeSel()
{ {
// B2021-100: Enable/disable the RNO Only checkbox & WORD Sections tree node in Step Elements to Search. // 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) if (lstCheckedStepTypes != null && lstCheckedStepTypes.Count == 1 && lstCheckedStepTypes[0] == 0)
return true; return true;
@@ -3145,11 +3079,6 @@ namespace Volian.Controls.Library
lbSrchResults.DataSource = null; lbSrchResults.DataSource = null;
lbSrchResults.Items.Clear(); lbSrchResults.Items.Clear();
toolTip1.SetToolTip(lbSrchResults, null); 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; Cursor = Cursors.WaitCursor;
try // B2021-045: don't crash if xml file cannot be loaded. 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); Node tnode = advTreeProcSets.FindNodeByDataKey(folderID);
if (tnode != null) tnode.Checked = true; if (tnode != null) tnode.Checked = true;
} }
Mydocversion = tmpdvi == null ? fromLoadFiledvi : tmpdvi; Mydocversion = tmpdvi ?? fromLoadFiledvi;
} }
AdvTreeStepTypesFillIn(); AdvTreeStepTypesFillIn();
@@ -3202,10 +3131,10 @@ namespace Volian.Controls.Library
} }
string typstr = null; string typstr = null;
foreach (string s in lstCheckedStepTypesStr) typstr = typstr == null ? s : typstr + ", " + s; foreach (string s in lstCheckedStepTypesStr) typstr = typstr == null ? s : $"{typstr}, {s}";
TypesSelected = "Filtered By: " + ((typstr != null) ? typstr : "All Step Types"); TypesSelected = $"Filtered By: {typstr ?? "All Step Types"}";
ReportTitle = "Step Element Report"; //"Proms - Search by Type: " + typstr; ReportTitle = "Step Element Report"; //"Proms - Search by Type: " + typstr;
TypesSelected = "Filtered By: " + typstr; TypesSelected = $"Filtered By: {typstr}";
advTreeStepTypes.RefreshItems(); advTreeStepTypes.RefreshItems();
buildStepTypePannelTitle(); 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" + 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); "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) private void btnCopySearchResults_Click(object sender, EventArgs e)
{ {
ICollection<ItemInfo> myList = lbSrchResults.DataSource as ICollection<ItemInfo>; ICollection<ItemInfo> myList = lbSrchResults.DataSource as ICollection<ItemInfo>;
@@ -3543,7 +3512,6 @@ namespace Volian.Controls.Library
private bool IncTransCvtAllToTextPerm() private bool IncTransCvtAllToTextPerm()
{ {
if (_SearchResults == null) return false; if (_SearchResults == null) return false;
int cnt = 0;
bool allowNonAdmin = IncTranCvtPerm(); bool allowNonAdmin = IncTranCvtPerm();
foreach (ItemInfo ii in _SearchResults) 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 #endregion