From a5a3f16177e877ad2f033be4af25ef889f00a337 Mon Sep 17 00:00:00 2001 From: mschill Date: Fri, 29 May 2026 06:06:58 -0400 Subject: [PATCH] C2026-021_B2026-048 Expand Functionality of Viewing Mode --- PROMS/VEPROMS User Interface/frmVEPROMS.cs | 52 +++++++++--- .../VEPROMS.CSLA.Library/Extension/ItemExt.cs | 4 + .../DisplayApplicability.cs | 80 ++++++++++--------- .../DisplayTabControl.cs | 39 ++++++--- PROMS/Volian.Controls.Library/EditItem.cs | 23 +++++- PROMS/Volian.Controls.Library/StepRTB.cs | 78 +++++++++++++++--- .../Volian.Controls.Library/StepTabRibbon.cs | 9 ++- 7 files changed, 213 insertions(+), 72 deletions(-) diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.cs index a819a751..07f0ab5a 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.cs @@ -245,13 +245,17 @@ namespace VEPROMS displayBookMarks.SetupBookMarks(); // setup bookmarks in the child window tc.MyCopyStep = myParent.tc.MyCopyStep; // copy the copystep info to the child window + + //B2026 - 048 View Only Mode freezes PROMS if last tab closed + tc.EnableDisableStepProperties -= EnableDisableStepProperties; + tc.EnableDisableStepProperties += new StepTabRibbonEvent(EnableDisableStepProperties); - (tv.Nodes[0] as VETreeNode).InChildWindow = true; // tells us this folder's tree nodes are in the child window + (tv.Nodes[0] as VETreeNode).InChildWindow = true; // tells us this folder's tree nodes are in the child window } public void OpenItem(ItemInfo myItemInfo) { - tc.OpenItem(myItemInfo); + tc.OpenItem(myItemInfo); } public void RefreshItem(ItemInfo myItemInfo) @@ -352,9 +356,10 @@ namespace VEPROMS displayRO.TabControl = tc; // B2019-043 this was being passed in as a parameter for DisplayRO which caused issues with the Visual Studio designer bottomProgBar.ValueChanged += new EventHandler(bottomProgBar_ValueChanged); + tc.EnableDisableStepProperties += new StepTabRibbonEvent(EnableDisableStepProperties); - // When creating an XY Plot, a System.Drawing.Graphics is needed and it requires a form. Use the main form. - if (VlnSettings.DebugMode) + // When creating an XY Plot, a System.Drawing.Graphics is needed and it requires a form. Use the main form. + if (VlnSettings.DebugMode) { MSWordToPDF.DebugStatus = 1; MSWordToPDF.OverrideColor = Color.Red; @@ -964,7 +969,18 @@ namespace VEPROMS { pnl.ApplDisplayMode = displayApplicability.ViewMode; displayHistory.ApplDisplayMode = pnl.ApplDisplayMode; + + //C2026-021 Expand Functionality of Viewing Mode + if (pnl.ApplDisplayMode > 0 && pnl.VwMode != E_ViewMode.View) + { + pnl.VwMode = E_ViewMode.View; + EnableDisableStepProperties(sender, new StepTabRibbonEventArgs(tc.SelectedDisplayTabItem.MyItemInfo, 0, pnl.VwMode)); + MessageBox.Show("Changing to View Only Mode. Applicability Viewing Mode must be Master to return to Edit Mode. View Mode can be toggled off via the Ribbon->View tab.", "Changing to View Mode", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + + pnl.MyStepTabPanel.MyStepTabRibbon.RefreshProcedure(); } + } void tv_ViewPDF(object sender, vlnTreeViewPdfArgs args) @@ -4867,15 +4883,31 @@ namespace VEPROMS //In View Only Mode - Step Properties should be disabled public void EnableDisableStepProperties(object sender, StepTabRibbonEventArgs args) { - if (args.ViewMode == E_ViewMode.View && (infoTabs.Enabled || infoTabs.SelectedTab != infotabTags)) + //C2026 - 021 Expand Functionality of Viewing Mode + //B2026 - 048 View Only Mode freezes PROMS if last tab closed + if (args.ViewMode == E_ViewMode.View && (infotabControlPanelTags.Enabled || (infoTabs.SelectedTab != infotabTags && infoTabs.SelectedTab != infotabApplicability))) { - infoTabs.Enabled = true; - infoTabs.SelectedTab = infotabTags; - infoTabs.Enabled = false; + if (infoTabs.SelectedTab != infotabApplicability) + { + infoTabs.SelectedTab = infotabTags; + } + + infotabControlPanelTags.Enabled = false; + infotabControlPanelRO.Enabled = false; + infotabControlPanelTransitions.Enabled = false; + tabControlPanel1.Enabled = false; + displayApplicability.SetEnableDisableItemSelection(false); + tcpFoldoutMaint.Enabled = false; + } - else if (args.ViewMode != E_ViewMode.View && !infoTabs.Enabled) + else if (args.ViewMode != E_ViewMode.View && !infotabControlPanelTags.Enabled) { - infoTabs.Enabled = true; + infotabControlPanelTags.Enabled = true; + infotabControlPanelRO.Enabled = true; + infotabControlPanelTransitions.Enabled = true; + tabControlPanel1.Enabled = true; + displayApplicability.SetEnableDisableItemSelection(true); + tcpFoldoutMaint.Enabled = true; } } diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs index 4d7b9987..d4c61f96 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs @@ -8123,6 +8123,10 @@ namespace VEPROMS.CSLA.Library } set { _ChangeBarDate = value; } } + + //C2026-021 Expand Functionality of Viewing Mode + public void ResetChangeBar() => _ChangeBarDate = null; + public Dictionary MyLookup = null; public override void SetupTags() { diff --git a/PROMS/Volian.Controls.Library/DisplayApplicability.cs b/PROMS/Volian.Controls.Library/DisplayApplicability.cs index 1f4a388c..6a32243c 100644 --- a/PROMS/Volian.Controls.Library/DisplayApplicability.cs +++ b/PROMS/Volian.Controls.Library/DisplayApplicability.cs @@ -55,7 +55,7 @@ namespace Volian.Controls.Library foreach (string name in names) { i++; - AddViewMode(name.Trim(), i.ToString(), apple == i); + AddViewMode($"{name.Trim()} (View Only)", i.ToString(), apple == i); } AddItemMode("All", "-1", ref gpSubItem); @@ -130,42 +130,46 @@ namespace Volian.Controls.Library set { _MyApplicability = value; } } - //private ProcedureInfo _MyProcedureInfo; - //public ProcedureInfo MyProcedureInfo - //{ - //get { return _MyProcedureInfo; } - //set - //{ - // _MyProcedureInfo = value; - // if (_MyProcedureInfo != null && _MyProcedureInfo.IsProcedure) - // { - // DocVersionConfig cfg = new DocVersionConfig(_MyProcedureInfo.MyDocVersion); - // if (cfg.Unit_Name == string.Empty) - // this.Visible = false; - // else - // { - // string[] names = cfg.Unit_Name.Split(','); - // gpMode.Controls.Clear(); - // gpItem.Controls.Clear(); - // MyCheckBoxes.Clear(); - // AddViewMode("Master", "-1", true); - // int i = 0; - // foreach (string name in names) - // { - // AddViewMode(name.Trim(), (++i).ToString()); - // } - // AddItemMode("All", "-1"); - // i = 0; - // foreach (string name in names) - // AddItemMode(name.Trim(), (++i).ToString()); - // AddItemMode("None", "0"); - // //if(!this.Visible) - // // this.Visible = true; - // } - // } - //} - //} - private void AddItemMode(string name, string value, ref DevComponents.DotNetBar.Controls.GroupPanel gpSubItem) + //C2026-021 Expand Functionality of Viewing Mode + public bool ShowItemSelection = true; + public void SetEnableDisableItemSelection(bool value) => gpItem.Enabled = ShowItemSelection = value; + + //private ProcedureInfo _MyProcedureInfo; + //public ProcedureInfo MyProcedureInfo + //{ + //get { return _MyProcedureInfo; } + //set + //{ + // _MyProcedureInfo = value; + // if (_MyProcedureInfo != null && _MyProcedureInfo.IsProcedure) + // { + // DocVersionConfig cfg = new DocVersionConfig(_MyProcedureInfo.MyDocVersion); + // if (cfg.Unit_Name == string.Empty) + // this.Visible = false; + // else + // { + // string[] names = cfg.Unit_Name.Split(','); + // gpMode.Controls.Clear(); + // gpItem.Controls.Clear(); + // MyCheckBoxes.Clear(); + // AddViewMode("Master", "-1", true); + // int i = 0; + // foreach (string name in names) + // { + // AddViewMode(name.Trim(), (++i).ToString()); + // } + // AddItemMode("All", "-1"); + // i = 0; + // foreach (string name in names) + // AddItemMode(name.Trim(), (++i).ToString()); + // AddItemMode("None", "0"); + // //if(!this.Visible) + // // this.Visible = true; + // } + // } + //} + //} + private void AddItemMode(string name, string value, ref DevComponents.DotNetBar.Controls.GroupPanel gpSubItem) { CheckBox cb = new CheckBox(); cb.BackColor = Color.Transparent; @@ -550,7 +554,7 @@ namespace Volian.Controls.Library void DisplayApplicability_VisibleChanged(object sender, EventArgs e) { MyItemInfo = MyItemInfo; - gpItem.Enabled = UserInfo.CanEdit(MyUserInfo,(MyItemInfo == null) ? null : MyItemInfo.MyDocVersion); //Can Change Applicability + gpItem.Enabled = ShowItemSelection && UserInfo.CanEdit(MyUserInfo,(MyItemInfo == null) ? null : MyItemInfo.MyDocVersion); //Can Change Applicability } } } diff --git a/PROMS/Volian.Controls.Library/DisplayTabControl.cs b/PROMS/Volian.Controls.Library/DisplayTabControl.cs index 620640de..d82d61ac 100644 --- a/PROMS/Volian.Controls.Library/DisplayTabControl.cs +++ b/PROMS/Volian.Controls.Library/DisplayTabControl.cs @@ -194,15 +194,15 @@ namespace Volian.Controls.Library CopyStepSelected(this, args); } - #region Private Fields + #region Private Fields - /// - /// This is a lookup table for all of the DisplayTabItems that are currently open - /// The key is: - /// "Item - " + Procedure ItemID for step pages - /// "Doc - " + DocumentID for Word Documents - /// - public Dictionary _MyDisplayTabItems; + /// + /// This is a lookup table for all of the DisplayTabItems that are currently open + /// The key is: + /// "Item - " + Procedure ItemID for step pages + /// "Doc - " + DocumentID for Word Documents + /// + public Dictionary _MyDisplayTabItems; /// /// When a Tab is closed it is added to this list. @@ -549,7 +549,15 @@ namespace Volian.Controls.Library if (((Bar)sender).Items == null) return; if (((Bar)sender).Items.Count == 1)// Remove bar if last item is closed... { - Bar bar = sender as Bar; + //B2026 - 048 View Only Mode freezes PROMS if last tab closed + //if last item is closing, need to re-enable Step Properties + //so if closing in view only mode will not freeze when re-opening + if (MyEditItem != null && MyEditItem.MyStepPanel.VwMode == E_ViewMode.View) + { + OnEnableDisableStepProperties(new StepTabRibbonEventArgs(MyEditItem.MyItemInfo, 0, E_ViewMode.Edit)); + } + + Bar bar = sender as Bar; if (bar != null) { if (dotNetBarManager1.Bars.Contains(bar.Name)) @@ -568,9 +576,16 @@ namespace Volian.Controls.Library ActivateRemainingTab((Bar)sender); } } - #endregion - #region Public Methods - public void RefreshItem(ItemInfo myItemInfo) + + public event StepTabRibbonEvent EnableDisableStepProperties; + private void OnEnableDisableStepProperties(StepTabRibbonEventArgs args) + { + if (EnableDisableStepProperties != null) + EnableDisableStepProperties(this, args); + } + #endregion + #region Public Methods + public void RefreshItem(ItemInfo myItemInfo) { ItemInfo proc = myItemInfo.MyProcedure; // Find procedure Item string key = "Item - " + proc.ItemID.ToString(); diff --git a/PROMS/Volian.Controls.Library/EditItem.cs b/PROMS/Volian.Controls.Library/EditItem.cs index a8c0c8ba..80a47892 100644 --- a/PROMS/Volian.Controls.Library/EditItem.cs +++ b/PROMS/Volian.Controls.Library/EditItem.cs @@ -245,6 +245,20 @@ namespace Volian.Controls.Library } protected void MyContent_Changed(object sender) { + //C2026-021 Expand Functionality of Viewing Mode + if (MyStepPanel.ApplDisplayMode > 0) + { + MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = MyStepPanel.ApplDisplayMode; + MyItemInfo.MyProcedure.ProcedureConfig.SelectedSlave = MyStepPanel.ApplDisplayMode; + } + else + { + MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = 0; + MyItemInfo.MyProcedure.ProcedureConfig.SelectedSlave = 0; + } + + MyItemInfo.MyProcedure.ResetChangeBar(); + // Update the text to reflect the content change MyItemInfo.RefreshItemAnnotations(); ChangeBar = MyItemInfo.HasChangeBar; @@ -4114,7 +4128,14 @@ namespace Volian.Controls.Library } } } - //// TIMING: DisplayItem.TimeIt("CSLARTB Parent"); + //// TIMING: DisplayItem.TimeIt("CSLARTB Parent"); + + //C2026-021 Expand Functionality of Viewing Mode + if (MyStepPanel.ApplDisplayMode > 0) + MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = MyStepPanel.ApplDisplayMode; + else + MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = 0; + SetText(); if (itemInfo.IsSupInfoPart) { diff --git a/PROMS/Volian.Controls.Library/StepRTB.cs b/PROMS/Volian.Controls.Library/StepRTB.cs index 5bd95ddb..c2e7c5ab 100644 --- a/PROMS/Volian.Controls.Library/StepRTB.cs +++ b/PROMS/Volian.Controls.Library/StepRTB.cs @@ -492,15 +492,32 @@ namespace Volian.Controls.Library OnAdjustTableWidth(this, new StepRTBTableWidthEventArgs(true)); //Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 2"); _InitializingRTB = true; - DisplayText vlntxt = new DisplayText(MyItemInfo, E_EditPrintMode.Edit, VwMode, !ActiveMode, FieldToEdit, true,null, null,false); - //Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 3"); - //if (_origDisplayText != null && vlntxt.StartText == _origDisplayText.StartText) - //{ - // ReadOnly = !(EpMode == E_EditPrintMode.Edit && VwMode == E_ViewMode.Edit); - // if (!ReadOnly && !edit) ReadOnly = true; - // return; - //} - OrigDisplayText = vlntxt; + + //C2026-021 Expand Functionality of Viewing Mode + StepPanel pnl = (Parent as RTBItem)?.MyStepPanel; + if (pnl?.ApplDisplayMode > 0) + { + MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = pnl.ApplDisplayMode; + } + else + { + MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = 0; + } + + DisplayText vlntxt = new DisplayText(MyItemInfo, E_EditPrintMode.Edit, VwMode, !ActiveMode, FieldToEdit, true,null, null,false); + if (pnl?.ApplDisplayMode > 0 && MyItemInfo.MyContent.ContentRoUsageCount > 0) + { + vlntxt.StartText = RefreshROsWithUnitStartText(vlntxt.StartText, pnl.ApplDisplayMode); + } + + //Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 3"); + //if (_origDisplayText != null && vlntxt.StartText == _origDisplayText.StartText) + //{ + // ReadOnly = !(EpMode == E_EditPrintMode.Edit && VwMode == E_ViewMode.Edit); + // if (!ReadOnly && !edit) ReadOnly = true; + // return; + //} + OrigDisplayText = vlntxt; //Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 4"); // RHM 20101201 - Don't reset the text. Calculate the text and compare it with the existing text in AddRTFText @@ -656,7 +673,48 @@ namespace Volian.Controls.Library Application.DoEvents(); } - private bool IsDerived(StepConfig sc) + //C2026-021 Expand Functionality of Viewing Mode + //regex for finding Referenced object links + private static Regex regRefObj = new Regex(@"\#Link\:ReferencedObject:([0-9]*) ([0-9a-zA-Z]*) ([0-9]*)", RegexOptions.Singleline); + + //Replace the Default RO text with Unit Specific RO text + private string RefreshROsWithUnitStartText(string startText, int unitID) + { + ROFSTLookup lookup = MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(MyItemInfo.MyDocVersion); + + MatchCollection mc = regRefObj.Matches(startText); + + if (mc.Count == 0) + return startText; + + StringBuilder sb = new StringBuilder(); + int lastindex = 0; + + foreach (Match match in mc) + { + //get where ther default text for the RO starts + int indx = startText.LastIndexOf(@"\v 0) + { + //Procedure Viewing Mode is set to a specific Unit - so cannot exit vie only mode + MessageBox.Show(this, "Procedures with multiple units are only editable when the Viewing Mode is set to Master. To change out of View Only Mode, first open the Step Propeties panel->Applicability tab and change the Viewing Mode to be Master. Then you can disable View Only Mode.", "Procedure Viewing Mode Incompatiple with Edits", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + else if (MyEditItem.MyStepPanel.VwMode == E_ViewMode.View) { //swapping into edit mode, so check out procedure and Setup Security (this.Parent as StepTabPanel).MyDisplayTabItem.OwnerID = MySessionInfo.CheckOutItem(MyEditItem.MyItemInfo.MyProcedure.ItemID, 0);