Compare commits

...

18 Commits

Author SHA1 Message Date
aa0b906a9f C2026-062 When Search clicked - Load the Incoming transitions for the Active Procedure 2026-02-02 15:27:23 -05:00
f43d1e5f47 Merge pull request 'B2026-009 For Vogtle Units 3&4, fixed bug where a double asterisk was place next to a continuous action RNO on the edit screen and printed with the CAS box shifted to the left.' (#697) from B2026-009_VogtleCAS into Development
Looks Good. Ready for QA!
2026-01-28 13:37:26 -05:00
63a74e1aef B2026-009 For Vogtle Units 3&4, fixed bug where a double asterisk was place next to a continuous action RNO on the edit screen and printed with the CAS box shifted to the left. 2026-01-28 12:08:19 -05:00
69e45e9ae8 Merge pull request 'F2026-003 Adjustments to the Vogtle Units 3&4 background step format that were needed for Jeff’s procedure importer tool' (#696) from F2026-003_VogtleBckGndChanges into Development
format only change.
2026-01-27 13:17:22 -05:00
53cf35014c F2026-003 Adjustments to the Vogtle Units 3&4 background step format that were needed for Jeff’s procedure importer tool 2026-01-27 13:17:42 -05:00
d6e4239573 Merge pull request 'C2026-006 Change Title bar on Add/Edit User' (#695) from C2026-006 into Development
good for testing phase
2026-01-27 08:15:11 -05:00
c76808e11e C2026-006 Change Title bar on Add/Edit User 2026-01-27 07:34:04 -05:00
b2428a4211 Merge pull request 'B2026-007 PROMS Security - don't error when add a user to a group but no group selected/C2026-004 – Add a messagebox when create group' (#694) from B2026-007_C2026-004 into Development
good for testing
2026-01-26 14:41:40 -05:00
aa0e919713 B2026-007 PROMS Security - don't error when add a user to a group but no group selected/C2026-004 – Add a messagebox when create group 2026-01-26 14:37:48 -05:00
7e2a41b6cb Merge pull request 'B2026-003 Imported memory handling in the FlexGrid (table) code for when we are replacing many RO values in table cells' (#693) from B2026-003_crash_fixing_ROs_in_table into Development
Looks Good. Ready for QA.
2026-01-23 16:07:16 -05:00
258b1d2d1f B2026-003 Imported memory handling in the FlexGrid (table) code for when we are replacing many RO values in table cells 2026-01-23 15:55:36 -05:00
a4ea200e38 Merge pull request 'B2026-006 Try to force designer update' (#692) from B2026-006 into Development
good for testing
2026-01-23 10:17:43 -05:00
43a27c16a6 B2026-006 Try to force designer update
It looks like when pulled into development -- changes to DisplayHistory.designer were not pulling down locally / compiling in when not on the computer they were originally made on. Made an update that hopefully should force this file to recompile.
2026-01-23 10:10:08 -05:00
3c693baab0 Merge pull request 'B2026-006 – Summary of Changes report generation enhancements' (#691) from B2026-006 into Development
good for testing
2026-01-23 08:30:48 -05:00
d186e2702c B2026-006 – Summary of Changes report generation enhancements 2026-01-23 06:20:49 -05:00
aee478114b Merge pull request 'C2026-003 For Vogtle Units 3&4, added format variable to allow a high level RNO step be “tagged” as a Continuous Action Step, when the parent AER step is not a continuous action step' (#689) from C2026-003_Vogtle_RNO_ContActionStep into Development
Looks Good. Ready for QA.
2026-01-21 14:37:19 -05:00
6220530855 C2026-003 For Vogtle Units 3&4, added format variable to allow a high level RNO step be “tagged” as a Continuous Action Step, when the parent AER step is not a continuous action step 2026-01-21 14:30:44 -05:00
69ae37021c Merge pull request 'B2026-001-Sort-order--for-ROs-Wolf-Creek-4' (#688) from B2026-001-Sort-order--for-ROs-Wolf-Creek-4 into Development
good for testing phase
2026-01-20 08:36:08 -05:00
18 changed files with 487 additions and 54 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -145,6 +145,9 @@ namespace VEPROMS
}
LoadRefreshGroupUsers();
// C2026-004 - messagebox when create group
MessageBox.Show($"{txt} group successfully created.", "Create group", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void tvFolders_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
@@ -187,18 +190,22 @@ namespace VEPROMS
//Add a Member to a Group
private void addMember_Click(object sender, EventArgs e)
{
int groupIndex = cbGroupSelection.SelectedIndex;
string selectedUserID = lstNonMembers.SelectedValue.ToString();
int selectedUID = UserInfo.GetByUserID(selectedUserID).UID;
GroupInfo gi = myGroupInfoList[groupIndex];
User selectedUser = User.Get(selectedUID);
// B2026-007 PROMS Security - don't error when add a user to a group but no group selected
if (lstNonMembers.SelectedValue != null)
{
int groupIndex = cbGroupSelection.SelectedIndex;
string selectedUserID = lstNonMembers.SelectedValue.ToString();
int selectedUID = UserInfo.GetByUserID(selectedUserID).UID;
GroupInfo gi = myGroupInfoList[groupIndex];
User selectedUser = User.Get(selectedUID);
Membership.MakeMembership(selectedUser, Group.Get(gi.GID), null, "");
updateMembershipLists();
lstNonMembers.SelectedIndex = -1;
Membership.MakeMembership(selectedUser, Group.Get(gi.GID), null, "");
updateMembershipLists();
lstNonMembers.SelectedIndex = -1;
int index = lstMembers.FindString(selectedUserID);
lstMembers.SetSelected(index, true);
int index = lstMembers.FindString(selectedUserID);
lstMembers.SetSelected(index, true);
}
}
//Remove a Member From a Group
@@ -326,6 +333,7 @@ namespace VEPROMS
User u = User.MakeUser("[Enter New UserID]", "", "", "", "", "", "", "", "", "", "", DateTime.Now, "");
frmManageUser frm = new frmManageUser("add");
frm.MyUser = u;
frm.Text = "Enter New UserID"; //C2026-002 Change Title bar on Add/Edit User
if (frm.ShowDialog(this) == DialogResult.OK)
{
u = frm.MyUser;

View File

@@ -20,7 +20,27 @@ namespace VEPROMS
_MyUser = value;
SimpleUser su = new SimpleUser(_MyUser);
pgUser.SelectedObject = su;
this.Text = string.Format("{0} ({1} {2}) Information",su.UserID,su.FirstName,su.LastName);
//C2026-002 Change Title bar on Add/Edit User
string tmp;
if (!string.IsNullOrEmpty(su.FirstName) && !string.IsNullOrEmpty(su.LastName))
{
tmp = $"{su.UserID} ({su.FirstName} {su.LastName}) Information";
}
else if (!string.IsNullOrEmpty(su.LastName))
{
tmp = $"{su.UserID} ({su.LastName}) Information";
}
else if (!string.IsNullOrEmpty(su.FirstName))
{
tmp = $"{su.UserID} ({su.FirstName}) Information";
}
else
{
tmp = $"{su.UserID} Information";
}
this.Text = tmp;
}
}
private string _Mode;

View File

@@ -4745,6 +4745,26 @@ namespace VEPROMS.CSLA.Library
{
_MyTab.Text = _MyTab.Text.Substring(1);
}
// C2026-003 Vogtle Continuous Action high level RNO (AER is not continuous action)
if (ActiveFormat.MyStepSectionLayoutData.AddContActTagToHighLevelRNOWhenIncludedOnCAS &&
IsInRNO && !MyParent.IsInRNO && FormatStepData.TabData.CASPrintMacro != null)
{
// B2026-009 needed to make sure parent wasn't a continuous action step type
// the ExcludeFromContActSum is set to False for continuous action
// step types and True for all others
StepConfig psc = MyParent.MyConfig as StepConfig;
if (MyParent.FormatStepData.ExcludeFromContActSum && psc != null && psc.Step_CAS != "True")
{
StepConfig sc = MyConfig as StepConfig;
if (sc != null && sc.Step_CAS == "True")
{
if (FormatStepData.TabData.CASPrintMacro != null)
_MyTab.Text = FormatStepData.TabData.CASPrintMacro + _MyTab.Text;
if (FormatStepData.TabData.CASEditTag != null)
_MyTab.CleanText = FormatStepData.TabData.CASEditTag + _MyTab.CleanText;
}
}
}
_MyTab.RNOTabWidthAdjust = ((ItemInfo)ActiveParent).FormatStepData.TabData.RNOAdjustTabSize ?? 0;
if (((ItemInfo)ActiveParent).MyTab.Offset != 0) _MyTab.Offset = ((ItemInfo)ActiveParent).MyTab.Offset;
if (((ItemInfo)ActiveParent).FormatStepData.TabData.RNOExcludeMacros)

View File

@@ -3814,6 +3814,18 @@ namespace VEPROMS.CSLA.Library
}
}
// C2026-003 (for Vogtle Units 3&4) Adds the continuous action tag to a high level RNO
// only when it as a tab and the parent is an AER step that is not tagged as a continuous action
// Use this with the setting of CASPrintMacro and CASEditTag on the RNO step type TabData definition
private LazyLoad<bool> _AddContActTagToHighLevelRNOWhenIncludedOnCAS;
public bool AddContActTagToHighLevelRNOWhenIncludedOnCAS
{
get
{
return LazyLoad(ref _AddContActTagToHighLevelRNOWhenIncludedOnCAS, "@AddContActTagToHighLevelRNOWhenIncludedOnCAS");
}
}
// treat sub-sections and High Level Steps as if they are at the same procedure structure level. This is used with the TieTabToLevel flag
private LazyLoad<bool> _SubSectAndHighSameLevel;
public bool SubSectAndHighSameLevel
@@ -5708,6 +5720,30 @@ public StepData Equation // equation has a parent of embedded object.
return LazyLoad(ref _RNOIdentPrint, "TabData/@RNOIdent");
}
}
// Adds a print macro for the high level RNO when the user want it to be a Continuous Action
// while the corresponding AER is not a continuous action
// C2026-003 used in RNO step definition for Vogtle 3&4 two column format
// use with AddContActTagToHighLevelRNOWhenIncludedOnCAS set to True in the format file's StpSectLayData
private LazyLoad<string> _CASPrintMacro;
public string CASPrintMacro
{
get
{
return LazyLoad(ref _CASPrintMacro, "TabData/@CASPrintMacro");
}
}
// Adds a character indicator in the step editor for the high level RNO when the user want it to be a Continuous Action
// while the corresponding AER is not a continuous action
// C2026-003 used in RNO step definition for Vogtle 3&4 two colmn format
// use with AddContActTagToHighLevelRNOWhenIncludedOnCAS set to True in the format file's StpSectLayData
private LazyLoad<string> _CASEditTag;
public string CASEditTag
{
get
{
return LazyLoad(ref _CASEditTag, "TabData/@CASEditTag");
}
}
// don't use the defined macro when creating a step tab for the step type's RNO
private LazyLoad<bool> _RNOExcludeMacros;

View File

@@ -0,0 +1,89 @@
namespace Volian.Controls.Library
{
partial class CustomMessageBox
{
/// <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.btn1 = new System.Windows.Forms.Button();
this.btn2 = new System.Windows.Forms.Button();
this.lblMessage = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// btn1
//
this.btn1.AutoSize = true;
this.btn1.Location = new System.Drawing.Point(12, 99);
this.btn1.Name = "btn1";
this.btn1.Size = new System.Drawing.Size(75, 23);
this.btn1.TabIndex = 0;
this.btn1.UseVisualStyleBackColor = true;
this.btn1.Click += new System.EventHandler(this.Btn1_Click);
//
// btn2
//
this.btn2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btn2.AutoSize = true;
this.btn2.Location = new System.Drawing.Point(322, 99);
this.btn2.Name = "btn2";
this.btn2.Size = new System.Drawing.Size(75, 23);
this.btn2.TabIndex = 1;
this.btn2.UseVisualStyleBackColor = true;
this.btn2.Click += new System.EventHandler(this.Btn2_Click);
//
// lblMessage
//
this.lblMessage.AutoSize = true;
this.lblMessage.Location = new System.Drawing.Point(33, 41);
this.lblMessage.Name = "lblMessage";
this.lblMessage.Size = new System.Drawing.Size(0, 13);
this.lblMessage.TabIndex = 2;
this.lblMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// CustomMessageBox
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoSize = true;
this.ClientSize = new System.Drawing.Size(419, 130);
this.Controls.Add(this.lblMessage);
this.Controls.Add(this.btn2);
this.Controls.Add(this.btn1);
this.Name = "CustomMessageBox";
this.ShowIcon = false;
this.Text = "CustomMessageBox";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button btn1;
private System.Windows.Forms.Button btn2;
private System.Windows.Forms.Label lblMessage;
}
}

View File

@@ -0,0 +1,58 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Volian.Controls.Library
{
public partial class CustomMessageBox : Form
{
//Custome Message Box Class to allow renaming of buttons
// originally devleoped for use with
// C2025-062 When Search clicked - Load the Incoming transitions for the Active Procedure
// in order to allow the user to decide if they wanted to search on the selected step or the selected procedure
public CustomMessageBox(string message, string title, string button1Text = "OK", string button2Text = "")
{
InitializeComponent();
this.Text = title;
lblMessage.Text = message;
btn1.Text = button1Text;
if (!string.IsNullOrEmpty(button2Text))
{
btn2.Text = button2Text;
btn2.Visible = true;
}
else
{
btn2.Visible = false;
}
}
private void Btn1_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Yes;
Close();
}
private void Btn2_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.No;
Close();
}
//static method for calling custommessagebox directly
public static DialogResult Show(string message, string title, string button1Text = "OK", string button2Text = "")
{
using (var messageBox = new CustomMessageBox(message, title, button1Text, button2Text))
{
return messageBox.ShowDialog();
}
}
}
}

View 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>

View File

@@ -11,7 +11,7 @@ using System.Text.RegularExpressions;
using JR.Utils.GUI.Forms;
using Volian.Base.Library;
using System.Linq;
namespace Volian.Controls.Library
{
public partial class DisplayHistory : UserControl

View File

@@ -112,13 +112,13 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="myVFG.MyBorderDetailString" xml:space="preserve">
<value>&lt;?xml version="1.0" encoding="utf-8"?&gt;
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;
&lt;VlnBorders Rows="4" Columns="3"&gt;
&lt;VerticalLines Rows="4" Columns="4"&gt;
&lt;Lines&gt;
@@ -161,7 +161,31 @@
&lt;/HorizontalLines&gt;
&lt;/VlnBorders&gt;</value>
</data>
<data name="myVFG.StyleInfo" xml:space="preserve">
<value>Normal{Font:Microsoft Sans Serif, 8.25pt;BackColor:White;TextAlign:LeftTop;Border:Flat,1,Black,Both;} Alternate{BackColor:White;} Fixed{BackColor:Control;ForeColor:ControlText;Border:Flat,1,ControlDark,Both;BackgroundImageLayout:Hide;} Highlight{BackColor:LightCyan;ForeColor:Black;} Focus{BackColor:LightCyan;} Editor{} Search{BackColor:Highlight;ForeColor:HighlightText;} Frozen{BackColor:Beige;} NewRow{ForeColor:GrayText;} EmptyArea{BackColor:Transparent;Border:None,1,Black,Both;} SelectedColumnHeader{} SelectedRowHeader{} GrandTotal{BackColor:Black;ForeColor:White;} Subtotal0{BackColor:ControlDarkDark;ForeColor:White;} Subtotal1{BackColor:ControlDarkDark;ForeColor:White;} Subtotal2{BackColor:ControlDarkDark;ForeColor:White;} Subtotal3{BackColor:ControlDarkDark;ForeColor:White;} Subtotal4{BackColor:ControlDarkDark;ForeColor:White;} Subtotal5{BackColor:ControlDarkDark;ForeColor:White;} FilterEditor{} FirstCustomStyle{} </value>
<data name="myVFG.MyShadingDetailString" xml:space="preserve">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;
&lt;VlnGridCellShading Rows="4" Columns="3"&gt;
&lt;TableShadingInfo Rows="4" Columns="3"&gt;
&lt;CellShadingColor&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;/CellShadingColor&gt;
&lt;/TableShadingInfo&gt;
&lt;/VlnGridCellShading&gt;</value>
</data>
<data name="myVFG.StyleInfo" xml:space="preserve">
<value>Normal{Font:Microsoft Sans Serif, 8.25pt;BackColor:White;TextAlign:LeftTop;Border:Flat,1,Black,Both;} Alternate{BackColor:White;} Fixed{BackColor:Control;ForeColor:ControlText;Border:Flat,1,ControlDark,Both;BackgroundImageLayout:Hide;} Highlight{BackColor:LightCyan;ForeColor:Black;} Focus{BackColor:LightCyan;} Editor{} Search{BackColor:Highlight;ForeColor:HighlightText;} Frozen{BackColor:Beige;} FrozenAlternate{} NewRow{ForeColor:GrayText;} EmptyArea{BackColor:Transparent;Border:None,1,Black,Both;} SelectedColumnHeader{} SelectedRowHeader{} GrandTotal{BackColor:Black;ForeColor:White;} Subtotal0{BackColor:ControlDarkDark;ForeColor:White;} Subtotal1{BackColor:ControlDarkDark;ForeColor:White;} Subtotal2{BackColor:ControlDarkDark;ForeColor:White;} Subtotal3{BackColor:ControlDarkDark;ForeColor:White;} Subtotal4{BackColor:ControlDarkDark;ForeColor:White;} Subtotal5{BackColor:ControlDarkDark;ForeColor:White;} FilterEditor{} FirstCustomStyle{} </value>
</data>
<metadata name="myTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -414,6 +414,15 @@ namespace Volian.Controls.Library
lbSrchResults.Visible = true;
lbSrchResultsIncTrans.Visible = false;
cbxRnoOnly.Visible = true;
// C2025-062 When Search clicked - Load the Incoming transitions for the Active Procedure
//don't allow changing the Style for Incoming Transitions
//but allow them to change it if there are search results and it is another tab
if (_SearchResults != null && _SearchResults.Count > 0)
{
cmbResultsStyle.Enabled = true;
}
if (e.NewTab == tabIncTrans) // C2020-033: Incoming transitions
{
xpSetToSearch.Enabled = false;
@@ -422,7 +431,7 @@ namespace Volian.Controls.Library
lbSrchResultsIncTrans.Visible = true;
lbSrchResultsIncTrans.CheckBoxesVisible = true;
lbSrchResultsIncTrans.AutoScroll = true;
btnSearch.Enabled = false; // C2021 - 002: disable search button - no functionality for Incoming Transitions
cmbResultsStyle.Enabled = false;
cbxRnoOnly.Visible = false;
}
else if (e.NewTab == tabROSearch)
@@ -648,7 +657,6 @@ namespace Volian.Controls.Library
}
btnTranCvtAllToTxt.Enabled = IncTransCvtAllToTextPerm();
btnTranCvtSelToTxt.Enabled = false;
btnSearch.Enabled = false; // C2021 - 002: disable search button - no functionality for Incoming Transitions
}
public bool IncTranCvtPerm()
@@ -1765,7 +1773,8 @@ namespace Volian.Controls.Library
btnClearSearchResults.Enabled = true;
btnCopySearchResults.Enabled = true;
btnSaveSearchResults.Enabled = true;
cmbResultsStyle.Enabled = true;
if (tabSearchTypes.SelectedTab != tabIncTrans)
cmbResultsStyle.Enabled = true;
}
else
{
@@ -2188,21 +2197,39 @@ namespace Volian.Controls.Library
// C2019-001: Search in RNO steps only
if (cbxRnoOnlyTrans.Checked) GetInRNOResults();
}
else if (tabSearchTypes.SelectedTab == tabSearchTypes.Tabs[4])
else if (tabSearchTypes.SelectedTab == tabIncTrans)
{
// C2020-033: Incoming Transitions: Make an iteminfolist from the list returned from
// GetExternalTransitionsToChildren (also gets transitions to the item itself)
// B2021-010: Use IncomingTranGetMergedTranList to get a complete list of incoming transitions (transitions to procedure
// were only included if there were NO transitions to items within procedure)
ReportTitle = string.Format("Search For Incoming Transitions to {0}: ", SearchIncTransII.Path);
SearchResults = IncomingTranGetMergedTranList();
cmbResultsStyleIndex = 1; //display step locations in results
if (SearchResults == null || SearchResults.Count == 0)
// C2025-062 When Search clicked - Load the Incoming transitions for the Active Procedure
if (_TabControl?.MyEditItem?.MyItemInfo?.MyProcedure != null)
{
FlexibleMessageBox.Show("No Matches Found.", "Search");
if (_TabControl?.MyEditItem?.MyItemInfo?.MyProcedure.ItemID == _TabControl?.MyEditItem?.MyItemInfo?.ItemID)
{
_ = _TabControl.OnSearchIncTrans(this, new vlnTreeItemInfoEventArgs(_TabControl?.MyEditItem?.MyItemInfo?.MyProcedure));
}
else
{
//if on a step, check if the user wants to load incoming transitions for that step or the entire procedure
switch (CustomMessageBox.Show("Would you like to load incoming transitions for this procedure or this step?", "Load Incoming Transitions", "This Procedure", "This Step"))
{
case DialogResult.Yes:
_ = _TabControl.OnSearchIncTrans(this, new vlnTreeItemInfoEventArgs(_TabControl?.MyEditItem?.MyItemInfo?.MyProcedure));
break;
case DialogResult.No:
_ = _TabControl.OnSearchIncTrans(this, new vlnTreeItemInfoEventArgs(_TabControl?.MyEditItem?.MyItemInfo));
break;
default: //Cancel was pressed
break;
}
}
}
else
{
FlexibleMessageBox.Show("Please open a procedure before selecting this option to load incoming transitions for that procedure.", "Search");
}
}
if (SearchResults != null)
if (SearchResults != null && tabSearchTypes.SelectedTab != tabIncTrans)
{
AddMessageForEmptyAnnotations();
if (cmbResultsStyleIndex == 3 && cmbResultsStyle.Items.Count == 3) cmbResultsStyleIndex--;
@@ -2303,7 +2330,18 @@ namespace Volian.Controls.Library
cmbResultsStyle.Items.Add(comboItem2);
if (hasAnnot) cmbResultsStyle.Items.Add(comboItem3);
cmbResultsStyle.Items.Add(comboItem4);
}
// C2025-062 When Search clicked - Load the Incoming transitions for the Active Procedure
if (tabSearchTypes.SelectedTab == tabIncTrans)
{
cmbResultsStyle.SelectedIndex = -1;
cmbResultsStyle.Enabled = false;
}
else
{
cmbResultsStyle.Enabled = true;
}
}
private void cbxTextSearchText_Leave(object sender, EventArgs e)
{

View File

@@ -647,6 +647,10 @@ namespace Volian.Controls.Library
MyEditItem.ChangeBarForConfigItemChange = false;
sc.Step_CAS = (cbCAS.Checked) ? "True" : "False";
MyEditItem.ChangeBarForConfigItemChange = true;
// C2026-003 (put in for Vogtle 3&4) refresh the RNO step tab if including it on the Continuous Action Summary
if (MyEditItem.MyItemInfo.ActiveFormat.MyStepSectionLayoutData.AddContActTagToHighLevelRNOWhenIncludedOnCAS &&
MyEditItem.MyItemInfo.IsInRNO && !MyEditItem.MyItemInfo.MyParent.IsInRNO)
MyEditItem.RefreshTab();
}
private void cbTCAS_CheckedChanged(object sender, EventArgs e)
{

View File

@@ -537,6 +537,10 @@ namespace Volian.Controls.Library
// if it is a modify and there will be no usages if it is new (the usage gets created on the save)
if (!MyFlexGrid.IsRoTable)
{
// B2026-003 we where using a string.format on this inside the while loop - allocating memory each time
// so I move it outside the while loop and did a simple assigment of text
string lookForLinks = @"<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}~\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v '?{{}}~\\]+)*\\v(\\[^v \\]+)* #Link:(ReferencedObject|Transition[^:]*?):.*?\[END>";
while (r < h)
{
CellRange cr = MyFlexGrid.GetMergedRange(r, c);
@@ -546,8 +550,7 @@ namespace Volian.Controls.Library
{
// see if there are any links and save these so that any deleted ROs or transitions in the
// steprtb can have associated usages/transitions records removed from the database.
string lookFor = string.Format(@"<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}~\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v '?{{}}~\\]+)*\\v(\\[^v \\]+)* #Link:(ReferencedObject|Transition[^:]*?):.*?\[END>");
MatchCollection matches = Regex.Matches((string)MyFlexGrid[r, c], lookFor);
MatchCollection matches = Regex.Matches((string)MyFlexGrid[r, c], lookForLinks);
for (int i = matches.Count - 1; i >= 0; i--)
{
Match m = matches[i];
@@ -569,15 +572,15 @@ namespace Volian.Controls.Library
{
int tid = int.Parse(myMatch.Groups[2].Value);
RtfTransList.Add(tid);
int myIndex = m.Groups[4].Index;
int myLength = m.Groups[4].Length;
if (m.Groups[3].Value != " ")
{
myIndex = m.Groups[3].Index;
myLength += m.Groups[3].Length;
}
string gg = ((string)MyFlexGrid[r, c]).Substring(myIndex, myLength);
if (gg.ToUpper().Contains("(PAGE ~)")) RtfTransPageNumList.Add(tid); // B2020-089, check for upper case Page ~ in case step was upper cased
int myIndex = m.Groups[4].Index;
int myLength = m.Groups[4].Length;
if (m.Groups[3].Value != " ")
{
myIndex = m.Groups[3].Index;
myLength += m.Groups[3].Length;
}
string gg = ((string)MyFlexGrid[r, c]).Substring(myIndex, myLength);
if (gg.ToUpper().Contains("(PAGE ~)")) RtfTransPageNumList.Add(tid); // B2020-089, check for upper case Page ~ in case step was upper cased
}
}
}

View File

@@ -272,21 +272,24 @@ namespace Volian.Controls.Library
for (int i = 0; i < rows * cols; i++)
datum.Add("|");
XmlNodeList nl = xd.SelectNodes("C1FlexGrid/Cells/Cell/Data");
string data = string.Empty;
// B2026-003 use StringBuilder a "using" statement around the RichTextBox for better mememory management
StringBuilder data = new StringBuilder();
foreach (XmlNode xn in nl)
{
RichTextBox rtb = new RichTextBox();
rtb.Rtf = xn.InnerText;
XmlAttribute xa = xn.ParentNode.Attributes.GetNamedItem("index") as XmlAttribute;
string[] rc = xa.InnerText.Split(',');
int r = int.Parse(rc[0]);
int c = int.Parse(rc[1]);
int index = r * cols + c;
datum[index] = "|" + (rtb.Text == "" ? "" : rtb.Text);
using (RichTextBox rtb = new RichTextBox())
{
rtb.Rtf = xn.InnerText;
XmlAttribute xa = xn.ParentNode.Attributes.GetNamedItem("index") as XmlAttribute;
string[] rc = xa.InnerText.Split(',');
int r = int.Parse(rc[0]);
int c = int.Parse(rc[1]);
int index = r * cols + c;
datum[index] = "|" + (rtb.Text == "" ? "" : rtb.Text);
}
}
foreach (string s in datum)
data += s;
return data;
data.Append(s);
return data.ToString();
}
private string GetCellFormatString(XmlDocument xd)
{

View File

@@ -154,6 +154,12 @@
<Compile Include="ConvertTable.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="CustomMessageBox.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="CustomMessageBox.Designer.cs">
<DependentUpon>CustomMessageBox.cs</DependentUpon>
</Compile>
<Compile Include="DisplayApplicability.cs">
<SubType>UserControl</SubType>
</Compile>
@@ -454,12 +460,16 @@
<DependentUpon>AnnotationSearch.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="CustomMessageBox.resx">
<DependentUpon>CustomMessageBox.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="DisplayBookMarks.resx">
<DependentUpon>DisplayBookMarks.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DisplayHistory.resx">
<DependentUpon>DisplayHistory.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DisplayLibDocs.resx">
<DependentUpon>DisplayLibDocs.cs</DependentUpon>