From 37f53368063a5a3c1d680bb88ec33c386e101f39 Mon Sep 17 00:00:00 2001 From: mschill Date: Fri, 31 Oct 2025 09:44:01 -0400 Subject: [PATCH] C2021-035 Add Refresh Tree Option at highest level --- PROMS/VEPROMS User Interface/frmVEPROMS.cs | 13 ++++++ .../Extension/DocVersionExt.cs | 13 ++++++ .../Extension/FormatExt.cs | 15 +++++- .../Extension/PropertyDescriptors.cs | 6 +++ .../Generated/FolderInfo.cs | 9 ++++ .../VEPROMS.CSLA.Library/Generated/Format.cs | 8 ++++ .../Generated/FormatInfo.cs | 7 +++ PROMS/Volian.Controls.Library/vlnTreeView.cs | 46 +++++++++++++++++++ 8 files changed, 116 insertions(+), 1 deletion(-) diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.cs index e52c6b21..8f09424b 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.cs @@ -554,10 +554,23 @@ namespace VEPROMS tv.CreateContinuousActionSummary += new vlnTreeViewEvent(tv_CreateContinuousActionSummary); tv.SelectDateToStartChangeBars += tv_SelectDateToStartChangeBars; tv.CreateTimeCriticalActionSummary += new vlnTreeViewEvent(tv_CreateTimeCriticalActionSummary); + tv.RefreshFormats += new vlnTreeViewStatusEvent(RefreshFormats); displayBookMarks.ResetBookMarksInPROMSWindows += displayBookMarks_ResetBookMarksInPROMSWindows; } + //C2021-035 Add Refresh Tree Option at highest level + void RefreshFormats(object sender, vlnTreeStatusEventArgs args) + { + Format.ClearFormatCache(); + FormatInfo.ClearFormatInfoCache(); + FormatInfo.Reset(); + FormatInfoList.Reset(); + Format.Reset(); + FormatList.Reset(); + displaySearch1.SetupContextMenu(); + } + // Part of Separate Windows upgrade C2015-022 // Extend Changes to BookMark information to all of the child windows void displayBookMarks_ResetBookMarksInPROMSWindows(object sender, EventArgs args) diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/DocVersionExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/DocVersionExt.cs index af4fe9a2..f633bae7 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/DocVersionExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/DocVersionExt.cs @@ -765,6 +765,19 @@ namespace VEPROMS.CSLA.Library foreach (DocVersionInfo dvi in _CacheByPrimaryKey[key]) dvi.ResetProcedures(); } + + //C2021-035 Add Refresh Tree Option at highest level + public static void ResetAllProcedures() + { + foreach (string key in _CacheByPrimaryKey.Keys) + { + foreach (DocVersionInfo dvi in _CacheByPrimaryKey[key]) + dvi.ResetProcedures(); + } + + foreach (DocVersionInfo dvi in _CacheList) + dvi.ResetProcedures(); + } #region IVEReadOnlyItem public System.Collections.IList GetChildren() { diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/FormatExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/FormatExt.cs index 28ba06bc..44176423 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/FormatExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/FormatExt.cs @@ -275,6 +275,14 @@ namespace VEPROMS.CSLA.Library } } + //C2021-035 Add Refresh Tree Option at highest level + public static void Reset() + { + _LookupFormats?.Clear(); + _LookupFormats = null; + _ = LookupFormats; + } + private static Format AddFormatToDB(Format parent, string format, bool issub, DateTime Dts, string Userid, string fmtPath, string genmacPath) { string fmtdata = null; @@ -509,7 +517,12 @@ public partial class FormatInfo : IFormatOrFormatInfo return _PROMSBaseFormat; } } - public static FormatInfo Get(string name) + public static void Reset() + { + _PROMSBaseFormat = null; + } + + public static FormatInfo Get(string name) { try { diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/PropertyDescriptors.cs b/PROMS/VEPROMS.CSLA.Library/Extension/PropertyDescriptors.cs index fe164caa..a4293a5c 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/PropertyDescriptors.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/PropertyDescriptors.cs @@ -97,6 +97,12 @@ namespace VEPROMS.CSLA.Library if (formatInfo != null && formatInfo.ToString() == formatName) return formatInfo.Get(); return null; } + //C2021-035 Add Refresh Tree Option at highest level + public static void Reset() + { + _MyFormatInfoList?.Clear(); + _MyFormatInfoList = null; + } } public class DocStyleListConverter : System.ComponentModel.StringConverter { diff --git a/PROMS/VEPROMS.CSLA.Library/Generated/FolderInfo.cs b/PROMS/VEPROMS.CSLA.Library/Generated/FolderInfo.cs index f05c9869..e7de686d 100644 --- a/PROMS/VEPROMS.CSLA.Library/Generated/FolderInfo.cs +++ b/PROMS/VEPROMS.CSLA.Library/Generated/FolderInfo.cs @@ -502,6 +502,15 @@ namespace VEPROMS.CSLA.Library _FolderInfoExtension.Refresh(this); OnChange();// raise an event } + + //C2021-035 Add Refresh Tree Option at highest level + public static void ClearFolderInfoCache() + { + _CacheByPrimaryKey.Clear(); + while (_CacheList.Count > 0) + { _CacheList[0].Dispose(); } + } + public static FolderInfo Get(int folderID) { //if (!CanGetObject()) diff --git a/PROMS/VEPROMS.CSLA.Library/Generated/Format.cs b/PROMS/VEPROMS.CSLA.Library/Generated/Format.cs index db2c8869..c06509bf 100644 --- a/PROMS/VEPROMS.CSLA.Library/Generated/Format.cs +++ b/PROMS/VEPROMS.CSLA.Library/Generated/Format.cs @@ -143,6 +143,14 @@ namespace VEPROMS.CSLA.Library if (_CacheByParentID_Name.ContainsKey(key)) return _CacheByParentID_Name[key][0]; return null; } + + //C2021-035 Add Refresh Tree Option at highest level + public static void ClearFormatCache() + { + _CacheByPrimaryKey.Clear(); + while (_CacheList.Count > 0) + { _CacheList[0].Dispose(); } + } #endregion #region Business Methods private string _ErrorMessage = string.Empty; diff --git a/PROMS/VEPROMS.CSLA.Library/Generated/FormatInfo.cs b/PROMS/VEPROMS.CSLA.Library/Generated/FormatInfo.cs index cb47915c..decc8dab 100644 --- a/PROMS/VEPROMS.CSLA.Library/Generated/FormatInfo.cs +++ b/PROMS/VEPROMS.CSLA.Library/Generated/FormatInfo.cs @@ -71,6 +71,13 @@ namespace VEPROMS.CSLA.Library if (_CacheByPrimaryKey.ContainsKey(key)) return _CacheByPrimaryKey[key][0]; return null; } + //C2021-035 Add Refresh Tree Option at highest level + public static void ClearFormatInfoCache() + { + _CacheByPrimaryKey.Clear(); + while (_CacheList.Count > 0) + { _CacheList[0].Dispose(); } + } #endregion #region Business Methods private string _ErrorMessage = string.Empty; diff --git a/PROMS/Volian.Controls.Library/vlnTreeView.cs b/PROMS/Volian.Controls.Library/vlnTreeView.cs index 5c1d3608..73889378 100644 --- a/PROMS/Volian.Controls.Library/vlnTreeView.cs +++ b/PROMS/Volian.Controls.Library/vlnTreeView.cs @@ -1269,6 +1269,11 @@ namespace Volian.Controls.Library if (ok) if (pia == null && tn.VEObject as StepInfo == null) cm.MenuItems.Add("Properties...", new EventHandler(mi_Click)); #endregion + #region Refresh_Tree + //C2021-035 Add Refresh Tree Option at highest level + if (tn == (VETreeNode)Nodes[0]) + cm.MenuItems.Add("Refresh Tree", new EventHandler(mi_Click)); + #endregion //_MyLog.WarnFormat("Context Menu 7 - {0}", GC.GetTotalMemory(true)); if (fi != null && fi.HasWorkingDraft) @@ -2352,6 +2357,10 @@ namespace Volian.Controls.Library case "Print All Approved Procedures": //C2025-017 print all approved procedures OnPrintAllApprovedProcedures(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0)); break; + //C2021-035 Add Refresh Tree Option at highest level + case "Refresh Tree": + RefreshTree(); + break; default: if (mi.Text.StartsWith("Showing Change Bars Starting")) OnSelectDateToStartChangeBars(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0)); @@ -3926,6 +3935,13 @@ namespace Volian.Controls.Library if (Processing != null) Processing(this, new vlnTreeStatusEventArgs(status, message)); } + //C2021-035 Add Refresh Tree Option at highest level + public event vlnTreeViewStatusEvent RefreshFormats; + private void OnRefreshFormats(bool status, string message) + { + if (RefreshFormats != null) + RefreshFormats(this, new vlnTreeStatusEventArgs(status, message)); + } #endregion #region SetLastValuesAndSaveIfChangedStuff private void SetLastValues(VETreeNode node) @@ -4648,6 +4664,36 @@ namespace Volian.Controls.Library if (myFolder.FolderID == ((FolderInfo)obj2).FolderID) return true; return false; } + + //C2021-035 Add Refresh Tree Option at highest level + public void RefreshTree() + { + //reload the base node + VETreeNode tbase = (VETreeNode) Nodes[0]; + tbase.ChildrenLoaded = false; + + //Refresh the formats + OnRefreshFormats(true, "Refreshing Formats"); + + //reset the procedure lists so db is re-queried in case they changed + //also clear other caches in case added steps / sections / etc... + PartInfo.ClearPartInfoCache(); + ItemInfo.ClearItemInfoCache(); + DocVersionInfo.ResetAllProcedures(); + FolderInfo.ClearFolderInfoCache(); + + //Refresh the base VEPROMS object + var fldr = tbase.VEObject as FolderInfo; + if (fldr != null) + { + Invoke((Action)(() => { tbase.VEObject = FolderInfo.Get(fldr.FolderID); })); + } + + //refresh the tree + Invoke((Action)(() => { tbase.RefreshNode(); })); + this.Invoke((Action)(() => { this.Update(); })); + } + } #region DragHelper public class DragHelper