From 7333247b52e589914d41bdd5f84bd41464edb64a Mon Sep 17 00:00:00 2001 From: John Jenko Date: Fri, 4 Sep 2026 10:44:35 -0400 Subject: [PATCH] B2026-074 Fixed issue where PROMS would hang when opening multiple saved Word section tabs. Also, we now save and restore to the step location of saved procedure editor sections. --- PROMS/VEPROMS User Interface/frmVEPROMS.cs | 67 ++++++++----------- PROMS/Volian.Controls.Library/DSOTabPanel.cs | 8 +-- PROMS/Volian.Controls.Library/DisplayRO.cs | 5 +- .../DisplayTabControl.cs | 7 +- 4 files changed, 37 insertions(+), 50 deletions(-) diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.cs index facb6027..99038aaa 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.cs @@ -1,23 +1,15 @@ using System; -using System.Collections; using System.Collections.Generic; -using System.Collections.Specialized; -using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; -using System.Configuration; -using System.Reflection; using VEPROMS.CSLA.Library; -//using Csla; -using DevComponents; using DevComponents.DotNetBar; using DevComponents.DotNetBar.Rendering; using VEPROMS.Properties; using Volian.Controls.Library; -using DescriptiveEnum; using Volian.Base.Library; using Volian.Print.Library; using JR.Utils.GUI.Forms; @@ -1610,7 +1602,7 @@ namespace VEPROMS displayRO.MyROFST = SelectedROFst; // B2023-021: force Load of Step Prop/RO panel RO tree by passing in // true to LoadTree - if (!_WeAreExitingPROMS) displayRO.LoadTree(true); + if (!_WeAreExitingPROMS) displayRO.LoadTree(this,true); } } @@ -1846,7 +1838,7 @@ namespace VEPROMS // should be closed or if we should exit PROMS or just Cancel to continue working if (tc._MyDisplayTabItems.Count < 1) // If all thabs are closed in the editor will indicate that in the database. { - VEPROMS.CSLA.Library.Item.DeactivateStateDisplayTabTmp(MySessionInfo.UserID); + Item.DeactivateStateDisplayTabTmp(MySessionInfo.UserID); } if (!_WeAreExitingPROMS && !ClosingWithError && tc.SelectedDisplayTabItem != null && tc._MyDisplayTabItems.Count > 0) { @@ -1864,7 +1856,7 @@ namespace VEPROMS return; } - string stk = Volian.Base.Library.vlnStackTrace.StackToString(); + string stk = vlnStackTrace.StackToString(); if (!stk.Contains("Exception")) { @@ -1872,33 +1864,28 @@ namespace VEPROMS // B2019-071 we will now close one or all of the tabs (even step editor ones) if (_WeAreExitingPROMS) { - string DisplayTabID = ""; - int pos; - int TabItemID; - string DisplayTabName = ""; - int cnt = 0; // Deactivate previous procedure tab state by user - VEPROMS.CSLA.Library.Item.DeactivateStateDisplayTabTmp(MySessionInfo.UserID); + Item.DeactivateStateDisplayTabTmp(MySessionInfo.UserID); // Save current procedure tab state - //B2024-082 Remember Tabs Not opening in correct order + int cnt = 0; foreach (DisplayTabItem dti in tc.MyBar.Items) { cnt++; - DisplayTabID = dti.MyKey; - TabItemID = dti.MyItemInfo.ItemID; - DisplayTabName = dti.ToString(); - Item.AddDisplayTabsState(TabItemID, DisplayTabID, DisplayTabName, MySessionInfo.UserID, cnt); + ItemInfo itminfo = dti.MyItemInfo; + string DisplayTabID = dti.MyKey; + string DisplayTabName = dti.ToString(); + // B2026-074 if a Word section, save the ItemID of the entire Word section + // else if a Step Editor section, save the ItemID of the step part the user was on + int TabItemID = itminfo.HasWordContent ? itminfo.ItemID : dti.MyStepTabPanel.MyStepTabRibbon.MyEditItem.MyItemInfo.ItemID; + Item.AddDisplayTabsState(TabItemID, DisplayTabID, DisplayTabName, MySessionInfo.UserID, cnt); } } int n = tc._MyDisplayTabItems.Count; - while (n-- > 0 && tc._MyDisplayTabItems.Count > 0) { - tc.CloseTabItem(tc.SelectedDisplayTabItem); - // B2019-071 close just the current tab and continue working if (!dctoe.ExitPROMS) { @@ -2543,13 +2530,13 @@ namespace VEPROMS } // Add retrieve displaytabs state here. - openDisplaytabstate(); + OpenDisplaytabstate(); } - public void openDisplaytabstate() + private void OpenDisplaytabstate() { // Retrieve edit tab state from database. - DataTable DisPlayTabState = VEPROMS.CSLA.Library.Item.GetDisplayTabs(VlnSettings.UserID); + DataTable DisPlayTabState = Item.GetDisplayTabs(VlnSettings.UserID); //CSM - C2024-031 - Getting User Settings //and set checkboxes based on what they are set to @@ -2569,9 +2556,12 @@ namespace VEPROMS usersettings.SetUserSettings(true, result == DialogResult.Yes); } - if (result == DialogResult.Yes) { + // B2026-074 added flag (LoadingSavedProcTabs) to supress unnecessary event calls + // this will help prevent PROMS from getting stuck continuously looping through the same events + // when Word procedure tabs are restored. + tc.LoadingSavedProcTabs = true; foreach (DataRow TabState in DisPlayTabState.Rows) { int _ItemID = (int)TabState["ItemID"]; @@ -2579,7 +2569,7 @@ namespace VEPROMS // Open procedure in the editor. if (_Procedure == null) continue; //skip and continue with foreach OpenItem(_Procedure); - if (tc.MyEditItem == null) continue; // skip and continue with foreach + if (tc.MyEditItem == null) continue; // skip and continue with foreach // SelectedStepTabPanel needs to be set so the print buttons on the ribbon will work. SelectedStepTabPanel = tc.MyEditItem.MyStepPanel.MyStepTabPanel; @@ -2594,6 +2584,7 @@ namespace VEPROMS SpellChecker.MyEditItem = tc.MyEditItem; //B2025-043 Remember Tabs is not setting the EditItem for the active window causing a PROMS crash when Spell Check } } + tc.LoadingSavedProcTabs = false; } } } @@ -4374,7 +4365,7 @@ namespace VEPROMS displayRO.MyRTB = (SelectedStepTabPanel == null) ? null : SelectedStepTabPanel.MyStepPanel.SelectedEditItem == null ? null : SelectedStepTabPanel.MyStepPanel.SelectedEditItem.MyStepRTB; - displayRO.LoadTree(); //B2022-026 RO Memory reduction coding (Jakes Merge) + displayRO.LoadTree(this); //B2022-026 RO Memory reduction coding (Jakes Merge) } #endregion @@ -4528,7 +4519,7 @@ namespace VEPROMS // need this to update RO Tree after UpdateRofst (B2015-226) // B2022-026 RO Memory reduction coding (Jakes Merge) displayRO.MyROFST = SelectedROFst; - displayRO.LoadTree(); + displayRO.LoadTree(this); // resetting the MyROFSTLookup for the search & reports panels will refresh the RO trees after UpdateRofst in each of those panels (B2015-226) if (SelectedDVI != null) @@ -4603,7 +4594,7 @@ namespace VEPROMS //C2026-008 Re-Architect RO.FST to include RO Modification date/time // if ROFST got updated, // set the Selected FST so it is in sync - if (!_WeAreExitingPROMS && displayRO.LoadTree(true)) + if (!_WeAreExitingPROMS && displayRO.LoadTree(this,true)) { SelectedROFst = displayRO.MyROFST; } @@ -4723,7 +4714,7 @@ namespace VEPROMS // B2022-026 RO Memory reduction coding (Jakes Merge) displayRO.MyRTB = null; - displayRO.LoadTree(); + displayRO.LoadTree(this); } infotabTags.Visible = false; @@ -4810,7 +4801,7 @@ namespace VEPROMS //C2026-008 Re-Architect RO.FST to include RO Modification date/time // if ROFST got updated, // set the Selected FST so it is in sync - if (!_WeAreExitingPROMS && displayRO.LoadTree()) + if (!_WeAreExitingPROMS && displayRO.LoadTree(this)) { SelectedROFst = displayRO.MyROFST; } @@ -4843,7 +4834,7 @@ namespace VEPROMS // B2022-026 RO Memory reduction coding (Jakes Merge) displayRO.SetFindDocROButton(false); - if (!_WeAreExitingPROMS) displayRO.LoadTree(); + if (!_WeAreExitingPROMS) displayRO.LoadTree(this); //C2019-036 View Only mode work with Checked Out Procedures //In View Only Mode - Step Properties should be disabled @@ -4864,7 +4855,7 @@ namespace VEPROMS displayRO.ROTypeFilter = E_ROValueType.All; // allow all RO types for Word attachments (but fix) displayRO.SetFindDocROButton(true); - displayRO.LoadTree(); + displayRO.LoadTree(this); } } @@ -4996,7 +4987,7 @@ namespace VEPROMS //C2026-008 Re-Architect RO.FST to include RO Modification date/time // if ROFST got updated, // set the Selected FST so it is in sync - if (displayRO.LoadTree()) + if (displayRO.LoadTree(this)) { SelectedROFst = displayRO.MyROFST; } diff --git a/PROMS/Volian.Controls.Library/DSOTabPanel.cs b/PROMS/Volian.Controls.Library/DSOTabPanel.cs index f428da3e..c1c4cf70 100644 --- a/PROMS/Volian.Controls.Library/DSOTabPanel.cs +++ b/PROMS/Volian.Controls.Library/DSOTabPanel.cs @@ -1,12 +1,7 @@ using System; -using System.ComponentModel; -using System.Collections.Generic; -using System.Diagnostics; using System.Text; -using System.Drawing; using System.Windows.Forms; using VEPROMS.CSLA.Library; -using Volian.Controls.Library; using System.Reflection; using LBWordLibrary; using JR.Utils.GUI.Forms; @@ -607,7 +602,8 @@ namespace Volian.Controls.Library if (_In_DSOTabPanel_Enter) return; //vlnStackTrace.ShowStack("DSOTabPanel_Enter {0} DocID {1} Index {2} {3}",_In_DSOTabPanel_Enter, this._MyDocumentInfo.DocID, _MyDisplayTabControl.MyBar.SelectedDockTab, sender.GetType().FullName); _In_DSOTabPanel_Enter = true; - if (MyDisplayTabItem.MyItemInfo != null) + // B2026-074 only do this if we are not restoring save procedure tabs + if (MyDisplayTabItem.MyItemInfo != null && !_MyDisplayTabControl.LoadingSavedProcTabs) _MyDisplayTabControl.OnItemSelectedChanged(this,new ItemSelectedChangedEventArgs(MyDisplayTabItem.MyItemInfo)); _MyEdWord.Focus(); _In_DSOTabPanel_Enter = false; diff --git a/PROMS/Volian.Controls.Library/DisplayRO.cs b/PROMS/Volian.Controls.Library/DisplayRO.cs index d8b59abd..c4385cab 100644 --- a/PROMS/Volian.Controls.Library/DisplayRO.cs +++ b/PROMS/Volian.Controls.Library/DisplayRO.cs @@ -7,7 +7,6 @@ using System.Drawing; using System.IO; using System.Linq; using System.Text.RegularExpressions; -using System.Threading.Tasks; using System.Windows.Forms; using VEPROMS.CSLA.Library; using Volian.Base.Library; @@ -622,7 +621,7 @@ namespace Volian.Controls.Library //C2026-008 Re-Architect RO.FST to include RO Modification date/time // changed to return true if the RO FST got updated - public bool LoadTree(bool forceReload = false) + public bool LoadTree(IWin32Window mainForm, bool forceReload = false) { bool updatedROs = false; @@ -653,7 +652,7 @@ namespace Volian.Controls.Library } else if (changedDocVersion && !askedAboutchangedDocVersion && !ROWorkingDraftAsk.ContainsWorkingDraft(_docVersionInfo.VersionID)) { - if (MessageBox.Show($"There exists a newer ROFST for this RO database that was loaded for other sets.\r\n\r\nDo you want to update this set's ROs to be consistent/use the latest loaded ROFST?", "Load ROs", MessageBoxButtons.YesNo) == DialogResult.Yes) + if (MessageBox.Show(mainForm,$"There exists a newer ROFST for this RO database that was loaded for other sets.\r\n\r\nDo you want to update this set's ROs to be consistent/use the latest loaded ROFST?", "Load ROs", MessageBoxButtons.YesNo) == DialogResult.Yes) { InitialProgressBarMessage = "Updating ROs"; diff --git a/PROMS/Volian.Controls.Library/DisplayTabControl.cs b/PROMS/Volian.Controls.Library/DisplayTabControl.cs index c332a18a..9a1c61d2 100644 --- a/PROMS/Volian.Controls.Library/DisplayTabControl.cs +++ b/PROMS/Volian.Controls.Library/DisplayTabControl.cs @@ -1,12 +1,9 @@ using System; using System.Collections.Generic; -using System.ComponentModel; using System.Drawing; using System.Data; -using System.Text; using System.Windows.Forms; using VEPROMS.CSLA.Library; -using Volian.Controls.Library; using DevComponents.DotNetBar; using JR.Utils.GUI.Forms; using Volian.Base.Library; @@ -59,6 +56,9 @@ namespace Volian.Controls.Library private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); #endregion + // B2026-074 added flag to use when restoring saved procedure tabs + public bool LoadingSavedProcTabs { get; set; } = false; + private static bool _SyncronizeEnahnced = false; public static bool SyncronizeEnhanced { @@ -1282,6 +1282,7 @@ namespace Volian.Controls.Library get { return _SyncEnhancedDocuments; } set { _SyncEnhancedDocuments = value; } } + public void HandleChangeId(ItemInfo myItemInfo, DisplayTabItem pg) { if (myItemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.ChangeBarData.ChangeIds)