From fd51c209a3e8e05759afdd5cd1a1c1d15d469da9 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Mon, 15 Jun 2026 15:18:03 -0400 Subject: [PATCH 01/22] Development --- .../VlnFlexGrid.Designer.cs | 6 +- PROMS/Volian.Controls.Library/VlnFlexGrid.cs | 58 ++++++++++++------- 2 files changed, 43 insertions(+), 21 deletions(-) diff --git a/PROMS/Volian.Controls.Library/VlnFlexGrid.Designer.cs b/PROMS/Volian.Controls.Library/VlnFlexGrid.Designer.cs index 95fa1523..d6e48711 100644 --- a/PROMS/Volian.Controls.Library/VlnFlexGrid.Designer.cs +++ b/PROMS/Volian.Controls.Library/VlnFlexGrid.Designer.cs @@ -1,4 +1,5 @@ using System; +using System.Windows.Forms; namespace Volian.Controls.Library { @@ -78,7 +79,10 @@ namespace Volian.Controls.Library // VlnFlexGrid // this.Rows.DefaultSize = 19; - + this.AllowDrop = true; + this.DragEnter += new DragEventHandler(Control_DragEnter); + this.DragDrop += new DragEventHandler(Control_DragDrop); + ((System.ComponentModel.ISupportInitialize)(this)).EndInit(); this.ResumeLayout(false); diff --git a/PROMS/Volian.Controls.Library/VlnFlexGrid.cs b/PROMS/Volian.Controls.Library/VlnFlexGrid.cs index f7f2310f..6f85943f 100644 --- a/PROMS/Volian.Controls.Library/VlnFlexGrid.cs +++ b/PROMS/Volian.Controls.Library/VlnFlexGrid.cs @@ -1,22 +1,23 @@ -using System; -using System.ComponentModel; -using System.Collections; -using System.Collections.Generic; -using System.Diagnostics; -using System.Text; -using System.Windows.Forms; -using System.Drawing; -using System.Runtime.InteropServices; -using System.Xml; -using System.IO; -using Volian.Controls.Library; -using VEPROMS.CSLA.Library; using C1.Win.C1FlexGrid; using C1.Win.C1SpellChecker; -using System.Text.RegularExpressions; -using System.Xml.Serialization; -using Volian.Base.Library; +using DevComponents.DotNetBar.Controls; using JR.Utils.GUI.Forms; +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Runtime.InteropServices; +using System.Text; +using System.Text.RegularExpressions; +using System.Windows.Forms; +using System.Xml; +using System.Xml.Serialization; +using VEPROMS.CSLA.Library; +using Volian.Base.Library; +using Volian.Controls.Library; namespace Volian.Controls.Library { @@ -4438,11 +4439,28 @@ namespace Volian.Controls.Library // } //} + private void Control_DragEnter(object sender, DragEventArgs e) + { + if (e.Data.GetDataPresent(DataFormats.Text)) + { + e.Effect = DragDropEffects.Copy; // Allow copy + } + else + { + e.Effect = DragDropEffects.None; // Disallow + } + } + private void Control_DragDrop(object sender, DragEventArgs e) + { + string data = (string)e.Data.GetData(DataFormats.Text); + // Process the data (e.g., display it in a TextBox) + this.Text = data; + } #region Uneven Selections - /// - /// True if the top and bottom row of the selection is the same for every column - /// - public bool EvenSelection + /// + /// True if the top and bottom row of the selection is the same for every column + /// + public bool EvenSelection { get { From ba5aee664027d6bc6105d83fd2b55b77e7a5892c Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Tue, 21 Jul 2026 11:33:58 -0400 Subject: [PATCH 02/22] Development --- .../VEPROMS.CSLA.Library/Extension/ItemExt.cs | 24 ++ .../DisplaySearch.Designer.cs | 253 +++++++++--------- 2 files changed, 148 insertions(+), 129 deletions(-) diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs index b6f02379..fa3a36c5 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs @@ -7279,9 +7279,33 @@ namespace VEPROMS.CSLA.Library _ByWordSuffix = byWordSuffix; } } + private string checkPercentChar(string SearchString) + { + string ss = ""; + string pattern = "%"; // Pattern to match the percentage sign + Match match = Regex.Match(SearchString, pattern); + if (match.Success) + { + int sl = SearchString.Length; + int precentIdx = SearchString.IndexOf('%'); + int startIndex = 0; + if (sl == precentIdx + 1) // % the last char. + { + ss = SearchString.Substring(startIndex, sl - 1); + var isNumeric = int.TryParse(ss, out int n); + if (isNumeric == true) // other that a % are the rest of the characters numbers. + { + ss = ' ' + SearchString; //add a space prefix; + } + } + } + return ss; + } + private void DataPortal_Fetch(ItemListSearchCriteria criteria) { this.RaiseListChangedEvents = false; + //criteria.SearchString = checkPercentChar(criteria.SearchString); try { using (SqlConnection cn = Database.VEPROMS_SqlConnection) diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.Designer.cs b/PROMS/Volian.Controls.Library/DisplaySearch.Designer.cs index 5c2552de..80bbc53a 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.Designer.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.Designer.cs @@ -94,15 +94,6 @@ namespace Volian.Controls.Library this.label2 = new System.Windows.Forms.Label(); this.cbxAnnoTypes = new DevComponents.DotNetBar.Controls.ComboBoxEx(); this.tabAnnotationSearch = new DevComponents.DotNetBar.TabItem(this.components); - this.tabControlPanel1 = new DevComponents.DotNetBar.TabControlPanel(); - this.btnTranCvtSelToTxt = new System.Windows.Forms.Button(); - this.lblIncTran = new System.Windows.Forms.Label(); - this.btnTranCvtAllToTxt = new System.Windows.Forms.Button(); - this.lblSrchIncTran = new System.Windows.Forms.Label(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.rbFromEditor = new System.Windows.Forms.RadioButton(); - this.rbFromTree = new System.Windows.Forms.RadioButton(); - this.tabIncTrans = new DevComponents.DotNetBar.TabItem(this.components); this.contextMenuBar1 = new DevComponents.DotNetBar.ContextMenuBar(); this.btnCMIFindText = new DevComponents.DotNetBar.ButtonItem(); this.btnCMEdit = new DevComponents.DotNetBar.ButtonItem(); @@ -121,6 +112,15 @@ namespace Volian.Controls.Library this.btnAND = new DevComponents.DotNetBar.ButtonItem(); this.btnOR = new DevComponents.DotNetBar.ButtonItem(); this.btnNOT = new DevComponents.DotNetBar.ButtonItem(); + this.tabIncTrans = new DevComponents.DotNetBar.TabItem(this.components); + this.tabControlPanel1 = new DevComponents.DotNetBar.TabControlPanel(); + this.btnTranCvtSelToTxt = new System.Windows.Forms.Button(); + this.lblIncTran = new System.Windows.Forms.Label(); + this.btnTranCvtAllToTxt = new System.Windows.Forms.Button(); + this.lblSrchIncTran = new System.Windows.Forms.Label(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.rbFromEditor = new System.Windows.Forms.RadioButton(); + this.rbFromTree = new System.Windows.Forms.RadioButton(); this.advTreeProcSets = new DevComponents.AdvTree.AdvTree(); this.elementStyle1 = new DevComponents.DotNetBar.ElementStyle(); this.node1 = new DevComponents.AdvTree.Node(); @@ -168,9 +168,9 @@ namespace Volian.Controls.Library this.tabControlPanel3.SuspendLayout(); this.gpSrchAnnoText.SuspendLayout(); this.panel4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.contextMenuBar1)).BeginInit(); this.tabControlPanel1.SuspendLayout(); this.groupBox1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.contextMenuBar1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.advTreeProcSets)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.advTreeStepTypes)).BeginInit(); this.grpPanSearchResults.SuspendLayout(); @@ -974,118 +974,6 @@ namespace Volian.Controls.Library this.tabAnnotationSearch.Text = "Annotations"; this.tabAnnotationSearch.Click += new System.EventHandler(this.tabAnnotationSearch_Click); // - // tabControlPanel1 - // - this.tabControlPanel1.Controls.Add(this.btnTranCvtSelToTxt); - this.tabControlPanel1.Controls.Add(this.lblIncTran); - this.tabControlPanel1.Controls.Add(this.btnTranCvtAllToTxt); - this.tabControlPanel1.Controls.Add(this.lblSrchIncTran); - this.tabControlPanel1.Controls.Add(this.groupBox1); - this.tabControlPanel1.DisabledBackColor = System.Drawing.Color.Empty; - this.tabControlPanel1.Location = new System.Drawing.Point(0, 34); - this.tabControlPanel1.Name = "tabControlPanel1"; - this.tabControlPanel1.Padding = new System.Windows.Forms.Padding(1); - this.tabControlPanel1.Size = new System.Drawing.Size(277, 113); - this.tabControlPanel1.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(253)))), ((int)(((byte)(253)))), ((int)(((byte)(254))))); - this.tabControlPanel1.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(157)))), ((int)(((byte)(188)))), ((int)(((byte)(227))))); - this.tabControlPanel1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; - this.tabControlPanel1.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(146)))), ((int)(((byte)(165)))), ((int)(((byte)(199))))); - this.tabControlPanel1.Style.BorderSide = ((DevComponents.DotNetBar.eBorderSide)(((DevComponents.DotNetBar.eBorderSide.Left | DevComponents.DotNetBar.eBorderSide.Right) - | DevComponents.DotNetBar.eBorderSide.Bottom))); - this.tabControlPanel1.Style.GradientAngle = 90; - this.tabControlPanel1.TabIndex = 17; - this.tabControlPanel1.TabItem = this.tabIncTrans; - this.tabControlPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)(( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.tabControlPanel1.RightToLeft = System.Windows.Forms.RightToLeft.No; - // - // btnTranCvtSelToTxt - // - this.btnTranCvtSelToTxt.Enabled = false; - this.btnTranCvtSelToTxt.Location = new System.Drawing.Point(121, 63); - this.btnTranCvtSelToTxt.Name = "btnTranCvtSelToTxt"; - this.btnTranCvtSelToTxt.Size = new System.Drawing.Size(145, 22); - this.superTooltip1.SetSuperTooltip(this.btnTranCvtSelToTxt, new DevComponents.DotNetBar.SuperTooltipInfo("Convert Selected Incoming Transitions To Text", "", "Converts selected transitions in the results list to text unless the user does no" + - "t have permission to change text.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(170, 90))); - this.btnTranCvtSelToTxt.TabIndex = 3; - this.btnTranCvtSelToTxt.Text = "Convert Selected To Text"; - this.btnTranCvtSelToTxt.UseVisualStyleBackColor = true; - this.btnTranCvtSelToTxt.Click += new System.EventHandler(this.btnTranCvtSelToTxt_Click); - // - // lblIncTran - // - this.lblIncTran.AutoSize = true; - this.lblIncTran.Location = new System.Drawing.Point(4, 9); - this.lblIncTran.Name = "lblIncTran"; - this.lblIncTran.Size = new System.Drawing.Size(23, 13); - this.lblIncTran.TabIndex = 2; - this.lblIncTran.Text = "To:"; - // - // btnTranCvtAllToTxt - // - this.btnTranCvtAllToTxt.Enabled = false; - this.btnTranCvtAllToTxt.Location = new System.Drawing.Point(6, 63); - this.btnTranCvtAllToTxt.Name = "btnTranCvtAllToTxt"; - this.btnTranCvtAllToTxt.Size = new System.Drawing.Size(109, 22); - this.superTooltip1.SetSuperTooltip(this.btnTranCvtAllToTxt, new DevComponents.DotNetBar.SuperTooltipInfo("Convert All Incoming Transitions To Text", "", "Converts all of the transitions in the results list to text unless the user does " + - "not have permission to change text.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(170, 90))); - this.btnTranCvtAllToTxt.TabIndex = 1; - this.btnTranCvtAllToTxt.Text = "Convert All To Text"; - this.btnTranCvtAllToTxt.UseVisualStyleBackColor = true; - this.btnTranCvtAllToTxt.Click += new System.EventHandler(this.btnTranCvtAllToTxt_Click); - // - // lblSrchIncTran - // - this.lblSrchIncTran.BackColor = System.Drawing.Color.Transparent; - this.lblSrchIncTran.Location = new System.Drawing.Point(34, 9); - this.lblSrchIncTran.Name = "lblSrchIncTran"; - this.lblSrchIncTran.Size = new System.Drawing.Size(239, 40); - this.superTooltip1.SetSuperTooltip(this.lblSrchIncTran, new DevComponents.DotNetBar.SuperTooltipInfo("Incoming Transitions", "", "This is the step, section, or procedure for which incoming transitions to it are " + - "shown in the list.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(170, 80))); - this.lblSrchIncTran.TabIndex = 1; - // - // groupBox1 - // - this.groupBox1.BackColor = System.Drawing.Color.Transparent; - this.groupBox1.Controls.Add(this.rbFromEditor); - this.groupBox1.Controls.Add(this.rbFromTree); - this.groupBox1.Location = new System.Drawing.Point(147, 4); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(130, 57); - this.groupBox1.TabIndex = 0; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "Search Selection"; - this.groupBox1.Visible = false; - // - // rbFromEditor - // - this.rbFromEditor.AutoSize = true; - this.rbFromEditor.Location = new System.Drawing.Point(22, 34); - this.rbFromEditor.Name = "rbFromEditor"; - this.rbFromEditor.Size = new System.Drawing.Size(78, 17); - this.rbFromEditor.TabIndex = 1; - this.rbFromEditor.TabStop = true; - this.rbFromEditor.Text = "From Editor"; - this.rbFromEditor.UseVisualStyleBackColor = true; - // - // rbFromTree - // - this.rbFromTree.AutoSize = true; - this.rbFromTree.Location = new System.Drawing.Point(22, 16); - this.rbFromTree.Name = "rbFromTree"; - this.rbFromTree.Size = new System.Drawing.Size(73, 17); - this.rbFromTree.TabIndex = 0; - this.rbFromTree.TabStop = true; - this.rbFromTree.Text = "From Tree"; - this.rbFromTree.UseVisualStyleBackColor = true; - // - // tabIncTrans - // - this.tabIncTrans.AttachedControl = this.tabControlPanel1; - this.tabIncTrans.Name = "tabIncTrans"; - this.superTooltip1.SetSuperTooltip(this.tabIncTrans, new DevComponents.DotNetBar.SuperTooltipInfo("Search for Incoming Transitions", "", "Finds the Incoming Transitions that point to the current item and convert the tra" + - "nsition(s) to text if desired and if have permissions.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(170, 120))); - this.tabIncTrans.Text = "Incoming\nTransitions"; - // // contextMenuBar1 // this.contextMenuBar1.DockSide = DevComponents.DotNetBar.eDockSide.Top; @@ -1248,6 +1136,119 @@ namespace Volian.Controls.Library this.btnNOT.Text = "NOT"; this.btnNOT.Click += new System.EventHandler(this.btnNOT_Click); // + // tabIncTrans + // + this.tabIncTrans.AttachedControl = this.tabControlPanel1; + this.tabIncTrans.Name = "tabIncTrans"; + this.superTooltip1.SetSuperTooltip(this.tabIncTrans, new DevComponents.DotNetBar.SuperTooltipInfo("Search for Incoming Transitions", "", "Finds the Incoming Transitions that point to the current item and convert the tra" + + "nsition(s) to text if desired and if have permissions.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(170, 120))); + this.tabIncTrans.Text = "Incoming\nTransitions"; + // + // tabControlPanel1 + // + this.tabControlPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabControlPanel1.Controls.Add(this.btnTranCvtSelToTxt); + this.tabControlPanel1.Controls.Add(this.lblIncTran); + this.tabControlPanel1.Controls.Add(this.btnTranCvtAllToTxt); + this.tabControlPanel1.Controls.Add(this.lblSrchIncTran); + this.tabControlPanel1.Controls.Add(this.groupBox1); + this.tabControlPanel1.DisabledBackColor = System.Drawing.Color.Empty; + this.tabControlPanel1.Location = new System.Drawing.Point(0, 34); + this.tabControlPanel1.Name = "tabControlPanel1"; + this.tabControlPanel1.Padding = new System.Windows.Forms.Padding(1); + this.tabControlPanel1.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.tabControlPanel1.Size = new System.Drawing.Size(277, 113); + this.tabControlPanel1.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(253)))), ((int)(((byte)(253)))), ((int)(((byte)(254))))); + this.tabControlPanel1.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(157)))), ((int)(((byte)(188)))), ((int)(((byte)(227))))); + this.tabControlPanel1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.tabControlPanel1.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(146)))), ((int)(((byte)(165)))), ((int)(((byte)(199))))); + this.tabControlPanel1.Style.BorderSide = ((DevComponents.DotNetBar.eBorderSide)(((DevComponents.DotNetBar.eBorderSide.Left | DevComponents.DotNetBar.eBorderSide.Right) + | DevComponents.DotNetBar.eBorderSide.Bottom))); + this.tabControlPanel1.Style.GradientAngle = 90; + this.tabControlPanel1.TabIndex = 17; + this.tabControlPanel1.TabItem = this.tabIncTrans; + // + // btnTranCvtSelToTxt + // + this.btnTranCvtSelToTxt.Enabled = false; + this.btnTranCvtSelToTxt.Location = new System.Drawing.Point(121, 63); + this.btnTranCvtSelToTxt.Name = "btnTranCvtSelToTxt"; + this.btnTranCvtSelToTxt.Size = new System.Drawing.Size(145, 22); + this.superTooltip1.SetSuperTooltip(this.btnTranCvtSelToTxt, new DevComponents.DotNetBar.SuperTooltipInfo("Convert Selected Incoming Transitions To Text", "", "Converts selected transitions in the results list to text unless the user does no" + + "t have permission to change text.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(170, 90))); + this.btnTranCvtSelToTxt.TabIndex = 3; + this.btnTranCvtSelToTxt.Text = "Convert Selected To Text"; + this.btnTranCvtSelToTxt.UseVisualStyleBackColor = true; + this.btnTranCvtSelToTxt.Click += new System.EventHandler(this.btnTranCvtSelToTxt_Click); + // + // lblIncTran + // + this.lblIncTran.AutoSize = true; + this.lblIncTran.Location = new System.Drawing.Point(4, 9); + this.lblIncTran.Name = "lblIncTran"; + this.lblIncTran.Size = new System.Drawing.Size(23, 13); + this.lblIncTran.TabIndex = 2; + this.lblIncTran.Text = "To:"; + // + // btnTranCvtAllToTxt + // + this.btnTranCvtAllToTxt.Enabled = false; + this.btnTranCvtAllToTxt.Location = new System.Drawing.Point(6, 63); + this.btnTranCvtAllToTxt.Name = "btnTranCvtAllToTxt"; + this.btnTranCvtAllToTxt.Size = new System.Drawing.Size(109, 22); + this.superTooltip1.SetSuperTooltip(this.btnTranCvtAllToTxt, new DevComponents.DotNetBar.SuperTooltipInfo("Convert All Incoming Transitions To Text", "", "Converts all of the transitions in the results list to text unless the user does " + + "not have permission to change text.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(170, 90))); + this.btnTranCvtAllToTxt.TabIndex = 1; + this.btnTranCvtAllToTxt.Text = "Convert All To Text"; + this.btnTranCvtAllToTxt.UseVisualStyleBackColor = true; + this.btnTranCvtAllToTxt.Click += new System.EventHandler(this.btnTranCvtAllToTxt_Click); + // + // lblSrchIncTran + // + this.lblSrchIncTran.BackColor = System.Drawing.Color.Transparent; + this.lblSrchIncTran.Location = new System.Drawing.Point(34, 9); + this.lblSrchIncTran.Name = "lblSrchIncTran"; + this.lblSrchIncTran.Size = new System.Drawing.Size(239, 40); + this.superTooltip1.SetSuperTooltip(this.lblSrchIncTran, new DevComponents.DotNetBar.SuperTooltipInfo("Incoming Transitions", "", "This is the step, section, or procedure for which incoming transitions to it are " + + "shown in the list.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(170, 80))); + this.lblSrchIncTran.TabIndex = 1; + // + // groupBox1 + // + this.groupBox1.BackColor = System.Drawing.Color.Transparent; + this.groupBox1.Controls.Add(this.rbFromEditor); + this.groupBox1.Controls.Add(this.rbFromTree); + this.groupBox1.Location = new System.Drawing.Point(147, 4); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(130, 57); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Search Selection"; + this.groupBox1.Visible = false; + // + // rbFromEditor + // + this.rbFromEditor.AutoSize = true; + this.rbFromEditor.Location = new System.Drawing.Point(22, 34); + this.rbFromEditor.Name = "rbFromEditor"; + this.rbFromEditor.Size = new System.Drawing.Size(78, 17); + this.rbFromEditor.TabIndex = 1; + this.rbFromEditor.TabStop = true; + this.rbFromEditor.Text = "From Editor"; + this.rbFromEditor.UseVisualStyleBackColor = true; + // + // rbFromTree + // + this.rbFromTree.AutoSize = true; + this.rbFromTree.Location = new System.Drawing.Point(22, 16); + this.rbFromTree.Name = "rbFromTree"; + this.rbFromTree.Size = new System.Drawing.Size(73, 17); + this.rbFromTree.TabIndex = 0; + this.rbFromTree.TabStop = true; + this.rbFromTree.Text = "From Tree"; + this.rbFromTree.UseVisualStyleBackColor = true; + // // advTreeProcSets // this.advTreeProcSets.AccessibleRole = System.Windows.Forms.AccessibleRole.Outline; @@ -1406,7 +1407,6 @@ namespace Volian.Controls.Library // this.lbSrchResultsIncTrans.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.lbSrchResultsIncTrans.CheckBoxesVisible = true; - this.lbSrchResultsIncTrans.CheckStateMember = null; this.lbSrchResultsIncTrans.ContainerControlProcessDialogKey = true; this.lbSrchResultsIncTrans.Dock = System.Windows.Forms.DockStyle.Fill; this.lbSrchResultsIncTrans.DragDropSupport = true; @@ -1733,11 +1733,6 @@ namespace Volian.Controls.Library this.Controls.Add(this.xpSetToSearch); this.Controls.Add(this.tabSearchTypes); this.Controls.Add(this.tabControlPanel1); - //B2025-056 Click on Incoming Transitions - // This needs to be part of overall control - // since if it is part of tabSearchTypes, - // then when that is disabled, buttons on - // this will be also this.Margin = new System.Windows.Forms.Padding(2); this.Name = "DisplaySearch"; this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; @@ -1760,11 +1755,11 @@ namespace Volian.Controls.Library this.gpSrchAnnoText.ResumeLayout(false); this.panel4.ResumeLayout(false); this.panel4.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.contextMenuBar1)).EndInit(); this.tabControlPanel1.ResumeLayout(false); this.tabControlPanel1.PerformLayout(); this.groupBox1.ResumeLayout(false); this.groupBox1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.contextMenuBar1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.advTreeProcSets)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.advTreeStepTypes)).EndInit(); this.grpPanSearchResults.ResumeLayout(false); From 1aca7335f7683a335231384375cc8de09401f8c3 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Thu, 23 Jul 2026 08:15:18 -0400 Subject: [PATCH 03/22] Development --- .../VEPROMS.CSLA.Library/Extension/ItemExt.cs | 23 -------------- .../Volian.Controls.Library/DisplaySearch.cs | 31 ++++++++++++++++++- 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs index fa3a36c5..0ca5cbfe 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs @@ -7279,33 +7279,10 @@ namespace VEPROMS.CSLA.Library _ByWordSuffix = byWordSuffix; } } - private string checkPercentChar(string SearchString) - { - string ss = ""; - string pattern = "%"; // Pattern to match the percentage sign - Match match = Regex.Match(SearchString, pattern); - if (match.Success) - { - int sl = SearchString.Length; - int precentIdx = SearchString.IndexOf('%'); - int startIndex = 0; - if (sl == precentIdx + 1) // % the last char. - { - ss = SearchString.Substring(startIndex, sl - 1); - var isNumeric = int.TryParse(ss, out int n); - if (isNumeric == true) // other that a % are the rest of the characters numbers. - { - ss = ' ' + SearchString; //add a space prefix; - } - } - } - return ss; - } private void DataPortal_Fetch(ItemListSearchCriteria criteria) { this.RaiseListChangedEvents = false; - //criteria.SearchString = checkPercentChar(criteria.SearchString); try { using (SqlConnection cn = Database.VEPROMS_SqlConnection) diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index f30c8bb2..6f569b4e 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -2078,8 +2078,9 @@ namespace Volian.Controls.Library if (cbxFndUnLnkROVals.Enabled && cbxFndUnLnkROVals.Checked) { + string ROSearchList2 = checkPercentChar(ROSearchList); // match exact string // B2022-031 - added a cbxProcSectSrch to filter out procedure and section titles from global search results. - SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, string.Empty, string.Empty); + SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList2, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, string.Empty, string.Empty); cmbResultsStyleIndex = 3; // display step text in results } else @@ -2190,6 +2191,34 @@ namespace Volian.Controls.Library OnSearchComplete(new DisplaySearchEventArgs(TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks))); } + private string checkPercentChar(string SearchString) + { + string ss = ""; + string pattern = "%"; // Pattern to match the percentage sign + Match match = Regex.Match(SearchString, pattern); + if (match.Success) // Special case for percents. + { + int sl = SearchString.Length; + int precentIdx = SearchString.IndexOf('%'); + int startIndex = 0; + if (sl == precentIdx + 1) // % the last char. + { + ss = SearchString.Substring(startIndex, sl - 1); + var isNumeric = int.TryParse(ss, out int n); + if (isNumeric == true) // other that a % are the rest of the characters numbers. + { + ss = ' ' + SearchString; //add a space prefix to make the search exact. If search is 5% this makes it excult 25% 55% etc.; + } + } + } + else + { + ss = ' ' + SearchString + ' '; // Exact match add spaces before and after search string. + + } + return ss; + } + private void ClearResults() // B2021-103 if no results when RNO only, clear results list. (moved from btnSearch_Click) { if (tabSearchTypes.SelectedTab != tabSearchTypes.Tabs[4]) From 7c3a43749c2a820783e6c1d75e59aa99279ed509 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Thu, 23 Jul 2026 09:09:22 -0400 Subject: [PATCH 04/22] B2026-053-Find-Unlinked-Values-of-Selected --- PROMS/Volian.Controls.Library/DisplaySearch.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index 6f569b4e..0038c518 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -2078,7 +2078,7 @@ namespace Volian.Controls.Library if (cbxFndUnLnkROVals.Enabled && cbxFndUnLnkROVals.Checked) { - string ROSearchList2 = checkPercentChar(ROSearchList); // match exact string + string ROSearchList2 = checkPercentChar(ROSearchList); // B2026-053 match exact string // B2022-031 - added a cbxProcSectSrch to filter out procedure and section titles from global search results. SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList2, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, string.Empty, string.Empty); cmbResultsStyleIndex = 3; // display step text in results @@ -2191,10 +2191,10 @@ namespace Volian.Controls.Library OnSearchComplete(new DisplaySearchEventArgs(TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks))); } - private string checkPercentChar(string SearchString) + private string checkPercentChar(string SearchString) // B2026-053 { string ss = ""; - string pattern = "%"; // Pattern to match the percentage sign + string pattern = "%"; // B2026-053 Pattern to match the percentage sign Match match = Regex.Match(SearchString, pattern); if (match.Success) // Special case for percents. { @@ -2205,9 +2205,9 @@ namespace Volian.Controls.Library { ss = SearchString.Substring(startIndex, sl - 1); var isNumeric = int.TryParse(ss, out int n); - if (isNumeric == true) // other that a % are the rest of the characters numbers. + if (isNumeric == true) // B2026-053 other that a % are the rest of the characters numbers. { - ss = ' ' + SearchString; //add a space prefix to make the search exact. If search is 5% this makes it excult 25% 55% etc.; + ss = ' ' + SearchString; //B2026-053 add a space prefix to make the search exact. If search is 5% this makes it excult 25% 55% etc.; } } } From f93b16fc52a7efc07793bf4ff6dc63e45bd99a7a Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Thu, 23 Jul 2026 09:21:09 -0400 Subject: [PATCH 05/22] B2026-053-Find-Unlinked-Values-of-Selected --- PROMS/Volian.Controls.Library/DisplaySearch.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index 0038c518..d0361ac5 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -2210,6 +2210,10 @@ namespace Volian.Controls.Library ss = ' ' + SearchString; //B2026-053 add a space prefix to make the search exact. If search is 5% this makes it excult 25% 55% etc.; } } + else + { + ss = ' ' + SearchString + ' '; // Exact match add spaces before and after search string. + } } else { From 2261c8f0f5522a48c8f091414e85b510deb7d17e Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Fri, 24 Jul 2026 10:47:25 -0400 Subject: [PATCH 06/22] B2026-053-Find-Unlinked-Values-of-Selected --- .../Volian.Controls.Library/DisplaySearch.cs | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index d0361ac5..c981bfb9 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -2199,7 +2199,7 @@ namespace Volian.Controls.Library if (match.Success) // Special case for percents. { int sl = SearchString.Length; - int precentIdx = SearchString.IndexOf('%'); + int precentIdx = SearchString.LastIndexOf('%'); int startIndex = 0; if (sl == precentIdx + 1) // % the last char. { @@ -2207,12 +2207,26 @@ namespace Volian.Controls.Library var isNumeric = int.TryParse(ss, out int n); if (isNumeric == true) // B2026-053 other that a % are the rest of the characters numbers. { - ss = ' ' + SearchString; //B2026-053 add a space prefix to make the search exact. If search is 5% this makes it excult 25% 55% etc.; + ss = ' ' + SearchString + ' '; // to get exact match add spaces before and after search string. + } + else + { + ss = ' ' + SearchString + ' '; // string it not a percent. } } else { - ss = ' ' + SearchString + ' '; // Exact match add spaces before and after search string. + int strl2 = SearchString.Length; + int prcIdx2 = SearchString.LastIndexOf(' '); + int strIdx2 = 0; + if (strl2 == prcIdx2 + 1) // if the last char is ' ' the last char. + { + ss = ' ' + SearchString; //B2026-053 add a space prefix to make the search exact. If search is 5% this makes it excult 25% 55% etc.; + } + else + { + ss = ' ' + SearchString + ' '; // Exact match add spaces before and after search string. + } } } else From 99fe567e78f5b5ddc1afa862d15dce6fd49c6977 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Mon, 27 Jul 2026 09:13:34 -0400 Subject: [PATCH 07/22] Development --- .../Volian.Controls.Library/DisplaySearch.cs | 28 ++++++------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index 6f569b4e..ef100b56 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -2078,7 +2078,7 @@ namespace Volian.Controls.Library if (cbxFndUnLnkROVals.Enabled && cbxFndUnLnkROVals.Checked) { - string ROSearchList2 = checkPercentChar(ROSearchList); // match exact string + string ROSearchList2 = exactsearch(ROSearchList); // match exact string // B2022-031 - added a cbxProcSectSrch to filter out procedure and section titles from global search results. SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList2, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, string.Empty, string.Empty); cmbResultsStyleIndex = 3; // display step text in results @@ -2191,32 +2191,20 @@ namespace Volian.Controls.Library OnSearchComplete(new DisplaySearchEventArgs(TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks))); } - private string checkPercentChar(string SearchString) + private string exactsearch(string SearchString) // B2026-053 { string ss = ""; - string pattern = "%"; // Pattern to match the percentage sign - Match match = Regex.Match(SearchString, pattern); - if (match.Success) // Special case for percents. + int sl = SearchString.Length; + int LstIdxSp = SearchString.LastIndexOf(' '); + if (sl == LstIdxSp + 1) // B2026-053 if ' ' the last char. { - int sl = SearchString.Length; - int precentIdx = SearchString.IndexOf('%'); - int startIndex = 0; - if (sl == precentIdx + 1) // % the last char. - { - ss = SearchString.Substring(startIndex, sl - 1); - var isNumeric = int.TryParse(ss, out int n); - if (isNumeric == true) // other that a % are the rest of the characters numbers. - { - ss = ' ' + SearchString; //add a space prefix to make the search exact. If search is 5% this makes it excult 25% 55% etc.; - } - } + ss = ' ' + SearchString; //add a space prefix to make the search exact if the end of the search string is a space. } else { - ss = ' ' + SearchString + ' '; // Exact match add spaces before and after search string. - + ss = ' ' + SearchString + ' '; // Exact match add spaces before and after search string. } - return ss; + return ss; } private void ClearResults() // B2021-103 if no results when RNO only, clear results list. (moved from btnSearch_Click) From 9bf7b2ffde84a8d6998e2e8dd61baf467d1a05b4 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Mon, 27 Jul 2026 11:14:19 -0400 Subject: [PATCH 08/22] B2026-053-Find-Unlinked-Values-of-Selected --- .../Volian.Controls.Library/DisplaySearch.cs | 51 +++++-------------- 1 file changed, 12 insertions(+), 39 deletions(-) diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index c981bfb9..0e79af26 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -2078,7 +2078,7 @@ namespace Volian.Controls.Library if (cbxFndUnLnkROVals.Enabled && cbxFndUnLnkROVals.Checked) { - string ROSearchList2 = checkPercentChar(ROSearchList); // B2026-053 match exact string + string ROSearchList2 = exactsearch(ROSearchList); // B2026-053 match exact string // B2022-031 - added a cbxProcSectSrch to filter out procedure and section titles from global search results. SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList2, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, string.Empty, string.Empty); cmbResultsStyleIndex = 3; // display step text in results @@ -2191,50 +2191,23 @@ namespace Volian.Controls.Library OnSearchComplete(new DisplaySearchEventArgs(TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks))); } - private string checkPercentChar(string SearchString) // B2026-053 + private string exactsearch(string SearchString) // B2026-053 { - string ss = ""; - string pattern = "%"; // B2026-053 Pattern to match the percentage sign - Match match = Regex.Match(SearchString, pattern); - if (match.Success) // Special case for percents. + StringBuilder ss = new StringBuilder(); + int sl = SearchString.Length; + int LstIdxSp = SearchString.LastIndexOf(' '); + if (sl == LstIdxSp + 1) // B2026-053 if ' ' the last char. { - int sl = SearchString.Length; - int precentIdx = SearchString.LastIndexOf('%'); - int startIndex = 0; - if (sl == precentIdx + 1) // % the last char. - { - ss = SearchString.Substring(startIndex, sl - 1); - var isNumeric = int.TryParse(ss, out int n); - if (isNumeric == true) // B2026-053 other that a % are the rest of the characters numbers. - { - ss = ' ' + SearchString + ' '; // to get exact match add spaces before and after search string. - } - else - { - ss = ' ' + SearchString + ' '; // string it not a percent. - } - } - else - { - int strl2 = SearchString.Length; - int prcIdx2 = SearchString.LastIndexOf(' '); - int strIdx2 = 0; - if (strl2 == prcIdx2 + 1) // if the last char is ' ' the last char. - { - ss = ' ' + SearchString; //B2026-053 add a space prefix to make the search exact. If search is 5% this makes it excult 25% 55% etc.; - } - else - { - ss = ' ' + SearchString + ' '; // Exact match add spaces before and after search string. - } - } + ss.Append(' '); + ss.Append(SearchString); // B2026-053 add a space prefix to make the search exact if the end of the searchString is a space. } else { - ss = ' ' + SearchString + ' '; // Exact match add spaces before and after search string. - + ss.Append(' '); + ss.Append(SearchString); // B2026-053 Exact match add spaces before and after searchString. + ss.Append(' '); } - return ss; + return ss.ToString(); } private void ClearResults() // B2021-103 if no results when RNO only, clear results list. (moved from btnSearch_Click) From 58a6cb9a246f0e91fb30ef6dcec91ed7fbf9a5f6 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Mon, 27 Jul 2026 11:19:47 -0400 Subject: [PATCH 09/22] Development --- PROMS/Volian.Controls.Library/DisplaySearch.cs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index ef100b56..b22a7cb5 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -2079,7 +2079,7 @@ namespace Volian.Controls.Library if (cbxFndUnLnkROVals.Enabled && cbxFndUnLnkROVals.Checked) { string ROSearchList2 = exactsearch(ROSearchList); // match exact string - // B2022-031 - added a cbxProcSectSrch to filter out procedure and section titles from global search results. + // B2022-031 - added a exactsearch to filter out procedure and section titles from global search results. SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList2, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, string.Empty, string.Empty); cmbResultsStyleIndex = 3; // display step text in results } @@ -2193,18 +2193,22 @@ namespace Volian.Controls.Library private string exactsearch(string SearchString) // B2026-053 { - string ss = ""; + //string ss = ""; + StringBuilder ss = new StringBuilder(); int sl = SearchString.Length; int LstIdxSp = SearchString.LastIndexOf(' '); if (sl == LstIdxSp + 1) // B2026-053 if ' ' the last char. { - ss = ' ' + SearchString; //add a space prefix to make the search exact if the end of the search string is a space. + ss.Append(' '); + ss.Append(SearchString); // B2026-053 add a space prefix to make the search exact if the end of the searchString is a space. } else { - ss = ' ' + SearchString + ' '; // Exact match add spaces before and after search string. + ss.Append(' '); + ss.Append(SearchString); // B2026-053 Exact match add spaces before and after searchString. + ss.Append(' '); } - return ss; + return ss.ToString(); } private void ClearResults() // B2021-103 if no results when RNO only, clear results list. (moved from btnSearch_Click) From 780ce657ca4b14e184c31b99fa9d15dd1108a800 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Mon, 27 Jul 2026 11:28:40 -0400 Subject: [PATCH 10/22] B2026-053-Find-Unlinked-Values-of-Selected --- .../Volian.Controls.Library/DisplaySearch.cs | 25 ++++++------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index e115fa9e..9aec6451 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -2078,7 +2078,7 @@ namespace Volian.Controls.Library if (cbxFndUnLnkROVals.Enabled && cbxFndUnLnkROVals.Checked) { - string ROSearchList2 = exactsearch(ROSearchList); // match exact string + string ROSearchList2 = exactsearch(ROSearchList); // B2026-053 match exact string // B2022-031 - added a exactsearch to filter out procedure and section titles from global search results. SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList2, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, string.Empty, string.Empty); cmbResultsStyleIndex = 3; // display step text in results @@ -2193,23 +2193,14 @@ namespace Volian.Controls.Library private string exactsearch(string SearchString) // B2026-053 { - string ss = ""; - string pattern = "%"; // Pattern to match the percentage sign - Match match = Regex.Match(SearchString, pattern); - if (match.Success) // Special case for percents. + //string ss = ""; + StringBuilder ss = new StringBuilder(); + int sl = SearchString.Length; + int LstIdxSp = SearchString.LastIndexOf(' '); + if (sl == LstIdxSp + 1) // B2026-053 if ' ' the last char. { - int sl = SearchString.Length; - int precentIdx = SearchString.IndexOf('%'); - int startIndex = 0; - if (sl == precentIdx + 1) // % the last char. - { - ss = SearchString.Substring(startIndex, sl - 1); - var isNumeric = int.TryParse(ss, out int n); - if (isNumeric == true) // other that a % are the rest of the characters numbers. - { - ss = ' ' + SearchString; //add a space prefix to make the search exact. If search is 5% this makes it excult 25% 55% etc.; - } - } + ss.Append(' '); + ss.Append(SearchString); // B2026-053 add a space prefix to make the search exact if the end of the searchString is a space. } else { From be744b40a3ea309cd533dfb8f15c9cf5a360b50b Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Mon, 27 Jul 2026 11:35:42 -0400 Subject: [PATCH 11/22] B2026-053-Find-Unlinked-Values-of-Selected --- PROMS/Volian.Controls.Library/DisplaySearch.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index 9aec6451..e821f5a1 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -2193,7 +2193,6 @@ namespace Volian.Controls.Library private string exactsearch(string SearchString) // B2026-053 { - //string ss = ""; StringBuilder ss = new StringBuilder(); int sl = SearchString.Length; int LstIdxSp = SearchString.LastIndexOf(' '); From b90d419bc5e95af1681725ecfe75bcd81a4ca9ea Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Mon, 27 Jul 2026 12:14:55 -0400 Subject: [PATCH 12/22] B2026-053-Find-Unlinked-Values-of-Selected --- .../VlnFlexGrid.Designer.cs | 6 +-- PROMS/Volian.Controls.Library/VlnFlexGrid.cs | 48 ++++++------------- 2 files changed, 16 insertions(+), 38 deletions(-) diff --git a/PROMS/Volian.Controls.Library/VlnFlexGrid.Designer.cs b/PROMS/Volian.Controls.Library/VlnFlexGrid.Designer.cs index d6e48711..95fa1523 100644 --- a/PROMS/Volian.Controls.Library/VlnFlexGrid.Designer.cs +++ b/PROMS/Volian.Controls.Library/VlnFlexGrid.Designer.cs @@ -1,5 +1,4 @@ using System; -using System.Windows.Forms; namespace Volian.Controls.Library { @@ -79,10 +78,7 @@ namespace Volian.Controls.Library // VlnFlexGrid // this.Rows.DefaultSize = 19; - this.AllowDrop = true; - this.DragEnter += new DragEventHandler(Control_DragEnter); - this.DragDrop += new DragEventHandler(Control_DragDrop); - + ((System.ComponentModel.ISupportInitialize)(this)).EndInit(); this.ResumeLayout(false); diff --git a/PROMS/Volian.Controls.Library/VlnFlexGrid.cs b/PROMS/Volian.Controls.Library/VlnFlexGrid.cs index 6f85943f..f7f2310f 100644 --- a/PROMS/Volian.Controls.Library/VlnFlexGrid.cs +++ b/PROMS/Volian.Controls.Library/VlnFlexGrid.cs @@ -1,23 +1,22 @@ -using C1.Win.C1FlexGrid; -using C1.Win.C1SpellChecker; -using DevComponents.DotNetBar.Controls; -using JR.Utils.GUI.Forms; using System; +using System.ComponentModel; using System.Collections; using System.Collections.Generic; -using System.ComponentModel; using System.Diagnostics; -using System.Drawing; -using System.IO; -using System.Runtime.InteropServices; using System.Text; -using System.Text.RegularExpressions; using System.Windows.Forms; +using System.Drawing; +using System.Runtime.InteropServices; using System.Xml; -using System.Xml.Serialization; -using VEPROMS.CSLA.Library; -using Volian.Base.Library; +using System.IO; using Volian.Controls.Library; +using VEPROMS.CSLA.Library; +using C1.Win.C1FlexGrid; +using C1.Win.C1SpellChecker; +using System.Text.RegularExpressions; +using System.Xml.Serialization; +using Volian.Base.Library; +using JR.Utils.GUI.Forms; namespace Volian.Controls.Library { @@ -4439,28 +4438,11 @@ namespace Volian.Controls.Library // } //} - private void Control_DragEnter(object sender, DragEventArgs e) - { - if (e.Data.GetDataPresent(DataFormats.Text)) - { - e.Effect = DragDropEffects.Copy; // Allow copy - } - else - { - e.Effect = DragDropEffects.None; // Disallow - } - } - private void Control_DragDrop(object sender, DragEventArgs e) - { - string data = (string)e.Data.GetData(DataFormats.Text); - // Process the data (e.g., display it in a TextBox) - this.Text = data; - } #region Uneven Selections - /// - /// True if the top and bottom row of the selection is the same for every column - /// - public bool EvenSelection + /// + /// True if the top and bottom row of the selection is the same for every column + /// + public bool EvenSelection { get { From b49d8871a28a9326aed426f2a0c48eb6864a7dfd Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Mon, 27 Jul 2026 12:25:46 -0400 Subject: [PATCH 13/22] B2026-053-Find-Unlinked-Values-of-Selected --- PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs index 0ca5cbfe..b6f02379 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs @@ -7279,7 +7279,6 @@ namespace VEPROMS.CSLA.Library _ByWordSuffix = byWordSuffix; } } - private void DataPortal_Fetch(ItemListSearchCriteria criteria) { this.RaiseListChangedEvents = false; From 57bd8d569e7335199ff9266d071a214177e4a3af Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Mon, 27 Jul 2026 13:45:20 -0400 Subject: [PATCH 14/22] B2026-053-Find-Unlinked-Values-of-Selected --- PROMS/Volian.Controls.Library/VlnFlexGrid.Designer.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/PROMS/Volian.Controls.Library/VlnFlexGrid.Designer.cs b/PROMS/Volian.Controls.Library/VlnFlexGrid.Designer.cs index 95fa1523..dc4245ea 100644 --- a/PROMS/Volian.Controls.Library/VlnFlexGrid.Designer.cs +++ b/PROMS/Volian.Controls.Library/VlnFlexGrid.Designer.cs @@ -83,7 +83,6 @@ namespace Volian.Controls.Library this.ResumeLayout(false); } - #endregion } } From 914837a5a2bf0eeede719ea0aa9f66fbd07a9d79 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Tue, 28 Jul 2026 10:57:55 -0400 Subject: [PATCH 15/22] B2026-053-Find-Unlinked-Values-of-Selected --- .../DisplaySearch.Designer.cs | 253 +++++++++--------- .../VlnFlexGrid.Designer.cs | 1 + 2 files changed, 130 insertions(+), 124 deletions(-) diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.Designer.cs b/PROMS/Volian.Controls.Library/DisplaySearch.Designer.cs index 80bbc53a..5c2552de 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.Designer.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.Designer.cs @@ -94,6 +94,15 @@ namespace Volian.Controls.Library this.label2 = new System.Windows.Forms.Label(); this.cbxAnnoTypes = new DevComponents.DotNetBar.Controls.ComboBoxEx(); this.tabAnnotationSearch = new DevComponents.DotNetBar.TabItem(this.components); + this.tabControlPanel1 = new DevComponents.DotNetBar.TabControlPanel(); + this.btnTranCvtSelToTxt = new System.Windows.Forms.Button(); + this.lblIncTran = new System.Windows.Forms.Label(); + this.btnTranCvtAllToTxt = new System.Windows.Forms.Button(); + this.lblSrchIncTran = new System.Windows.Forms.Label(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.rbFromEditor = new System.Windows.Forms.RadioButton(); + this.rbFromTree = new System.Windows.Forms.RadioButton(); + this.tabIncTrans = new DevComponents.DotNetBar.TabItem(this.components); this.contextMenuBar1 = new DevComponents.DotNetBar.ContextMenuBar(); this.btnCMIFindText = new DevComponents.DotNetBar.ButtonItem(); this.btnCMEdit = new DevComponents.DotNetBar.ButtonItem(); @@ -112,15 +121,6 @@ namespace Volian.Controls.Library this.btnAND = new DevComponents.DotNetBar.ButtonItem(); this.btnOR = new DevComponents.DotNetBar.ButtonItem(); this.btnNOT = new DevComponents.DotNetBar.ButtonItem(); - this.tabIncTrans = new DevComponents.DotNetBar.TabItem(this.components); - this.tabControlPanel1 = new DevComponents.DotNetBar.TabControlPanel(); - this.btnTranCvtSelToTxt = new System.Windows.Forms.Button(); - this.lblIncTran = new System.Windows.Forms.Label(); - this.btnTranCvtAllToTxt = new System.Windows.Forms.Button(); - this.lblSrchIncTran = new System.Windows.Forms.Label(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.rbFromEditor = new System.Windows.Forms.RadioButton(); - this.rbFromTree = new System.Windows.Forms.RadioButton(); this.advTreeProcSets = new DevComponents.AdvTree.AdvTree(); this.elementStyle1 = new DevComponents.DotNetBar.ElementStyle(); this.node1 = new DevComponents.AdvTree.Node(); @@ -168,9 +168,9 @@ namespace Volian.Controls.Library this.tabControlPanel3.SuspendLayout(); this.gpSrchAnnoText.SuspendLayout(); this.panel4.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.contextMenuBar1)).BeginInit(); this.tabControlPanel1.SuspendLayout(); this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.contextMenuBar1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.advTreeProcSets)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.advTreeStepTypes)).BeginInit(); this.grpPanSearchResults.SuspendLayout(); @@ -974,6 +974,118 @@ namespace Volian.Controls.Library this.tabAnnotationSearch.Text = "Annotations"; this.tabAnnotationSearch.Click += new System.EventHandler(this.tabAnnotationSearch_Click); // + // tabControlPanel1 + // + this.tabControlPanel1.Controls.Add(this.btnTranCvtSelToTxt); + this.tabControlPanel1.Controls.Add(this.lblIncTran); + this.tabControlPanel1.Controls.Add(this.btnTranCvtAllToTxt); + this.tabControlPanel1.Controls.Add(this.lblSrchIncTran); + this.tabControlPanel1.Controls.Add(this.groupBox1); + this.tabControlPanel1.DisabledBackColor = System.Drawing.Color.Empty; + this.tabControlPanel1.Location = new System.Drawing.Point(0, 34); + this.tabControlPanel1.Name = "tabControlPanel1"; + this.tabControlPanel1.Padding = new System.Windows.Forms.Padding(1); + this.tabControlPanel1.Size = new System.Drawing.Size(277, 113); + this.tabControlPanel1.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(253)))), ((int)(((byte)(253)))), ((int)(((byte)(254))))); + this.tabControlPanel1.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(157)))), ((int)(((byte)(188)))), ((int)(((byte)(227))))); + this.tabControlPanel1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.tabControlPanel1.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(146)))), ((int)(((byte)(165)))), ((int)(((byte)(199))))); + this.tabControlPanel1.Style.BorderSide = ((DevComponents.DotNetBar.eBorderSide)(((DevComponents.DotNetBar.eBorderSide.Left | DevComponents.DotNetBar.eBorderSide.Right) + | DevComponents.DotNetBar.eBorderSide.Bottom))); + this.tabControlPanel1.Style.GradientAngle = 90; + this.tabControlPanel1.TabIndex = 17; + this.tabControlPanel1.TabItem = this.tabIncTrans; + this.tabControlPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)(( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.tabControlPanel1.RightToLeft = System.Windows.Forms.RightToLeft.No; + // + // btnTranCvtSelToTxt + // + this.btnTranCvtSelToTxt.Enabled = false; + this.btnTranCvtSelToTxt.Location = new System.Drawing.Point(121, 63); + this.btnTranCvtSelToTxt.Name = "btnTranCvtSelToTxt"; + this.btnTranCvtSelToTxt.Size = new System.Drawing.Size(145, 22); + this.superTooltip1.SetSuperTooltip(this.btnTranCvtSelToTxt, new DevComponents.DotNetBar.SuperTooltipInfo("Convert Selected Incoming Transitions To Text", "", "Converts selected transitions in the results list to text unless the user does no" + + "t have permission to change text.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(170, 90))); + this.btnTranCvtSelToTxt.TabIndex = 3; + this.btnTranCvtSelToTxt.Text = "Convert Selected To Text"; + this.btnTranCvtSelToTxt.UseVisualStyleBackColor = true; + this.btnTranCvtSelToTxt.Click += new System.EventHandler(this.btnTranCvtSelToTxt_Click); + // + // lblIncTran + // + this.lblIncTran.AutoSize = true; + this.lblIncTran.Location = new System.Drawing.Point(4, 9); + this.lblIncTran.Name = "lblIncTran"; + this.lblIncTran.Size = new System.Drawing.Size(23, 13); + this.lblIncTran.TabIndex = 2; + this.lblIncTran.Text = "To:"; + // + // btnTranCvtAllToTxt + // + this.btnTranCvtAllToTxt.Enabled = false; + this.btnTranCvtAllToTxt.Location = new System.Drawing.Point(6, 63); + this.btnTranCvtAllToTxt.Name = "btnTranCvtAllToTxt"; + this.btnTranCvtAllToTxt.Size = new System.Drawing.Size(109, 22); + this.superTooltip1.SetSuperTooltip(this.btnTranCvtAllToTxt, new DevComponents.DotNetBar.SuperTooltipInfo("Convert All Incoming Transitions To Text", "", "Converts all of the transitions in the results list to text unless the user does " + + "not have permission to change text.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(170, 90))); + this.btnTranCvtAllToTxt.TabIndex = 1; + this.btnTranCvtAllToTxt.Text = "Convert All To Text"; + this.btnTranCvtAllToTxt.UseVisualStyleBackColor = true; + this.btnTranCvtAllToTxt.Click += new System.EventHandler(this.btnTranCvtAllToTxt_Click); + // + // lblSrchIncTran + // + this.lblSrchIncTran.BackColor = System.Drawing.Color.Transparent; + this.lblSrchIncTran.Location = new System.Drawing.Point(34, 9); + this.lblSrchIncTran.Name = "lblSrchIncTran"; + this.lblSrchIncTran.Size = new System.Drawing.Size(239, 40); + this.superTooltip1.SetSuperTooltip(this.lblSrchIncTran, new DevComponents.DotNetBar.SuperTooltipInfo("Incoming Transitions", "", "This is the step, section, or procedure for which incoming transitions to it are " + + "shown in the list.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(170, 80))); + this.lblSrchIncTran.TabIndex = 1; + // + // groupBox1 + // + this.groupBox1.BackColor = System.Drawing.Color.Transparent; + this.groupBox1.Controls.Add(this.rbFromEditor); + this.groupBox1.Controls.Add(this.rbFromTree); + this.groupBox1.Location = new System.Drawing.Point(147, 4); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(130, 57); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Search Selection"; + this.groupBox1.Visible = false; + // + // rbFromEditor + // + this.rbFromEditor.AutoSize = true; + this.rbFromEditor.Location = new System.Drawing.Point(22, 34); + this.rbFromEditor.Name = "rbFromEditor"; + this.rbFromEditor.Size = new System.Drawing.Size(78, 17); + this.rbFromEditor.TabIndex = 1; + this.rbFromEditor.TabStop = true; + this.rbFromEditor.Text = "From Editor"; + this.rbFromEditor.UseVisualStyleBackColor = true; + // + // rbFromTree + // + this.rbFromTree.AutoSize = true; + this.rbFromTree.Location = new System.Drawing.Point(22, 16); + this.rbFromTree.Name = "rbFromTree"; + this.rbFromTree.Size = new System.Drawing.Size(73, 17); + this.rbFromTree.TabIndex = 0; + this.rbFromTree.TabStop = true; + this.rbFromTree.Text = "From Tree"; + this.rbFromTree.UseVisualStyleBackColor = true; + // + // tabIncTrans + // + this.tabIncTrans.AttachedControl = this.tabControlPanel1; + this.tabIncTrans.Name = "tabIncTrans"; + this.superTooltip1.SetSuperTooltip(this.tabIncTrans, new DevComponents.DotNetBar.SuperTooltipInfo("Search for Incoming Transitions", "", "Finds the Incoming Transitions that point to the current item and convert the tra" + + "nsition(s) to text if desired and if have permissions.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(170, 120))); + this.tabIncTrans.Text = "Incoming\nTransitions"; + // // contextMenuBar1 // this.contextMenuBar1.DockSide = DevComponents.DotNetBar.eDockSide.Top; @@ -1136,119 +1248,6 @@ namespace Volian.Controls.Library this.btnNOT.Text = "NOT"; this.btnNOT.Click += new System.EventHandler(this.btnNOT_Click); // - // tabIncTrans - // - this.tabIncTrans.AttachedControl = this.tabControlPanel1; - this.tabIncTrans.Name = "tabIncTrans"; - this.superTooltip1.SetSuperTooltip(this.tabIncTrans, new DevComponents.DotNetBar.SuperTooltipInfo("Search for Incoming Transitions", "", "Finds the Incoming Transitions that point to the current item and convert the tra" + - "nsition(s) to text if desired and if have permissions.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(170, 120))); - this.tabIncTrans.Text = "Incoming\nTransitions"; - // - // tabControlPanel1 - // - this.tabControlPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tabControlPanel1.Controls.Add(this.btnTranCvtSelToTxt); - this.tabControlPanel1.Controls.Add(this.lblIncTran); - this.tabControlPanel1.Controls.Add(this.btnTranCvtAllToTxt); - this.tabControlPanel1.Controls.Add(this.lblSrchIncTran); - this.tabControlPanel1.Controls.Add(this.groupBox1); - this.tabControlPanel1.DisabledBackColor = System.Drawing.Color.Empty; - this.tabControlPanel1.Location = new System.Drawing.Point(0, 34); - this.tabControlPanel1.Name = "tabControlPanel1"; - this.tabControlPanel1.Padding = new System.Windows.Forms.Padding(1); - this.tabControlPanel1.RightToLeft = System.Windows.Forms.RightToLeft.No; - this.tabControlPanel1.Size = new System.Drawing.Size(277, 113); - this.tabControlPanel1.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(253)))), ((int)(((byte)(253)))), ((int)(((byte)(254))))); - this.tabControlPanel1.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(157)))), ((int)(((byte)(188)))), ((int)(((byte)(227))))); - this.tabControlPanel1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; - this.tabControlPanel1.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(146)))), ((int)(((byte)(165)))), ((int)(((byte)(199))))); - this.tabControlPanel1.Style.BorderSide = ((DevComponents.DotNetBar.eBorderSide)(((DevComponents.DotNetBar.eBorderSide.Left | DevComponents.DotNetBar.eBorderSide.Right) - | DevComponents.DotNetBar.eBorderSide.Bottom))); - this.tabControlPanel1.Style.GradientAngle = 90; - this.tabControlPanel1.TabIndex = 17; - this.tabControlPanel1.TabItem = this.tabIncTrans; - // - // btnTranCvtSelToTxt - // - this.btnTranCvtSelToTxt.Enabled = false; - this.btnTranCvtSelToTxt.Location = new System.Drawing.Point(121, 63); - this.btnTranCvtSelToTxt.Name = "btnTranCvtSelToTxt"; - this.btnTranCvtSelToTxt.Size = new System.Drawing.Size(145, 22); - this.superTooltip1.SetSuperTooltip(this.btnTranCvtSelToTxt, new DevComponents.DotNetBar.SuperTooltipInfo("Convert Selected Incoming Transitions To Text", "", "Converts selected transitions in the results list to text unless the user does no" + - "t have permission to change text.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(170, 90))); - this.btnTranCvtSelToTxt.TabIndex = 3; - this.btnTranCvtSelToTxt.Text = "Convert Selected To Text"; - this.btnTranCvtSelToTxt.UseVisualStyleBackColor = true; - this.btnTranCvtSelToTxt.Click += new System.EventHandler(this.btnTranCvtSelToTxt_Click); - // - // lblIncTran - // - this.lblIncTran.AutoSize = true; - this.lblIncTran.Location = new System.Drawing.Point(4, 9); - this.lblIncTran.Name = "lblIncTran"; - this.lblIncTran.Size = new System.Drawing.Size(23, 13); - this.lblIncTran.TabIndex = 2; - this.lblIncTran.Text = "To:"; - // - // btnTranCvtAllToTxt - // - this.btnTranCvtAllToTxt.Enabled = false; - this.btnTranCvtAllToTxt.Location = new System.Drawing.Point(6, 63); - this.btnTranCvtAllToTxt.Name = "btnTranCvtAllToTxt"; - this.btnTranCvtAllToTxt.Size = new System.Drawing.Size(109, 22); - this.superTooltip1.SetSuperTooltip(this.btnTranCvtAllToTxt, new DevComponents.DotNetBar.SuperTooltipInfo("Convert All Incoming Transitions To Text", "", "Converts all of the transitions in the results list to text unless the user does " + - "not have permission to change text.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(170, 90))); - this.btnTranCvtAllToTxt.TabIndex = 1; - this.btnTranCvtAllToTxt.Text = "Convert All To Text"; - this.btnTranCvtAllToTxt.UseVisualStyleBackColor = true; - this.btnTranCvtAllToTxt.Click += new System.EventHandler(this.btnTranCvtAllToTxt_Click); - // - // lblSrchIncTran - // - this.lblSrchIncTran.BackColor = System.Drawing.Color.Transparent; - this.lblSrchIncTran.Location = new System.Drawing.Point(34, 9); - this.lblSrchIncTran.Name = "lblSrchIncTran"; - this.lblSrchIncTran.Size = new System.Drawing.Size(239, 40); - this.superTooltip1.SetSuperTooltip(this.lblSrchIncTran, new DevComponents.DotNetBar.SuperTooltipInfo("Incoming Transitions", "", "This is the step, section, or procedure for which incoming transitions to it are " + - "shown in the list.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(170, 80))); - this.lblSrchIncTran.TabIndex = 1; - // - // groupBox1 - // - this.groupBox1.BackColor = System.Drawing.Color.Transparent; - this.groupBox1.Controls.Add(this.rbFromEditor); - this.groupBox1.Controls.Add(this.rbFromTree); - this.groupBox1.Location = new System.Drawing.Point(147, 4); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(130, 57); - this.groupBox1.TabIndex = 0; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "Search Selection"; - this.groupBox1.Visible = false; - // - // rbFromEditor - // - this.rbFromEditor.AutoSize = true; - this.rbFromEditor.Location = new System.Drawing.Point(22, 34); - this.rbFromEditor.Name = "rbFromEditor"; - this.rbFromEditor.Size = new System.Drawing.Size(78, 17); - this.rbFromEditor.TabIndex = 1; - this.rbFromEditor.TabStop = true; - this.rbFromEditor.Text = "From Editor"; - this.rbFromEditor.UseVisualStyleBackColor = true; - // - // rbFromTree - // - this.rbFromTree.AutoSize = true; - this.rbFromTree.Location = new System.Drawing.Point(22, 16); - this.rbFromTree.Name = "rbFromTree"; - this.rbFromTree.Size = new System.Drawing.Size(73, 17); - this.rbFromTree.TabIndex = 0; - this.rbFromTree.TabStop = true; - this.rbFromTree.Text = "From Tree"; - this.rbFromTree.UseVisualStyleBackColor = true; - // // advTreeProcSets // this.advTreeProcSets.AccessibleRole = System.Windows.Forms.AccessibleRole.Outline; @@ -1407,6 +1406,7 @@ namespace Volian.Controls.Library // this.lbSrchResultsIncTrans.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.lbSrchResultsIncTrans.CheckBoxesVisible = true; + this.lbSrchResultsIncTrans.CheckStateMember = null; this.lbSrchResultsIncTrans.ContainerControlProcessDialogKey = true; this.lbSrchResultsIncTrans.Dock = System.Windows.Forms.DockStyle.Fill; this.lbSrchResultsIncTrans.DragDropSupport = true; @@ -1733,6 +1733,11 @@ namespace Volian.Controls.Library this.Controls.Add(this.xpSetToSearch); this.Controls.Add(this.tabSearchTypes); this.Controls.Add(this.tabControlPanel1); + //B2025-056 Click on Incoming Transitions + // This needs to be part of overall control + // since if it is part of tabSearchTypes, + // then when that is disabled, buttons on + // this will be also this.Margin = new System.Windows.Forms.Padding(2); this.Name = "DisplaySearch"; this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; @@ -1755,11 +1760,11 @@ namespace Volian.Controls.Library this.gpSrchAnnoText.ResumeLayout(false); this.panel4.ResumeLayout(false); this.panel4.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.contextMenuBar1)).EndInit(); this.tabControlPanel1.ResumeLayout(false); this.tabControlPanel1.PerformLayout(); this.groupBox1.ResumeLayout(false); this.groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.contextMenuBar1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.advTreeProcSets)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.advTreeStepTypes)).EndInit(); this.grpPanSearchResults.ResumeLayout(false); diff --git a/PROMS/Volian.Controls.Library/VlnFlexGrid.Designer.cs b/PROMS/Volian.Controls.Library/VlnFlexGrid.Designer.cs index dc4245ea..95fa1523 100644 --- a/PROMS/Volian.Controls.Library/VlnFlexGrid.Designer.cs +++ b/PROMS/Volian.Controls.Library/VlnFlexGrid.Designer.cs @@ -83,6 +83,7 @@ namespace Volian.Controls.Library this.ResumeLayout(false); } + #endregion } } From a89c2d3d22267db74ccb7ba6a292a2ce16f2d4ab Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Tue, 28 Jul 2026 15:37:37 -0400 Subject: [PATCH 16/22] B2026-053-Find-Unlinked-Values-of-Selected --- .../Volian.Controls.Library/DisplaySearch.cs | 44 +++++++++---------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index e821f5a1..bbe06f08 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -2078,9 +2078,27 @@ namespace Volian.Controls.Library if (cbxFndUnLnkROVals.Enabled && cbxFndUnLnkROVals.Checked) { - string ROSearchList2 = exactsearch(ROSearchList); // B2026-053 match exact string - // B2022-031 - added a exactsearch to filter out procedure and section titles from global search results. - SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList2, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, string.Empty, string.Empty); + string byWordPrefix = string.Empty; + string byWordSuffix = string.Empty; + + if (Regex.IsMatch(ROSearchList, @"^[\d\.]")) // starts with a number or '.' decimal pt + { + byWordPrefix = @"[^0-9a-zA-Z.vbpi:\\-]"; + } + else if (Regex.IsMatch(ROSearchList, @"^[a-zA-Z]")) // starts with a letter + { + byWordPrefix = @"[^a-zA-Z]"; + } + if (Regex.IsMatch(ROSearchList, @"[\d\.]$")) // ends with a number or decimal + { + byWordSuffix = @"[^0-9a-zA-Z.vbpi:\\-]"; + } + else if (Regex.IsMatch(ROSearchList, @"[a-zA-Z]$")) // ends with a letter + { + byWordSuffix = @"[^a-zA-Z]"; + } + string ROSearchList2 = ROSearchList; + SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList2, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, byWordPrefix, byWordSuffix); cmbResultsStyleIndex = 3; // display step text in results } else @@ -2190,26 +2208,6 @@ namespace Volian.Controls.Library } OnSearchComplete(new DisplaySearchEventArgs(TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks))); } - - private string exactsearch(string SearchString) // B2026-053 - { - StringBuilder ss = new StringBuilder(); - int sl = SearchString.Length; - int LstIdxSp = SearchString.LastIndexOf(' '); - if (sl == LstIdxSp + 1) // B2026-053 if ' ' the last char. - { - ss.Append(' '); - ss.Append(SearchString); // B2026-053 add a space prefix to make the search exact if the end of the searchString is a space. - } - else - { - ss.Append(' '); - ss.Append(SearchString); // B2026-053 Exact match add spaces before and after searchString. - ss.Append(' '); - } - return ss.ToString(); - } - private void ClearResults() // B2021-103 if no results when RNO only, clear results list. (moved from btnSearch_Click) { if (tabSearchTypes.SelectedTab != tabSearchTypes.Tabs[4]) From 1eb3c3e7254fc65db0d26147e6b9bd385da4ada4 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Tue, 28 Jul 2026 15:39:17 -0400 Subject: [PATCH 17/22] B2026-053-Find-Unlinked-Values-of-Selected --- PROMS/Volian.Controls.Library/DisplaySearch.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index bbe06f08..d9dfb107 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -2097,7 +2097,7 @@ namespace Volian.Controls.Library { byWordSuffix = @"[^a-zA-Z]"; } - string ROSearchList2 = ROSearchList; + SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList2, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, byWordPrefix, byWordSuffix); cmbResultsStyleIndex = 3; // display step text in results } From 4ef16e78565f1ee312527029964301ab4a59fcbf Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Tue, 28 Jul 2026 15:46:43 -0400 Subject: [PATCH 18/22] B2026-053-Find-Unlinked-Values-of-Selected --- PROMS/Volian.Controls.Library/DisplaySearch.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index d9dfb107..242be943 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -2098,7 +2098,7 @@ namespace Volian.Controls.Library byWordSuffix = @"[^a-zA-Z]"; } - SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList2, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, byWordPrefix, byWordSuffix); + SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, byWordPrefix, byWordSuffix); cmbResultsStyleIndex = 3; // display step text in results } else From 954cc5918ffe0a04767554ab05e483de92c82ff5 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Wed, 29 Jul 2026 12:34:20 -0400 Subject: [PATCH 19/22] B2026-053-Find-Unlinked-Values-of-Selected --- .../Volian.Controls.Library/DisplaySearch.cs | 91 +++++++++---------- 1 file changed, 43 insertions(+), 48 deletions(-) diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index 242be943..ba5e7ce0 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -2017,35 +2017,21 @@ namespace Volian.Controls.Library ReportTitle = string.Format("Search for '{0}'", TextSearchString); // C2020-009: Search - Allow search 'By Word'. - string byWordPrefix = string.Empty; - string byWordSuffix = string.Empty; - if (cbxByWord.Checked) - { - // Generate a prefix & suffix to be used in the sql query around the search string. - // If the search string starts (prefix)/ends(suffix) with a number, then use an expression that - // does not allow the preceding/following text to have a number, '.', letter or other rtf - // commands. If the search string starts/ends with a letter, then use an expression that does not - // find the preceding/following text that is text, i.e. a letter. - if (Regex.IsMatch(TextSearchString, @"^[\d\.]")) // starts with a number or '.' decimal pt - { - byWordPrefix = @"[^0-9a-zA-Z.vbpi:\\-]"; - } - else if (Regex.IsMatch(TextSearchString, @"^[a-zA-Z]")) // starts with a letter - { - byWordPrefix = @"[^a-zA-Z]"; - } - if (Regex.IsMatch(TextSearchString, @"[\d\.]$")) // ends with a number or decimal - { - byWordSuffix = @"[^0-9a-zA-Z.vbpi:\\-]"; - } - else if (Regex.IsMatch(TextSearchString, @"[a-zA-Z]$")) // ends with a letter - { - byWordSuffix = @"[^a-zA-Z]"; - } - } + + //if (cbxByWord.Checked) + //{ + // // Generate a prefix & suffix to be used in the sql query around the search string. + // // If the search string starts (prefix)/ends(suffix) with a number, then use an expression that + // // does not allow the preceding/following text to have a number, '.', letter or other rtf + // // commands. If the search string starts/ends with a letter, then use an expression that does not + // // find the preceding/following text that is text, i.e. a letter. + SearchString = TextSearchString; - // B2022-031 - added a cbxProcSectSrch to filter out procedure and section titles from global search results. - SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, TextSearchString /*.Replace(@"\",@"\u9586?")*/, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, cbxIncROTextSrch.Checked ? ItemSearchIncludeLinks.Value : ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, byWordPrefix, byWordSuffix); + + Dictionary rtnByWord = GetByWordSettings(TextSearchString); + + // B2022-031 - added a cbxProcSectSrch to filter out procedure and section titles from global search results. + SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, TextSearchString /*.Replace(@"\",@"\u9586?")*/, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, cbxIncROTextSrch.Checked ? ItemSearchIncludeLinks.Value : ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, rtnByWord["byWordPrefix"], rtnByWord["byWordSuffix"]); cmbResultsStyleIndex = 3; // display step text in results //} @@ -2078,27 +2064,10 @@ namespace Volian.Controls.Library if (cbxFndUnLnkROVals.Enabled && cbxFndUnLnkROVals.Checked) { - string byWordPrefix = string.Empty; - string byWordSuffix = string.Empty; - if (Regex.IsMatch(ROSearchList, @"^[\d\.]")) // starts with a number or '.' decimal pt - { - byWordPrefix = @"[^0-9a-zA-Z.vbpi:\\-]"; - } - else if (Regex.IsMatch(ROSearchList, @"^[a-zA-Z]")) // starts with a letter - { - byWordPrefix = @"[^a-zA-Z]"; - } - if (Regex.IsMatch(ROSearchList, @"[\d\.]$")) // ends with a number or decimal - { - byWordSuffix = @"[^0-9a-zA-Z.vbpi:\\-]"; - } - else if (Regex.IsMatch(ROSearchList, @"[a-zA-Z]$")) // ends with a letter - { - byWordSuffix = @"[^a-zA-Z]"; - } - - SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, byWordPrefix, byWordSuffix); + Dictionary rtnByWord = GetByWordSettings(ROSearchList); + + SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, rtnByWord["byWordPrefix"], rtnByWord["byWordSuffix"]); cmbResultsStyleIndex = 3; // display step text in results } else @@ -2208,6 +2177,32 @@ namespace Volian.Controls.Library } OnSearchComplete(new DisplaySearchEventArgs(TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks))); } + private Dictionary GetByWordSettings(string ss) + { + + Dictionary settings = new Dictionary(); + + string byWordPrefix = string.Empty; + string byWordSuffix = string.Empty; + + if (Regex.IsMatch(ss, @"^[\d\.]")) // starts with a number or '.' decimal pt + { + settings.Add("byWordPrefix", @"[^0-9a-zA-Z.vbpi:\\-]"); + } + else if (Regex.IsMatch(ss, @"^[a-zA-Z]")) // starts with a letter + { + settings.Add("byWordPrefix", @"[^a-zA-Z]"); + } + if (Regex.IsMatch(ss, @"^[\d\.]")) // ends with a number or decimal + { + settings.Add("byWordSuffix", @"[^0-9a-zA-Z.vbpi:\\-]"); + } + else if (Regex.IsMatch(ss, @"[a-zA-Z]$")) // ends with a letter + { + settings.Add("byWordSuffix", @"[^a-zA-Z]"); + } + return settings; + } private void ClearResults() // B2021-103 if no results when RNO only, clear results list. (moved from btnSearch_Click) { if (tabSearchTypes.SelectedTab != tabSearchTypes.Tabs[4]) From bc9407f52f64ca51d2efbeb86bebdf7c1684fef6 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Wed, 29 Jul 2026 13:48:05 -0400 Subject: [PATCH 20/22] B2026-053-Find-Unlinked-Values-of-Selected --- PROMS/Volian.Controls.Library/DisplaySearch.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index ba5e7ce0..d96e172b 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -2179,13 +2179,9 @@ namespace Volian.Controls.Library } private Dictionary GetByWordSettings(string ss) { - Dictionary settings = new Dictionary(); - string byWordPrefix = string.Empty; - string byWordSuffix = string.Empty; - - if (Regex.IsMatch(ss, @"^[\d\.]")) // starts with a number or '.' decimal pt + if (Regex.IsMatch(ss, @"^[\d\.]")) // starts with a number or '.' decimal pt { settings.Add("byWordPrefix", @"[^0-9a-zA-Z.vbpi:\\-]"); } From 43b63e2843dd4c63ebcc3d4ee54a073d317f3245 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Thu, 30 Jul 2026 12:51:24 -0400 Subject: [PATCH 21/22] B2026-053-Find-Unlinked-Values-of-Selected --- .../Volian.Controls.Library/DisplaySearch.cs | 78 +++++++++++++------ 1 file changed, 53 insertions(+), 25 deletions(-) diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index d96e172b..84b73d4d 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -2028,10 +2028,8 @@ namespace Volian.Controls.Library SearchString = TextSearchString; - Dictionary rtnByWord = GetByWordSettings(TextSearchString); - // B2022-031 - added a cbxProcSectSrch to filter out procedure and section titles from global search results. - SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, TextSearchString /*.Replace(@"\",@"\u9586?")*/, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, cbxIncROTextSrch.Checked ? ItemSearchIncludeLinks.Value : ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, rtnByWord["byWordPrefix"], rtnByWord["byWordSuffix"]); + SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, TextSearchString /*.Replace(@"\",@"\u9586?")*/, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, cbxIncROTextSrch.Checked ? ItemSearchIncludeLinks.Value : ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, GetByWordSettings(TextSearchString, true), GetByWordSettings(TextSearchString, false)); cmbResultsStyleIndex = 3; // display step text in results //} @@ -2065,9 +2063,7 @@ namespace Volian.Controls.Library if (cbxFndUnLnkROVals.Enabled && cbxFndUnLnkROVals.Checked) { - Dictionary rtnByWord = GetByWordSettings(ROSearchList); - - SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, rtnByWord["byWordPrefix"], rtnByWord["byWordSuffix"]); + SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, GetByWordSettings(ROSearchList, true), GetByWordSettings(ROSearchList, false)); cmbResultsStyleIndex = 3; // display step text in results } else @@ -2177,27 +2173,59 @@ namespace Volian.Controls.Library } OnSearchComplete(new DisplaySearchEventArgs(TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks))); } - private Dictionary GetByWordSettings(string ss) + private string GetByWordSettings(string ss, bool checkstart) { - Dictionary settings = new Dictionary(); + //if (Regex.IsMatch(ss, @"^[\d\.]")) // starts with a number or '.' decimal pt + //{ + // settings.Add("byWordPrefix", @"[^0-9a-zA-Z.vbpi:\\-]"); + //} + //else if (Regex.IsMatch(ss, @"^[a-zA-Z]")) // starts with a letter + //{ + // settings.Add("byWordPrefix", @"[^a-zA-Z]"); + //} + //if (Regex.IsMatch(ss, @"^[\d\.]")) // ends with a number or decimal + //{ + // settings.Add("byWordSuffix", @"[^0-9a-zA-Z.vbpi:\\-]"); + //} + //else if (Regex.IsMatch(ss, @"[a-zA-Z]$")) // ends with a letter + //{ + // settings.Add("byWordSuffix", @"[^a-zA-Z]"); + //} + //return settings; + if (ss.Length > 0) + { + //checking start + if (checkstart) + { + // starts with a number or '.' decimal pt + if (char.IsNumber(ss, 0) || ss[0] == '.') + { + return @"[^0-9a-zA-Z.vbpi:\\-]"; + } + // starts with a letter + else if (char.IsLetter(ss, 0)) + { + return @"[^a-zA-Z]"; + } + } + //checking end + else + { + // ends with a number or '.' decimal pt + if (char.IsNumber(ss, ss.Length - 1) || ss[ss.Length - 1] == '.') + { + return @"[^0-9a-zA-Z.vbpi:\\-]"; + } + // ends with a letter + else if (char.IsLetter(ss, ss.Length - 1)) + { + return @"[^a-zA-Z]"; + } + } + } - if (Regex.IsMatch(ss, @"^[\d\.]")) // starts with a number or '.' decimal pt - { - settings.Add("byWordPrefix", @"[^0-9a-zA-Z.vbpi:\\-]"); - } - else if (Regex.IsMatch(ss, @"^[a-zA-Z]")) // starts with a letter - { - settings.Add("byWordPrefix", @"[^a-zA-Z]"); - } - if (Regex.IsMatch(ss, @"^[\d\.]")) // ends with a number or decimal - { - settings.Add("byWordSuffix", @"[^0-9a-zA-Z.vbpi:\\-]"); - } - else if (Regex.IsMatch(ss, @"[a-zA-Z]$")) // ends with a letter - { - settings.Add("byWordSuffix", @"[^a-zA-Z]"); - } - return settings; + //default + return string.Empty; } private void ClearResults() // B2021-103 if no results when RNO only, clear results list. (moved from btnSearch_Click) { From cfc324d31e808a18f6498cfb32e96eda9b11685c Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Thu, 30 Jul 2026 15:22:32 -0400 Subject: [PATCH 22/22] B2026-053-Find-Unlinked-Values-of-Selected --- .../Volian.Controls.Library/DisplaySearch.cs | 47 +++++++------------ 1 file changed, 18 insertions(+), 29 deletions(-) diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index 84b73d4d..3ddbe677 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -2016,20 +2016,17 @@ namespace Volian.Controls.Library { ReportTitle = string.Format("Search for '{0}'", TextSearchString); - // C2020-009: Search - Allow search 'By Word'. + string byWordPrefix = string.Empty; + string byWordSuffix = string.Empty; + if (cbxByWord.Checked) + { + byWordPrefix = GetByWordSettings(TextSearchString, true); + byWordSuffix = GetByWordSettings(TextSearchString, false); + } - //if (cbxByWord.Checked) - //{ - // // Generate a prefix & suffix to be used in the sql query around the search string. - // // If the search string starts (prefix)/ends(suffix) with a number, then use an expression that - // // does not allow the preceding/following text to have a number, '.', letter or other rtf - // // commands. If the search string starts/ends with a letter, then use an expression that does not - // // find the preceding/following text that is text, i.e. a letter. + SearchString = TextSearchString; - SearchString = TextSearchString; - - // B2022-031 - added a cbxProcSectSrch to filter out procedure and section titles from global search results. - SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, TextSearchString /*.Replace(@"\",@"\u9586?")*/, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, cbxIncROTextSrch.Checked ? ItemSearchIncludeLinks.Value : ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, GetByWordSettings(TextSearchString, true), GetByWordSettings(TextSearchString, false)); + SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, TextSearchString /*.Replace(@"\",@"\u9586?")*/, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, cbxIncROTextSrch.Checked ? ItemSearchIncludeLinks.Value : ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, byWordPrefix, byWordSuffix); cmbResultsStyleIndex = 3; // display step text in results //} @@ -2175,23 +2172,15 @@ namespace Volian.Controls.Library } private string GetByWordSettings(string ss, bool checkstart) { - //if (Regex.IsMatch(ss, @"^[\d\.]")) // starts with a number or '.' decimal pt - //{ - // settings.Add("byWordPrefix", @"[^0-9a-zA-Z.vbpi:\\-]"); - //} - //else if (Regex.IsMatch(ss, @"^[a-zA-Z]")) // starts with a letter - //{ - // settings.Add("byWordPrefix", @"[^a-zA-Z]"); - //} - //if (Regex.IsMatch(ss, @"^[\d\.]")) // ends with a number or decimal - //{ - // settings.Add("byWordSuffix", @"[^0-9a-zA-Z.vbpi:\\-]"); - //} - //else if (Regex.IsMatch(ss, @"[a-zA-Z]$")) // ends with a letter - //{ - // settings.Add("byWordSuffix", @"[^a-zA-Z]"); - //} - //return settings; + + // C2020-009: Search - Allow search 'By Word'. + + // // Generate a prefix & suffix to be used in the sql query around the search string. + // // If the search string starts (prefix)/ends(suffix) with a number, then use an expression that + // // does not allow the preceding/following text to have a number, '.', letter or other rtf + // // commands. If the search string starts/ends with a letter, then use an expression that does not + // // find the preceding/following text that is text, i.e. a letter. + if (ss.Length > 0) { //checking start