diff --git a/PROMS/Formats/Formats.csproj b/PROMS/Formats/Formats.csproj index d20cca04..e950a1ee 100644 --- a/PROMS/Formats/Formats.csproj +++ b/PROMS/Formats/Formats.csproj @@ -92,6 +92,10 @@ + + + + Designer @@ -176,6 +180,7 @@ + @@ -187,6 +192,7 @@ + diff --git a/PROMS/Formats/epall/EPFormatTST1.xml b/PROMS/Formats/epall/EPFormatTST1.xml new file mode 100644 index 00000000..ac38208e Binary files /dev/null and b/PROMS/Formats/epall/EPFormatTST1.xml differ diff --git a/PROMS/Formats/epall/EPFormatTST2.xml b/PROMS/Formats/epall/EPFormatTST2.xml new file mode 100644 index 00000000..6f94675f Binary files /dev/null and b/PROMS/Formats/epall/EPFormatTST2.xml differ diff --git a/PROMS/Formats/epall/EPFormatTST3.xml b/PROMS/Formats/epall/EPFormatTST3.xml new file mode 100644 index 00000000..c2d23a61 Binary files /dev/null and b/PROMS/Formats/epall/EPFormatTST3.xml differ diff --git a/PROMS/Formats/epall/EPFormatTST4.xml b/PROMS/Formats/epall/EPFormatTST4.xml new file mode 100644 index 00000000..a54def4c Binary files /dev/null and b/PROMS/Formats/epall/EPFormatTST4.xml differ diff --git a/PROMS/Formats/fmtall/BASEall.xml b/PROMS/Formats/fmtall/BASEall.xml index 3078bdbb..8ca3756e 100644 Binary files a/PROMS/Formats/fmtall/BASEall.xml and b/PROMS/Formats/fmtall/BASEall.xml differ diff --git a/PROMS/Formats/fmtall/BNPP1Newall.xml b/PROMS/Formats/fmtall/BNPP1Newall.xml index a8c9c4b5..95276f42 100644 Binary files a/PROMS/Formats/fmtall/BNPP1Newall.xml and b/PROMS/Formats/fmtall/BNPP1Newall.xml differ diff --git a/PROMS/Formats/fmtall/BNPP1all.xml b/PROMS/Formats/fmtall/BNPP1all.xml index 1d176017..8a25a67f 100644 Binary files a/PROMS/Formats/fmtall/BNPP1all.xml and b/PROMS/Formats/fmtall/BNPP1all.xml differ diff --git a/PROMS/Formats/fmtall/BNPP2all.xml b/PROMS/Formats/fmtall/BNPP2all.xml index bd86f544..44e57768 100644 Binary files a/PROMS/Formats/fmtall/BNPP2all.xml and b/PROMS/Formats/fmtall/BNPP2all.xml differ diff --git a/PROMS/Formats/fmtall/BNPPalrall.xml b/PROMS/Formats/fmtall/BNPPalrall.xml index 9cf45bab..f0c58c99 100644 Binary files a/PROMS/Formats/fmtall/BNPPalrall.xml and b/PROMS/Formats/fmtall/BNPPalrall.xml differ diff --git a/PROMS/Formats/fmtall/BNPPbckall.xml b/PROMS/Formats/fmtall/BNPPbckall.xml index 6bf87d17..5c1811e0 100644 Binary files a/PROMS/Formats/fmtall/BNPPbckall.xml and b/PROMS/Formats/fmtall/BNPPbckall.xml differ diff --git a/PROMS/Formats/fmtall/EPTST1all.xml b/PROMS/Formats/fmtall/EPTST1all.xml new file mode 100644 index 00000000..0c355742 Binary files /dev/null and b/PROMS/Formats/fmtall/EPTST1all.xml differ diff --git a/PROMS/Formats/fmtall/EPTST2all.xml b/PROMS/Formats/fmtall/EPTST2all.xml new file mode 100644 index 00000000..9bbd2e05 Binary files /dev/null and b/PROMS/Formats/fmtall/EPTST2all.xml differ diff --git a/PROMS/Formats/fmtall/SHEAall.xml b/PROMS/Formats/fmtall/SHEAall.xml index ce0eed34..847ad8e5 100644 Binary files a/PROMS/Formats/fmtall/SHEAall.xml and b/PROMS/Formats/fmtall/SHEAall.xml differ diff --git a/PROMS/Formats/fmtall/SHEall.xml b/PROMS/Formats/fmtall/SHEall.xml index b2d912da..868f8737 100644 Binary files a/PROMS/Formats/fmtall/SHEall.xml and b/PROMS/Formats/fmtall/SHEall.xml differ diff --git a/PROMS/Formats/fmtall/WEP2all.xml b/PROMS/Formats/fmtall/WEP2all.xml index 8f5e5743..880a7aa5 100644 Binary files a/PROMS/Formats/fmtall/WEP2all.xml and b/PROMS/Formats/fmtall/WEP2all.xml differ diff --git a/PROMS/Formats/fmtall/WEPBCKall.xml b/PROMS/Formats/fmtall/WEPBCKall.xml index 7ffb858a..76e45fd4 100644 Binary files a/PROMS/Formats/fmtall/WEPBCKall.xml and b/PROMS/Formats/fmtall/WEPBCKall.xml differ diff --git a/PROMS/Formats/fmtall/WEPSAM2all.xml b/PROMS/Formats/fmtall/WEPSAM2all.xml index 04c18bd0..0dc9105b 100644 Binary files a/PROMS/Formats/fmtall/WEPSAM2all.xml and b/PROMS/Formats/fmtall/WEPSAM2all.xml differ diff --git a/PROMS/Formats/genmacall/BNPP1.svg b/PROMS/Formats/genmacall/BNPP1.svg index 57be7a39..b7da28ec 100644 Binary files a/PROMS/Formats/genmacall/BNPP1.svg and b/PROMS/Formats/genmacall/BNPP1.svg differ diff --git a/PROMS/Formats/genmacall/BNPP1new.svg b/PROMS/Formats/genmacall/BNPP1new.svg index e32a19e5..da1c3fcb 100644 Binary files a/PROMS/Formats/genmacall/BNPP1new.svg and b/PROMS/Formats/genmacall/BNPP1new.svg differ diff --git a/PROMS/Formats/genmacall/BNPP2.svg b/PROMS/Formats/genmacall/BNPP2.svg index 0eb9df54..1e858477 100644 Binary files a/PROMS/Formats/genmacall/BNPP2.svg and b/PROMS/Formats/genmacall/BNPP2.svg differ diff --git a/PROMS/Formats/genmacall/BNPPalr.svg b/PROMS/Formats/genmacall/BNPPalr.svg index c81be361..7baaf58d 100644 Binary files a/PROMS/Formats/genmacall/BNPPalr.svg and b/PROMS/Formats/genmacall/BNPPalr.svg differ diff --git a/PROMS/Formats/genmacall/BNPPbck.svg b/PROMS/Formats/genmacall/BNPPbck.svg index 9ee7595a..ccc36a49 100644 Binary files a/PROMS/Formats/genmacall/BNPPbck.svg and b/PROMS/Formats/genmacall/BNPPbck.svg differ diff --git a/PROMS/VEPROMS User Interface/PROMSFixes.Sql b/PROMS/VEPROMS User Interface/PROMSFixes.Sql index 4ef1c593..d97734f5 100644 --- a/PROMS/VEPROMS User Interface/PROMSFixes.Sql +++ b/PROMS/VEPROMS User Interface/PROMSFixes.Sql @@ -23864,6 +23864,226 @@ IF (@@Error = 0) PRINT 'Running vesp_UpdateUserSettingMSWordSummaryPrompt Succee ELSE PRINT 'Running vesp_UpdateUserSettingMSWordSummaryPrompt Failed to Execute' GO +--- begin changes for: +---C2025-023 - Electronic Procedures - Modifications to PROMS +--- The following IsEPAnnotationType column was added for EP Annotations. +--- IsEPAnnotationType = Is for EPs +IF NOT EXISTS(SELECT * + FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_NAME = 'AnnotationTypes' + AND COLUMN_NAME = 'IsEPAnnotationType') +ALTER TABLE AnnotationTypes ADD IsEPAnnotationType bit NOT NULL DEFAULT(0); +go +-- Display the status +IF (@@Error = 0) PRINT 'Altered table [AnnotationTypes] Succeeded for IsEPAnnotationType' +ELSE PRINT 'Altered table [AnnotationTypes] Error on Alter for IsEPAnnotationType' +go + + +IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[getAnnotationType]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) + DROP PROCEDURE [getAnnotationType]; +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +-- ============================================= +-- Author: Matthew Schill +-- Create date: 3/21/2025 +-- Description: Add EP to AnnotationTypes +-- ============================================= +CREATE PROCEDURE [dbo].[getAnnotationType] +( + @TypeID int +) +WITH EXECUTE AS OWNER +AS + SELECT + [TypeID], + [Name], + [Config], + [DTS], + [UserID], + [LastChanged], + (SELECT COUNT(*) FROM [Annotations] WHERE [Annotations].[TypeID]=[AnnotationTypes].[TypeID]) [AnnotationCount], + [IsEPAnnotationType] + FROM [AnnotationTypes] + WHERE [TypeID]=@TypeID + + SELECT + [Annotations].[AnnotationID], + [Annotations].[ItemID], + [Annotations].[TypeID], + [Annotations].[RtfText], + [Annotations].[SearchText], + [Annotations].[Config], + [Annotations].[DTS], + [Annotations].[UserID], + [Annotations].[LastChanged], + [Items].[PreviousID] [Item_PreviousID], + [Items].[ContentID] [Item_ContentID], + [Items].[DTS] [Item_DTS], + [Items].[UserID] [Item_UserID] + FROM [Annotations] + JOIN [Items] ON + [Items].[ItemID]=[Annotations].[ItemID] + WHERE + [Annotations].[TypeID]=@TypeID + + RETURN +GO + +IF (@@Error = 0) PRINT 'Running getAnnotationType Succeeded' +ELSE PRINT 'Running getAnnotationType Failed to Execute' +GO + +IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[getAnnotationTypeByName]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) + DROP PROCEDURE [getAnnotationTypeByName]; +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +-- ============================================= +-- Author: Matthew Schill +-- Create date: 3/21/2025 +-- Description: Add EP to AnnotationTypes +-- ============================================= +CREATE PROCEDURE [dbo].[getAnnotationTypeByName] +( + @Name nvarchar(100) +) +WITH EXECUTE AS OWNER +AS + SELECT + [TypeID], + [Name], + [Config], + [DTS], + [UserID], + [LastChanged], + (SELECT COUNT(*) FROM [Annotations] WHERE [Annotations].[TypeID]=[AnnotationTypes].[TypeID]) [AnnotationCount], + [IsEPAnnotationType] + FROM [AnnotationTypes] + WHERE [Name]=@Name + RETURN +GO + +IF (@@Error = 0) PRINT 'Running getAnnotationTypeByName Succeeded' +ELSE PRINT 'Running getAnnotationTypeByName Failed to Execute' +GO + +IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[getAnnotationTypes]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) + DROP PROCEDURE [getAnnotationTypes]; +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +-- ============================================= +-- Author: Matthew Schill +-- Create date: 3/21/2025 +-- Description: Add EP to AnnotationTypes +-- ============================================= +CREATE PROCEDURE [dbo].[getAnnotationTypes] +WITH EXECUTE AS OWNER +AS + SELECT + [TypeID], + [Name], + [Config], + [DTS], + [UserID], + [LastChanged], + (SELECT COUNT(*) FROM [Annotations] WHERE [Annotations].[TypeID]=[AnnotationTypes].[TypeID]) [AnnotationCount], + [IsEPAnnotationType] + FROM [AnnotationTypes] + RETURN + +GO + +IF (@@Error = 0) PRINT 'Running getAnnotationTypes Succeeded' +ELSE PRINT 'Running getAnnotationTypes Failed to Execute' +GO + +IF Not Exists(SELECT * FROM sys.objects Where name = 'EPFormats' AND type in (N'U')) +Begin -- Rofst Tables + + SET ANSI_NULLS ON + SET QUOTED_IDENTIFIER ON + + CREATE TABLE [dbo].[EPFormats]( + [FormatID] [int] IDENTITY(1,1) NOT NULL, + [Name] [nvarchar](100) NOT NULL, + [Data] [xml] NULL, + [Created] [datetime] NOT NULL DEFAULT (getdate()), + [CreatedBy] [nvarchar](100) NOT NULL DEFAULT (upper(suser_sname())), + [Updated] [datetime] NOT NULL DEFAULT (getdate()), + [UpdatedBy] [nvarchar](100) NOT NULL DEFAULT (upper(suser_sname())) + CONSTRAINT [PK_EPFormats] PRIMARY KEY CLUSTERED + ( + [FormatID] ASC + )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] + ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] + + IF (@@Error = 0) PRINT 'Table Creation: [EPFormats] Succeeded' + ELSE PRINT 'Table Creation: [EPFormats] Error on Creation' + +End +Go + +IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[vesp_UpdateEPFormat]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) + DROP PROCEDURE [vesp_UpdateEPFormat]; +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +-- ============================================= +-- Author: Matthew Schill +-- Create date: 3/26/2025 +-- Description: Update / Insert EP Format +-- ============================================= +CREATE PROCEDURE [dbo].[vesp_UpdateEPFormat] +( + @name nvarchar(100), + @data nvarchar(max), + @userID nvarchar(15) +) +WITH EXECUTE AS OWNER +AS + +IF EXISTS(Select 1 FROM EPFormats where Name = @name ) + BEGIN + UpDate EPFormats + SET Name = @name, + Data = @data, + Updated = getdate(), + UpdatedBy = upper(@userID) + WHERE Name = @name + END +ELSE + BEGIN + INSERT INTO EPFormats (Name, Data, CreatedBy, UpdatedBy) + values (@name, @data, 'Migration', 'Migration') + + END + +GO + +IF (@@Error = 0) PRINT 'Running vesp_UpdateEPFormat Succeeded' +ELSE PRINT 'Running vesp_UpdateEPFormat Failed to Execute' +GO +UPDATE Formats SET ApplicablePlant = 1000 WHERE [Name] LIKE 'EPTST%'; +Go +--- end changes for: +---C2025-023 - Electronic Procedures - Modifications to PROMS + + /* --------------------------------------------------------------------------- | ADD New Code Before this Block | @@ -23897,8 +24117,8 @@ BEGIN TRY -- Try Block DECLARE @RevDate varchar(255) DECLARE @RevDescription varchar(255) - set @RevDate = '5/19/2025 8:44 AM' - set @RevDescription = 'C2025-013 Add ability to disable message that opening Summaries in MS Word' + set @RevDate = '6/20/2025 3:07 PM' + set @RevDescription = 'Annotation Support' Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription diff --git a/PROMS/VEPROMS.CSLA.Library/Config/AnnotationConfig.cs b/PROMS/VEPROMS.CSLA.Library/Config/AnnotationConfig.cs new file mode 100644 index 00000000..feb430cd --- /dev/null +++ b/PROMS/VEPROMS.CSLA.Library/Config/AnnotationConfig.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel; + +namespace VEPROMS.CSLA.Library +{ + //C2025-023 - Electronic Procedures - Modifications to PROMS + //new class to handle access of tblAnnotations.Config + [Serializable] + [TypeConverter(typeof(ExpandableObjectConverter))] + public class AnnotationConfig : ConfigDynamicTypeDescriptor, INotifyPropertyChanged + { + private XMLProperties _Xp; + private XMLProperties Xp + { + get { return _Xp; } + } + public AnnotationConfig(string xml) + { + if (xml == string.Empty) xml = ""; + _Xp = new XMLProperties(xml); + } + + public AnnotationConfig() + { + _Xp = new XMLProperties(); + } + public override string ToString() + { + string s = _Xp.ToString(); + if (s == "" || s == "") return string.Empty; + return s; + } + public string GetValue(string group, string item) + { + return _Xp[group, item]; + } + public void SetValue(string group, string item, string newvalue) + { + _Xp[group, item] = newvalue; + } + + } +} diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/FormatExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/FormatExt.cs index 02cd7989..a4e5383a 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/FormatExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/FormatExt.cs @@ -19,6 +19,7 @@ using System.Xml; using System.Drawing; using System.ComponentModel; using System.Collections.Generic; +using Volian.Base.Library; namespace VEPROMS.CSLA.Library { @@ -226,6 +227,34 @@ namespace VEPROMS.CSLA.Library //} } OnFormatLoaded(null, new FormatEventArgs("Formats Updated")); + + //C2025-023 - Electronic Procedures - Modifications to PROMS + //Begin section for processing Electronic Procedure (EP) Format Files + // now loop through all EP format files + string epPath = fmtPath.Replace("\\fmtall", "\\epall"); + DirectoryInfo diEP = new DirectoryInfo(epPath); + if (diEP.Exists) + { + FileInfo[] fisEP = diEP.GetFiles("*.xml"); + OnFormatLoaded(null, new FormatEventArgs(fisEP.Length.ToString() + " EP Formats to Load")); + foreach (FileInfo fi in fisEP) + { + string fmtname = Path.GetFileNameWithoutExtension(fi.Name); + try + { + AddEPFormatToDB(fmtname, DateTime.Now, VlnSettings.UserID, epPath); + } + catch (Exception ex) + { + Console.WriteLine("{0} - {1}", ex.GetType().Name, ex.Message); + } + } + OnFormatLoaded(null, new FormatEventArgs("EP Formats Updated")); + + // update all in-use annotation types that have Electronic Procedures + EPFormatFile.UpdateAllInUseEPAnnotationTypes(); + } + } private static Dictionary _LookupFormats; @@ -338,8 +367,54 @@ namespace VEPROMS.CSLA.Library } return rec; } + + //C2025-023 - Electronic Procedures - Modifications to PROMS + //Procedure to load the EP format fiels into the DB + private static void AddEPFormatToDB(string formatname, DateTime Dts, string Userid, string epPath) + { + string fmtdata = null; + FileInfo fmtfi = null; + XmlDocument xd = null; + + OnFormatLoaded(null, new FormatEventArgs("Loading Format " + formatname)); + + string path = Path.Combine(epPath, formatname + ".xml"); + if (File.Exists(path)) + { + try + { + using (StreamReader srf = new StreamReader(path)) + { + fmtfi = new FileInfo(path); + xd = new XmlDocument(); + xd.XmlResolver = null; + xd.Load(srf); + fmtdata = xd.OuterXml; + } + } + catch (Exception ex) + { + OnFormatLoaded(null, new FormatEventArgs("Error Loading Format " + formatname)); + _MyLog.ErrorFormat($"AddEPFormatToDB('{path}')"); + return; + } + } + + if (string.IsNullOrEmpty(Userid)) Userid = "Migration"; + + try + { + EPFormatFile.UpdateEPFormat(formatname, fmtdata, Userid); + } + catch (Exception ex) + { + _MyLog.ErrorFormat($"AddFormatToDB-make format('{path}')"); + } + + } } - public partial class FormatInfo : IFormatOrFormatInfo + +public partial class FormatInfo : IFormatOrFormatInfo { //transition report stuff private static Dictionary _TransitionTypes; diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs index 668e1cf5..b0649cc6 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs @@ -449,10 +449,9 @@ namespace VEPROMS.CSLA.Library { StringBuilder sret = new StringBuilder(); ItemInfo pitem = this; - while (!pitem.IsSection && !pitem.IsHigh) { - using (StepInfo stpinfo = StepInfo.Get(pitem.ItemID)) + using (StepInfo stpinfo = StepInfo.Get(pitem.ItemID)) { string thisTab = stpinfo.MyTab.CleanText; @@ -2112,6 +2111,56 @@ namespace VEPROMS.CSLA.Library return (sd.Type == type); } + // C2025-023 - Electronic Procedures - Modifications to PROMS + //return EPFields that match this step type or a parent step type + public EPFields GetValidEPFields(int AnnTypeID) + { + EPFields filtered = new EPFields(); + + if (ActiveFormat.PlantFormat.EPFormatFiles.Count == 0) return filtered; + if ((int)MyContent.Type < 20000) return filtered; + EPFields unfiltered = ActiveFormat.PlantFormat.EPFormatFiles.Find(x => x.AnnotationTypeID == AnnTypeID)?.FieldList; + if (unfiltered == null) return filtered; + + //Build list of step type and step type of it's parents + List steptypelist = new List(); + int stepType = ((int)MyContent.Type) % 10000; + StepDataList sdlist = ActiveFormat.PlantFormat.FormatData.StepDataList; + if (stepType > sdlist.MaxIndex) + { + Console.WriteLine("Error getting type - contentid = {0}", MyContent.ContentID); + return filtered; + } + StepData sd = sdlist[stepType]; + while (sd.Index != 0) + { + steptypelist.Add(sd.Type); + sd = sdlist[sd.ParentType]; + } + + //if unfiltered list contains All as a step type, include it + foreach (EPField EP in unfiltered) + { + //if unfiltered list contains All as a step type, include it + if (EP.IsValidForStepType("All")) + filtered.Add(EP); + + //check for intersections between unfiltered list and step type list + List tmpEP = EP.validforsteptypes(); + if (tmpEP.Any(steptypelist.Contains)) + filtered.Add(EP); + } + + return filtered; + } + + // C2025-023 - Electronic Procedures - Modifications to PROMS + //return true if any EP Format files attached to the item's + public bool HasEPformat(int AnnTypeID) + { + return GetValidEPFields(AnnTypeID).Count > 0; + } + // determine if the the current step should automatically be placed on the Continuous Action Summary // Note, this logic only checks the format setting of the step. We will check the value of the Tag's Check Box later on. public bool IncludeOnContActSum @@ -4655,43 +4704,50 @@ namespace VEPROMS.CSLA.Library int localPrintLevel = PrintLevel; StepSectionData sd = ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData; bool doMeta = false; - if (sd.StepSectionLayoutData.TieTabToLevel && ActiveFormat.PlantFormat.FormatData.SectData.UseMetaSections) + if (sd.StepSectionLayoutData.TieTabToLevel) // C2025-036 reduce un-needed processing { - if (sd.StepSectionLayoutData.ShowSectionTitles - && !MyDocStyle.CancelSectTitle - && !(MyDocStyle.SpecialStepsFoldout && MyDocStyle.UseColSByLevel)) - localPrintLevel = PrintLevel + (((ActiveFormat.PlantFormat.FormatData.Express && IsSequential)) ? 0 : CurrentSectionLevel()); - if (!ActiveFormat.PlantFormat.FormatData.Express) doMeta = true; - } - if (sd.StepSectionLayoutData.TieTabToLevel && ActiveFormat.PlantFormat.FormatData.SectData.CountSubSectionsForLevel) - if (SectionLevel() > 1) + if (ActiveFormat.PlantFormat.FormatData.SectData.UseMetaSections) + { + if (sd.StepSectionLayoutData.ShowSectionTitles + && !MyDocStyle.CancelSectTitle + && !(MyDocStyle.SpecialStepsFoldout && MyDocStyle.UseColSByLevel)) + localPrintLevel = PrintLevel + (((ActiveFormat.PlantFormat.FormatData.Express && IsSequential)) ? 0 : CurrentSectionLevel()); + if (!ActiveFormat.PlantFormat.FormatData.Express) doMeta = true; + } + if (ActiveFormat.PlantFormat.FormatData.SectData.CountSubSectionsForLevel && (SectionLevel() > 1)) localPrintLevel += 1; + } + SeqTabFmtList seqtabs = ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.SeqTabFmtList; + // Start with basic cases of alpha/numeric/seq: // If we have metasections AND... // If the seqtabs for this given level does not get a section number, use the seqtab rather than // the ident of the step: bool useSubStepTabs = false; - if (doMeta && IsHigh - && !seqtabs[(localPrintLevel < 0 ? 0 : localPrintLevel) % seqtabs.MaxIndex].TabToken.Contains("{numericWpar}") - && tbformat.Contains("{")) useSubStepTabs = true; - - // Check to be sure the parent tab should be included... If this sequential is within a note - // or caution or equipment list, don't use parent tab AND always start the numbering as a numeric - if (doMeta && IsSequential && (InNote() || InCaution() || - (MyParent.IsEquipmentList && !MyParent.FormatStepData.TabData.IdentPrint.Contains("{seq}")))) + if (doMeta) // C2025-036 reduce un-needed processing { - // if immediate parent is note, caution or equip, use numeric, otherwise use alpha. - localPrintLevel = 0; - int lv = 0; - ItemInfo ii = MyParent; - while (!ii.IsCaution && !ii.IsNote && !ii.IsEquipmentList) + if (IsHigh + && !seqtabs[(localPrintLevel < 0 ? 0 : localPrintLevel) % seqtabs.MaxIndex].TabToken.Contains("{numericWpar}") + && tbformat.Contains("{")) useSubStepTabs = true; + + // Check to be sure the parent tab should be included... If this sequential is within a note + // or caution or equipment list, don't use parent tab AND always start the numbering as a numeric + if (IsSequential && (InNote() || InCaution() || + (MyParent.IsEquipmentList && !MyParent.FormatStepData.TabData.IdentPrint.Contains("{seq}")))) { - lv++; - ii = ii.MyParent; + // if immediate parent is note, caution or equip, use numeric, otherwise use alpha. + localPrintLevel = 0; + int lv = 0; + ItemInfo ii = MyParent; + while (!ii.IsCaution && !ii.IsNote && !ii.IsEquipmentList) + { + lv++; + ii = ii.MyParent; + } + lv = lv % 2; + tbformat = (lv == 0) ? "{numeric}." : "{alpha}."; } - lv = lv % 2; - tbformat = (lv == 0) ? "{numeric}." : "{alpha}."; } bool trimTabStart = false; bool dontTrimParentTabBeforeAppending = false; // B2019-011 for Barakah Alarm format @@ -4757,7 +4813,7 @@ namespace VEPROMS.CSLA.Library PrintLevel = 0; // If token includes 'Wpar', the parent tab prefix's the tab. - if (localPrintLevel > 0 && (tbformat.IndexOf("{numericWpar}") > -1 || tbformat.IndexOf("{alphaWpar}") > -1 || tbformat.IndexOf("{ALPHAWpar}") > -1)) + if (localPrintLevel > 0 && tbformat.Contains("Wpar}")) // C2025-036 reduce un-needed processing { string parentTab = null; ItemInfo myparent = ActiveParent as ItemInfo; @@ -4872,18 +4928,21 @@ namespace VEPROMS.CSLA.Library } string alpha = useLinked?LinkedTab.Trim():AlphabeticalNumbering(ordinal); if (trimSeqValue) alpha = alpha.Trim(); // F2024-043 trim white around SEQ tab value (for sub-steps) - // B2017-211 Roman High Level steps should be followed by Uppercase alpha substeps - This is being limited to Calvert SAMG Format - if (_ActiveFormat.Name =="BGESAM1" &&MyParent != null && MyParent.IsHigh && MyParent.IsStep && MyParent.FormatStepData.TabData.IdentEdit.Contains("ROMAN")) - tbformat = tbformat.Replace("{alpha}", alpha); - else - tbformat = tbformat.Replace("{alpha}", alpha.ToLower()); - tbformat = tbformat.Replace("{alphaWpar}", alpha.ToLower()); - if (ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvert && tbformat.Contains("{ALPHA}") && alpha.Length > 1) - tbformat = tbformat.Replace("{ALPHA}. ", alpha + "."); // if double chars, remove one of the space for BGE - else - tbformat = tbformat.Replace("{ALPHA}", alpha); + if (tbformat.ToUpper().Contains("{ALPHA")) // C2025-036 reduce un-needed processing + { + // B2017-211 Roman High Level steps should be followed by Uppercase alpha substeps - This is being limited to Calvert SAMG Format + if (_ActiveFormat.Name == "BGESAM1" && MyParent != null && MyParent.IsHigh && MyParent.IsStep && MyParent.FormatStepData.TabData.IdentEdit.Contains("ROMAN")) + tbformat = tbformat.Replace("{alpha}", alpha); + else + tbformat = tbformat.Replace("{alpha}", alpha.ToLower()); + tbformat = tbformat.Replace("{alphaWpar}", alpha.ToLower()); + if (ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvert && tbformat.Contains("{ALPHA}") && alpha.Length > 1) + tbformat = tbformat.Replace("{ALPHA}. ", alpha + "."); // if double chars, remove one of the space for BGE + else + tbformat = tbformat.Replace("{ALPHA}", alpha); - tbformat = tbformat.Replace("{ALPHAWpar}", alpha); + tbformat = tbformat.Replace("{ALPHAWpar}", alpha); + } if (tbformat.ToUpper().Contains("ROMAN")) { string roman = RomanNumbering(ordinal); @@ -4891,15 +4950,18 @@ namespace VEPROMS.CSLA.Library tbformat = tbformat.Replace("{ROMAN}", roman); tbformat = tbformat.Substring(0, tbformat.Length - ((roman.Length - 1) > 0 ? (roman.Length - 1) : 0)); } - if (tbformat.Contains("{numeric}") && ((MyDocStyle.StructureStyle.Style & E_DocStructStyle.DSS_AddDotZeroStdHLS) == E_DocStructStyle.DSS_AddDotZeroStdHLS) && MyContent.Type == 20002) + if (tbformat.Contains("{numeric}")) // C2025-036 reduce un-needed processing { - tbformat = tbformat.Replace("{numeric}", ordinal.ToString().PadLeft(2) + ".0"); - tbformat = tbformat.Substring(0, tbformat.Length - 2); - } - if (tbformat.Contains("{numeric}") && (this.FormatStepData.AppendDotZero)) // F2018-022 Added step type flag to append a ".0" to the end of the high level step - put in for Westinghouse single column format (wst1) - { - string numtxt = ordinal.ToString().PadLeft(2) + ".0"; - tbformat = tbformat.Replace("{numeric}.", numtxt).Replace("{numeric}", numtxt); + if (((MyDocStyle.StructureStyle.Style & E_DocStructStyle.DSS_AddDotZeroStdHLS) == E_DocStructStyle.DSS_AddDotZeroStdHLS) && MyContent.Type == 20002) + { + tbformat = tbformat.Replace("{numeric}", ordinal.ToString().PadLeft(2) + ".0"); + tbformat = tbformat.Substring(0, tbformat.Length - 2); + } + if (this.FormatStepData.AppendDotZero) // F2018-022 Added step type flag to append a ".0" to the end of the high level step - put in for Westinghouse single column format (wst1) + { + string numtxt = ordinal.ToString().PadLeft(2) + ".0"; + tbformat = tbformat.Replace("{numeric}.", numtxt).Replace("{numeric}", numtxt); + } } // if this is a wolf creek background, if the tbformat ends with a '.' don't add a space, // otherwise add a space. @@ -6097,9 +6159,10 @@ namespace VEPROMS.CSLA.Library } private bool IsLowestLevelStep { + //F2025-015 added check for IsInCautionOrNote for sub-step inside Notes and Cautions get { - return (!(IsCaution || IsNote || IsTable || IsFigure || Steps != null || MyParent.IsCaution || MyParent.IsNote)); + return (!(IsCaution || IsNote || IsInCautionOrNote || IsTable || IsFigure || Steps != null || MyParent.IsCaution || MyParent.IsNote)); } } private bool RNOsHighHasCheckOff() diff --git a/PROMS/VEPROMS.CSLA.Library/Format/EPFormatFile.cs b/PROMS/VEPROMS.CSLA.Library/Format/EPFormatFile.cs new file mode 100644 index 00000000..0d2253d2 --- /dev/null +++ b/PROMS/VEPROMS.CSLA.Library/Format/EPFormatFile.cs @@ -0,0 +1,412 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel; +using System.Xml; +using System.Linq; +using System.Data.SqlClient; +using System.Data; +using Csla.Data; +using static VEPROMS.CSLA.Library.ROFSTLookup; + +namespace VEPROMS.CSLA.Library +{ + //C2025-023 - Electronic Procedures - Modifications to PROMS + // class to handle storage and access of EPFormatFile and EPFormatFile details + #region EPFormatFiles + [TypeConverter(typeof(vlnListConverter))] + public class EPFormatFiles : vlnFormatList + { + public EPFormatFiles(XmlNodeList xmlNodeList) : base(xmlNodeList) { } + } + #endregion + #region EPFormatFile + public class EPFormatFile : vlnFormatItem + { + #region Constructor + public EPFormatFile(XmlNode xmlNode) : base(xmlNode) { } + public EPFormatFile() : base() { } + #endregion + #region Business Fields + // Name of the EP Viewer Format File + private LazyLoad _Name; + [DisplayName("Name")] + [Description("EP Viewer File Name")] + public string Name + { + get + { + return LazyLoad(ref _Name, "@Name"); + } + } + // Name of the EP Viewer Format File + private LazyLoad _Description; + [DisplayName("Description")] + [Description("EP Viewer Description")] + public string Description + { + get + { + return LazyLoad(ref _Description, "@Description"); + } + } + // Id of Annotation Type Associated with this file + private LazyLoad _AnnotationTypeID; + [DisplayName("AnnotationTypeID")] + [Description("Id of Annotation Type Associated with this file")] + public int? AnnotationTypeID + { + get + { + return LazyLoad(ref _AnnotationTypeID, "@AnnotationTypeID"); + } + } + // returns a list of fields that are defined in the EP format's structure + private EPFields _FieldList; + public EPFields FieldList + { + get + { + XmlDocument xd = GetEPFormatData(Name); + return _FieldList == null ? _FieldList = new EPFields(xd.SelectNodes("/EPFormat/EPField")) : _FieldList; + } + } + #endregion + #region Business Methods + // update all in-use annotation types that have Electronic Procedures + public static void UpdateAllInUseEPAnnotationTypes() + { + foreach (int formatid in GetAllInUseFormats()) + { + PlantFormat frmt = FormatInfo.Get(formatid).PlantFormat; + foreach (EPFormatFile EP in frmt.EPFormatFiles) + { + UpdateAnnotationTypeAsEP((int) EP.AnnotationTypeID); + } + } + } + #endregion + #region Data Access + // static - Load EP Format details - save to db (insert/update) + public static void UpdateEPFormat(string name, string data, string userID) + { + using (SqlConnection cn = Database.VEPROMS_SqlConnection) + { + using (SqlCommand cm = cn.CreateCommand()) + { + cm.CommandType = CommandType.StoredProcedure; + cm.CommandText = "vesp_UpdateEPFormat"; + cm.Parameters.AddWithValue("@name", name); + cm.Parameters.AddWithValue("@data", data); + cm.Parameters.AddWithValue("@userID", userID); + cm.CommandTimeout = Database.DefaultTimeout; + cm.ExecuteNonQuery(); + } + } + } + + // load data for getting fieldlist for this EPFormat + public static XmlDocument GetEPFormatData(string name) + { + name = name.Replace(".xml", ""); + + using (SqlConnection cn = Database.VEPROMS_SqlConnection) + { + using (SqlCommand cm = cn.CreateCommand()) + { + cm.CommandType = CommandType.Text; + cm.CommandText = "Select Data FROM EPFormats where Name = @Name"; + cm.Parameters.AddWithValue("@Name", name); + cm.CommandTimeout = Database.DefaultTimeout; + using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) + { + if (dr.Read()) + { + XmlDocument xd = new XmlDocument(); + xd.XmlResolver = null; + xd.LoadXml(dr.GetString("Data")); + return xd; + } + } + } + } + + return null; + } + + // Get all in-use formats + public static List GetAllInUseFormats() + { + using (SqlConnection cn = Database.VEPROMS_SqlConnection) + { + using (SqlCommand cm = cn.CreateCommand()) + { + cm.CommandType = CommandType.Text; + cm.CommandText = @"SELECT Distinct Formats.[FormatID] + FROM + ( + SELECT FormatID FROM Contents + UNION + SELECT FormatID FROM DocVersions + UNION + SELECT FormatID FROM Folders + ) inuse + inner join Formats + on inuse.FormatID = Formats.FormatID"; + cm.CommandTimeout = Database.DefaultTimeout; + + using (DataTable dt = new DataTable()) + { + using (SqlDataAdapter da = new SqlDataAdapter(cm)) + { + da.Fill(dt); + return dt.AsEnumerable().Select(x => x.Field("FormatID")).ToList(); + } + } + + } + } + } + + // update an annotation type as an Electronic Procedure Annotation Type + public static void UpdateAnnotationTypeAsEP(int typeID) + { + using (SqlConnection cn = Database.VEPROMS_SqlConnection) + { + using (SqlCommand cm = cn.CreateCommand()) + { + cm.CommandType = CommandType.Text; + cm.CommandText = @"Update AnnotationTypes + SET IsEPAnnotationType = 1 + WHERE TypeID = @typeID"; + cm.Parameters.AddWithValue("@typeID", typeID); + cm.CommandTimeout = Database.DefaultTimeout; + cm.ExecuteNonQuery(); + } + } + } + + // Returns true if there are any EP Annotation Types + public static bool IsEPAnnotationType() + { + try + { + using (SqlConnection cn = Database.VEPROMS_SqlConnection) + { + using (SqlCommand cm = cn.CreateCommand()) + { + cm.CommandType = CommandType.Text; + cm.CommandText = @"SELECT RESULT = CASE WHEN + EXISTS(SELECT 1 FROM AnnotationTypes where IsEPAnnotationType = 1) + THEN 1 ELSE 0 END"; + cm.CommandTimeout = Database.DefaultTimeout; + using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) + { + if (dr.Read() && dr.GetInt32("RESULT") == 1) + return true; + } + } + } + } + catch + { + // EP Support has not yet been added for this DB + // IsEPAnnotationType does not exist + // need to run PROMS Fixes + // until then will ignore EP code + // instead of crashing for a field not found + } + + return false; + } + #endregion + } + + public class EPFields : vlnFormatList + { + public EPFields() + { + } + + public EPFields(XmlNodeList xmlNodeList) : base(xmlNodeList) { } + } + // EP field class + public class EPField : vlnFormatItem + { + public EPField(XmlNode xmlNode) : base(xmlNode) { } + public EPField() : base() { } + private LazyLoad _name; + public string name + { + get + { + return LazyLoad(ref _name, "@name"); + } + } + private LazyLoad _type; + public string type + { + get + { + return LazyLoad(ref _type, "@type"); + } + } + private LazyLoad _label; + public string label + { + get + { + string tmp = LazyLoad(ref _label, "@label"); + + if (string.IsNullOrEmpty(tmp)) + return LazyLoad(ref _name, "@name"); + else + return tmp; + } + } + private LazyLoad _text; + public string text + { + get + { + return LazyLoad(ref _text, "@text"); + } + } + //roid of group item that individual sub-items will be the choices for the list/combobox for ROSINGLE and ROMULTI + private LazyLoad _rosource; + public string rosource + { + get + { + return LazyLoad(ref _rosource, "@rosource"); + } + } + //the columns in the RO that will be included in the exports + private LazyLoad _returncols; + public List returncols() + { + try + { + string tmp = LazyLoad(ref _returncols, "@returncols"); + + if (string.IsNullOrEmpty(tmp)) + return new List(); + else + return tmp.Split(',').Select(p => p.Trim()).ToList(); + } + catch + { + throw new ArgumentException($"Error in returncols for EP file: {((EPFormatFile)MyParentFormat).Name}.xml, field: {name}"); + } + } + + //number of lines for a multi-line text box to span + private LazyLoad _numlines; + public int numlines + { + get + { + int? tmp = LazyLoad(ref _numlines, "@numlines"); + + if (tmp == null) + return 1; + + return (int) tmp; + } + } + //step types that the EPForma Item is valid for (as a list of types) + private LazyLoad _validforsteptypes; + public List validforsteptypes() + { + try + { + string tmp = LazyLoad(ref _validforsteptypes, "@validforsteptypes"); + return tmp.Split(',').Select(p => p.Trim()).ToList(); + } + catch + { + throw new ArgumentException($"Error in validforsteptypes for EP file: {((EPFormatFile) MyParentFormat).Name}.xml, field: {name}"); + } + } + public bool IsValidForStepType(string StepType) + { + List tmp = validforsteptypes(); + return tmp.Contains(StepType); + } + + //return a list of items based on the ROsource specified in the EPFormat File + //will return all RO items under the Group that's roid = the rosource + public List getROList(AnnotationInfo currAnn, bool includeblank) + { + if (string.IsNullOrEmpty(rosource)) + return new List(); + + try + { + DocVersionInfo MyDocVersion = currAnn.MyItem.MyDocVersion; + ROFSTLookup lookup = MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(MyDocVersion); + + string roid = FormatRoidKey(rosource, false); + rochild[] children = lookup.GetRoChildrenByRoid(roid); + + List mylist = children.Select(x => new ROListItem(x.title, x.roid.Substring(0, 12))).ToList(); + if (includeblank) + mylist.Insert(0, new ROListItem("", "")); + + return mylist; + } + catch (Exception Ex) + { + throw new ArgumentException($"Error in rosource for EP file: {((EPFormatFile)MyParentFormat).Name}.xml, field: {name}"); + } + } + + + //return a list of values for the specified ROID + //given the EP items return columns + //will return all RO items under the Group that's roid = the rosource + public List getROValuesList(AnnotationInfo currAnn, string roid) + { + if (string.IsNullOrEmpty(roid)) + return new List(); + + List values = new List(); + DocVersionInfo MyDocVersion = currAnn.MyItem.MyDocVersion; + ROFSTLookup lookup = MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(MyDocVersion); + rochild ro = lookup.GetRoChild(roid); + + List rtncols = returncols(); + + if (rtncols.Count == 0) + { + values.Add(ro.value); + } + else + { + foreach (string rcol in rtncols) + { + rochild ro_indiv = Array.Find(ro.children, x => x.appid.EndsWith($".{rcol}")); + if (ro_indiv.value != null) values.Add(ro_indiv.value); + } + } + + return values; + + } + } + #endregion + //C2025-023 - Electronic Procedures - Modifications to PROMS + // class to handle return of RO Lists + #region EPFormatFiles + public class ROListItem + { + public string Text { get; private set; } + public string Value { get; private set; } + public ROListItem(string _text, string _value) + { + Text = _text; Value = _value; + } + } + #endregion +} + diff --git a/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs b/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs index 8232a8d6..6703b87c 100644 --- a/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs +++ b/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs @@ -192,6 +192,18 @@ namespace VEPROMS.CSLA.Library } return (retlist); } + + //C2025-023 - Electronic Procedures - Modifications to PROMS + // EPFormatFiles contains which Electronic Procedure Format files apply to this main format file. + private EPFormatFiles _EPFormatFiles; + public EPFormatFiles EPFormatFiles + { + get + { + if (_EPFormatFiles == null) _EPFormatFiles = new EPFormatFiles(XmlDoc.SelectNodes("/PlantFormat/EPFormatFiles/EPFormatFile")); + return _EPFormatFiles; + } + } } #endregion #region VE_Font diff --git a/PROMS/VEPROMS.CSLA.Library/Format/vlnFormat.cs b/PROMS/VEPROMS.CSLA.Library/Format/vlnFormat.cs index 312582e8..c7676e27 100644 --- a/PROMS/VEPROMS.CSLA.Library/Format/vlnFormat.cs +++ b/PROMS/VEPROMS.CSLA.Library/Format/vlnFormat.cs @@ -57,6 +57,8 @@ namespace VEPROMS.CSLA.Library XmlNode xn = xmlNode.SelectSingleNode(path); if (xmlNode.Name == "Box") return xn; // if box, don't do inheritance. if (xmlNode.Name == "DocStyle") return xn; + //C2025-023 - Electronic Procedures - Modifications to PROMS + if (xmlNode.Name == "EPField") return xn; // if Electronic Procedure Field, don't do inheritance. if (xmlNode.Name == "StructureStyle") { Volian.Base.Library.DebugText.WriteLine("vlnFormatDocument:LookupSingleNode:StructureStyle - shouldn't get to this line of code.\r\nPath = {0}", path); diff --git a/PROMS/VEPROMS.CSLA.Library/Generated/AnnotationType.cs b/PROMS/VEPROMS.CSLA.Library/Generated/AnnotationType.cs index d586f302..913453ef 100644 --- a/PROMS/VEPROMS.CSLA.Library/Generated/AnnotationType.cs +++ b/PROMS/VEPROMS.CSLA.Library/Generated/AnnotationType.cs @@ -18,6 +18,8 @@ using System.IO; using System.ComponentModel; using System.Collections.Generic; using Csla.Validation; +using System.Linq; + namespace VEPROMS.CSLA.Library { /// @@ -207,6 +209,27 @@ namespace VEPROMS.CSLA.Library } } } + + //C2025-023 - Electronic Procedures - Modifications to PROMS + // Is Annotation Type an EP Annotation? + private bool _IsEPAnnotationType = false; + public bool IsEPAnnotationType + { + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] + get + { + return _IsEPAnnotationType; + } + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] + set + { + if (_IsEPAnnotationType != value) + { + _IsEPAnnotationType = value; + PropertyHasChanged(); + } + } + } private byte[] _LastChanged = new byte[8];//timestamp private int _AnnotationTypeAnnotationCount = 0; /// @@ -712,6 +735,8 @@ namespace VEPROMS.CSLA.Library _UserID = dr.GetString("UserID"); dr.GetBytes("LastChanged", 0, _LastChanged, 0, 8); _AnnotationTypeAnnotationCount = dr.GetInt32("AnnotationCount"); + if (dr.GetSchemaTable().Rows.OfType().Any(row => row["ColumnName"].ToString() == "IsEPAnnotationType")) + _IsEPAnnotationType = (bool)dr.GetValue("IsEPAnnotationType"); MarkOld(); } catch (Exception ex) diff --git a/PROMS/VEPROMS.CSLA.Library/Generated/AnnotationTypeInfo.cs b/PROMS/VEPROMS.CSLA.Library/Generated/AnnotationTypeInfo.cs index a82473e1..9aeb05cc 100644 --- a/PROMS/VEPROMS.CSLA.Library/Generated/AnnotationTypeInfo.cs +++ b/PROMS/VEPROMS.CSLA.Library/Generated/AnnotationTypeInfo.cs @@ -17,6 +17,8 @@ using System.Configuration; using System.IO; using System.ComponentModel; using System.Collections.Generic; +using System.Linq; + namespace VEPROMS.CSLA.Library { public delegate void AnnotationTypeInfoEvent(object sender); @@ -135,6 +137,19 @@ namespace VEPROMS.CSLA.Library return _UserID; } } + + //C2025-023 - Electronic Procedures - Modifications to PROMS + // Is Annotation Type an EP Annotation? + private bool _IsEPAnnotationType = false; + public bool IsEPAnnotationType + { + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] + get + { + return _IsEPAnnotationType; + } + } + private int _AnnotationTypeAnnotationCount = 0; /// /// Count of AnnotationTypeAnnotations for this AnnotationType @@ -312,6 +327,8 @@ namespace VEPROMS.CSLA.Library _DTS = dr.GetDateTime("DTS"); _UserID = dr.GetString("UserID"); _AnnotationTypeAnnotationCount = dr.GetInt32("AnnotationCount"); + if (dr.GetSchemaTable().Rows.OfType().Any(row => row["ColumnName"].ToString() == "IsEPAnnotationType")) + _IsEPAnnotationType = (bool)dr.GetValue("IsEPAnnotationType"); } catch (Exception ex) { diff --git a/PROMS/VEPROMS.CSLA.Library/VEPROMS.CSLA.Library.csproj b/PROMS/VEPROMS.CSLA.Library/VEPROMS.CSLA.Library.csproj index 469a09b4..3af1e207 100644 --- a/PROMS/VEPROMS.CSLA.Library/VEPROMS.CSLA.Library.csproj +++ b/PROMS/VEPROMS.CSLA.Library/VEPROMS.CSLA.Library.csproj @@ -98,6 +98,7 @@ + @@ -107,6 +108,7 @@ Properties\Settings.Designer.cs + @@ -164,6 +166,7 @@ + diff --git a/PROMS/Volian.Controls.Library/AnnotationDetails.Designer.cs b/PROMS/Volian.Controls.Library/AnnotationDetails.Designer.cs index b7cee59f..19adb53a 100644 --- a/PROMS/Volian.Controls.Library/AnnotationDetails.Designer.cs +++ b/PROMS/Volian.Controls.Library/AnnotationDetails.Designer.cs @@ -28,326 +28,341 @@ namespace Volian.Controls.Library /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); - this.superTooltip1 = new DevComponents.DotNetBar.SuperTooltip(); - this.rtxbComment = new System.Windows.Forms.RichTextBox(); - this.btnSaveAnnotation = new DevComponents.DotNetBar.ButtonX(); - this.btnCancelAnnoation = new DevComponents.DotNetBar.ButtonX(); - this.cbGridAnnoType = new DevComponents.DotNetBar.Controls.ComboBoxEx(); - this.btnRemoveAnnotation = new DevComponents.DotNetBar.ButtonX(); - this.btnAddAnnotation = new DevComponents.DotNetBar.ButtonX(); - this.pannelAnnoEdit = new DevComponents.DotNetBar.PanelEx(); - this.labelX1 = new DevComponents.DotNetBar.LabelX(); - this.panelAnnoEditBtns = new DevComponents.DotNetBar.PanelEx(); - this.expandableSplitter4 = new DevComponents.DotNetBar.ExpandableSplitter(); - this.pannelAnnoGrid = new DevComponents.DotNetBar.PanelEx(); - this.dgAnnotations = new DevComponents.DotNetBar.Controls.DataGridViewX(); - this.myAnnotationTypeDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dTSDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.userIDDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.searchTextDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.itemAnnotationsBindingSource = new System.Windows.Forms.BindingSource(this.components); - this.pannelAnnoEdit.SuspendLayout(); - this.panelAnnoEditBtns.SuspendLayout(); - this.pannelAnnoGrid.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.dgAnnotations)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.itemAnnotationsBindingSource)).BeginInit(); - this.SuspendLayout(); - // - // superTooltip1 - // - this.superTooltip1.DefaultTooltipSettings = new DevComponents.DotNetBar.SuperTooltipInfo("", "", "", null, null, DevComponents.DotNetBar.eTooltipColor.Gray); - this.superTooltip1.LicenseKey = "F962CEC7-CD8F-4911-A9E9-CAB39962FC1F"; - // - // rtxbComment - // - this.rtxbComment.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + this.superTooltip1 = new DevComponents.DotNetBar.SuperTooltip(); + this.rtxbComment = new System.Windows.Forms.RichTextBox(); + this.btnSaveAnnotation = new DevComponents.DotNetBar.ButtonX(); + this.btnCancelAnnoation = new DevComponents.DotNetBar.ButtonX(); + this.cbGridAnnoType = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.btnRemoveAnnotation = new DevComponents.DotNetBar.ButtonX(); + this.btnAddAnnotation = new DevComponents.DotNetBar.ButtonX(); + this.btnEPAnnotation = new DevComponents.DotNetBar.ButtonX(); + this.pannelAnnoEdit = new DevComponents.DotNetBar.PanelEx(); + this.labelX1 = new DevComponents.DotNetBar.LabelX(); + this.panelAnnoEditBtns = new DevComponents.DotNetBar.PanelEx(); + this.expandableSplitter4 = new DevComponents.DotNetBar.ExpandableSplitter(); + this.pannelAnnoGrid = new DevComponents.DotNetBar.PanelEx(); + this.dgAnnotations = new DevComponents.DotNetBar.Controls.DataGridViewX(); + this.myAnnotationTypeDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dTSDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.userIDDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.searchTextDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.itemAnnotationsBindingSource = new System.Windows.Forms.BindingSource(this.components); + this.pannelAnnoEdit.SuspendLayout(); + this.panelAnnoEditBtns.SuspendLayout(); + this.pannelAnnoGrid.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgAnnotations)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.itemAnnotationsBindingSource)).BeginInit(); + this.SuspendLayout(); + // + // superTooltip1 + // + this.superTooltip1.DefaultTooltipSettings = new DevComponents.DotNetBar.SuperTooltipInfo("", "", "", null, null, DevComponents.DotNetBar.eTooltipColor.Gray); + this.superTooltip1.LicenseKey = "F962CEC7-CD8F-4911-A9E9-CAB39962FC1F"; + // + // rtxbComment + // + this.rtxbComment.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.rtxbComment.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(128))))); - this.rtxbComment.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.rtxbComment.Location = new System.Drawing.Point(87, 33); - this.rtxbComment.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.rtxbComment.Name = "rtxbComment"; - this.rtxbComment.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; - this.rtxbComment.Size = new System.Drawing.Size(489, 291); - this.superTooltip1.SetSuperTooltip(this.rtxbComment, new DevComponents.DotNetBar.SuperTooltipInfo("Annotation", "", "Enter the annotation information here.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); - this.rtxbComment.TabIndex = 1; - this.rtxbComment.Text = ""; - this.rtxbComment.TextChanged += new System.EventHandler(this.rtxbComment_TextChanged); - // - // btnSaveAnnotation - // - this.btnSaveAnnotation.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; - this.btnSaveAnnotation.Enabled = false; - this.btnSaveAnnotation.Location = new System.Drawing.Point(491, 4); - this.btnSaveAnnotation.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.btnSaveAnnotation.Name = "btnSaveAnnotation"; - this.btnSaveAnnotation.Size = new System.Drawing.Size(71, 25); - this.superTooltip1.SetSuperTooltip(this.btnSaveAnnotation, new DevComponents.DotNetBar.SuperTooltipInfo("Save Changes", "", "This will save the new annotation or changes made to an existing annotation.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); - this.btnSaveAnnotation.TabIndex = 9; - this.btnSaveAnnotation.Text = "Save"; - this.btnSaveAnnotation.Click += new System.EventHandler(this.btnSaveAnnotation_Click); - // - // btnCancelAnnoation - // - this.btnCancelAnnoation.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; - this.btnCancelAnnoation.Enabled = false; - this.btnCancelAnnoation.Location = new System.Drawing.Point(401, 4); - this.btnCancelAnnoation.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.btnCancelAnnoation.Name = "btnCancelAnnoation"; - this.btnCancelAnnoation.Size = new System.Drawing.Size(69, 25); - this.superTooltip1.SetSuperTooltip(this.btnCancelAnnoation, new DevComponents.DotNetBar.SuperTooltipInfo("Cancel", "", "This will cancel the changes made to the annotation text and type selection", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(145, 100))); - this.btnCancelAnnoation.TabIndex = 8; - this.btnCancelAnnoation.Text = "Cancel"; - this.btnCancelAnnoation.Click += new System.EventHandler(this.btnCancelAnnoation_Click); - // - // cbGridAnnoType - // - this.cbGridAnnoType.DisplayMember = "Text"; - this.cbGridAnnoType.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; - this.cbGridAnnoType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cbGridAnnoType.FlatStyle = System.Windows.Forms.FlatStyle.Standard; - this.cbGridAnnoType.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.cbGridAnnoType.ForeColor = System.Drawing.SystemColors.WindowText; - this.cbGridAnnoType.ItemHeight = 17; - this.cbGridAnnoType.Location = new System.Drawing.Point(133, 4); - this.cbGridAnnoType.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.cbGridAnnoType.Name = "cbGridAnnoType"; - this.cbGridAnnoType.PreventEnterBeep = true; - this.cbGridAnnoType.Size = new System.Drawing.Size(244, 23); - this.superTooltip1.SetSuperTooltip(this.cbGridAnnoType, new DevComponents.DotNetBar.SuperTooltipInfo("Select Annotation Type", "", "This drop down list contains the possible annotation types.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); - this.cbGridAnnoType.TabIndex = 7; - this.cbGridAnnoType.WatermarkBehavior = DevComponents.DotNetBar.eWatermarkBehavior.HideNonEmpty; - this.cbGridAnnoType.WatermarkText = "Select Annotation Type"; - this.cbGridAnnoType.SelectedValueChanged += new System.EventHandler(this.cbGridAnnoType_SelectedValueChanged); - // - // btnRemoveAnnotation - // - this.btnRemoveAnnotation.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; - this.btnRemoveAnnotation.Location = new System.Drawing.Point(5, 34); - this.btnRemoveAnnotation.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.btnRemoveAnnotation.Name = "btnRemoveAnnotation"; - this.btnRemoveAnnotation.Size = new System.Drawing.Size(71, 25); - this.superTooltip1.SetSuperTooltip(this.btnRemoveAnnotation, new DevComponents.DotNetBar.SuperTooltipInfo("Remove Annotation", "", "This will remove the currently selected annotation.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); - this.btnRemoveAnnotation.TabIndex = 4; - this.btnRemoveAnnotation.Text = "Remove"; - this.btnRemoveAnnotation.Click += new System.EventHandler(this.btnRemoveAnnotation_Click); - // - // btnAddAnnotation - // - this.btnAddAnnotation.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; - this.btnAddAnnotation.Location = new System.Drawing.Point(5, 4); - this.btnAddAnnotation.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.btnAddAnnotation.Name = "btnAddAnnotation"; - this.btnAddAnnotation.Size = new System.Drawing.Size(71, 25); - this.superTooltip1.SetSuperTooltip(this.btnAddAnnotation, new DevComponents.DotNetBar.SuperTooltipInfo("Add New Annotation", "", "This button will create a new annotation.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); - this.btnAddAnnotation.TabIndex = 3; - this.btnAddAnnotation.Text = "Add"; - this.btnAddAnnotation.Click += new System.EventHandler(this.btnAddAnnotation_Click); - // - // pannelAnnoEdit - // - this.pannelAnnoEdit.CanvasColor = System.Drawing.SystemColors.Control; - this.pannelAnnoEdit.Controls.Add(this.rtxbComment); - this.pannelAnnoEdit.Controls.Add(this.btnSaveAnnotation); - this.pannelAnnoEdit.Controls.Add(this.btnCancelAnnoation); - this.pannelAnnoEdit.Controls.Add(this.labelX1); - this.pannelAnnoEdit.Controls.Add(this.cbGridAnnoType); - this.pannelAnnoEdit.Controls.Add(this.panelAnnoEditBtns); - this.pannelAnnoEdit.DisabledBackColor = System.Drawing.Color.Empty; - this.pannelAnnoEdit.Dock = System.Windows.Forms.DockStyle.Fill; - this.pannelAnnoEdit.Location = new System.Drawing.Point(548, 0); - this.pannelAnnoEdit.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.pannelAnnoEdit.Name = "pannelAnnoEdit"; - this.pannelAnnoEdit.Size = new System.Drawing.Size(576, 325); - this.pannelAnnoEdit.Style.Alignment = System.Drawing.StringAlignment.Center; - this.pannelAnnoEdit.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; - this.pannelAnnoEdit.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; - this.pannelAnnoEdit.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; - this.pannelAnnoEdit.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; - this.pannelAnnoEdit.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; - this.pannelAnnoEdit.Style.GradientAngle = 90; - this.pannelAnnoEdit.TabIndex = 16; - this.pannelAnnoEdit.Text = "panelEx2"; - this.pannelAnnoEdit.ThemeAware = true; - // - // labelX1 - // - this.labelX1.AutoSize = true; - // - // - // - this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.labelX1.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelX1.Location = new System.Drawing.Point(93, 7); - this.labelX1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.labelX1.Name = "labelX1"; - this.labelX1.Size = new System.Drawing.Size(35, 17); - this.labelX1.TabIndex = 10; - this.labelX1.Text = "Type:"; - // - // panelAnnoEditBtns - // - this.panelAnnoEditBtns.CanvasColor = System.Drawing.SystemColors.Control; - this.panelAnnoEditBtns.Controls.Add(this.btnRemoveAnnotation); - this.panelAnnoEditBtns.Controls.Add(this.btnAddAnnotation); - this.panelAnnoEditBtns.DisabledBackColor = System.Drawing.Color.Empty; - this.panelAnnoEditBtns.Dock = System.Windows.Forms.DockStyle.Left; - this.panelAnnoEditBtns.Location = new System.Drawing.Point(0, 0); - this.panelAnnoEditBtns.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.panelAnnoEditBtns.Name = "panelAnnoEditBtns"; - this.panelAnnoEditBtns.Size = new System.Drawing.Size(87, 325); - this.panelAnnoEditBtns.Style.Alignment = System.Drawing.StringAlignment.Center; - this.panelAnnoEditBtns.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; - this.panelAnnoEditBtns.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; - this.panelAnnoEditBtns.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; - this.panelAnnoEditBtns.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; - this.panelAnnoEditBtns.Style.GradientAngle = 90; - this.panelAnnoEditBtns.TabIndex = 11; - this.panelAnnoEditBtns.ThemeAware = true; - // - // expandableSplitter4 - // - this.expandableSplitter4.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(147)))), ((int)(((byte)(207))))); - this.expandableSplitter4.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; - this.expandableSplitter4.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; - this.expandableSplitter4.ExpandFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(147)))), ((int)(((byte)(207))))); - this.expandableSplitter4.ExpandFillColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; - this.expandableSplitter4.ExpandLineColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); - this.expandableSplitter4.ExpandLineColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText; - this.expandableSplitter4.GripDarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); - this.expandableSplitter4.GripDarkColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText; - this.expandableSplitter4.GripLightColor = System.Drawing.Color.FromArgb(((int)(((byte)(227)))), ((int)(((byte)(239)))), ((int)(((byte)(255))))); - this.expandableSplitter4.GripLightColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground; - this.expandableSplitter4.HotBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(151)))), ((int)(((byte)(61))))); - this.expandableSplitter4.HotBackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(184)))), ((int)(((byte)(94))))); - this.expandableSplitter4.HotBackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemPressedBackground2; - this.expandableSplitter4.HotBackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemPressedBackground; - this.expandableSplitter4.HotExpandFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(147)))), ((int)(((byte)(207))))); - this.expandableSplitter4.HotExpandFillColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; - this.expandableSplitter4.HotExpandLineColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); - this.expandableSplitter4.HotExpandLineColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText; - this.expandableSplitter4.HotGripDarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(147)))), ((int)(((byte)(207))))); - this.expandableSplitter4.HotGripDarkColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; - this.expandableSplitter4.HotGripLightColor = System.Drawing.Color.FromArgb(((int)(((byte)(227)))), ((int)(((byte)(239)))), ((int)(((byte)(255))))); - this.expandableSplitter4.HotGripLightColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground; - this.expandableSplitter4.Location = new System.Drawing.Point(545, 0); - this.expandableSplitter4.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.expandableSplitter4.Name = "expandableSplitter4"; - this.expandableSplitter4.Size = new System.Drawing.Size(3, 325); - this.expandableSplitter4.Style = DevComponents.DotNetBar.eSplitterStyle.Office2007; - this.expandableSplitter4.TabIndex = 15; - this.expandableSplitter4.TabStop = false; - // - // pannelAnnoGrid - // - this.pannelAnnoGrid.CanvasColor = System.Drawing.SystemColors.Control; - this.pannelAnnoGrid.Controls.Add(this.dgAnnotations); - this.pannelAnnoGrid.DisabledBackColor = System.Drawing.Color.Empty; - this.pannelAnnoGrid.Dock = System.Windows.Forms.DockStyle.Left; - this.pannelAnnoGrid.Location = new System.Drawing.Point(0, 0); - this.pannelAnnoGrid.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.pannelAnnoGrid.Name = "pannelAnnoGrid"; - this.pannelAnnoGrid.Size = new System.Drawing.Size(545, 325); - this.pannelAnnoGrid.Style.Alignment = System.Drawing.StringAlignment.Center; - this.pannelAnnoGrid.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; - this.pannelAnnoGrid.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; - this.pannelAnnoGrid.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; - this.pannelAnnoGrid.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; - this.pannelAnnoGrid.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; - this.pannelAnnoGrid.Style.GradientAngle = 90; - this.pannelAnnoGrid.TabIndex = 14; - this.pannelAnnoGrid.Text = "panelEx2"; - this.pannelAnnoGrid.ThemeAware = true; - // - // dgAnnotations - // - this.dgAnnotations.AutoGenerateColumns = false; - this.dgAnnotations.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; - this.dgAnnotations.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; - this.dgAnnotations.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.dgAnnotations.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.rtxbComment.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(128))))); + this.rtxbComment.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.rtxbComment.Location = new System.Drawing.Point(65, 27); + this.rtxbComment.Margin = new System.Windows.Forms.Padding(2); + this.rtxbComment.Name = "rtxbComment"; + this.rtxbComment.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; + this.rtxbComment.Size = new System.Drawing.Size(368, 237); + this.superTooltip1.SetSuperTooltip(this.rtxbComment, new DevComponents.DotNetBar.SuperTooltipInfo("Annotation", "", "Enter the annotation information here.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); + this.rtxbComment.TabIndex = 1; + this.rtxbComment.Text = ""; + this.rtxbComment.TextChanged += new System.EventHandler(this.rtxbComment_TextChanged); + // + // btnSaveAnnotation + // + this.btnSaveAnnotation.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnSaveAnnotation.Enabled = false; + this.btnSaveAnnotation.Location = new System.Drawing.Point(368, 3); + this.btnSaveAnnotation.Margin = new System.Windows.Forms.Padding(2); + this.btnSaveAnnotation.Name = "btnSaveAnnotation"; + this.btnSaveAnnotation.Size = new System.Drawing.Size(53, 20); + this.superTooltip1.SetSuperTooltip(this.btnSaveAnnotation, new DevComponents.DotNetBar.SuperTooltipInfo("Save Changes", "", "This will save the new annotation or changes made to an existing annotation.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); + this.btnSaveAnnotation.TabIndex = 9; + this.btnSaveAnnotation.Text = "Save"; + this.btnSaveAnnotation.Click += new System.EventHandler(this.btnSaveAnnotation_Click); + // + // btnCancelAnnoation + // + this.btnCancelAnnoation.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnCancelAnnoation.Enabled = false; + this.btnCancelAnnoation.Location = new System.Drawing.Point(301, 3); + this.btnCancelAnnoation.Margin = new System.Windows.Forms.Padding(2); + this.btnCancelAnnoation.Name = "btnCancelAnnoation"; + this.btnCancelAnnoation.Size = new System.Drawing.Size(52, 20); + this.superTooltip1.SetSuperTooltip(this.btnCancelAnnoation, new DevComponents.DotNetBar.SuperTooltipInfo("Cancel", "", "This will cancel the changes made to the annotation text and type selection", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(145, 100))); + this.btnCancelAnnoation.TabIndex = 8; + this.btnCancelAnnoation.Text = "Cancel"; + this.btnCancelAnnoation.Click += new System.EventHandler(this.btnCancelAnnoation_Click); + // + // cbGridAnnoType + // + this.cbGridAnnoType.DisplayMember = "Text"; + this.cbGridAnnoType.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cbGridAnnoType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbGridAnnoType.FlatStyle = System.Windows.Forms.FlatStyle.Standard; + this.cbGridAnnoType.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.cbGridAnnoType.ForeColor = System.Drawing.SystemColors.WindowText; + this.cbGridAnnoType.ItemHeight = 17; + this.cbGridAnnoType.Location = new System.Drawing.Point(100, 3); + this.cbGridAnnoType.Margin = new System.Windows.Forms.Padding(2); + this.cbGridAnnoType.Name = "cbGridAnnoType"; + this.cbGridAnnoType.PreventEnterBeep = true; + this.cbGridAnnoType.Size = new System.Drawing.Size(184, 23); + this.superTooltip1.SetSuperTooltip(this.cbGridAnnoType, new DevComponents.DotNetBar.SuperTooltipInfo("Select Annotation Type", "", "This drop down list contains the possible annotation types.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); + this.cbGridAnnoType.TabIndex = 7; + this.cbGridAnnoType.WatermarkBehavior = DevComponents.DotNetBar.eWatermarkBehavior.HideNonEmpty; + this.cbGridAnnoType.WatermarkText = "Select Annotation Type"; + this.cbGridAnnoType.SelectedValueChanged += new System.EventHandler(this.cbGridAnnoType_SelectedValueChanged); + // + // btnRemoveAnnotation + // + this.btnRemoveAnnotation.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnRemoveAnnotation.Location = new System.Drawing.Point(4, 28); + this.btnRemoveAnnotation.Margin = new System.Windows.Forms.Padding(2); + this.btnRemoveAnnotation.Name = "btnRemoveAnnotation"; + this.btnRemoveAnnotation.Size = new System.Drawing.Size(53, 20); + this.superTooltip1.SetSuperTooltip(this.btnRemoveAnnotation, new DevComponents.DotNetBar.SuperTooltipInfo("Remove Annotation", "", "This will remove the currently selected annotation.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); + this.btnRemoveAnnotation.TabIndex = 4; + this.btnRemoveAnnotation.Text = "Remove"; + this.btnRemoveAnnotation.Click += new System.EventHandler(this.btnRemoveAnnotation_Click); + // + // btnAddAnnotation + // + this.btnAddAnnotation.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnAddAnnotation.Location = new System.Drawing.Point(4, 3); + this.btnAddAnnotation.Margin = new System.Windows.Forms.Padding(2); + this.btnAddAnnotation.Name = "btnAddAnnotation"; + this.btnAddAnnotation.Size = new System.Drawing.Size(53, 20); + this.superTooltip1.SetSuperTooltip(this.btnAddAnnotation, new DevComponents.DotNetBar.SuperTooltipInfo("Add New Annotation", "", "This button will create a new annotation.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); + this.btnAddAnnotation.TabIndex = 3; + this.btnAddAnnotation.Text = "Add"; + this.btnAddAnnotation.Click += new System.EventHandler(this.btnAddAnnotation_Click); + // + // btnEPAnnotation + // + this.btnEPAnnotation.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnEPAnnotation.Location = new System.Drawing.Point(4, 52); + this.btnEPAnnotation.Margin = new System.Windows.Forms.Padding(2); + this.btnEPAnnotation.Name = "btnEPAnnotation"; + this.btnEPAnnotation.Size = new System.Drawing.Size(53, 20); + this.superTooltip1.SetSuperTooltip(this.btnEPAnnotation, new DevComponents.DotNetBar.SuperTooltipInfo("Open Annotation", "", "This will open Electronic Procedure Details for this Annotation.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); + this.btnEPAnnotation.TabIndex = 5; + this.btnEPAnnotation.Text = "Open"; + this.btnEPAnnotation.Visible = false; + this.btnEPAnnotation.Click += new System.EventHandler(this.btnEPAnnotation_Click); + // + // pannelAnnoEdit + // + this.pannelAnnoEdit.CanvasColor = System.Drawing.SystemColors.Control; + this.pannelAnnoEdit.Controls.Add(this.rtxbComment); + this.pannelAnnoEdit.Controls.Add(this.btnSaveAnnotation); + this.pannelAnnoEdit.Controls.Add(this.btnCancelAnnoation); + this.pannelAnnoEdit.Controls.Add(this.labelX1); + this.pannelAnnoEdit.Controls.Add(this.cbGridAnnoType); + this.pannelAnnoEdit.Controls.Add(this.panelAnnoEditBtns); + this.pannelAnnoEdit.DisabledBackColor = System.Drawing.Color.Empty; + this.pannelAnnoEdit.Dock = System.Windows.Forms.DockStyle.Fill; + this.pannelAnnoEdit.Location = new System.Drawing.Point(411, 0); + this.pannelAnnoEdit.Margin = new System.Windows.Forms.Padding(2); + this.pannelAnnoEdit.Name = "pannelAnnoEdit"; + this.pannelAnnoEdit.Size = new System.Drawing.Size(432, 264); + this.pannelAnnoEdit.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pannelAnnoEdit.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.pannelAnnoEdit.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.pannelAnnoEdit.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pannelAnnoEdit.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pannelAnnoEdit.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.pannelAnnoEdit.Style.GradientAngle = 90; + this.pannelAnnoEdit.TabIndex = 16; + this.pannelAnnoEdit.Text = "panelEx2"; + this.pannelAnnoEdit.ThemeAware = true; + // + // labelX1 + // + this.labelX1.AutoSize = true; + // + // + // + this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX1.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelX1.Location = new System.Drawing.Point(70, 6); + this.labelX1.Margin = new System.Windows.Forms.Padding(2); + this.labelX1.Name = "labelX1"; + this.labelX1.Size = new System.Drawing.Size(29, 14); + this.labelX1.TabIndex = 10; + this.labelX1.Text = "Type:"; + // + // panelAnnoEditBtns + // + this.panelAnnoEditBtns.CanvasColor = System.Drawing.SystemColors.Control; + this.panelAnnoEditBtns.Controls.Add(this.btnEPAnnotation); + this.panelAnnoEditBtns.Controls.Add(this.btnRemoveAnnotation); + this.panelAnnoEditBtns.Controls.Add(this.btnAddAnnotation); + this.panelAnnoEditBtns.DisabledBackColor = System.Drawing.Color.Empty; + this.panelAnnoEditBtns.Dock = System.Windows.Forms.DockStyle.Left; + this.panelAnnoEditBtns.Location = new System.Drawing.Point(0, 0); + this.panelAnnoEditBtns.Margin = new System.Windows.Forms.Padding(2); + this.panelAnnoEditBtns.Name = "panelAnnoEditBtns"; + this.panelAnnoEditBtns.Size = new System.Drawing.Size(65, 264); + this.panelAnnoEditBtns.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelAnnoEditBtns.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.panelAnnoEditBtns.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.panelAnnoEditBtns.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.panelAnnoEditBtns.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelAnnoEditBtns.Style.GradientAngle = 90; + this.panelAnnoEditBtns.TabIndex = 11; + this.panelAnnoEditBtns.ThemeAware = true; + // + // expandableSplitter4 + // + this.expandableSplitter4.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(147)))), ((int)(((byte)(207))))); + this.expandableSplitter4.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.expandableSplitter4.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.expandableSplitter4.ExpandFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(147)))), ((int)(((byte)(207))))); + this.expandableSplitter4.ExpandFillColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.expandableSplitter4.ExpandLineColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); + this.expandableSplitter4.ExpandLineColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText; + this.expandableSplitter4.GripDarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); + this.expandableSplitter4.GripDarkColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText; + this.expandableSplitter4.GripLightColor = System.Drawing.Color.FromArgb(((int)(((byte)(227)))), ((int)(((byte)(239)))), ((int)(((byte)(255))))); + this.expandableSplitter4.GripLightColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground; + this.expandableSplitter4.HotBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(151)))), ((int)(((byte)(61))))); + this.expandableSplitter4.HotBackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(184)))), ((int)(((byte)(94))))); + this.expandableSplitter4.HotBackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemPressedBackground2; + this.expandableSplitter4.HotBackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemPressedBackground; + this.expandableSplitter4.HotExpandFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(147)))), ((int)(((byte)(207))))); + this.expandableSplitter4.HotExpandFillColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.expandableSplitter4.HotExpandLineColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); + this.expandableSplitter4.HotExpandLineColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText; + this.expandableSplitter4.HotGripDarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(147)))), ((int)(((byte)(207))))); + this.expandableSplitter4.HotGripDarkColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.expandableSplitter4.HotGripLightColor = System.Drawing.Color.FromArgb(((int)(((byte)(227)))), ((int)(((byte)(239)))), ((int)(((byte)(255))))); + this.expandableSplitter4.HotGripLightColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground; + this.expandableSplitter4.Location = new System.Drawing.Point(409, 0); + this.expandableSplitter4.Margin = new System.Windows.Forms.Padding(2); + this.expandableSplitter4.Name = "expandableSplitter4"; + this.expandableSplitter4.Size = new System.Drawing.Size(2, 264); + this.expandableSplitter4.Style = DevComponents.DotNetBar.eSplitterStyle.Office2007; + this.expandableSplitter4.TabIndex = 15; + this.expandableSplitter4.TabStop = false; + // + // pannelAnnoGrid + // + this.pannelAnnoGrid.CanvasColor = System.Drawing.SystemColors.Control; + this.pannelAnnoGrid.Controls.Add(this.dgAnnotations); + this.pannelAnnoGrid.DisabledBackColor = System.Drawing.Color.Empty; + this.pannelAnnoGrid.Dock = System.Windows.Forms.DockStyle.Left; + this.pannelAnnoGrid.Location = new System.Drawing.Point(0, 0); + this.pannelAnnoGrid.Margin = new System.Windows.Forms.Padding(2); + this.pannelAnnoGrid.Name = "pannelAnnoGrid"; + this.pannelAnnoGrid.Size = new System.Drawing.Size(409, 264); + this.pannelAnnoGrid.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pannelAnnoGrid.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.pannelAnnoGrid.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.pannelAnnoGrid.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pannelAnnoGrid.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pannelAnnoGrid.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.pannelAnnoGrid.Style.GradientAngle = 90; + this.pannelAnnoGrid.TabIndex = 14; + this.pannelAnnoGrid.Text = "panelEx2"; + this.pannelAnnoGrid.ThemeAware = true; + // + // dgAnnotations + // + this.dgAnnotations.AutoGenerateColumns = false; + this.dgAnnotations.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; + this.dgAnnotations.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; + this.dgAnnotations.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgAnnotations.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.myAnnotationTypeDataGridViewTextBoxColumn, this.dTSDataGridViewTextBoxColumn, this.userIDDataGridViewTextBoxColumn, this.searchTextDataGridViewTextBoxColumn}); - this.dgAnnotations.DataSource = this.itemAnnotationsBindingSource; - dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.dgAnnotations.DefaultCellStyle = dataGridViewCellStyle2; - this.dgAnnotations.Dock = System.Windows.Forms.DockStyle.Fill; - this.dgAnnotations.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(208)))), ((int)(((byte)(215)))), ((int)(((byte)(229))))); - this.dgAnnotations.HighlightSelectedColumnHeaders = false; - this.dgAnnotations.Location = new System.Drawing.Point(0, 0); - this.dgAnnotations.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.dgAnnotations.MultiSelect = false; - this.dgAnnotations.Name = "dgAnnotations"; - this.dgAnnotations.RowHeadersVisible = false; - this.dgAnnotations.RowTemplate.Height = 24; - this.dgAnnotations.RowTemplate.ReadOnly = true; - this.dgAnnotations.RowTemplate.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dgAnnotations.SelectAllSignVisible = false; - this.dgAnnotations.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.dgAnnotations.Size = new System.Drawing.Size(545, 325); - this.dgAnnotations.TabIndex = 1; - this.dgAnnotations.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgAnnotations_CellClick); - // - // myAnnotationTypeDataGridViewTextBoxColumn - // - this.myAnnotationTypeDataGridViewTextBoxColumn.DataPropertyName = "MyAnnotationType"; - this.myAnnotationTypeDataGridViewTextBoxColumn.HeaderText = "Type"; - this.myAnnotationTypeDataGridViewTextBoxColumn.Name = "myAnnotationTypeDataGridViewTextBoxColumn"; - this.myAnnotationTypeDataGridViewTextBoxColumn.Width = 69; - // - // dTSDataGridViewTextBoxColumn - // - this.dTSDataGridViewTextBoxColumn.DataPropertyName = "DTS"; - this.dTSDataGridViewTextBoxColumn.HeaderText = "Date"; - this.dTSDataGridViewTextBoxColumn.Name = "dTSDataGridViewTextBoxColumn"; - this.dTSDataGridViewTextBoxColumn.Width = 67; - // - // userIDDataGridViewTextBoxColumn - // - this.userIDDataGridViewTextBoxColumn.DataPropertyName = "UserID"; - this.userIDDataGridViewTextBoxColumn.HeaderText = "User"; - this.userIDDataGridViewTextBoxColumn.Name = "userIDDataGridViewTextBoxColumn"; - this.userIDDataGridViewTextBoxColumn.Width = 67; - // - // searchTextDataGridViewTextBoxColumn - // - this.searchTextDataGridViewTextBoxColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.searchTextDataGridViewTextBoxColumn.DataPropertyName = "SearchText"; - this.searchTextDataGridViewTextBoxColumn.HeaderText = "Description"; - this.searchTextDataGridViewTextBoxColumn.Name = "searchTextDataGridViewTextBoxColumn"; - // - // itemAnnotationsBindingSource - // - this.itemAnnotationsBindingSource.DataSource = typeof(VEPROMS.CSLA.Library.ItemAnnotation); - // - // AnnotationDetails - // - this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.pannelAnnoEdit); - this.Controls.Add(this.expandableSplitter4); - this.Controls.Add(this.pannelAnnoGrid); - this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.Name = "AnnotationDetails"; - this.Size = new System.Drawing.Size(1124, 325); - this.pannelAnnoEdit.ResumeLayout(false); - this.pannelAnnoEdit.PerformLayout(); - this.panelAnnoEditBtns.ResumeLayout(false); - this.pannelAnnoGrid.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.dgAnnotations)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.itemAnnotationsBindingSource)).EndInit(); - this.ResumeLayout(false); + this.dgAnnotations.DataSource = this.itemAnnotationsBindingSource; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgAnnotations.DefaultCellStyle = dataGridViewCellStyle1; + this.dgAnnotations.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgAnnotations.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(208)))), ((int)(((byte)(215)))), ((int)(((byte)(229))))); + this.dgAnnotations.HighlightSelectedColumnHeaders = false; + this.dgAnnotations.Location = new System.Drawing.Point(0, 0); + this.dgAnnotations.Margin = new System.Windows.Forms.Padding(2); + this.dgAnnotations.MultiSelect = false; + this.dgAnnotations.Name = "dgAnnotations"; + this.dgAnnotations.RowHeadersVisible = false; + this.dgAnnotations.RowTemplate.Height = 24; + this.dgAnnotations.RowTemplate.ReadOnly = true; + this.dgAnnotations.RowTemplate.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dgAnnotations.SelectAllSignVisible = false; + this.dgAnnotations.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dgAnnotations.Size = new System.Drawing.Size(409, 264); + this.dgAnnotations.TabIndex = 1; + this.dgAnnotations.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgAnnotations_CellClick); + // + // myAnnotationTypeDataGridViewTextBoxColumn + // + this.myAnnotationTypeDataGridViewTextBoxColumn.DataPropertyName = "MyAnnotationType"; + this.myAnnotationTypeDataGridViewTextBoxColumn.HeaderText = "Type"; + this.myAnnotationTypeDataGridViewTextBoxColumn.Name = "myAnnotationTypeDataGridViewTextBoxColumn"; + this.myAnnotationTypeDataGridViewTextBoxColumn.Width = 56; + // + // dTSDataGridViewTextBoxColumn + // + this.dTSDataGridViewTextBoxColumn.DataPropertyName = "DTS"; + this.dTSDataGridViewTextBoxColumn.HeaderText = "Date"; + this.dTSDataGridViewTextBoxColumn.Name = "dTSDataGridViewTextBoxColumn"; + this.dTSDataGridViewTextBoxColumn.Width = 55; + // + // userIDDataGridViewTextBoxColumn + // + this.userIDDataGridViewTextBoxColumn.DataPropertyName = "UserID"; + this.userIDDataGridViewTextBoxColumn.HeaderText = "User"; + this.userIDDataGridViewTextBoxColumn.Name = "userIDDataGridViewTextBoxColumn"; + this.userIDDataGridViewTextBoxColumn.Width = 54; + // + // searchTextDataGridViewTextBoxColumn + // + this.searchTextDataGridViewTextBoxColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.searchTextDataGridViewTextBoxColumn.DataPropertyName = "SearchText"; + this.searchTextDataGridViewTextBoxColumn.HeaderText = "Description"; + this.searchTextDataGridViewTextBoxColumn.Name = "searchTextDataGridViewTextBoxColumn"; + // + // itemAnnotationsBindingSource + // + this.itemAnnotationsBindingSource.DataSource = typeof(VEPROMS.CSLA.Library.ItemAnnotation); + // + // AnnotationDetails + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.pannelAnnoEdit); + this.Controls.Add(this.expandableSplitter4); + this.Controls.Add(this.pannelAnnoGrid); + this.Margin = new System.Windows.Forms.Padding(2); + this.Name = "AnnotationDetails"; + this.Size = new System.Drawing.Size(843, 264); + this.pannelAnnoEdit.ResumeLayout(false); + this.pannelAnnoEdit.PerformLayout(); + this.panelAnnoEditBtns.ResumeLayout(false); + this.pannelAnnoGrid.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgAnnotations)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.itemAnnotationsBindingSource)).EndInit(); + this.ResumeLayout(false); } @@ -371,5 +386,6 @@ namespace Volian.Controls.Library private System.Windows.Forms.DataGridViewTextBoxColumn dTSDataGridViewTextBoxColumn; private System.Windows.Forms.DataGridViewTextBoxColumn userIDDataGridViewTextBoxColumn; private System.Windows.Forms.DataGridViewTextBoxColumn searchTextDataGridViewTextBoxColumn; - } + private DevComponents.DotNetBar.ButtonX btnEPAnnotation; + } } diff --git a/PROMS/Volian.Controls.Library/AnnotationDetails.cs b/PROMS/Volian.Controls.Library/AnnotationDetails.cs index fbd56849..d001d92e 100644 --- a/PROMS/Volian.Controls.Library/AnnotationDetails.cs +++ b/PROMS/Volian.Controls.Library/AnnotationDetails.cs @@ -329,14 +329,22 @@ namespace Volian.Controls.Library AnnotationDirty = true; } - private void dgAnnotations_CellClick(object sender, DataGridViewCellEventArgs e) + //C2025-023 - Electronic Procedures - Modifications to PROMS + // Only show Open button if it is an EPAnnotationType + private void dgAnnotations_CellClick(object sender, DataGridViewCellEventArgs e) { - if (!_LoadingGrid) // Only set the Current Annotation when not loading the grid + btnEPAnnotation.Visible = false; + + if (!_LoadingGrid) // Only set the Current Annotation when not loading the grid { - if ((_Annotations != null) && (dgAnnotations.Rows.Count > 0)) - CurrentAnnotation = _Annotations[dgAnnotations.CurrentRow.Index]; - else - CurrentAnnotation = null; + if ((_Annotations != null) && (dgAnnotations.Rows.Count > 0)) + { + CurrentAnnotation = _Annotations[dgAnnotations.CurrentRow.Index]; + if (CurrentAnnotation.MyAnnotationType.IsEPAnnotationType && CurrentItem.HasEPformat(CurrentAnnotation.MyAnnotationType.TypeID)) + btnEPAnnotation.Visible = true; + } + else + CurrentAnnotation = null; } } @@ -600,6 +608,7 @@ namespace Volian.Controls.Library public void UpdateAnnotationGrid(ItemInfo currentitem) { CurrentItem = currentitem; + btnEPAnnotation.Visible = false; UpdateAnnotationGrid(); } @@ -702,5 +711,12 @@ namespace Volian.Controls.Library } #endregion - } + //C2025-023 - Electronic Procedures - Modifications to PROMS + // Open new Dynamic Form if open button selected + private void btnEPAnnotation_Click(object sender, EventArgs e) + { + frmEPAnnotationDetails EPfrm = new frmEPAnnotationDetails(CurrentAnnotation); + DialogResult dr = EPfrm.ShowDialog(this); + } + } } diff --git a/PROMS/Volian.Controls.Library/DisplayTabControl.cs b/PROMS/Volian.Controls.Library/DisplayTabControl.cs index 5f37d421..4d6dbda8 100644 --- a/PROMS/Volian.Controls.Library/DisplayTabControl.cs +++ b/PROMS/Volian.Controls.Library/DisplayTabControl.cs @@ -10,6 +10,7 @@ using Volian.Controls.Library; using DevComponents.DotNetBar; using JR.Utils.GUI.Forms; using Volian.Base.Library; +using Microsoft.Win32; namespace Volian.Controls.Library { @@ -658,11 +659,35 @@ namespace Volian.Controls.Library } else // Otherwise open it in the Word editor { - Document.ConvertWordSectionToDOCX(myItemInfo); // B2023-093 Convert a Word section to the DOCX Word format if needed before opening it for edit - return OpenDSOTabPage(myItemInfo); - } - } + // B2025-034 Check to make sure that EDWord is installed in PROMS. If not return NULL. + object EDOfficeViewerX = GetValue(@"HKEY_CLASSES_ROOT\EDOfficeViewerX.Connect\CLSID\", @"", null); + object EDWordCtrl = GetValue(@"HKEY_CLASSES_ROOT\EDWORD.EDWordCtrl.1\CLSID\", @"", null); + + if (EDOfficeViewerX == null || EDWordCtrl == null) + { + + MessageBox.Show("Edraw needs to be installed or reinstalled on this device. " + Environment.NewLine + "" + Environment.NewLine + + "Please contact your IT Administrator to install and register Edraw that was provided with the PROMS Installation media. If additional support is needed, please contact Volian.", "Error in Word section", + MessageBoxButtons.OK, MessageBoxIcon.Exclamation); + return null; + } + else + { + Document.ConvertWordSectionToDOCX(myItemInfo); // B2023-093 Convert a Word section to the DOCX Word format if needed before opening it for edit + return OpenDSOTabPage(myItemInfo); + } + } + + } + public T GetValue(string registryKeyPath, string value, T defaultValue = default(T)) + { + T retVal = default(T); + + retVal = (T)Registry.GetValue(registryKeyPath, value, defaultValue); + + return retVal; + } public bool PasteRTBItem(ItemInfo myItemInfo, int copyStartID, ItemInfo.EAddpingPart pasteType, int type) { CleanUpClosedItems(); diff --git a/PROMS/Volian.Controls.Library/EditItem.cs b/PROMS/Volian.Controls.Library/EditItem.cs index 27d89bd4..e5b2677d 100644 --- a/PROMS/Volian.Controls.Library/EditItem.cs +++ b/PROMS/Volian.Controls.Library/EditItem.cs @@ -758,7 +758,7 @@ namespace Volian.Controls.Library // clear tabs, clears then all so that next 'get' will calculate new. public void SetAllTabs() { - RefreshTab(); + RefreshTab(); if (_MyAfterEditItems != null) _MyAfterEditItems[0].SetAllTabs(); // B2020-043: used to loop through all, but then recursion would redo. if (_MyNextEditItem != null) _MyNextEditItem.SetAllTabs(); @@ -1160,7 +1160,7 @@ namespace Volian.Controls.Library { if (myItemInfoList != null) foreach (ItemInfo item in myItemInfoList) - AddChildBefore(item, expand); + AddChildBefore(item, expand); } public EditItem AddChildBefore(ItemInfoList myItemInfoList, EditItem nextEditItem) { @@ -3994,7 +3994,8 @@ namespace Volian.Controls.Library // TODO: Adjust top based upon format // TODO: Remove Label and just output ident on the paint event TabLeft = 20; - SetupHeader(itemInfo); + if (!itemInfo.IsStep) // C2025-036 reduce un-needed processing - this will prevent duplicat calls that generate step tabs when loading a procedure + SetupHeader(itemInfo); SetupAlarmTableView(itemInfo); // C2021-018 display alarm point table information in the step editor (if the format flag is set) this.Paint += new PaintEventHandler(EditItem_Paint); this.BackColorChanged += new EventHandler(EditItem_BackColorChanged); diff --git a/PROMS/Volian.Controls.Library/ListBoxMulti.cs b/PROMS/Volian.Controls.Library/ListBoxMulti.cs new file mode 100644 index 00000000..74acaa54 --- /dev/null +++ b/PROMS/Volian.Controls.Library/ListBoxMulti.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Volian.Controls.Library +{ + //Class to handle bug in Windows WinForms ListBox + // that autoselects first item when no items are selected + public partial class ListBoxMulti : ListBox + { + public ListBoxMulti() + { + Visible = true; + SelectionMode = SelectionMode.MultiSimple; + + SelectedIndexChanged += lb_SelectedIndexChanged; + + Disposed += ListBoxMulti_Disposed; + } + + //singleselectedindex + // will help to fix bug in Winforms ListBox + // that autoselects first item when no items are selected + // -1 = multi or set to this after 1st initialization + // if this = 0 and only 1 item selected, + // that means item was autoselected, so clear all items. + public int singleselectedindex { get; set; } + private void lb_SelectedIndexChanged(object sender, EventArgs e) + { + ListBoxMulti tmp = (ListBoxMulti)sender; + + if (tmp.SelectedItems.Count == 1 && tmp.singleselectedindex == 0) + { + tmp.ClearSelected(); + } + else if (tmp.SelectedItems.Count == 1) + tmp.singleselectedindex = tmp.SelectedIndex; + else + tmp.singleselectedindex = -1; + + } + + //remove event when get rid of object + private void ListBoxMulti_Disposed(object sender, EventArgs e) + { + SelectedIndexChanged -= lb_SelectedIndexChanged; + } + } +} diff --git a/PROMS/Volian.Controls.Library/TablePropertiesControl.Designer.cs b/PROMS/Volian.Controls.Library/TablePropertiesControl.Designer.cs new file mode 100644 index 00000000..b0d7d2c8 --- /dev/null +++ b/PROMS/Volian.Controls.Library/TablePropertiesControl.Designer.cs @@ -0,0 +1,149 @@ + +namespace Volian.Controls.Library +{ + partial class TablePropertiesControl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.lbl_Rows = new System.Windows.Forms.Label(); + this.lbl_Cols = new System.Windows.Forms.Label(); + this.NumRows = new System.Windows.Forms.NumericUpDown(); + this.NumCols = new System.Windows.Forms.NumericUpDown(); + this.dataview = new System.Windows.Forms.DataGridView(); + this.lbltitle = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.NumRows)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.NumCols)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.dataview)).BeginInit(); + this.SuspendLayout(); + // + // lbl_Rows + // + this.lbl_Rows.AutoSize = true; + this.lbl_Rows.Location = new System.Drawing.Point(0, 34); + this.lbl_Rows.Name = "lbl_Rows"; + this.lbl_Rows.Size = new System.Drawing.Size(89, 13); + this.lbl_Rows.TabIndex = 0; + this.lbl_Rows.Text = "Number of Rows:"; + // + // lbl_Cols + // + this.lbl_Cols.AutoSize = true; + this.lbl_Cols.Location = new System.Drawing.Point(0, 56); + this.lbl_Cols.Name = "lbl_Cols"; + this.lbl_Cols.Size = new System.Drawing.Size(102, 13); + this.lbl_Cols.TabIndex = 1; + this.lbl_Cols.Text = "Number of Columns:"; + // + // NumRows + // + this.NumRows.Location = new System.Drawing.Point(114, 32); + this.NumRows.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.NumRows.Name = "NumRows"; + this.NumRows.Size = new System.Drawing.Size(47, 20); + this.NumRows.TabIndex = 3; + this.NumRows.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.NumRows.ValueChanged += new System.EventHandler(this.NumRows_ValueChanged); + // + // NumCols + // + this.NumCols.Location = new System.Drawing.Point(114, 54); + this.NumCols.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.NumCols.Name = "NumCols"; + this.NumCols.Size = new System.Drawing.Size(47, 20); + this.NumCols.TabIndex = 4; + this.NumCols.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.NumCols.ValueChanged += new System.EventHandler(this.NumCols_ValueChanged); + // + // dataview + // + this.dataview.AllowUserToAddRows = false; + this.dataview.AllowUserToDeleteRows = false; + this.dataview.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.dataview.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataview.ColumnHeadersVisible = false; + this.dataview.Location = new System.Drawing.Point(3, 73); + this.dataview.Name = "dataview"; + this.dataview.Size = new System.Drawing.Size(316, 150); + this.dataview.TabIndex = 5; + this.dataview.CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataview_CellEndEdit); + // + // lbltitle + // + this.lbltitle.AutoSize = true; + this.lbltitle.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lbltitle.Location = new System.Drawing.Point(3, 4); + this.lbltitle.Name = "lbltitle"; + this.lbltitle.Size = new System.Drawing.Size(0, 17); + this.lbltitle.TabIndex = 6; + // + // TablePropertiesControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.lbltitle); + this.Controls.Add(this.dataview); + this.Controls.Add(this.NumCols); + this.Controls.Add(this.NumRows); + this.Controls.Add(this.lbl_Cols); + this.Controls.Add(this.lbl_Rows); + this.Name = "TablePropertiesControl"; + this.Size = new System.Drawing.Size(319, 252); + ((System.ComponentModel.ISupportInitialize)(this.NumRows)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.NumCols)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.dataview)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label lbl_Rows; + private System.Windows.Forms.Label lbl_Cols; + private System.Windows.Forms.NumericUpDown NumRows; + private System.Windows.Forms.NumericUpDown NumCols; + private System.Windows.Forms.DataGridView dataview; + private System.Windows.Forms.Label lbltitle; + } +} diff --git a/PROMS/Volian.Controls.Library/TablePropertiesControl.cs b/PROMS/Volian.Controls.Library/TablePropertiesControl.cs new file mode 100644 index 00000000..42afccfd --- /dev/null +++ b/PROMS/Volian.Controls.Library/TablePropertiesControl.cs @@ -0,0 +1,240 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Volian.Controls.Library +{ + //C2025-023 Electronic Procedures + //Control for designating which cells in a table require EP input + public partial class TablePropertiesControl : UserControl + { + //defines the type of possible inputs from an EP viewer + public enum EPinputtype + { + none, + textbox, + checkbox + }; + + private DataTable values; + private BindingSource bindingSource = null; + private int totalrows = 1; + private int totalcols = 1; + public readonly string epname; + private bool IsInitializing; + + //initialization / data will be in the format: + // totalnumrows,totalnumcols;(row,col):value|(row,col):value... + public TablePropertiesControl(string name, string title, string initialvalues) + { + InitializeComponent(); + + IsInitializing = true; + + epname = name; + lbltitle.Text = title; + initializevalues(initialvalues); + bindingSource = new BindingSource(values, ""); + dataview.DataSource = bindingSource; + dataview.AutoGenerateColumns = false; + + Load += new EventHandler(FormLoad_setDefaults); + } + + //initialization / data will be in the format: + // totalnumrows,totalnumcols;(row,col):value|(row,col):value... + private void initializevalues(string initialvalues) + { + values = new DataTable("values"); + + if (!string.IsNullOrEmpty(initialvalues)) + { + string[] grp = initialvalues.Split(';'); + string[] total = grp[0].Split(','); + initializedt(int.Parse(total[0]), int.Parse(total[1])); + + string[] ivs = grp[1].Split('|'); + //pair will be of format: + //(row,col):value + foreach (string pair in ivs) + { + Match m = Regex.Match(pair, @"\(([\d]),([\d])\):([\w]+)"); + if (m.Success) + { + int row = int.Parse(m.Groups[1].Value); + int col = int.Parse(m.Groups[2].Value); + string v = m.Groups[3].Value; + values.Rows[row][col] = v; + } + + } + + values.AcceptChanges(); + } + else + { + initializedt(1, 1); + } + } + + //initialize the blank datatable + private void initializedt(int numrows, int numcols) + { + totalrows = numrows; + totalcols = numcols; + + for (int c = 0; c < totalcols; c++) + { + values.Columns.Add(new DataColumn($"Column{c}") { DefaultValue = "none" }); + } + + for (int rw = 0; rw < totalrows; rw++) + { + values.Rows.Add(); + } + + } + + void FormLoad_setDefaults(object sender, EventArgs e) + { + BindingSource bindingSourceDropDown = new BindingSource(); + bindingSourceDropDown.DataSource = Enum.GetNames(typeof(EPinputtype)); + + //in order to achieve a dropdown of possible values need + //to remove the auto-inserted columns + //that were auto-generated of type type text + //when values was bound to the datagrid + for (int c = 0; c < totalcols; c++) + { + dataview.Columns.RemoveAt(c); + var cName = new DataGridViewComboBoxColumn(); + cName.DataSource = bindingSourceDropDown; + cName.DefaultCellStyle.NullValue = "none"; + dataview.Columns.Insert(c, cName); + } + + NumRows.Value = totalrows; + NumCols.Value = totalcols; + IsInitializing = false; + setDataViewtoValues(); + + } + + //set the display cells to match the values in the datatable for initialization + //and resize of the dataviewgrid + void setDataViewtoValues() + { + if (!IsInitializing) + { + for (int c = 0; c < totalcols; c++) + { + for (int rw = 0; rw < totalrows; rw++) + { + dataview.Rows[rw].Cells[c].Value = values.Rows[rw][c]; + } + } + } + } + + //Get storage string for storing table values in db + // data will be returned in the format: + // totalnumrows,totalnumcols;(row,col):value|(row,col):value... + public string GetStorageValue() + { + //force any in progress editing to commit. + ((BindingSource)dataview.DataSource).EndEdit(); + + StringBuilder bldr = new StringBuilder(); + bldr.Append($"{totalrows},{totalcols}"); + List points = new List(); + for (int rw = 0; rw < values.Rows.Count; rw++) + { + for (int col = 0; col < values.Columns.Count; col++) + { + if ((string) values.Rows[rw][col] != "none") + points.Add($"({rw},{col}):{values.Rows[rw][col]}"); + } + } + + + if (points.Count > 0) + { + bldr.Append(";"); + bldr.Append(string.Join("|", points)); + } + + return bldr.ToString(); + } + + private void NumRows_ValueChanged(object sender, EventArgs e) + { + int endNumRows = (int)NumRows.Value; + int curNumRows = totalrows; + + //remove rows till equal + while (curNumRows > endNumRows) + { + values.Rows.RemoveAt(curNumRows - 1); + curNumRows--; + } + //add rows till equal + while (curNumRows < endNumRows) + { + values.Rows.Add(); + curNumRows++; + } + + totalrows = endNumRows; + setDataViewtoValues(); + } + + private void NumCols_ValueChanged(object sender, EventArgs e) + { + int endNumCols = (int)NumCols.Value; + int curNumCols = totalcols; + + BindingSource bindingSourceDropDown = new BindingSource(); + bindingSourceDropDown.DataSource = Enum.GetNames(typeof(EPinputtype)); + + //remove cols till equal + while (curNumCols > endNumCols) + { + values.Columns.RemoveAt(curNumCols - 1); + dataview.Columns.RemoveAt(curNumCols - 1); + curNumCols--; + } + //add cols till equal + while (curNumCols < endNumCols) + { + values.Columns.Add(new DataColumn($"Column{curNumCols + 1}") { DefaultValue = "none"}); + if (dataview.Columns.Count > curNumCols) dataview.Columns.RemoveAt(curNumCols); + var cName = new DataGridViewComboBoxColumn(); + cName.DataSource = bindingSourceDropDown; + cName.DefaultCellStyle.NullValue = "none"; + dataview.Columns.Add(cName); + + curNumCols++; + } + + totalcols = endNumCols; + setDataViewtoValues(); + } + + //set the datatable value to match the changed datagridview value + //for some reason despite being bound, does not automatically update + // (it may be that datatable as a bindingsource does not implement INotifyProperty + // and thus needs manually set like this) + private void dataview_CellEndEdit(object sender, DataGridViewCellEventArgs e) + { + values.Rows[e.RowIndex][e.ColumnIndex] = (string) dataview.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; + } + } + +} \ No newline at end of file diff --git a/PROMS/Volian.Controls.Library/TablePropertiesControl.resx b/PROMS/Volian.Controls.Library/TablePropertiesControl.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/PROMS/Volian.Controls.Library/TablePropertiesControl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj b/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj index 1510659d..ae6f5783 100644 --- a/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj +++ b/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj @@ -243,6 +243,12 @@ frmEnhanced.cs + + Form + + + frmEPAnnotationDetails.cs + Form @@ -274,6 +280,9 @@ ImageItem.cs + + Component + Form @@ -374,6 +383,12 @@ + + UserControl + + + TablePropertiesControl.cs + Component @@ -474,6 +489,10 @@ frmEnhanced.cs + + frmEPAnnotationDetails.cs + Designer + frmImportWordContents.cs @@ -515,6 +534,9 @@ ResXFileCodeGenerator Resources.Designer.cs + + TablePropertiesControl.cs + vlnExpander.cs Designer diff --git a/PROMS/Volian.Controls.Library/frmEPAnnotationDetails.Designer.cs b/PROMS/Volian.Controls.Library/frmEPAnnotationDetails.Designer.cs new file mode 100644 index 00000000..6628fe2c --- /dev/null +++ b/PROMS/Volian.Controls.Library/frmEPAnnotationDetails.Designer.cs @@ -0,0 +1,111 @@ +namespace Volian.Controls.Library +{ + partial class frmEPAnnotationDetails + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.btnOk = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.panel_btns = new System.Windows.Forms.Panel(); + this.panelEP = new System.Windows.Forms.TableLayoutPanel(); + this.panel_btns.SuspendLayout(); + this.SuspendLayout(); + // + // btnOk + // + this.btnOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOk.Location = new System.Drawing.Point(9, 7); + this.btnOk.Margin = new System.Windows.Forms.Padding(2); + this.btnOk.Name = "btnOk"; + this.btnOk.Size = new System.Drawing.Size(56, 19); + this.btnOk.TabIndex = 0; + this.btnOk.Text = "OK"; + this.btnOk.UseVisualStyleBackColor = true; + this.btnOk.Click += new System.EventHandler(this.btnOk_Click); + // + // btnCancel + // + this.btnCancel.Location = new System.Drawing.Point(82, 7); + this.btnCancel.Margin = new System.Windows.Forms.Padding(2); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(56, 19); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "Cancel"; + this.btnCancel.UseVisualStyleBackColor = true; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // panel_btns + // + this.panel_btns.Controls.Add(this.btnCancel); + this.panel_btns.Controls.Add(this.btnOk); + this.panel_btns.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panel_btns.Location = new System.Drawing.Point(0, 512); + this.panel_btns.Name = "panel_btns"; + this.panel_btns.Size = new System.Drawing.Size(762, 30); + this.panel_btns.TabIndex = 2; + // + // panelEP + // + this.panelEP.AutoScroll = true; + this.panelEP.ColumnCount = 2; + this.panelEP.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.panelEP.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.panelEP.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelEP.Location = new System.Drawing.Point(0, 0); + this.panelEP.Name = "panelEP"; + this.panelEP.RowCount = 1; + this.panelEP.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.panelEP.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 512F)); + this.panelEP.Size = new System.Drawing.Size(762, 512); + this.panelEP.TabIndex = 3; + // + // frmEPAnnotationDetails + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.ClientSize = new System.Drawing.Size(762, 542); + this.Controls.Add(this.panelEP); + this.Controls.Add(this.panel_btns); + this.Margin = new System.Windows.Forms.Padding(2); + this.Name = "frmEPAnnotationDetails"; + this.Text = "Electronic Procedure Details"; + this.TopMost = true; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frmEPAnnotationDetails_FormClosing); + this.panel_btns.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button btnOk; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.Panel panel_btns; + private System.Windows.Forms.TableLayoutPanel panelEP; + } +} \ No newline at end of file diff --git a/PROMS/Volian.Controls.Library/frmEPAnnotationDetails.cs b/PROMS/Volian.Controls.Library/frmEPAnnotationDetails.cs new file mode 100644 index 00000000..a641fd1c --- /dev/null +++ b/PROMS/Volian.Controls.Library/frmEPAnnotationDetails.cs @@ -0,0 +1,320 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using VEPROMS.CSLA.Library; +using Volian.Controls.Library; +using System.Linq; + +namespace Volian.Controls.Library +{ + //C2025-023 - Electronic Procedures - Modifications to PROMS + //Form for Dynamic Showing of EP detail controls and entry + public partial class frmEPAnnotationDetails : Form + { + private AnnotationInfo _CurrentAnnotation; + private EPFields myEPFields; + private AnnotationConfig MyConfig; + + private StepTabRibbon _MyStepTabRibbon; + private Dictionary _DicTB; + private Dictionary _DicCheckBox; + private Dictionary _DicComboBox; + private Dictionary _DicSingleRO; + private Dictionary _DicMultiRO; + private TablePropertiesControl _TablePropControl; + + private string multiseparator = ","; + + public frmEPAnnotationDetails(AnnotationInfo currAnn) + { + InitializeComponent(); + _DicTB = new Dictionary(); + _DicCheckBox = new Dictionary(); + _DicComboBox = new Dictionary(); + _DicSingleRO = new Dictionary(); + _DicMultiRO = new Dictionary(); + InitializeSpecificControls(currAnn); + _MyStepTabRibbon = new StepTabRibbon(); + } + + private void InitializeSpecificControls(AnnotationInfo currAnn) + { + _CurrentAnnotation = currAnn; + myEPFields = _CurrentAnnotation.MyItem.GetValidEPFields(_CurrentAnnotation.TypeID); + MyConfig = new AnnotationConfig(currAnn.Config); + + int MaxCharsInLabel = myEPFields.Where(y => y.type.ToLower() != "tableinput").Max(x => x.label.Length); + //font size 8 - make labels slightly bigger than largest label + panelEP.ColumnStyles[0].SizeType = SizeType.Absolute; + panelEP.ColumnStyles[0].Width = (8 * MaxCharsInLabel) + 5; + + int RowCount = 0; + foreach (EPField EP in myEPFields) + { + RowCount += 1; + panelEP.RowCount = RowCount; + panelEP.Top = 20; + + if (EP.type.ToLower() != "tableinput") + { + Label wlbl = new Label(); + wlbl.Text = EP.label; + wlbl.Visible = true; + wlbl.TextAlign = ContentAlignment.MiddleLeft; + wlbl.Anchor = AnchorStyles.Left | AnchorStyles.Top; + wlbl.Width = (8 * MaxCharsInLabel) + 5; + panelEP.Controls.Add(wlbl, 0, panelEP.RowCount - 1); + } + + if (EP.type.ToLower() == "text") + { + TextBox tb = new TextBox(); + tb.Font = tb.Font = new Font("Arial", 8); + tb.BorderStyle = BorderStyle.FixedSingle; + //aligning to both left and right stretches the textbox to the width of the form + tb.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top; + string val = MyConfig.GetValue("EP", EP.name).Replace("\\u8209?", "-").Replace(@"\u9586?", @"\"); + tb.Text = val; + tb.Visible = true; + tb.Height = EP.numlines * tb.Font.Height + 1 + tb.Margin.Vertical; + tb.MinimumSize = new Size(0, EP.numlines * tb.Font.Height + 1 + tb.Margin.Vertical); + if (EP.numlines > 1) + { + tb.Multiline = true; + tb.ScrollBars = ScrollBars.Both; + panelEP.RowStyles.Insert(panelEP.RowCount - 1, new RowStyle(SizeType.Absolute, 50)); + } + else + { + panelEP.RowStyles.Insert(panelEP.RowCount - 1, new RowStyle(SizeType.AutoSize)); + } + + _DicTB.Add(EP.name, tb); + panelEP.Controls.Add(tb, 1, panelEP.RowCount - 1); + } + else + { + panelEP.RowStyles.Insert(panelEP.RowCount - 1, new RowStyle(SizeType.AutoSize)); + } + if (EP.type.ToLower() == "logical") + { + CheckBox cb = new CheckBox(); + cb.Text = EP.text; + cb.Visible = true; + string val = MyConfig.GetValue("EP", EP.name); + cb.Checked = val != null && val != "" && val.ToUpper()[0] == 'Y'; + _DicCheckBox.Add(EP.name, cb); + cb.AutoSize = true; + panelEP.Controls.Add(cb, 1, panelEP.RowCount - 1); + } + if (EP.type.ToLower() == "combo") + { + ComboBox cmb = new ComboBox(); + cmb.Visible = true; + string tmp = EP.text; + string[] tmps = tmp.Split(",".ToCharArray()); + foreach (string t in tmps) cmb.Items.Add(t.Trim()); + string val = MyConfig.GetValue("EP", EP.name); + if (val != null && val != "") cmb.SelectedItem = val; + cmb.DropDownWidth = TextRenderer.MeasureText(tmps.OrderByDescending(x => x.Length).First(), cmb.Font).Width + SystemInformation.VerticalScrollBarWidth; + cmb.Width = cmb.DropDownWidth; + _DicComboBox.Add(EP.name, cmb); + panelEP.Controls.Add(cmb, 1, panelEP.RowCount - 1); + } + if (EP.type.ToLower() == "rosingle") + { + ComboBox cmb = new ComboBox(); + cmb.Visible = true; + + List tmps = EP.getROList(currAnn, true); + cmb.DisplayMember = "Text"; + cmb.ValueMember = "Value"; + cmb.DataSource = tmps; + cmb.DropDownStyle = ComboBoxStyle.DropDownList; + cmb.DropDownWidth = TextRenderer.MeasureText(tmps.OrderByDescending(x => x.Text.Length).First().Text, cmb.Font).Width + SystemInformation.VerticalScrollBarWidth; + cmb.Width = cmb.DropDownWidth; + + _DicSingleRO.Add(EP.name, cmb); + panelEP.Controls.Add(cmb, 1, panelEP.RowCount - 1); + } + if (EP.type.ToLower() == "romulti") + { + ListBoxMulti lb = new ListBoxMulti(); + + List tmps = EP.getROList(currAnn, false); + lb.DisplayMember = "Text"; + lb.ValueMember = "Value"; + lb.Width = TextRenderer.MeasureText(tmps.OrderByDescending(x => x.Text.Length).First().Text, lb.Font).Width + SystemInformation.VerticalScrollBarWidth; + + lb.DataSource = tmps; + _DicMultiRO.Add(EP.name, lb); + panelEP.Controls.Add(lb, 1, panelEP.RowCount - 1); + + } + //note will allow only 1 tableproperties control since it is a 1:1 match with the table that is in the step + if (EP.type.ToLower() == "tableinput" && _TablePropControl == null) + { + string val = MyConfig.GetValue("EP", EP.name); + _TablePropControl = new TablePropertiesControl(EP.name, EP.label, val); + _TablePropControl.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top; + panelEP.Controls.Add(_TablePropControl, 1, panelEP.RowCount - 1); + + } + + } + + Load += new EventHandler(Form1Load_setDefaults); + } + + void Form1Load_setDefaults(object sender, EventArgs e) + { + foreach (KeyValuePair pair in _DicSingleRO) + { + string val = MyConfig.GetValue("EP", pair.Key); + if (!string.IsNullOrEmpty(val) && pair.Value.Items.OfType().Any(x=> x.Value == val)) + pair.Value.SelectedValue = val; + else + pair.Value.SelectedValue = ""; + } + + foreach (KeyValuePair pair in _DicMultiRO) + { + //clear all items at start in case items were autoselected - bug in Winforms ListBox + pair.Value.ClearSelected(); + string val = MyConfig.GetValue("EP", pair.Key); + if (val != null && val != "") + { + var selectedvalues = val.Split(multiseparator.ToCharArray()); + foreach (string item in selectedvalues) + { + string text = ((List)pair.Value.DataSource).Find(x => x.Value == item)?.Text; + if (!string.IsNullOrEmpty(text)) pair.Value.SetSelected(pair.Value.FindString(text), true); + } + } + + //set this to -1 after initial setting of values + //this will help to fix bug in Winforms ListBox + //that autoselects first item when no items are selected + pair.Value.singleselectedindex = -1; + } + + + } + + private void FieldStepRTB_Enter(object sender, EventArgs e) + { + _MyStepTabRibbon.MyStepRTB = (StepRTB)sender; + } + private void btnOk_Click(object sender, EventArgs e) + { + + // loop through all of the fields + bool isDirty = false; + foreach (EPField EP in myEPFields) + { + if (EP.type.ToLower() == "text") + { + TextBox cur = _DicTB[EP.name]; + string newval = cur.Text; + string oldval = MyConfig.GetValue("EP", EP.name); + if (oldval != newval) + { + isDirty = true; + MyConfig.SetValue("EP", EP.name, newval.Replace("\\u8209?","-")); + } + } + else if (EP.type.ToLower() == "logical") + { + CheckBox cur = _DicCheckBox[EP.name]; + string newval = cur.Checked ? "Y" : "N"; + string oldval = MyConfig.GetValue("EP", EP.name); + if (newval != oldval) + { + isDirty = true; + MyConfig.SetValue("EP", EP.name, newval); + } + } + else if (EP.type.ToLower() == "combo") + { + ComboBox cmbcur = _DicComboBox[EP.name]; + string newval = cmbcur.Text; + string oldval = MyConfig.GetValue("EP", EP.name); + if (newval != oldval) + { + isDirty = true; + MyConfig.SetValue("EP", EP.name, newval); + } + } + else if (EP.type.ToLower() == "rosingle") + { + ComboBox cmbcur = _DicSingleRO[EP.name]; + string newval = cmbcur.SelectedValue.ToString(); + string oldval = MyConfig.GetValue("EP", EP.name); + if (newval == "-1") newval = ""; + if (newval != oldval) + { + isDirty = true; + MyConfig.SetValue("EP", EP.name, newval); + } + } + else if (EP.type.ToLower() == "romulti") + { + ListBoxMulti lbcur = _DicMultiRO[EP.name]; + string newvalues = String.Join(multiseparator, lbcur.SelectedItems.OfType().Select(item => item.Value)); + string oldvalues = MyConfig.GetValue("EP", EP.name); + if (newvalues != oldvalues) + { + isDirty = true; + MyConfig.SetValue("EP", EP.name, newvalues); + } + } + else if (EP.type.ToLower() == "tableinput" && EP.name == _TablePropControl.epname) + { + string newvalues = _TablePropControl.GetStorageValue(); + string oldvalues = MyConfig.GetValue("EP", EP.name); + if (newvalues != oldvalues) + { + isDirty = true; + MyConfig.SetValue("EP", EP.name, newvalues); + } + } + } + if (isDirty) + { + using (Annotation annotation = _CurrentAnnotation.Get()) + { + if (annotation != null) + { + annotation.Config = MyConfig.ToString(); + annotation.DTS = DateTime.Now; + annotation.UserID = Volian.Base.Library.VlnSettings.UserID; + annotation.Save(); + } + } + } + DialogResult = DialogResult.OK; + Close(); + } + + private void btnCancel_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + Close(); + } + + //remove events so no memory loss + private void frmEPAnnotationDetails_FormClosing(object sender, FormClosingEventArgs e) + { + foreach (ListBoxMulti lb in _DicMultiRO.Values) + { + lb.Dispose(); + } + + Load -= Form1Load_setDefaults; + } + } +} \ No newline at end of file diff --git a/PROMS/Volian.Controls.Library/frmEPAnnotationDetails.resx b/PROMS/Volian.Controls.Library/frmEPAnnotationDetails.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/PROMS/Volian.Controls.Library/frmEPAnnotationDetails.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/PROMS/Volian.Controls.Library/vlnTreeView.cs b/PROMS/Volian.Controls.Library/vlnTreeView.cs index 6fbd3093..bdd75d47 100644 --- a/PROMS/Volian.Controls.Library/vlnTreeView.cs +++ b/PROMS/Volian.Controls.Library/vlnTreeView.cs @@ -22,11 +22,11 @@ namespace Volian.Controls.Library public delegate void vlnTreeViewEvent(object sender, vlnTreeEventArgs args); public delegate void vlnTreeViewTimeEvent(object sender, vlnTreeTimeEventArgs args); public delegate void vlnTreeViewStatusEvent(object sender, vlnTreeStatusEventArgs args); - public delegate ItemInfo vlnTreeViewClipboardStatusEvent(object sender, vlnTreeEventArgs args); - public delegate void vlnTreeViewItemInfoEvent(object sender, vlnTreeItemInfoEventArgs args); + public delegate ItemInfo vlnTreeViewClipboardStatusEvent(object sender, vlnTreeEventArgs args); + public delegate void vlnTreeViewItemInfoEvent(object sender, vlnTreeItemInfoEventArgs args); public delegate bool vlnTreeViewBoolEvent(object sender, vlnTreeEventArgs args); public delegate bool vlnTreeViewItemInfoDeleteEvent(object sender, vlnTreeItemInfoEventArgs args); - + public delegate bool vlnTreeViewItemInfoInsertEvent(object sender, vlnTreeItemInfoInsertEventArgs args); public delegate bool vlnTreeViewItemInfoDeleteFolderEvent(object sender, vlnTreeFolderDeleteEventArgs args); public delegate bool vlnTreeViewItemInfoPasteEvent(object sender, vlnTreeItemInfoPasteEventArgs args); @@ -57,7 +57,7 @@ namespace Volian.Controls.Library { _MySectionInfo = mySectionInfo; } - public vlnTreeSectionInfoEventArgs(SectionInfo mySectionInfo,bool isDeleting) + public vlnTreeSectionInfoEventArgs(SectionInfo mySectionInfo, bool isDeleting) { _MySectionInfo = mySectionInfo; _IsDeleting = isDeleting; @@ -140,7 +140,7 @@ namespace Volian.Controls.Library get { return _Node; } set { _Node = value; } } - private TreeNode _Destination=null; + private TreeNode _Destination = null; public TreeNode Destination { get { return _Destination; } @@ -168,7 +168,7 @@ namespace Volian.Controls.Library //end jcb multiunit #endregion #region Factory Methods - private vlnTreeEventArgs() { ;} + private vlnTreeEventArgs() {; } public vlnTreeEventArgs(TreeNode node) { _Node = node; @@ -192,7 +192,7 @@ namespace Volian.Controls.Library #endregion public override string ToString() { - return string.Format("Node={0},Destination={1},Index={2},Unit={3},UnitIndex={4}",NodePath(this.Node),this.Destination, this.Index,this.Unit, this.UnitIndex); + return string.Format("Node={0},Destination={1},Index={2},Unit={3},UnitIndex={4}", NodePath(this.Node), this.Destination, this.Index, this.Unit, this.UnitIndex); } private string NodePath(TreeNode node) @@ -215,7 +215,7 @@ namespace Volian.Controls.Library } #endregion #region Factory Methods - private vlnTreeItemInfoEventArgs() { ;} + private vlnTreeItemInfoEventArgs() {; } public vlnTreeItemInfoEventArgs(ItemInfo myItemInfo) { _MyItemInfo = myItemInfo; @@ -231,7 +231,7 @@ namespace Volian.Controls.Library FolderId = folderId; } } - public enum E_InsertType {Before, After, Child}; + public enum E_InsertType { Before, After, Child }; public partial class vlnTreeItemInfoInsertEventArgs { #region Business Methods @@ -267,7 +267,7 @@ namespace Volian.Controls.Library } #endregion #region Factory Methods - private vlnTreeItemInfoInsertEventArgs() { ;} + private vlnTreeItemInfoInsertEventArgs() {; } public vlnTreeItemInfoInsertEventArgs(ItemInfo myItemInfo, E_InsertType insertType, string stepText) { _MyItemInfo = myItemInfo; @@ -314,7 +314,7 @@ namespace Volian.Controls.Library } #endregion #region Factory Methods - private vlnTreeItemInfoPasteEventArgs() { ;} + private vlnTreeItemInfoPasteEventArgs() {; } public vlnTreeItemInfoPasteEventArgs(ItemInfo myItemInfo, int copyStartId, ItemInfo.EAddpingPart pasteType, int? type) { _MyItemInfo = myItemInfo; @@ -322,7 +322,7 @@ namespace Volian.Controls.Library _PasteType = pasteType; _Type = type; } - + #endregion } #endregion @@ -364,7 +364,7 @@ namespace Volian.Controls.Library get { return _SectionConfig; } set { _ConfigObject = _SectionConfig = value; } } - private vlnTreePropertyEventArgs() { ;} + private vlnTreePropertyEventArgs() {; } public vlnTreePropertyEventArgs(string title, FolderConfig folderConfig) { _Title = title; @@ -573,16 +573,16 @@ namespace Volian.Controls.Library { if (ProcedureCheckedOutTo != null) ProcedureCheckedOutTo(sender, args); } - - - - - - public event vlnTreeViewEvent ExportImportProcedureSets; - private void OnExportImportProcedureSets(object sender, vlnTreeEventArgs args) - { - if (ExportImportProcedureSets != null) ExportImportProcedureSets(sender, args); - } + + + + + + public event vlnTreeViewEvent ExportImportProcedureSets; + private void OnExportImportProcedureSets(object sender, vlnTreeEventArgs args) + { + if (ExportImportProcedureSets != null) ExportImportProcedureSets(sender, args); + } public event vlnTreeViewEvent PrintTransitionReport; private void OnPrintTransitionReport(object sender, vlnTreeEventArgs args) { @@ -634,7 +634,7 @@ namespace Volian.Controls.Library // This event was added to update the Step Properties/RO & Tools/Search RO & Reports // when an update of ro.fst is done & the ro trees on those panels needs refreshed. // (bug fix B2015-226) - public event StepPanelTabDisplayEvent TabDisplay; + public event StepPanelTabDisplayEvent TabDisplay; private void OnTabDisplay(object sender, StepPanelTabDisplayEventArgs args) { if (TabDisplay != null) TabDisplay(sender, args); @@ -720,39 +720,39 @@ namespace Volian.Controls.Library //_MyLog.WarnFormat("Context Menu 1b - {0}", GC.GetTotalMemory(true)); if (ui.IsAdministrator() || ui.IsSetAdministrator(fi)) { - if (fi.MyParent != null) // don't allow insert before/after if at top node + if (fi.MyParent != null) // don't allow insert before/after if at top node { if (!ui.IsAdministrator() && DoSpecificInfo) cm.MenuItems.Add("Procedure Set Specific Information", new EventHandler(mi_Click)); // B2020-111 only allow Set Administrator to add new folders inside folders they admininstrate - if (ui.IsAdministrator()||ui.IsSetAdministrator(fi.MyParent)) + if (ui.IsAdministrator() || ui.IsSetAdministrator(fi.MyParent)) { cm.MenuItems.Add("Insert Folder Before", new EventHandler(mi_Click)); cm.MenuItems.Add("Insert Folder After", new EventHandler(mi_Click)); } } // B2020-111 only allow Set Administrator to add new folders inside folders they admininstrate - if ((ui.IsAdministrator() || ui.IsSetAdministrator(fi.MyParent)) && fi.FolderDocVersionCount == 0) + if ((ui.IsAdministrator() || ui.IsSetAdministrator(fi.MyParent)) && fi.FolderDocVersionCount == 0) cm.MenuItems.Add("New Folder", new EventHandler(mi_Click)); - if (fi.ChildFolderCount == 0 && !fi.HasWorkingDraft) + if (fi.ChildFolderCount == 0 && !fi.HasWorkingDraft) cm.MenuItems.Add("Create Working Draft", new EventHandler(mi_Click)); } - if (fi.HasWorkingDraft) + if (fi.HasWorkingDraft) cm.MenuItems.Add("Print Transition Report", new EventHandler(mi_Click)); } - else if (tn.VEObject as DocVersionInfo != null) // DocVersions can only contain procs + else if (tn.VEObject as DocVersionInfo != null) // DocVersions can only contain procs { isWrkDftNode = true; //_MyLog.WarnFormat("Context Menu 1c - {0}", GC.GetTotalMemory(true)); DocVersionInfo dvi = tn.VEObject as DocVersionInfo; if (ui.IsAdministrator() || ui.IsSetAdministrator(dvi)) - { - cm.MenuItems.Add("Import Procedure", mi_Click); - } - if (ui.IsAdministrator() || ui.IsSetAdministrator(dvi) || ui.IsWriter(dvi)) + { + cm.MenuItems.Add("Import Procedure", mi_Click); + } + if (ui.IsAdministrator() || ui.IsSetAdministrator(dvi) || ui.IsWriter(dvi)) { OwnerInfoList.Reset(); oil = OwnerInfoList.GetByVersionID(dvi.VersionID); - if (dvi.ActiveFormat.PlantFormat.FormatData.SpecificInfo) + if (dvi.ActiveFormat.PlantFormat.FormatData.SpecificInfo) cm.MenuItems.Add("Procedure Set Specific Information", new EventHandler(mi_Click)); cm.MenuItems.Add("Refresh Checked Out Procedures", new EventHandler(mi_Click)); cm.MenuItems.Add("New Procedure", new EventHandler(mi_Click)); @@ -839,15 +839,15 @@ namespace Volian.Controls.Library urv.Enabled = !dvi.ROfstLastCompleted || dvi.NewerRoFst; } } - else if (tn.VEObject as ProcedureInfo != null) // Procs can only contain sections + else if (tn.VEObject as ProcedureInfo != null) // Procs can only contain sections { isProcNode = true; ProcedureInfo pri = tn.VEObject as ProcedureInfo; oi = OwnerInfo.GetByItemID(pri.ItemID, CheckOutType.Procedure); if (ui.IsAdministrator() || ui.IsSetAdministrator(pri.MyDocVersion)) - { - cm.MenuItems.Add("Export Procedure", mi_Click); - } + { + cm.MenuItems.Add("Export Procedure", mi_Click); + } if (ui.IsAdministrator() || ui.IsSetAdministrator(pri.MyDocVersion) || ui.IsWriter(pri.MyDocVersion)) { if (oi != null && oi.SessionID != MySessionInfo.SessionID) @@ -898,7 +898,7 @@ namespace Volian.Controls.Library } cm.MenuItems.Add(micas); cm.MenuItems.Add(mitcas); - cm.MenuItems.Add(mip); + cm.MenuItems.Add(mip); cm.MenuItems.Add(miqp); //cm.MenuItems.Add(mips); AddShowChangeBarsAfterMenuItem(cm.MenuItems, pri); @@ -1081,10 +1081,37 @@ namespace Volian.Controls.Library // require clearing of all enhanced config data or mapping it to existing data (quite complicated) if ((ui.IsAdministrator() || ui.IsSetAdministrator(i.MyProcedure.MyDocVersion) || ui.IsWriter(i.MyProcedure.MyDocVersion)) && (!i.IsEnhancedStep && !i.IsEnhancedProcedure && !i.IsEnhancedSection && !i.IsRtfRaw && !i.IsFigure)) cm.MenuItems.Add("Copy", new EventHandler(mi_Click)); + //if (i.HasWordContent) + //{ + // cm.MenuItems.Add("Print Section", new EventHandler(mi_Click)); + // cm.MenuItems.Add("Quick Print Section", new EventHandler(mi_Click)); + //} if (i.HasWordContent) { - cm.MenuItems.Add("Print Section", new EventHandler(mi_Click)); - cm.MenuItems.Add("Quick Print Section", new EventHandler(mi_Click)); + if (i.MyDocVersion.MultiUnitCount > 1) + { + if (!i.IsSubsection) + { + MenuItem mps = new MenuItem("Print Section"); + MenuItem mqps = new MenuItem("Quick Print Section"); + int k = 0; + foreach (string s in i.MyDocVersion.UnitNames) + { + k++; + MenuItem mp = mps.MenuItems.Add(s, new EventHandler(miMultiUnit_Click)); + mp.Tag = k; + MenuItem mqp = mqps.MenuItems.Add(s, new EventHandler(miMultiUnit_Click)); + mqp.Tag = k; + } + cm.MenuItems.Add(mps); + cm.MenuItems.Add(mqps); + } + } + else + { + cm.MenuItems.Add("Print Section", new EventHandler(mi_Click)); + cm.MenuItems.Add("Quick Print Section", new EventHandler(mi_Click)); + } } } #endregion @@ -1098,42 +1125,42 @@ namespace Volian.Controls.Library ok = true; else if (tn.VEObject is ItemInfo && (ui.IsAdministrator() || ui.IsSetAdministrator((tn.VEObject as ItemInfo).MyProcedure.MyDocVersion) || ui.IsWriter((tn.VEObject as ItemInfo).MyProcedure.MyDocVersion))) ok = true; - if(ok) + if (ok) Menu_Paste(tn, cm); #endregion //_MyLog.WarnFormat("Context Menu 5 - {0}", GC.GetTotalMemory(true)); #region Menu_Delete if (ok) - - - - - + + + + + + { + // Add delete to the menu unless at the very 'top' node, on a grouping (partinfo) + // node (RNOs, Steps, Cautions, Notes) or Folder/DocVersion that contains any items. + PartInfo pi = tn.VEObject as PartInfo; + if (pi == null && tn.Parent != null) // it's not a part and it's not the top.... { - // Add delete to the menu unless at the very 'top' node, on a grouping (partinfo) - // node (RNOs, Steps, Cautions, Notes) or Folder/DocVersion that contains any items. - PartInfo pi = tn.VEObject as PartInfo; - if (pi == null && tn.Parent != null) // it's not a part and it's not the top.... + fi = tn.VEObject as FolderInfo; + if (fi == null || tn.Nodes.Count == 0) // it's not a folder or it has no children { - fi = tn.VEObject as FolderInfo; - if (fi == null || tn.Nodes.Count == 0) // it's not a folder or it has no children + DocVersionInfo di = tn.VEObject as DocVersionInfo; + if (di == null || tn.Nodes.Count == 0) // it's not a docversion or it has no children { - DocVersionInfo di = tn.VEObject as DocVersionInfo; - if (di == null || tn.Nodes.Count == 0) // it's not a docversion or it has no children - { - // if it's an enhanced step that was linked from a source, don't allow delete - bool canDoDel = true; - ItemInfo iienh = tn.VEObject as ItemInfo; - if (iienh != null && iienh.IsProcedure && iienh.IsEnhancedProcedure) canDoDel = false; - if (iienh != null && iienh.IsSection && iienh.IsEnhancedSection && !iienh.IsEnhancedSectionTitleOnly) canDoDel = false; - if (iienh != null && iienh.IsEnhancedStep) canDoDel = false; - if (canDoDel) cm.MenuItems.Add("Delete", new EventHandler(mi_Click)); - } + // if it's an enhanced step that was linked from a source, don't allow delete + bool canDoDel = true; + ItemInfo iienh = tn.VEObject as ItemInfo; + if (iienh != null && iienh.IsProcedure && iienh.IsEnhancedProcedure) canDoDel = false; + if (iienh != null && iienh.IsSection && iienh.IsEnhancedSection && !iienh.IsEnhancedSectionTitleOnly) canDoDel = false; + if (iienh != null && iienh.IsEnhancedStep) canDoDel = false; + if (canDoDel) cm.MenuItems.Add("Delete", new EventHandler(mi_Click)); } } } - + } + #endregion //_MyLog.WarnFormat("Context Menu 6 - {0}", GC.GetTotalMemory(true)); #region Menu_ExternalTransitions @@ -1169,13 +1196,13 @@ namespace Volian.Controls.Library } doclink = string.Format("Unlink Source and {0} Procedure", doclink); MenuItem mix = cm.MenuItems.Add(doclink, new EventHandler(miEnhanced_Click)); - mix.Tag = -1; // NOTE this is what flags what gets processed on menu click, i.e. -1 + mix.Tag = -1; // NOTE this is what flags what gets processed on menu click, i.e. -1 } // if this is a source procedure that has enhanced, for example Background and/or deviation, ask which should be unlinked including all else if (eds != null && eds.Count > 1) { MenuItem miu = new MenuItem("Unlink Enhanced Procedure(s) from Source"); - miu.Tag = -2; // this menu item doesn't get used. + miu.Tag = -2; // this menu item doesn't get used. int k = 0; foreach (EnhancedDocument ed in eds) { @@ -1186,7 +1213,7 @@ namespace Volian.Controls.Library } // add all submenu item MenuItem mp1 = miu.MenuItems.Add("All", new EventHandler(miEnhanced_Click)); - mp1.Tag = 0; // Tag of 0 flags All + mp1.Tag = 0; // Tag of 0 flags All cm.MenuItems.Add(miu); } } @@ -1196,9 +1223,9 @@ namespace Volian.Controls.Library // Add Properties to the menu unless at the very 'top' node or on a grouping (partinfo) // node (RNOs, Steps, Cautions, Notes) or at the step level. // B2020-105 Allow Set Administrators to rename folder's (sets of procedures) to which they have been given access. - if ( tn.VEObject is FolderInfo) ok = (ui.IsAdministrator() || ui.IsSetAdministrator(tn.VEObject as FolderInfo)); - else ok = (tn.VEObject is DocVersionInfo) ? (ui.IsAdministrator() || ui.IsSetAdministrator(tn.VEObject as DocVersionInfo)) - : (ui.IsAdministrator() || (tn.VEObject is ItemInfo) && (ui.IsSetAdministrator((tn.VEObject as ItemInfo).MyProcedure.MyDocVersion) + if (tn.VEObject is FolderInfo) ok = (ui.IsAdministrator() || ui.IsSetAdministrator(tn.VEObject as FolderInfo)); + else ok = (tn.VEObject is DocVersionInfo) ? (ui.IsAdministrator() || ui.IsSetAdministrator(tn.VEObject as DocVersionInfo)) + : (ui.IsAdministrator() || (tn.VEObject is ItemInfo) && (ui.IsSetAdministrator((tn.VEObject as ItemInfo).MyProcedure.MyDocVersion) || ui.IsWriter((tn.VEObject as ItemInfo).MyProcedure.MyDocVersion))); PartInfo pia = tn.VEObject as PartInfo; ItemInfo ii = tn.VEObject as ItemInfo; @@ -1279,7 +1306,7 @@ namespace Volian.Controls.Library itm.Text == "Procedure Set Specific Information" || itm.Text == "Approve All Procedures for" || itm.Text == "Approve Some Procedures" || itm.Text == "Approve Some Procedures for") itm.Enabled = false; - + } } } @@ -1308,9 +1335,9 @@ namespace Volian.Controls.Library // F2022-024 added Time Critical Action Summary option foreach (MenuItem itm in cm.MenuItems) { - if(itm.Text == "Procedure Specific Information" || itm.Text == "New Section" || itm.Text == "Approve" || itm.Text == "Open" || + if (itm.Text == "Procedure Specific Information" || itm.Text == "New Section" || itm.Text == "Approve" || itm.Text == "Open" || itm.Text == "Copy" || itm.Text == "Delete" || itm.Text == "Properties..." || itm.Text == "Replace Existing Procedure" || - itm.Text.StartsWith("Showing Change Bars Starting") || itm.Text == "Create Continuous Action Summary" || + itm.Text.StartsWith("Showing Change Bars Starting") || itm.Text == "Create Continuous Action Summary" || itm.Text == "Create Time Critical Action Summary" || itm.Text == "Export Procedure") itm.Enabled = false; } @@ -1319,7 +1346,7 @@ namespace Volian.Controls.Library { foreach (MenuItem itm in cm.MenuItems) { - if(!itm.Text.StartsWith("Document Checked Out")) + if (!itm.Text.StartsWith("Document Checked Out")) itm.Enabled = false; } } @@ -1336,7 +1363,7 @@ namespace Volian.Controls.Library { _currentPri = pri; RevisionInfoList ril = RevisionInfoList.GetByItemID(pri.ItemID); - if (ril.Count == 0) return; // no versions to list + if (ril.Count == 0) return; // no versions to list MenuItem mi = menuItemCollection.Add("Versions"); int k = 0; int lastApprovedRevisionID = 0; @@ -1383,11 +1410,11 @@ namespace Volian.Controls.Library ril = null; } } - public void AddNewNode(IVEDrillDownReadOnly o) - { - VETreeNode tn = new VETreeNode(o); - SelectedNode.Nodes.Add(tn); - } + public void AddNewNode(IVEDrillDownReadOnly o) + { + VETreeNode tn = new VETreeNode(o); + SelectedNode.Nodes.Add(tn); + } private void AddApprovedRevisions(Menu.MenuItemCollection menuItemCollection, ProcedureInfo pri) { try @@ -1396,7 +1423,7 @@ namespace Volian.Controls.Library _currentPri = pri; using (RevisionInfoList ril = RevisionInfoList.GetByItemID(pri.ItemID)) { - //_MyLog.WarnFormat("Context Menu 1 After GET - {0}", GC.GetTotalMemory(true)); + //_MyLog.WarnFormat("Context Menu 1 After GET - {0}", GC.GetTotalMemory(true)); if (ril.Count == 0) return; // no versions to list MenuItem mi = menuItemCollection.Add("Versions"); int lastApprovedRevisionID = 0; @@ -1477,7 +1504,7 @@ namespace Volian.Controls.Library RevisionConfig rc = ri.MyConfig as RevisionConfig; // bug fix: B2016-183 - add the child's name (ex Unit 1) to the export file name for Parent/Child procedures. int applIdx = rc.Applicability_Index; - string str = (applIdx > 0)?_currentPri.MyDocVersion.UnitNames[applIdx-1] +"_":""; // if parent/child get the defined child name to inlcude the export filename + string str = (applIdx > 0) ? _currentPri.MyDocVersion.UnitNames[applIdx - 1] + "_" : ""; // if parent/child get the defined child name to inlcude the export filename System.Xml.XmlDocument xd = new System.Xml.XmlDocument(); xd.LoadXml(ri.LatestVersion.ApprovedXML); string PEIPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS\PEI_" + Database.VEPROMS_SqlConnection.Database; @@ -1525,12 +1552,12 @@ namespace Volian.Controls.Library { MenuItem mip = mi.Parent as MenuItem; //B2021-086 Added the check for the last revision stage is an Approved stage - if ((ri.RevisionID < int.Parse(mip.Parent.Tag.ToString())) && ri.LatestVersion.MyStage.IsApproved!=0) + if ((ri.RevisionID < int.Parse(mip.Parent.Tag.ToString())) && ri.LatestVersion.MyStage.IsApproved != 0) superceded = true; } vlnTreeViewPdfArgs args = new vlnTreeViewPdfArgs(Volian.Base.Library.TmpFile.CreateFileName(ProcedureInfo.Get(ri.ItemID).PDFNumber), ri.LatestVersion.PDF, superceded ? "Superceded" : ""); OnViewPDF(sender, args); -// System.Diagnostics.Process pp = System.Diagnostics.Process.Start(GetDocPdf(ri, superceded)); + // System.Diagnostics.Process pp = System.Diagnostics.Process.Start(GetDocPdf(ri, superceded)); } void MultiUnitApprovedRevision_Click(object sender, EventArgs e) { @@ -1643,7 +1670,7 @@ namespace Volian.Controls.Library // 'from' is object copied // 'to' is object where paste was selected from #region Menu_Paste_ToDocVersion - if (tn.VEObject as DocVersionInfo != null) // paste item must be a proc + if (tn.VEObject as DocVersionInfo != null) // paste item must be a proc { if (iiClipboard.IsProcedure) { @@ -1653,7 +1680,7 @@ namespace Volian.Controls.Library // 3) 'to' docversion is 'source' and 'from' procedure is within this docversion // 4) 'to' docVersion is 'enhanced' and 'from' procedure is not bool canPaste = false; - + DocVersionInfo dvi = tn.VEObject as DocVersionInfo; DocVersionConfig dvc = dvi.DocVersionConfig; bool docVersionIsEnhanced = dvc.MyEnhancedDocuments != null && dvc.MyEnhancedDocuments.Count > 0 && dvc.MyEnhancedDocuments[0].Type == 0; @@ -1674,7 +1701,7 @@ namespace Volian.Controls.Library if (iiClipboard.IsRtfRaw) canPaste = false; // never paste an equation. if (canPaste) cm.MenuItems.Add("Paste Procedure", new EventHandler(mi_Click)); } - #endregion + #endregion } else { @@ -1685,7 +1712,7 @@ namespace Volian.Controls.Library { SectionInfo si = (tn.VEObject as SectionInfo != null) ? tn.VEObject as SectionInfo : null; #region Menu_Paste_ToFromProcedure - if (iiPasteHere.IsProcedure && iiClipboard.IsProcedure) // procedure can be pasted before/replace/after + if (iiPasteHere.IsProcedure && iiClipboard.IsProcedure) // procedure can be pasted before/replace/after { // Enhanced considerations, in order to paste a procedure around another procedure: NOTE that an 'enhanced' procedure cannot be in paste buffer! // 1) 'to' & 'from' both 'non', i.e. Neither can have enhanced config data (be source or enhanced) @@ -1709,16 +1736,16 @@ namespace Volian.Controls.Library bool prFromIsEnhanced = iiClipboard.IsEnhancedProcedure; bool prFromIsSource = pcFromCfg.MyEnhancedDocuments != null && pcFromCfg.MyEnhancedDocuments.Count > 0 && pcFromCfg.MyEnhancedDocuments[0].Type != 0; bool prCanPaste = false; - if (!prToIsEnhanced && !prToIsSource && !prFromIsEnhanced && !prFromIsSource) prCanPaste = true; // 1) - // else if ((!prToIsEnhanced && !prToIsSource) && prFromIsSource) prCanPaste = false; // 2) commented out because already set to false - else if (prToIsSource && !prFromIsEnhanced && !prFromIsSource) // 3) + if (!prToIsEnhanced && !prToIsSource && !prFromIsEnhanced && !prFromIsSource) prCanPaste = true; // 1) + // else if ((!prToIsEnhanced && !prToIsSource) && prFromIsSource) prCanPaste = false; // 2) commented out because already set to false + else if (prToIsSource && !prFromIsEnhanced && !prFromIsSource) // 3) { prCanPaste = true; okToReplace = false; } - else if (prToIsSource && iiPasteHere.MyDocVersion.VersionID == iiClipboard.MyDocVersion.VersionID) prCanPaste = true; // 4) - //else if (prToIsSource && iiPasteHere.MyDocVersion.VersionID != iiClipboard.MyDocVersion.VersionID) prCanPaste = false; // 5) commented out because already set to false - //else if (prToIsEnhanced && prFromIsSource) prCanPaste = false; // 6)commented out because already set to false + else if (prToIsSource && iiPasteHere.MyDocVersion.VersionID == iiClipboard.MyDocVersion.VersionID) prCanPaste = true; // 4) + //else if (prToIsSource && iiPasteHere.MyDocVersion.VersionID != iiClipboard.MyDocVersion.VersionID) prCanPaste = false; // 5) commented out because already set to false + //else if (prToIsEnhanced && prFromIsSource) prCanPaste = false; // 6)commented out because already set to false if (iiClipboard.IsRtfRaw) prCanPaste = okToReplace = prCanPaste = false; // never paste an equation. if (prCanPaste) cm.MenuItems.Add("Paste Procedure Before", new EventHandler(mi_Click)); if (okToReplace && prCanPaste) cm.MenuItems.Add("Replace Existing Procedure", new EventHandler(mi_Click)); @@ -1750,9 +1777,9 @@ namespace Volian.Controls.Library bool scFromIsEnhanced = iiClipboard.IsEnhancedSection; bool scFromIsSource = scFromCfg.MyEnhancedDocuments != null && scFromCfg.MyEnhancedDocuments.Count > 0 && scFromCfg.MyEnhancedDocuments[0].Type != 0; bool scCanPaste = false; - if (!prToIsEnhanced && !prToIsSource && !scFromIsEnhanced && !scFromIsSource) scCanPaste = true; // 1) + if (!prToIsEnhanced && !prToIsSource && !scFromIsEnhanced && !scFromIsSource) scCanPaste = true; // 1) else if (prToIsSource && !scFromIsEnhanced && !scFromIsSource) scCanPaste = true; - else if (prToIsSource && iiPasteHere.MyDocVersion.VersionID == iiClipboard.MyDocVersion.VersionID) scCanPaste = true; // 3) + else if (prToIsSource && iiPasteHere.MyDocVersion.VersionID == iiClipboard.MyDocVersion.VersionID) scCanPaste = true; // 3) if (iiClipboard.IsRtfRaw) scCanPaste = false; // never paste an equation. if (scCanPaste) cm.MenuItems.Add("Paste Section", new EventHandler(mi_Click)); } @@ -1824,9 +1851,9 @@ namespace Volian.Controls.Library bool stpFromIsEnhanced = iiClipboard.IsEnhancedStep; bool stpFromIsSource = stpFromCfg.MyEnhancedDocuments != null && stpFromCfg.MyEnhancedDocuments.Count > 0 && stpFromCfg.MyEnhancedDocuments[0].Type != 0; bool stpCanPaste = false; - if (!secToIsEnhanced && !secToIsSource && !stpFromIsEnhanced && !stpFromIsSource) stpCanPaste = true; // 1) + if (!secToIsEnhanced && !secToIsSource && !stpFromIsEnhanced && !stpFromIsSource) stpCanPaste = true; // 1) else if (secToIsSource && !stpFromIsEnhanced && !stpFromIsSource) stpCanPaste = true; // 2) - else if (secToIsSource && iiPasteHere.MyDocVersion.VersionID == iiClipboard.MyDocVersion.VersionID) stpCanPaste = true; // 3) + else if (secToIsSource && iiPasteHere.MyDocVersion.VersionID == iiClipboard.MyDocVersion.VersionID) stpCanPaste = true; // 3) if (iiClipboard.IsRtfRaw) stpCanPaste = false; // never paste an equation. if (stpCanPaste) cm.MenuItems.Add("Paste Step", new EventHandler(mi_Click)); } @@ -1850,8 +1877,8 @@ namespace Volian.Controls.Library bool stpFromIsEnhanced = iiClipboard.IsEnhancedStep; bool stpFromIsSource = stpFromCfg.MyEnhancedDocuments != null && stpFromCfg.MyEnhancedDocuments.Count > 0 && stpFromCfg.MyEnhancedDocuments[0].Type != 0; bool stpCanPaste = false; - if (!stpToIsEnhanced && !stpToIsSource && !stpFromIsEnhanced && !stpFromIsSource) stpCanPaste = true; // 1) - else if (stpToIsSource && !stpFromIsEnhanced && !stpFromIsSource) // 2) + if (!stpToIsEnhanced && !stpToIsSource && !stpFromIsEnhanced && !stpFromIsSource) stpCanPaste = true; // 1) + else if (stpToIsSource && !stpFromIsEnhanced && !stpFromIsSource) // 2) { stpCanPaste = true; okToReplace = false; @@ -1859,7 +1886,7 @@ namespace Volian.Controls.Library else if (stpToIsSource && iiPasteHere.MyDocVersion.VersionID == iiClipboard.MyDocVersion.VersionID) // 3 { stpCanPaste = true; - if (stpFromIsSource) okToReplace = false; // B2017-183: don't allow a replace to source steps + if (stpFromIsSource) okToReplace = false; // B2017-183: don't allow a replace to source steps } if (iiClipboard.IsRtfRaw) stpCanPaste = false; // never paste an equation. if (stpCanPaste && AddToInsertMenu(iiPasteHere, 0)) cm.MenuItems.Add("Paste Step Before", new EventHandler(mi_Click)); @@ -1892,7 +1919,7 @@ namespace Volian.Controls.Library OnQPrintSection(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0, mi.Text, (int)mi.Tag)); break; case "Print All Procedures for": - OnPrintAllProcedures(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0,mi.Text,(int)mi.Tag)); + OnPrintAllProcedures(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0, mi.Text, (int)mi.Tag)); break; case "Approve": OnApproveProcedure(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0, mi.Text, (int)mi.Tag)); @@ -1904,10 +1931,10 @@ namespace Volian.Controls.Library OnApproveSomeProcedures(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0, mi.Text, (int)mi.Tag)); break; case "Create Continuous Action Summary": - OnCreateContinuousActionSummary(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null,0,mi.Text,(int)mi.Tag)); + OnCreateContinuousActionSummary(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0, mi.Text, (int)mi.Tag)); break; case "Create Time Critical Action Summary": - OnCreateTimeCriticalActionSummary(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null,0,mi.Text,(int)mi.Tag)); + OnCreateTimeCriticalActionSummary(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0, mi.Text, (int)mi.Tag)); break; default: if (mip.Text.StartsWith("Showing Change Bars Starting")) @@ -1945,7 +1972,7 @@ namespace Volian.Controls.Library { if (selprc.IsEnhancedProcedure) { - selprc.DoUnlinkEnhanced(selprc, 0, !hasValidConnectingProc); // if no valid linked: enhtype = 0 since this an enhanced doc is getting unlinked + selprc.DoUnlinkEnhanced(selprc, 0, !hasValidConnectingProc); // if no valid linked: enhtype = 0 since this an enhanced doc is getting unlinked } else // from source { @@ -1953,7 +1980,7 @@ namespace Volian.Controls.Library if (hasValidConnectingProc) { ItemInfo lprc = ItemInfo.Get(seleds[0].ItemID); - lprc.DoUnlinkEnhanced(lprc, 0, !hasValidConnectingProc); + lprc.DoUnlinkEnhanced(lprc, 0, !hasValidConnectingProc); } else selprc.DoUnlinkEnhanced(selprc, seleds[0].Type, !hasValidConnectingProc); @@ -1973,7 +2000,7 @@ namespace Volian.Controls.Library { ItemInfo lprc = ItemInfo.Get(ed.ItemID); bool hasValidConnectingProc = CheckForValidEnhLink(lprc); - // if there is a valid connection, unlink both. Otherwise, just unlink this selected procedure. + // if there is a valid connection, unlink both. Otherwise, just unlink this selected procedure. if (hasValidConnectingProc) lprc.DoUnlinkEnhanced(lprc, ed.Type, !hasValidConnectingProc); else @@ -1997,37 +2024,37 @@ namespace Volian.Controls.Library OnNodeSI(this, new vlnTreeEventArgs(tn, null, 0)); return; } - if (mi.Text.StartsWith("Collapse")) - { + if (mi.Text.StartsWith("Collapse")) + { CollapseProcedures(); - return; - } + return; + } if (mi.Text == "Print Transition Report") { OnPrintTransitionReport(this, new vlnTreeEventArgs(SelectedNode as VETreeNode)); return; } - - - - - - - - - - - if (mi.Text == "Export Procedure Set" || mi.Text == "Export Procedure") - { - OnExportImportProcedureSets(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0)); - return; - } - if (mi.Text == "Import Procedure Set" || mi.Text == "Import Procedure") - { - OnExportImportProcedureSets(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 1)); - return; - } - if (mi.Text.StartsWith("Procedure Checked Out to") || mi.Text.StartsWith("Document Checked Out to")) + + + + + + + + + + + if (mi.Text == "Export Procedure Set" || mi.Text == "Export Procedure") + { + OnExportImportProcedureSets(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0)); + return; + } + if (mi.Text == "Import Procedure Set" || mi.Text == "Import Procedure") + { + OnExportImportProcedureSets(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 1)); + return; + } + if (mi.Text.StartsWith("Procedure Checked Out to") || mi.Text.StartsWith("Document Checked Out to")) { OnProcedureCheckedOutTo(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0)); return; @@ -2053,7 +2080,7 @@ namespace Volian.Controls.Library break; case "New Folder": SelectedNode.Expand(); - tv_NodeNew(MenuSelections.Folder); + tv_NodeNew(MenuSelections.Folder); break; case "Create Working Draft": SelectedNode.Expand(); @@ -2097,7 +2124,7 @@ namespace Volian.Controls.Library tv_NodeCopy(); break; // lots of paste options: - case "Paste Procedure": + case "Paste Procedure": case "Paste Procedure Before": case "Paste Procedure After": case "Paste Section": @@ -2131,7 +2158,7 @@ namespace Volian.Controls.Library break; } - + case "Delete": if (tv_NodeDelete()) { @@ -2197,14 +2224,14 @@ namespace Volian.Controls.Library UpdateROValues(SelectedNode as VETreeNode); break; case "Create Continuous Action Summary": - OnCreateContinuousActionSummary(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null,0)); + OnCreateContinuousActionSummary(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0)); break; - // F2022-024 Time Critical Action Summary + // F2022-024 Time Critical Action Summary case "Create Time Critical Action Summary": - OnCreateTimeCriticalActionSummary(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null,0)); + OnCreateTimeCriticalActionSummary(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0)); break; - // B2017-243 added the following two Cannot Paste items when dealing with enhanced documents - // when then user selects these menu items a message box will appear giving more information as to why it cannot be pasted + // B2017-243 added the following two Cannot Paste items when dealing with enhanced documents + // when then user selects these menu items a message box will appear giving more information as to why it cannot be pasted case "CANNOT PASTE HERE. Click for more information...": FlexibleMessageBox.Show("You have copied a document that is linked to an Enhanced Document.\n\n" + "It can only be pasted before or after another document, within the set, that is linked to an Enhanced Document.", "Cannot Paste Here"); @@ -2246,7 +2273,7 @@ namespace Volian.Controls.Library foreach (VETreeNode tnc in tn.Nodes) CollapseProcedures(tnc); if (tn.VEObject as DocVersionInfo == null && tn.VEObject as FolderInfo == null) - tn.Collapse(); + tn.Collapse(); _doingCollapseNode = true; // B2016-058 this will prevent a Drag Node error when collapsing an RNOs, Cautions, or Notes tree node } private void tv_RemoveChgIds() @@ -2301,12 +2328,12 @@ namespace Volian.Controls.Library FinalProgressBarMessage = "Cannot check-out Working Draft"; return; } - Cursor = Cursors.WaitCursor; // C2023-002: move wait cursor after check out error + Cursor = Cursors.WaitCursor; // C2023-002: move wait cursor after check out error int ownerid = MySessionInfo.CheckOutItem(MyDVI.VersionID, CheckOutType.DocVersion); using (DocVersion dv = DocVersion.Get(MyDVI.VersionID)) { swROUpdate = new System.IO.StreamWriter(ROFstInfo.ROUpdateResultsPath(MyDVI)); // RO changes placed in file in the Documents\VEPROMS folder - // B2022-026 RO Memory Reduction code - first load the new ro.fst so that we can assign the ROTableUpdate event to the correct roFstInfo + // B2022-026 RO Memory Reduction code - first load the new ro.fst so that we can assign the ROTableUpdate event to the correct roFstInfo if (dv.ROfstLoadingFigures || dv.NewerRoFst) // B2017-125 see if loading figures was completed { // only load the RO.fst @@ -2334,7 +2361,7 @@ namespace Volian.Controls.Library swROUpdate.Write(string.Format("Fixed Referenced Object for {1}({4}){0}Old Text: {2}{0}New Text: {3}{0}{0}", Environment.NewLine, (sender as ItemInfo).ShortPath, args.OldValue, args.NewValue, (sender as ItemInfo).ItemID)); } - private ProgressBarItem _ProgressBar=null; + private ProgressBarItem _ProgressBar = null; public ProgressBarItem ProgressBar { get { return _ProgressBar; } @@ -2447,7 +2474,7 @@ namespace Volian.Controls.Library return; } // C2017-003: ro data in sql server, check for sql connection string - if (MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.DBConnectionString != "cstring") + if (MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.DBConnectionString != "cstring") roloc = roloc + " \"" + MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.DBConnectionString + "\""; // C2021-026 pass in Parent/Child information (list of the children) // B2022-019 look at all DocVersions to find ParentChild information @@ -2498,7 +2525,7 @@ namespace Volian.Controls.Library } } VETreeNode tn = SelectedNode as VETreeNode; - + DocVersionInfo dvi = tn.VEObject as DocVersionInfo; // Check for paste into a docversion - queries/code is different than paste related to an item (into a proc or section) if (dvi != null) @@ -2512,7 +2539,7 @@ namespace Volian.Controls.Library // assume that item to paste is a procedure, otherwise the menuing would not have // included the paste options - tn = (VETreeNode) tn.Nodes[tn.Nodes.Count - 1]; + tn = (VETreeNode)tn.Nodes[tn.Nodes.Count - 1]; p = "After"; } else // this is an empty docversion: @@ -2548,7 +2575,7 @@ namespace Volian.Controls.Library if (OnlyProc && repitem != null && tmp != null) { VETreeNode tn1 = new VETreeNode(repitem); - tmp.Nodes.Add(tn1); + tmp.Nodes.Add(tn1); SelectedNode = tn1; } } @@ -2557,7 +2584,7 @@ namespace Volian.Controls.Library //if (p.IndexOf("Replace") <= -1) - this.Cursor = Cursors.Default; + this.Cursor = Cursors.Default; } public void PasteAsDocVersionChild(VETreeNode tn, int copyStartID) @@ -2574,7 +2601,7 @@ namespace Volian.Controls.Library } ItemInfo newProc = dvi.PasteChild(copyStartID); VETreeNode tn1 = new VETreeNode(newProc); - SelectedNode.Nodes.Add(tn1); // add tree node to end of list. + SelectedNode.Nodes.Add(tn1); // add tree node to end of list. SelectedNode = tn1; } @@ -2611,7 +2638,7 @@ namespace Volian.Controls.Library } if (pasteSectIntoEmptySect) { - tn.ChildrenLoaded = false; // force a reload of treenode + tn.ChildrenLoaded = false; // force a reload of treenode tn.LoadChildren(true); } SelectedNode = tn; @@ -2626,7 +2653,7 @@ namespace Volian.Controls.Library // the item to be pasted in the step editor and the tree. ItemInfo newItemInfo = null; // F2021-009 display a message if pasting step will results in more sub-step levels than are defined in the format - if (!ii.IsProcedure) + if (!ii.IsProcedure) ItemInfo.PasteStepIsWithinDefinedSubStepLevels(copyStartID, ii, false); if (ii.IsProcedure || !OnPasteItemInfo(this, new vlnTreeItemInfoPasteEventArgs(ii, copyStartID, pasteOpt, ii.MyContent.Type))) { @@ -2649,8 +2676,8 @@ namespace Volian.Controls.Library } private ItemInfo PasteReplace(VETreeNode tn, int copyStartID) { - VETreeNode prevtn = (VETreeNode) tn.PrevNode; - VETreeNode partn = (VETreeNode) tn.Parent; + VETreeNode prevtn = (VETreeNode)tn.PrevNode; + VETreeNode partn = (VETreeNode)tn.Parent; ItemInfo ii = tn.VEObject as ItemInfo; // F2021-009 display a message if pasting step will results in more sub-step levels than are defined in the format ItemInfo.PasteStepIsWithinDefinedSubStepLevels(copyStartID, ii, true); @@ -2689,7 +2716,7 @@ namespace Volian.Controls.Library SelectedNode.Nodes.Add(tn1); // add tree node to end of list. SelectedNode = tn1; } - private void tv_NodeCopy() + private void tv_NodeCopy() { if (SelectedNode == null) return; VETreeNode tn = SelectedNode as VETreeNode; @@ -2701,7 +2728,7 @@ namespace Volian.Controls.Library private void SetupNodeProperties() { VETreeNode tn = SelectedNode as VETreeNode; - if (tn==null)return; + if (tn == null) return; if ((tn.VEObject as FolderInfo) != null) OpenProperties(tn.VEObject as FolderInfo); @@ -2713,7 +2740,7 @@ namespace Volian.Controls.Library if (dvi != null && dvi.DocVersionAssociations != null && dvi.DocVersionAssociations.Count > 0) rofstid = dvi.DocVersionAssociations[0].MyROFst.ROFstID; OpenProperties(tn.VEObject as DocVersionInfo); if (dvi != null && dvi.DocVersionAssociations != null && dvi.DocVersionAssociations.Count > 0 && rofstid != dvi.DocVersionAssociations[0].MyROFst.ROFstID) - OnTabDisplay(this,new StepPanelTabDisplayEventArgs("DisplayROUpdateROFST")); + OnTabDisplay(this, new StepPanelTabDisplayEventArgs("DisplayROUpdateROFST")); } else if ((tn.VEObject as ProcedureInfo) != null) OpenProperties(tn.VEObject as ProcedureInfo); @@ -2727,7 +2754,7 @@ namespace Volian.Controls.Library { using (Folder folder = folderInfo.Get()) { - OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(string.Format("{0} Properties", folder.FolderConfig.Name), folder.FolderConfig)); + OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(string.Format("{0} Properties", folder.FolderConfig.Name), folder.FolderConfig)); } } private void OpenProperties(DocVersionInfo dvInfo) @@ -2741,7 +2768,7 @@ namespace Volian.Controls.Library { using (Procedure proc = procInfo.Get()) { - OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(string.Format("{0} {1} Properties", proc.ProcedureConfig.Number, proc.ProcedureConfig.Title), proc.ProcedureConfig)); + OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(string.Format("{0} {1} Properties", proc.ProcedureConfig.Number, proc.ProcedureConfig.Title), proc.ProcedureConfig)); } } private void OpenProperties(SectionInfo sectInfo) @@ -2754,7 +2781,7 @@ namespace Volian.Controls.Library title = string.Format("{0} {1} Properties", sectInfo.SectionConfig.Number, sectInfo.SectionConfig.Title); else title = string.Format("{0} Properties", sectInfo.SectionConfig.Title); - OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(title, sect.SectionConfig)); + OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(title, sect.SectionConfig)); } } private void OpenProperties(StepInfo stpinfo) @@ -2808,7 +2835,7 @@ namespace Volian.Controls.Library { if (newtype == MenuSelections.DocVersion) { - int dvid = -1; // flag to allow user to cancel from dialog & then we remove it. + int dvid = -1; // flag to allow user to cancel from dialog & then we remove it. using (DocVersion docversion = DocVersion.MakeDocVersion(parentfolder, "Working Draft", "Title", null, null, null)) { ShowBrokenRules(docversion.BrokenRulesCollection); @@ -2817,7 +2844,7 @@ namespace Volian.Controls.Library { docversion.Save(); tn = new VETreeNode(_LastDocVersionInfo); - SelectedNode.Nodes.Add(tn); // add tree node to end of list. + SelectedNode.Nodes.Add(tn); // add tree node to end of list. parentfolder.Reset_ChildFolders(); parentfolder.Reset_FolderDocVersions(); } @@ -2828,7 +2855,7 @@ namespace Volian.Controls.Library } else if (newtype == MenuSelections.Folder) { - int f1 = -1; // flag to allow user to cancel from dialog & then we remove it. + int f1 = -1; // flag to allow user to cancel from dialog & then we remove it. string uniquename = _LastFolderInfo.UniqueChildName("New Folder"); using (Folder folder = Folder.MakeFolder(parentfolder, parentfolder.MyConnection, uniquename, string.Empty, "Short Name", null, string.Empty, DateTime.Now, VlnSettings.UserID)) { @@ -2840,14 +2867,14 @@ namespace Volian.Controls.Library { folder.Save(); tn = new VETreeNode((IVEDrillDownReadOnly)_LastFolderInfo); - SelectedNode.Nodes.Add(tn); // add new tree node to end of childlist. + SelectedNode.Nodes.Add(tn); // add new tree node to end of childlist. } else f1 = folder.FolderID; } if (f1 != -1) Folder.Delete(f1); } - else if (newtype == MenuSelections.FolderAfter||newtype == MenuSelections.FolderBefore) + else if (newtype == MenuSelections.FolderAfter || newtype == MenuSelections.FolderBefore) { int f2 = -1; string uniquename = _LastFolderInfo.MyParent.UniqueChildName("New Folder"); @@ -2856,7 +2883,8 @@ namespace Volian.Controls.Library //since before/after folder is at same level as current folder //so need to use the parents order to determine where to place it using (FolderInfo parfolderinfo = FolderInfo.Get(parentfolder.MyParent.FolderID)) - { double? myorder = parfolderinfo.NewManualOrder(myindex); + { + double? myorder = parfolderinfo.NewManualOrder(myindex); using (Folder folder = Folder.MakeFolder(parentfolder.MyParent, parentfolder.MyConnection, uniquename, string.Empty, "Short Name", null, myorder, string.Empty, DateTime.Now, VlnSettings.UserID)) { ShowBrokenRules(folder.BrokenRulesCollection); @@ -2881,7 +2909,7 @@ namespace Volian.Controls.Library else if (newtype == MenuSelections.Procedure) { int p1 = -1; - using (Procedure procedure = Procedure.MakeProcedure(_LastDocVersionInfo, _LastDocVersionInfo.Procedures.Count!=0?_LastDocVersionInfo.Procedures[_LastDocVersionInfo.Procedures.Count-1]:null, null, "New Procedure", 0)) + using (Procedure procedure = Procedure.MakeProcedure(_LastDocVersionInfo, _LastDocVersionInfo.Procedures.Count != 0 ? _LastDocVersionInfo.Procedures[_LastDocVersionInfo.Procedures.Count - 1] : null, null, "New Procedure", 0)) { ShowBrokenRules(procedure.BrokenRulesCollection); SetLastValues(ProcedureInfo.Get(procedure.ItemID)); @@ -2890,8 +2918,8 @@ namespace Volian.Controls.Library { procedure.Save(); tn = new VETreeNode(_LastProcedureInfo); - SelectedNode.Nodes.Add(tn); // add tree node to end of list. - // The following line will allow for a refresh of the procedure list on the Working Draft's treenodes docversion (B2016-034) + SelectedNode.Nodes.Add(tn); // add tree node to end of list. + // The following line will allow for a refresh of the procedure list on the Working Draft's treenodes docversion (B2016-034) if (((SelectedNode as VETreeNode).VEObject as DocVersionInfo) != null) ((SelectedNode as VETreeNode).VEObject as DocVersionInfo).ResetProcedures(); if (procedure.MyProcedureInfo.CreateEnhanced) { @@ -2933,21 +2961,21 @@ namespace Volian.Controls.Library else p2 = procedure.ItemID; } - if (p2 != -1) + if (p2 != -1) DeleteItemInfoAndChildren(_LastProcedureInfo); // Delete Item and reset Previous and Next } #endregion #region InsertSection - else if (newtype == MenuSelections.Section) // Insert subsection at end of parents section list + else if (newtype == MenuSelections.Section) // Insert subsection at end of parents section list { string message = string.Empty; if (_LastProcedureInfo != null) if (!MySessionInfo.CanCheckOutItem(_LastProcedureInfo.ItemID, CheckOutType.Procedure, ref message)) - { - FlexibleMessageBox.Show(this, message, "Item Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning); - OnUnPauseRefresh(this, null); - return; - } + { + FlexibleMessageBox.Show(this, message, "Item Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning); + OnUnPauseRefresh(this, null); + return; + } int s1 = -1; if (!(_LastProcedureInfo == null) || !(_LastSectionInfo == null)) { @@ -2977,7 +3005,7 @@ namespace Volian.Controls.Library "If you would like to view or copy these hidden steps you will need to go\n" + "into the properties of this section and check the Editable Data checkbox.\n" + "You will then be able to view and copy those steps. When finished, open\n" + - "the properties page again and uncheck the Editable Data checkbox.\n\n"+ + "the properties page again and uncheck the Editable Data checkbox.\n\n" + "Do you want to continue creating the subsection?"; if (FlexibleMessageBox.Show(this, msgstr, "Subsection Insert", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { @@ -2989,7 +3017,7 @@ namespace Volian.Controls.Library if (!hasMetaSubs) doPseudo = true; } } - using(Section section = CreateNewSection()) + using (Section section = CreateNewSection()) { ShowBrokenRules(section.BrokenRulesCollection); SectionInfo savLastSectionInfo = _LastSectionInfo; @@ -2999,10 +3027,10 @@ namespace Volian.Controls.Library if (!doPseudo) { tn = new VETreeNode(_LastSectionInfo); - SelectedNode.Nodes.Add(tn); // add tree node to end of list. - // if the new section was flagged as either having an enhanced link for Title or Contents, create the - // Enhanced section: - Section sectiontmp = Section.Get(section.ItemID); // need to do this because of 'caching' problem. + SelectedNode.Nodes.Add(tn); // add tree node to end of list. + // if the new section was flagged as either having an enhanced link for Title or Contents, create the + // Enhanced section: + Section sectiontmp = Section.Get(section.ItemID); // need to do this because of 'caching' problem. if (sectiontmp.SectionConfig.LinkEnhanced == "T" || sectiontmp.SectionConfig.LinkEnhanced == "Y") CreateEnhancedForSection(newtype, sectiontmp, savLastSectionInfo, sectiontmp.DisplayNumber, sectiontmp.MyContent.Text); sectiontmp.Dispose(); @@ -3013,7 +3041,7 @@ namespace Volian.Controls.Library // may have to add a 'steps' node if a step(s) already exist... ItemInfo ii = (SelectedNode as VETreeNode).VEObject as ItemInfo; int cpindx = 0; - if (SelectedNode.Nodes.Count>0) + if (SelectedNode.Nodes.Count > 0) { VETreeNode vtn = SelectedNode.Nodes[0] as VETreeNode; // B2017-014: removed code that was adding a 2nd section part node. and also select node to @@ -3023,13 +3051,13 @@ namespace Volian.Controls.Library // B2017-014: removed code that was adding a 2nd section part node. } } - else // Properties was canceled out of: + else // Properties was canceled out of: s1 = section.ItemID; } if (s1 != -1) { DeleteItemInfoAndChildren(_LastSectionInfo);// Delete Item and reset Previous and Next - // B2020-087 refresh the tree node after canceling the creation of the subsection + // B2020-087 refresh the tree node after canceling the creation of the subsection _LastTreeNode.ChildrenLoaded = false; _LastTreeNode.RefreshNode(); _LastTreeNode.Collapse(); @@ -3057,14 +3085,14 @@ namespace Volian.Controls.Library if (OnNodeOpenProperty(this, new vlnTreePropertyEventArgs("New Section", section.SectionConfig)) == DialogResult.OK) { int indx = tvindex + ((newtype == MenuSelections.SectionBefore) ? 0 : 1); - int itemido = (indx >= par.Nodes.Count)?-1:(((par.Nodes[indx] as VETreeNode).VEObject) as ItemInfo).ItemID; - if (indx >= par.Nodes.Count || (par.Nodes[indx] as VETreeNode).VEObject.ToString() != _LastSectionInfo.ToString() || itemido !=section.ItemID) + int itemido = (indx >= par.Nodes.Count) ? -1 : (((par.Nodes[indx] as VETreeNode).VEObject) as ItemInfo).ItemID; + if (indx >= par.Nodes.Count || (par.Nodes[indx] as VETreeNode).VEObject.ToString() != _LastSectionInfo.ToString() || itemido != section.ItemID) { tn = new VETreeNode(_LastSectionInfo); par.Nodes.Insert(indx, tn); // if the new section was flagged as either having an enhanced link for Title or Contents, create the // Enhanced section: - Section sectiontmp = Section.Get(section.ItemID); // need to do this because of 'caching' problem. + Section sectiontmp = Section.Get(section.ItemID); // need to do this because of 'caching' problem. if (sectiontmp.SectionConfig.LinkEnhanced == "T" || sectiontmp.SectionConfig.LinkEnhanced == "Y") CreateEnhancedForSection(newtype, sectiontmp, savLastSectionInfo, sectiontmp.DisplayNumber, sectiontmp.MyContent.Text); sectiontmp.Dispose(); @@ -3076,7 +3104,7 @@ namespace Volian.Controls.Library if (s2 != -1) { DeleteItemInfoAndChildren(_LastSectionInfo);// Delete Item and reset Previous and Next - // B2020-087 refresh the tree node after canceling the creation of the subsection + // B2020-087 refresh the tree node after canceling the creation of the subsection _LastTreeNode.ChildrenLoaded = false; _LastTreeNode.RefreshNode(); _LastTreeNode.Collapse(); @@ -3084,7 +3112,7 @@ namespace Volian.Controls.Library } #endregion #region InsertStep - else if (newtype == MenuSelections.Step) // insert step from section - no substeps from tree. + else if (newtype == MenuSelections.Step) // insert step from section - no substeps from tree. { string message = string.Empty; if (!MySessionInfo.CanCheckOutItem(_LastSectionInfo.MyProcedure.ItemID, CheckOutType.Procedure, ref message)) @@ -3161,7 +3189,7 @@ namespace Volian.Controls.Library using (Procedure newenhProcedure = Procedure.MakeProcedure(enhDVInfo, enhDVInfo.Procedures.Count != 0 ? enhDVInfo.Procedures[enhDVInfo.Procedures.Count - 1] : null, null, "New Procedure", 0)) { SaveEnhancedForProcedure(sourceProc, newenhProcedure, ded.Type); - RefreshRelatedNode(ProcedureInfo.Get(newenhProcedure.ItemID)); // this updates the treeview to include the new enhanced procedure + RefreshRelatedNode(ProcedureInfo.Get(newenhProcedure.ItemID)); // this updates the treeview to include the new enhanced procedure } } } @@ -3259,7 +3287,7 @@ namespace Volian.Controls.Library { SectionConfig newenhcfg = new SectionConfig(newenhSection); newenhcfg.AddEnhancedDocument(0, sourceSect.ItemID); - newenhcfg.SaveEnhancedDocuments(); // does this save data? + newenhcfg.SaveEnhancedDocuments(); // does this save data? using (Content c1 = Content.Get(newenhSection.ContentID)) { c1.Config = newenhcfg.ToString(); @@ -3273,7 +3301,7 @@ namespace Volian.Controls.Library cs.Save(); } } - + private Section CreateNewSection() { // B2020-087 the config for SubSection_Edit was sometimes set even when there wasn't any subsections, @@ -3313,7 +3341,7 @@ namespace Volian.Controls.Library // The parent step was not open in the step editor, just create new step(s) and add treenode. int newId = -1; // B2020-076: if this step has a template, insert template steps. - int topType = ii.GetSmartTemplateTopLevelIndxOfThisType(20002); + int topType = ii.GetSmartTemplateTopLevelIndxOfThisType(20002); if (topType != -1) { ItemInfo tmp = null; @@ -3340,12 +3368,12 @@ namespace Volian.Controls.Library // see if enhanced related steps need created: SectionConfig scfgE = _LastItemInfo.ActiveSection.MyConfig as SectionConfig; // C2018-003 fixed use of getting the active section - if (scfgE != null && scfgE.Section_LnkEnh=="Y") + if (scfgE != null && scfgE.Section_LnkEnh == "Y") { // set up which item to insert from based on whether editor was open (see comment from 11/17 above). EnhancedDocuments enhdocs = null; ItemInfo.EAddpingPart addpart = ItemInfo.EAddpingPart.Child; - if (_LastItemInfo.MyPrevious != null) // the code above will do the MakeStep regardless of whether editor is up if this is the only step. + if (_LastItemInfo.MyPrevious != null) // the code above will do the MakeStep regardless of whether editor is up if this is the only step. { addpart = ItemInfo.EAddpingPart.After; ItemInfo lstSrc = _LastItemInfo.MyPrevious; @@ -3517,7 +3545,7 @@ namespace Volian.Controls.Library result = FlexibleMessageBox.Show("Are you sure you want to delete this " + typeDescription + "?", "Verify Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question); } - if (_LastProcedureInfo != null || result == DialogResult.Yes) + if (_LastProcedureInfo != null || result == DialogResult.Yes) { if (_LastFolderInfo != null) { @@ -3533,7 +3561,7 @@ namespace Volian.Controls.Library { foreach (DVEnhancedDocument dve in dvc.MyEnhancedDocuments) { - if (dve.Type != 0) + if (dve.Type != 0) DocVersion.Delete(dve.VersionID); else { @@ -3579,7 +3607,7 @@ namespace Volian.Controls.Library if (ed.Type != 0) enhIds.Add(ed.ItemID); // always return false because an event gets fired to delete tree nodes. if (!DeleteItemInfoAndChildren(_LastProcedureInfo)) return false; - + _LastProcedureInfo = null; foreach (int enhId in enhIds) { @@ -3623,7 +3651,7 @@ namespace Volian.Controls.Library // just clear enhanced links back _LastSectionInfo.ClearEnhancedSectionLink(); } - OnSectionShouldClose(this, new vlnTreeSectionInfoEventArgs(_LastSectionInfo,true)); + OnSectionShouldClose(this, new vlnTreeSectionInfoEventArgs(_LastSectionInfo, true)); // always return false because an event gets fired to delete tree nodes. if (!DeleteItemInfoAndChildren(_LastSectionInfo)) { @@ -3678,7 +3706,7 @@ namespace Volian.Controls.Library } return false; } - + public void RemoveFolder(int folderId) { TreeNode nodeToRemove = FindNodeById(folderId, this.Nodes); @@ -3724,11 +3752,11 @@ namespace Volian.Controls.Library // do delete using RTBItem - this manages windowing from the step editor. // If the procedure is open & you're deleting procedure, you want to close open // window - this is done in DisplayTabControl-DeleteStepTabItem. - OnProcessing(true,"Deleting"); + OnProcessing(true, "Deleting"); if (!OnDeleteItemInfo(this, new vlnTreeItemInfoEventArgs(ii))) Item.DeleteItemAndChildren(ii); - OnProcessing(false,"Deleted"); - OnProcessingComplete(dtStart,"Deleted"); + OnProcessing(false, "Deleted"); + OnProcessingComplete(dtStart, "Deleted"); if (deletedSection) { // B2020-087 if we deleted the last sub section, then clear the SubSection_Edit in the parent's config @@ -3747,12 +3775,12 @@ namespace Volian.Controls.Library } catch (System.Data.SqlClient.SqlException ex) { - OnProcessing(false,"Delete Failed"); - OnProcessingComplete(dtStart,"Delete Failed"); + OnProcessing(false, "Delete Failed"); + OnProcessingComplete(dtStart, "Delete Failed"); // C2020-033: Support delete to bring up Search/Incoming Transitions panel if (ex.Message.Contains("has External Transitions")) { - ItemInfo iis = ItemInfo.Get(ii.ItemID); + ItemInfo iis = ItemInfo.Get(ii.ItemID); OnSearchIncTransIn(this, new vlnTreeItemInfoEventArgs(iis)); iis = ii.HandleSqlExceptionOnDelete(ex); } @@ -3768,13 +3796,13 @@ namespace Volian.Controls.Library private void OnProcessingComplete(DateTime dtStart, string message) { if (ProcessingComplete != null) - ProcessingComplete(this, new vlnTreeTimeEventArgs(dtStart,message)); + ProcessingComplete(this, new vlnTreeTimeEventArgs(dtStart, message)); } public event vlnTreeViewStatusEvent Processing; private void OnProcessing(bool status, string message) { if (Processing != null) - Processing(this, new vlnTreeStatusEventArgs(status,message)); + Processing(this, new vlnTreeStatusEventArgs(status, message)); } #endregion #region SetLastValuesAndSaveIfChangedStuff @@ -3850,7 +3878,7 @@ namespace Volian.Controls.Library ItemInfo iidrag = ((VETreeNode)dragNode).VEObject as ItemInfo; FolderInfo fdrag = ((VETreeNode)dragNode).VEObject as FolderInfo; DocVersionInfo ddrag = ((VETreeNode)dragNode).VEObject as DocVersionInfo; - if ((iidrag == null && fdrag == null && ddrag == null)) + if ((iidrag == null && fdrag == null && ddrag == null)) { FlexibleMessageBox.Show("Cannot drag/drop a grouping node."); return; @@ -3865,7 +3893,7 @@ namespace Volian.Controls.Library } catch (Exception ex) { - if(_MyLog.IsErrorEnabled)_MyLog.Error("tv_ItemDrag", ex); + if (_MyLog.IsErrorEnabled) _MyLog.Error("tv_ItemDrag", ex); } } #endregion @@ -3901,7 +3929,7 @@ namespace Volian.Controls.Library { get { return _lastScroll; } } - private string _location = string.Empty; + private string _location = string.Empty; #endregion #region Constructors public DropLocation(TreeView tv, System.Windows.Forms.DragEventArgs e, DateTime lastScroll) @@ -4018,7 +4046,7 @@ namespace Volian.Controls.Library { return; } - //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("Line at {0} Node {1}[{2}] {3}", _location, _dropNode.Text, _index, _position.ToString()); + //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("Line at {0} Node {1}[{2}] {3}", _location, _dropNode.Text, _index, _position.ToString()); // Changed the color of the drag indicator to always be red Color lc = (_position == DropPosition.After ? Color.Red : Color.Red); Brush lb = (_position == DropPosition.After ? Brushes.Red : Brushes.Red); @@ -4045,12 +4073,12 @@ namespace Volian.Controls.Library //if (e.Effect == DragDropEffects.None) return; if (_dropNode != null) { -// if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("ShowLocation1 {0} {1}", e.Effect.ToString(), DateTime.Now.Millisecond); + // if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("ShowLocation1 {0} {1}", e.Effect.ToString(), DateTime.Now.Millisecond); DragHelper.ImageList_DragShowNolock(false); TreeView tv = _dropNode.TreeView; TreeNode tmp = tv.GetNodeAt(tv.PointToClient(new Point(e.X, e.Y))); -// if (!ScrollOnly) -// { + // if (!ScrollOnly) + // { if (ScrollTreeView(tmp) || !ScrollOnly) { //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("ShowLocation2 {0} {1}", e.Effect.ToString(), DateTime.Now.Millisecond); @@ -4060,11 +4088,11 @@ namespace Volian.Controls.Library //tv.SelectedNode = dropNode; Graphics g = tv.CreateGraphics(); TreeNodeTriangle(g); - if (_position != DropPosition.Child)InsertPointer(tmp, g); + if (_position != DropPosition.Child) InsertPointer(tmp, g); } } -// } -// else ScrollTreeView(tmp); + // } + // else ScrollTreeView(tmp); DragHelper.ImageList_DragShowNolock(true); } } @@ -4087,10 +4115,10 @@ namespace Volian.Controls.Library tn.NextVisibleNode.EnsureVisible();// Make sure that the next node is visible else if (tn.PrevVisibleNode != null && tn.PrevVisibleNode.PrevVisibleNode != null && tn.PrevVisibleNode.PrevVisibleNode.IsVisible == false) - tn.PrevVisibleNode.PrevVisibleNode.EnsureVisible();// Make sure that the previous node is visible } - else + tn.PrevVisibleNode.PrevVisibleNode.EnsureVisible();// Make sure that the previous node is visible } + else if (tn.PrevVisibleNode != null && tn.PrevVisibleNode.IsVisible == false) - tn.PrevVisibleNode.EnsureVisible();// Make sure that the previous node is visible + tn.PrevVisibleNode.EnsureVisible();// Make sure that the previous node is visible retval = (top != tn.Bounds.Top); // if (retval) if(_MyLog.IsInfoEnabled)_MyLog.Info("Scroll"); } @@ -4123,14 +4151,14 @@ namespace Volian.Controls.Library { DragDropEffects ee = e.Effect; if (e.KeyState == 13) // Shift and Control Keys to do a move. - ee = DragDropEffects.Move; + ee = DragDropEffects.Move; else ee = DragDropEffects.None; // Default - Do nothing - if (IsChild(dragNode, dl.DropNode)) // Don't copy or move to a child node + if (IsChild(dragNode, dl.DropNode)) // Don't copy or move to a child node ee = DragDropEffects.None; - else if (IsDocVersion((VETreeNode)dragNode)) // Don't move docversions + else if (IsDocVersion((VETreeNode)dragNode)) // Don't move docversions ee = DragDropEffects.None; - else if (IsFolder((VETreeNode)dragNode)) // Folder move is only valid if moving to folder with NO docversions + else if (IsFolder((VETreeNode)dragNode)) // Folder move is only valid if moving to folder with NO docversions { FolderInfo fdropi = ((VETreeNode)dl.DropNode).VEObject as FolderInfo; if (fdropi == null || fdropi.FolderDocVersionCount > 0) ee = DragDropEffects.None; @@ -4141,7 +4169,7 @@ namespace Volian.Controls.Library // For HLP, just move within the same procedure // TODO: allow for section move within subsections. ProcedureInfo pdropi = ((VETreeNode)dl.DropNode).VEObject as ProcedureInfo; - if (pdropi == null || (dragNode.Parent != dl.DropNode)) ee = DragDropEffects.None; + if (pdropi == null || (dragNode.Parent != dl.DropNode)) ee = DragDropEffects.None; } else if (!IsFolder((VETreeNode)dragNode) && (dragNode.Parent != dl.DropNode)) ee = DragDropEffects.None; @@ -4152,7 +4180,7 @@ namespace Volian.Controls.Library } catch (Exception ex) { - if(_MyLog.IsErrorEnabled)_MyLog.Error("tv_DragOver", ex); + if (_MyLog.IsErrorEnabled) _MyLog.Error("tv_DragOver", ex); } } @@ -4206,7 +4234,7 @@ namespace Volian.Controls.Library } catch (Exception ex) { - if(_MyLog.IsErrorEnabled)_MyLog.Error("GetTreeNodeFromData", ex); + if (_MyLog.IsErrorEnabled) _MyLog.Error("GetTreeNodeFromData", ex); } } return null; @@ -4232,7 +4260,7 @@ namespace Volian.Controls.Library this.SelectedNode = dragNode; FolderInfo fdragi = ((VETreeNode)dragNode).VEObject as FolderInfo; FolderInfo fdropi = ((VETreeNode)_LastDropLocation.DropNode).VEObject as FolderInfo; - if (fdragi != null && fdropi != null && fdropi.FolderDocVersionCount==0) + if (fdragi != null && fdropi != null && fdropi.FolderDocVersionCount == 0) { using (Folder fdrag = fdragi.Get()) { @@ -4251,7 +4279,7 @@ namespace Volian.Controls.Library // may either be a document version or a procedure depending on where the user wants to position the procedure. ProcedureInfo pdragi = ((VETreeNode)dragNode).VEObject as ProcedureInfo; ProcedureInfo pdropi = null; - if (pdragi != null) // moving a procedure + if (pdragi != null) // moving a procedure { pdropi = ((VETreeNode)_LastDropLocation.DropNode).VEObject as ProcedureInfo; if (pdropi != null && pdragi.ActiveParent == pdropi.ActiveParent) @@ -4271,7 +4299,7 @@ namespace Volian.Controls.Library // Allow drag/drop of sections within the same procedure or same section (if subsection) (must have same parent) SectionInfo sdragi = ((VETreeNode)dragNode).VEObject as SectionInfo; SectionInfo sdropi = null; - if (sdragi != null) // moving a section + if (sdragi != null) // moving a section { sdropi = ((VETreeNode)_LastDropLocation.DropNode).VEObject as SectionInfo; if (sdropi != null && sdragi.ActiveParent == sdropi.ActiveParent) @@ -4292,7 +4320,7 @@ namespace Volian.Controls.Library // Allow drag/drop of steps within the same parent only StepInfo stdragi = ((VETreeNode)dragNode).VEObject as StepInfo; StepInfo stdropi = null; - if (stdragi != null) // moving a step + if (stdragi != null) // moving a step { stdropi = ((VETreeNode)_LastDropLocation.DropNode).VEObject as StepInfo; if (stdropi != null && stdragi.ActiveParent == stdropi.ActiveParent) @@ -4316,36 +4344,36 @@ namespace Volian.Controls.Library } catch (Exception ex) { - if(_MyLog.IsErrorEnabled)_MyLog.Error("tv_DragDrop", ex); + if (_MyLog.IsErrorEnabled) _MyLog.Error("tv_DragDrop", ex); } } -// private void DumpMembers(object o) -// { -// Type t = o.GetType(); -// //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("\r\n\r\nMembers for type {0}", t.ToString()); -// MemberInfo[] mis = t.GetMembers(); -// int i = 0; -// foreach (MemberInfo mi in mis) -// { -// i++; -// try -// { -// //if(mi.MemberType != MemberTypes.Method) -// //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0} {1} {2}", i, mi.Name, mi.MemberType); -//// if (fi.Name == "TreeView") -//// fi.SetValue(o, null); -// } -// catch (Exception ex) -// { -// if(_MyLog.IsErrorEnabled)_MyLog.Error("DumpMembers", ex); -// } -// } -// } + // private void DumpMembers(object o) + // { + // Type t = o.GetType(); + // //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("\r\n\r\nMembers for type {0}", t.ToString()); + // MemberInfo[] mis = t.GetMembers(); + // int i = 0; + // foreach (MemberInfo mi in mis) + // { + // i++; + // try + // { + // //if(mi.MemberType != MemberTypes.Method) + // //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0} {1} {2}", i, mi.Name, mi.MemberType); + //// if (fi.Name == "TreeView") + //// fi.SetValue(o, null); + // } + // catch (Exception ex) + // { + // if(_MyLog.IsErrorEnabled)_MyLog.Error("DumpMembers", ex); + // } + // } + // } private TreeNode Clone(TreeNode tn) { TreeNode tmp = (TreeNode)tn.Clone(); - ExpandMatch(tmp,tn); + ExpandMatch(tmp, tn); return tmp; } private void tv_DragDropOld(object sender, System.Windows.Forms.DragEventArgs e) diff --git a/PROMS/Volian.Print.Library/vlnParagraph.cs b/PROMS/Volian.Print.Library/vlnParagraph.cs index c9c5de92..68a13f7a 100644 --- a/PROMS/Volian.Print.Library/vlnParagraph.cs +++ b/PROMS/Volian.Print.Library/vlnParagraph.cs @@ -4390,7 +4390,8 @@ namespace Volian.Print.Library SectionConfig sch = MyItemInfo.MyConfig as SectionConfig; if (sch != null && sch.Section_PrintHdr != "Y") doprint = false; } - if (doprint && !UseTemplateKeepOnCurLine(itemInfo)) + //C2025-021 Add logic to PROMS to support a special High Level Step type that is not printed. + if (doprint && !UseTemplateKeepOnCurLine(itemInfo) && !itemInfo.IsType("InvisibleHigh")) { float tyoff = yoff; if (itemInfo.Steps != null) @@ -5751,9 +5752,21 @@ namespace Volian.Print.Library private StringBuilder _RtfSB = null; public string GetRtf(ItemInfo itemInfo, string prefix, string suffix) { - int profileDepth = ProfileTimer.Push(">>>> GetRtf"); + int profileDepth = ProfileTimer.Push(">>>> GetRtf"); _RtfSB = new StringBuilder(); DisplayText vlntxt = new DisplayText(itemInfo, E_EditPrintMode.Print, E_ViewMode.View, true, E_FieldToEdit.StepText, false, prefix, suffix, MyPageHelper.MyPromsPrinter.RemoveTrailingHardReturnsAndSpaces != null); + + //C2025-021 Add logic to PROMS to support a special High Level Step type that is not printed. + if (itemInfo.IsType("InvisibleHigh")) + { + System.Drawing.Font myHighFont = vlntxt.TextFont.WindowsFont; + _RtfSB.Append(AddFontTable(myHighFont)); + _RtfSB.Append("}"); + string rtfHigh = _RtfSB.ToString(); + ProfileTimer.Pop(profileDepth); + return rtfHigh; + } + // C2021-010: Remove trailing returns/spaces & manual page breaks & allow save. if (DisplayText.RemoveTrailingBlankID > 0 && !MyPageHelper.MyPromsPrinter.RemoveTrailingHardReturnsAndSpaces.Contains(itemInfo.ItemID)) MyPageHelper.MyPromsPrinter.RemoveTrailingHardReturnsAndSpaces.Add(DisplayText.RemoveTrailingBlankID); System.Drawing.Font myFont = vlntxt.TextFont.WindowsFont; diff --git a/PROMS/Volian.Print.Library/vlnTab.cs b/PROMS/Volian.Print.Library/vlnTab.cs index 893530d6..40fce490 100644 --- a/PROMS/Volian.Print.Library/vlnTab.cs +++ b/PROMS/Volian.Print.Library/vlnTab.cs @@ -69,7 +69,7 @@ namespace Volian.Print.Library private string symblsStr = "\u25CF\u0394"; // string of possible symbol character in a tab // add symbol characters as needed // "\u25CF" - solid bullet - // \x0394 - delta + // \u0394 - delta private System.Drawing.FontStyle GetSysFontStyle(VE_Font f) { @@ -267,7 +267,8 @@ namespace Volian.Print.Library } } Rtf = GetRtf(origTab, vFont); - Rtf = Rtf.Replace("\u0394", @"\f1\u916?\f0 "); // delta 0x0394 + Rtf = Rtf.Replace("\u0394", @"\f1\u916?\f0 "); // delta 0x0394 + Rtf = Rtf.Replace("\u03BF", @"\f1\u959?\f0 "); // F2025-015 lowercase omicron check with hex value replace with RTF string if (ScriptCaution) { Rtf = GetRtf("\u25CFCaution ", vFont);