Merge pull request 'Development' (#570) from Development into master
Reviewed-on: #570
This commit is contained in:
commit
0b40569727
@ -92,6 +92,10 @@
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="epall\EPFormatTST1.xml" />
|
||||
<Content Include="epall\EPFormatTST2.xml" />
|
||||
<Content Include="epall\EPFormatTST3.xml" />
|
||||
<Content Include="epall\EPFormatTST4.xml" />
|
||||
<Content Include="fmtall\AEPall.xml">
|
||||
<SubType>Designer</SubType>
|
||||
</Content>
|
||||
@ -176,6 +180,7 @@
|
||||
<Content Include="fmtall\CPL_03all.xml" />
|
||||
<Content Include="fmtall\CPSAMGDataall.xml" />
|
||||
<Content Include="fmtall\CPSAMGDEVall.xml" />
|
||||
<Content Include="fmtall\EPTST1all.xml" />
|
||||
<Content Include="fmtall\CWEall.xml" />
|
||||
<Content Include="fmtall\CWEDEVall.xml" />
|
||||
<Content Include="fmtall\CWERall.xml" />
|
||||
@ -187,6 +192,7 @@
|
||||
<Content Include="fmtall\EFSGBCKall.xml" />
|
||||
<Content Include="fmtall\ELFDEVall.xml" />
|
||||
<Content Include="fmtall\ENall.xml" />
|
||||
<Content Include="fmtall\EPTST2all.xml" />
|
||||
<Content Include="fmtall\ESFDEVall.xml" />
|
||||
<Content Include="fmtall\EXCLNall.xml" />
|
||||
<Content Include="fmtall\EXCLN_00all.xml" />
|
||||
|
BIN
PROMS/Formats/epall/EPFormatTST1.xml
Normal file
BIN
PROMS/Formats/epall/EPFormatTST1.xml
Normal file
Binary file not shown.
BIN
PROMS/Formats/epall/EPFormatTST2.xml
Normal file
BIN
PROMS/Formats/epall/EPFormatTST2.xml
Normal file
Binary file not shown.
BIN
PROMS/Formats/epall/EPFormatTST3.xml
Normal file
BIN
PROMS/Formats/epall/EPFormatTST3.xml
Normal file
Binary file not shown.
BIN
PROMS/Formats/epall/EPFormatTST4.xml
Normal file
BIN
PROMS/Formats/epall/EPFormatTST4.xml
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
PROMS/Formats/fmtall/EPTST1all.xml
Normal file
BIN
PROMS/Formats/fmtall/EPTST1all.xml
Normal file
Binary file not shown.
BIN
PROMS/Formats/fmtall/EPTST2all.xml
Normal file
BIN
PROMS/Formats/fmtall/EPTST2all.xml
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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
|
||||
|
45
PROMS/VEPROMS.CSLA.Library/Config/AnnotationConfig.cs
Normal file
45
PROMS/VEPROMS.CSLA.Library/Config/AnnotationConfig.cs
Normal file
@ -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 = "<Config/>";
|
||||
_Xp = new XMLProperties(xml);
|
||||
}
|
||||
|
||||
public AnnotationConfig()
|
||||
{
|
||||
_Xp = new XMLProperties();
|
||||
}
|
||||
public override string ToString()
|
||||
{
|
||||
string s = _Xp.ToString();
|
||||
if (s == "<Config/>" || s == "<Config></Config>") 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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -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<string, int> _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;
|
||||
}
|
||||
public partial class FormatInfo : IFormatOrFormatInfo
|
||||
}
|
||||
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
|
||||
{
|
||||
//transition report stuff
|
||||
private static Dictionary<int, string> _TransitionTypes;
|
||||
|
@ -449,7 +449,6 @@ namespace VEPROMS.CSLA.Library
|
||||
{
|
||||
StringBuilder sret = new StringBuilder();
|
||||
ItemInfo pitem = this;
|
||||
|
||||
while (!pitem.IsSection && !pitem.IsHigh)
|
||||
{
|
||||
using (StepInfo stpinfo = StepInfo.Get(pitem.ItemID))
|
||||
@ -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<string> steptypelist = new List<string>();
|
||||
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<string> 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,7 +4704,9 @@ 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 (ActiveFormat.PlantFormat.FormatData.SectData.UseMetaSections)
|
||||
{
|
||||
if (sd.StepSectionLayoutData.ShowSectionTitles
|
||||
&& !MyDocStyle.CancelSectTitle
|
||||
@ -4663,22 +4714,26 @@ namespace VEPROMS.CSLA.Library
|
||||
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.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
|
||||
if (doMeta) // C2025-036 reduce un-needed processing
|
||||
{
|
||||
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 (doMeta && IsSequential && (InNote() || InCaution() ||
|
||||
if (IsSequential && (InNote() || InCaution() ||
|
||||
(MyParent.IsEquipmentList && !MyParent.FormatStepData.TabData.IdentPrint.Contains("{seq}"))))
|
||||
{
|
||||
// if immediate parent is note, caution or equip, use numeric, otherwise use alpha.
|
||||
@ -4693,6 +4748,7 @@ namespace VEPROMS.CSLA.Library
|
||||
lv = lv % 2;
|
||||
tbformat = (lv == 0) ? "{numeric}." : "{alpha}.";
|
||||
}
|
||||
}
|
||||
bool trimTabStart = false;
|
||||
bool dontTrimParentTabBeforeAppending = false; // B2019-011 for Barakah Alarm format
|
||||
if (useSubStepTabs || tbformat.IndexOf("{seq}") > -1)
|
||||
@ -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,8 +4928,10 @@ 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)
|
||||
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"))
|
||||
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());
|
||||
@ -4884,6 +4942,7 @@ namespace VEPROMS.CSLA.Library
|
||||
tbformat = tbformat.Replace("{ALPHA}", alpha);
|
||||
|
||||
tbformat = tbformat.Replace("{ALPHAWpar}", alpha);
|
||||
}
|
||||
if (tbformat.ToUpper().Contains("ROMAN"))
|
||||
{
|
||||
string roman = RomanNumbering(ordinal);
|
||||
@ -4891,16 +4950,19 @@ 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
|
||||
{
|
||||
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 (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)
|
||||
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.
|
||||
if (ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.WolfCreekBackgroundFormat && IsBackgroundStep())
|
||||
@ -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()
|
||||
|
412
PROMS/VEPROMS.CSLA.Library/Format/EPFormatFile.cs
Normal file
412
PROMS/VEPROMS.CSLA.Library/Format/EPFormatFile.cs
Normal file
@ -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<EPFormatFiles, EPFormatFile>))]
|
||||
public class EPFormatFiles : vlnFormatList<EPFormatFile>
|
||||
{
|
||||
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<string> _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<string> _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<int?> _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<int> 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<int>("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<EPField>
|
||||
{
|
||||
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<string> _name;
|
||||
public string name
|
||||
{
|
||||
get
|
||||
{
|
||||
return LazyLoad(ref _name, "@name");
|
||||
}
|
||||
}
|
||||
private LazyLoad<string> _type;
|
||||
public string type
|
||||
{
|
||||
get
|
||||
{
|
||||
return LazyLoad(ref _type, "@type");
|
||||
}
|
||||
}
|
||||
private LazyLoad<string> _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<string> _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<string> _rosource;
|
||||
public string rosource
|
||||
{
|
||||
get
|
||||
{
|
||||
return LazyLoad(ref _rosource, "@rosource");
|
||||
}
|
||||
}
|
||||
//the columns in the RO that will be included in the exports
|
||||
private LazyLoad<string> _returncols;
|
||||
public List<string> returncols()
|
||||
{
|
||||
try
|
||||
{
|
||||
string tmp = LazyLoad(ref _returncols, "@returncols");
|
||||
|
||||
if (string.IsNullOrEmpty(tmp))
|
||||
return new List<string>();
|
||||
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<int?> _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<string> _validforsteptypes;
|
||||
public List<string> 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<string> 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<ROListItem> getROList(AnnotationInfo currAnn, bool includeblank)
|
||||
{
|
||||
if (string.IsNullOrEmpty(rosource))
|
||||
return new List<ROListItem>();
|
||||
|
||||
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<ROListItem> 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<string> getROValuesList(AnnotationInfo currAnn, string roid)
|
||||
{
|
||||
if (string.IsNullOrEmpty(roid))
|
||||
return new List<string>();
|
||||
|
||||
List<string> values = new List<string>();
|
||||
DocVersionInfo MyDocVersion = currAnn.MyItem.MyDocVersion;
|
||||
ROFSTLookup lookup = MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(MyDocVersion);
|
||||
rochild ro = lookup.GetRoChild(roid);
|
||||
|
||||
List<string> 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
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -18,6 +18,8 @@ using System.IO;
|
||||
using System.ComponentModel;
|
||||
using System.Collections.Generic;
|
||||
using Csla.Validation;
|
||||
using System.Linq;
|
||||
|
||||
namespace VEPROMS.CSLA.Library
|
||||
{
|
||||
/// <summary>
|
||||
@ -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;
|
||||
/// <summary>
|
||||
@ -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<DataRow>().Any(row => row["ColumnName"].ToString() == "IsEPAnnotationType"))
|
||||
_IsEPAnnotationType = (bool)dr.GetValue("IsEPAnnotationType");
|
||||
MarkOld();
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
@ -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;
|
||||
/// <summary>
|
||||
/// 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<DataRow>().Any(row => row["ColumnName"].ToString() == "IsEPAnnotationType"))
|
||||
_IsEPAnnotationType = (bool)dr.GetValue("IsEPAnnotationType");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
@ -98,6 +98,7 @@
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.configuration" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System.Design" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
@ -107,6 +108,7 @@
|
||||
<Compile Include="..\VEPROMS User Interface\Properties\Settings.Designer.cs">
|
||||
<Link>Properties\Settings.Designer.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Config\AnnotationConfig.cs" />
|
||||
<Compile Include="Config\AnnotationTypeConfig.cs" />
|
||||
<Compile Include="Config\AssocConfig.cs" />
|
||||
<Compile Include="Config\ColorConfig.cs" />
|
||||
@ -164,6 +166,7 @@
|
||||
<Compile Include="Format\Comparator.cs" />
|
||||
<Compile Include="Format\DocStyles.cs" />
|
||||
<Compile Include="Format\ENums.cs" />
|
||||
<Compile Include="Format\EPFormatFile.cs" />
|
||||
<Compile Include="Format\PageStyles.cs" />
|
||||
<Compile Include="Format\PlantFormat.cs" />
|
||||
<Compile Include="Format\vlnFormat.cs" />
|
||||
|
@ -29,7 +29,7 @@ namespace Volian.Controls.Library
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
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();
|
||||
@ -37,6 +37,7 @@ namespace Volian.Controls.Library
|
||||
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();
|
||||
@ -67,11 +68,11 @@ namespace Volian.Controls.Library
|
||||
| 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.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(489, 291);
|
||||
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 = "";
|
||||
@ -81,10 +82,10 @@ namespace Volian.Controls.Library
|
||||
//
|
||||
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.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(71, 25);
|
||||
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";
|
||||
@ -94,10 +95,10 @@ namespace Volian.Controls.Library
|
||||
//
|
||||
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.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(69, 25);
|
||||
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";
|
||||
@ -112,11 +113,11 @@ namespace Volian.Controls.Library
|
||||
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.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(244, 23);
|
||||
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;
|
||||
@ -126,10 +127,10 @@ namespace Volian.Controls.Library
|
||||
// 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.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(71, 25);
|
||||
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";
|
||||
@ -138,15 +139,28 @@ namespace Volian.Controls.Library
|
||||
// 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.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(71, 25);
|
||||
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;
|
||||
@ -158,10 +172,10 @@ namespace Volian.Controls.Library
|
||||
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.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(576, 325);
|
||||
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;
|
||||
@ -181,24 +195,25 @@ namespace Volian.Controls.Library
|
||||
//
|
||||
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.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(35, 17);
|
||||
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(3, 2, 3, 2);
|
||||
this.panelAnnoEditBtns.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.panelAnnoEditBtns.Name = "panelAnnoEditBtns";
|
||||
this.panelAnnoEditBtns.Size = new System.Drawing.Size(87, 325);
|
||||
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;
|
||||
@ -233,10 +248,10 @@ namespace Volian.Controls.Library
|
||||
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.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(3, 325);
|
||||
this.expandableSplitter4.Size = new System.Drawing.Size(2, 264);
|
||||
this.expandableSplitter4.Style = DevComponents.DotNetBar.eSplitterStyle.Office2007;
|
||||
this.expandableSplitter4.TabIndex = 15;
|
||||
this.expandableSplitter4.TabStop = false;
|
||||
@ -248,9 +263,9 @@ namespace Volian.Controls.Library
|
||||
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.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.pannelAnnoGrid.Name = "pannelAnnoGrid";
|
||||
this.pannelAnnoGrid.Size = new System.Drawing.Size(545, 325);
|
||||
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;
|
||||
@ -274,19 +289,19 @@ namespace Volian.Controls.Library
|
||||
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;
|
||||
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(3, 2, 3, 2);
|
||||
this.dgAnnotations.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.dgAnnotations.MultiSelect = false;
|
||||
this.dgAnnotations.Name = "dgAnnotations";
|
||||
this.dgAnnotations.RowHeadersVisible = false;
|
||||
@ -295,7 +310,7 @@ namespace Volian.Controls.Library
|
||||
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.Size = new System.Drawing.Size(409, 264);
|
||||
this.dgAnnotations.TabIndex = 1;
|
||||
this.dgAnnotations.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgAnnotations_CellClick);
|
||||
//
|
||||
@ -304,21 +319,21 @@ namespace Volian.Controls.Library
|
||||
this.myAnnotationTypeDataGridViewTextBoxColumn.DataPropertyName = "MyAnnotationType";
|
||||
this.myAnnotationTypeDataGridViewTextBoxColumn.HeaderText = "Type";
|
||||
this.myAnnotationTypeDataGridViewTextBoxColumn.Name = "myAnnotationTypeDataGridViewTextBoxColumn";
|
||||
this.myAnnotationTypeDataGridViewTextBoxColumn.Width = 69;
|
||||
this.myAnnotationTypeDataGridViewTextBoxColumn.Width = 56;
|
||||
//
|
||||
// dTSDataGridViewTextBoxColumn
|
||||
//
|
||||
this.dTSDataGridViewTextBoxColumn.DataPropertyName = "DTS";
|
||||
this.dTSDataGridViewTextBoxColumn.HeaderText = "Date";
|
||||
this.dTSDataGridViewTextBoxColumn.Name = "dTSDataGridViewTextBoxColumn";
|
||||
this.dTSDataGridViewTextBoxColumn.Width = 67;
|
||||
this.dTSDataGridViewTextBoxColumn.Width = 55;
|
||||
//
|
||||
// userIDDataGridViewTextBoxColumn
|
||||
//
|
||||
this.userIDDataGridViewTextBoxColumn.DataPropertyName = "UserID";
|
||||
this.userIDDataGridViewTextBoxColumn.HeaderText = "User";
|
||||
this.userIDDataGridViewTextBoxColumn.Name = "userIDDataGridViewTextBoxColumn";
|
||||
this.userIDDataGridViewTextBoxColumn.Width = 67;
|
||||
this.userIDDataGridViewTextBoxColumn.Width = 54;
|
||||
//
|
||||
// searchTextDataGridViewTextBoxColumn
|
||||
//
|
||||
@ -333,14 +348,14 @@ namespace Volian.Controls.Library
|
||||
//
|
||||
// AnnotationDetails
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
|
||||
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(3, 2, 3, 2);
|
||||
this.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.Name = "AnnotationDetails";
|
||||
this.Size = new System.Drawing.Size(1124, 325);
|
||||
this.Size = new System.Drawing.Size(843, 264);
|
||||
this.pannelAnnoEdit.ResumeLayout(false);
|
||||
this.pannelAnnoEdit.PerformLayout();
|
||||
this.panelAnnoEditBtns.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;
|
||||
}
|
||||
}
|
||||
|
@ -329,12 +329,20 @@ namespace Volian.Controls.Library
|
||||
AnnotationDirty = true;
|
||||
}
|
||||
|
||||
//C2025-023 - Electronic Procedures - Modifications to PROMS
|
||||
// Only show Open button if it is an EPAnnotationType
|
||||
private void dgAnnotations_CellClick(object sender, DataGridViewCellEventArgs e)
|
||||
{
|
||||
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];
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
{
|
||||
@ -657,12 +658,36 @@ namespace Volian.Controls.Library
|
||||
return OpenStepTabPage(myItemInfo, setFocus);
|
||||
}
|
||||
else // Otherwise open it in the Word editor
|
||||
{
|
||||
// B2025-034 Check to make sure that EDWord is installed in PROMS. If not return NULL.
|
||||
object EDOfficeViewerX = GetValue<object>(@"HKEY_CLASSES_ROOT\EDOfficeViewerX.Connect\CLSID\", @"", null);
|
||||
|
||||
object EDWordCtrl = GetValue<object>(@"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<T>(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();
|
||||
|
@ -3994,6 +3994,7 @@ namespace Volian.Controls.Library
|
||||
// TODO: Adjust top based upon format
|
||||
// TODO: Remove Label and just output ident on the paint event
|
||||
TabLeft = 20;
|
||||
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);
|
||||
|
52
PROMS/Volian.Controls.Library/ListBoxMulti.cs
Normal file
52
PROMS/Volian.Controls.Library/ListBoxMulti.cs
Normal file
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
149
PROMS/Volian.Controls.Library/TablePropertiesControl.Designer.cs
generated
Normal file
149
PROMS/Volian.Controls.Library/TablePropertiesControl.Designer.cs
generated
Normal file
@ -0,0 +1,149 @@
|
||||
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
partial class TablePropertiesControl
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
240
PROMS/Volian.Controls.Library/TablePropertiesControl.cs
Normal file
240
PROMS/Volian.Controls.Library/TablePropertiesControl.cs
Normal file
@ -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<string> points = new List<string>();
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
120
PROMS/Volian.Controls.Library/TablePropertiesControl.resx
Normal file
120
PROMS/Volian.Controls.Library/TablePropertiesControl.resx
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
@ -243,6 +243,12 @@
|
||||
<Compile Include="frmEnhanced.Designer.cs">
|
||||
<DependentUpon>frmEnhanced.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="frmEPAnnotationDetails.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="frmEPAnnotationDetails.Designer.cs">
|
||||
<DependentUpon>frmEPAnnotationDetails.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="frmImportWordContents.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
@ -274,6 +280,9 @@
|
||||
<DependentUpon>ImageItem.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="LinkText.cs" />
|
||||
<Compile Include="ListBoxMulti.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="PreviewMultiLineRO.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
@ -374,6 +383,12 @@
|
||||
</Compile>
|
||||
<Compile Include="RomanNumeral.cs" />
|
||||
<Compile Include="RTBAPI.cs" />
|
||||
<Compile Include="TablePropertiesControl.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="TablePropertiesControl.Designer.cs">
|
||||
<DependentUpon>TablePropertiesControl.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="TransPanel.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
@ -474,6 +489,10 @@
|
||||
<EmbeddedResource Include="frmEnhanced.resx">
|
||||
<DependentUpon>frmEnhanced.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="frmEPAnnotationDetails.resx">
|
||||
<DependentUpon>frmEPAnnotationDetails.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="frmImportWordContents.resx">
|
||||
<DependentUpon>frmImportWordContents.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
@ -515,6 +534,9 @@
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="TablePropertiesControl.resx">
|
||||
<DependentUpon>TablePropertiesControl.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="vlnExpander.resx">
|
||||
<DependentUpon>vlnExpander.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
|
111
PROMS/Volian.Controls.Library/frmEPAnnotationDetails.Designer.cs
generated
Normal file
111
PROMS/Volian.Controls.Library/frmEPAnnotationDetails.Designer.cs
generated
Normal file
@ -0,0 +1,111 @@
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
partial class frmEPAnnotationDetails
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
320
PROMS/Volian.Controls.Library/frmEPAnnotationDetails.cs
Normal file
320
PROMS/Volian.Controls.Library/frmEPAnnotationDetails.cs
Normal file
@ -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<string, TextBox> _DicTB;
|
||||
private Dictionary<string, CheckBox> _DicCheckBox;
|
||||
private Dictionary<string, ComboBox> _DicComboBox;
|
||||
private Dictionary<string, ComboBox> _DicSingleRO;
|
||||
private Dictionary<string, ListBoxMulti> _DicMultiRO;
|
||||
private TablePropertiesControl _TablePropControl;
|
||||
|
||||
private string multiseparator = ",";
|
||||
|
||||
public frmEPAnnotationDetails(AnnotationInfo currAnn)
|
||||
{
|
||||
InitializeComponent();
|
||||
_DicTB = new Dictionary<string, TextBox>();
|
||||
_DicCheckBox = new Dictionary<string, CheckBox>();
|
||||
_DicComboBox = new Dictionary<string, ComboBox>();
|
||||
_DicSingleRO = new Dictionary<string, ComboBox>();
|
||||
_DicMultiRO = new Dictionary<string, ListBoxMulti>();
|
||||
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<ROListItem> 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<ROListItem> 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<string, ComboBox> pair in _DicSingleRO)
|
||||
{
|
||||
string val = MyConfig.GetValue("EP", pair.Key);
|
||||
if (!string.IsNullOrEmpty(val) && pair.Value.Items.OfType<ROListItem>().Any(x=> x.Value == val))
|
||||
pair.Value.SelectedValue = val;
|
||||
else
|
||||
pair.Value.SelectedValue = "";
|
||||
}
|
||||
|
||||
foreach (KeyValuePair<string, ListBoxMulti> 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<ROListItem>)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<ROListItem>().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;
|
||||
}
|
||||
}
|
||||
}
|
120
PROMS/Volian.Controls.Library/frmEPAnnotationDetails.resx
Normal file
120
PROMS/Volian.Controls.Library/frmEPAnnotationDetails.resx
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
@ -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;
|
||||
@ -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;
|
||||
@ -724,7 +724,7 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
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));
|
||||
@ -1081,12 +1081,39 @@ 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)
|
||||
{
|
||||
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
|
||||
//_MyLog.WarnFormat("Context Menu 4 - {0}", GC.GetTotalMemory(true));
|
||||
|
||||
@ -1098,7 +1125,7 @@ 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));
|
||||
@ -1196,7 +1223,7 @@ 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));
|
||||
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)));
|
||||
@ -1308,7 +1335,7 @@ 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 == "Create Time Critical Action Summary" || itm.Text == "Export Procedure")
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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)
|
||||
{
|
||||
@ -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"))
|
||||
@ -2197,11 +2224,11 @@ 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
|
||||
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
|
||||
@ -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; }
|
||||
@ -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:
|
||||
@ -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);
|
||||
@ -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);
|
||||
@ -2847,7 +2874,7 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
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));
|
||||
@ -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;
|
||||
@ -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
|
||||
@ -3057,8 +3085,8 @@ 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);
|
||||
@ -3340,7 +3368,7 @@ 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;
|
||||
@ -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))
|
||||
{
|
||||
@ -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,8 +3775,8 @@ 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"))
|
||||
{
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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())
|
||||
{
|
||||
@ -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)
|
||||
|
@ -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)
|
||||
@ -5754,6 +5755,18 @@ namespace Volian.Print.Library
|
||||
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;
|
||||
|
@ -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)
|
||||
{
|
||||
@ -268,6 +268,7 @@ namespace Volian.Print.Library
|
||||
}
|
||||
Rtf = GetRtf(origTab, vFont);
|
||||
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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user