diff --git a/PROMS/VEPROMS User Interface/frmBatchRefresh.Designer.cs b/PROMS/VEPROMS User Interface/frmBatchRefresh.Designer.cs index 02bb7edd..6e6b2213 100644 --- a/PROMS/VEPROMS User Interface/frmBatchRefresh.Designer.cs +++ b/PROMS/VEPROMS User Interface/frmBatchRefresh.Designer.cs @@ -576,7 +576,7 @@ this.myTVdel.Name = "myTVdel"; this.myTVdel.Size = new System.Drawing.Size(299, 367); this.myTVdel.TabIndex = 34; - this.myTVdel.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.myTV_AfterCheck_DelAnn); + this.myTVdel.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.myTV_AfterCheck); // // btnDeleteItems // diff --git a/PROMS/VEPROMS User Interface/frmBatchRefresh.cs b/PROMS/VEPROMS User Interface/frmBatchRefresh.cs index 95cf43ae..27f501a4 100644 --- a/PROMS/VEPROMS User Interface/frmBatchRefresh.cs +++ b/PROMS/VEPROMS User Interface/frmBatchRefresh.cs @@ -124,9 +124,11 @@ namespace VEPROMS // check to see if at least one tree node is checked. // Used to determin whether to make the process button active for // Refresh Transitions and for Update RO Values - private bool AtLeastOneNodeChecked() + // B2025-013 Admin Tool Tree Behavior + //Made this generic so same logic for all the TreeViews on this form + private bool AtLeastOneNodeChecked(TreeNodeCollection col) { - foreach (TreeNode tn in myTV.Nodes) + foreach (TreeNode tn in col) if (NodeIsChecked(tn)) return true; return false; @@ -1230,24 +1232,30 @@ namespace VEPROMS private void myTV_AfterCheck(object sender, TreeViewEventArgs e) { + //B2025 - 013 Admin Tool Tree Behavior + //only want to perform this if + // not an unknown action + // aka is a mouse click + // if this is fire-ing because clicked a parent or a child of an item + // want this to only fire once - for the item clicked - not for parents/children if (e.Action != TreeViewAction.Unknown) { if (e.Node.Nodes.Count > 0) { CheckChildNodes(e.Node, e.Node.Checked); } - } - if (swDeleteAnnotations.Value) - { - if (e.Node.Checked) + //B2025-013 Admin Tool Tree Behavior + //if a node gets unchecked, + //then uncheck both its parents and children + if (!e.Node.Checked) { DiselectParentNodes(e.Node.Parent); DiselectChildNodes(e.Node.Nodes); } + btnFixLinks.Enabled = btnDeleteItems.Enabled = AtLeastOneNodeChecked(((TreeView)sender).Nodes); // C2017-030 support for Refresh Transitions/Update RO Values } - btnFixLinks.Enabled = AtLeastOneNodeChecked(); // C2017-030 support for Refresh Transitions/Update RO Values } private void DiselectParentNodes(TreeNode parent) @@ -1283,76 +1291,6 @@ namespace VEPROMS } } } - //After check model to select and deselect nodes on the delete and annotation tree. - private void myTV_AfterCheck_DelAnn(object sender, TreeViewEventArgs e) - { - if (e.Action != TreeViewAction.Unknown) - { - if (e.Node.Nodes.Count > 0) - { - CheckChildNodes_DelAnn(e.Node, e.Node.Checked); - } - } - - if (e.Node.Checked) - { - // Ensure child nodes follow the parent node's state - CheckChildNodes_DelAnn(e.Node, e.Node.Checked); - } - else - { - // Automatically deselect parent nodes if current node is unchecked - if (swDeleteFolder.Value) - DiselectParentNodes_DelAnn(e.Node); - } - - btnFixLinks.Enabled = AtLeastOneNodeChecked_DelAnn(); // Ensure button is enabled based on custom logic - } - private void DiselectParentNodes_DelAnn(TreeNode node) - { - TreeNode parent = node.Parent; - while (parent != null) - { - parent.Checked = false; - parent = parent.Parent; - } - } - private void DiselectChildNodes_DelAnn(TreeNodeCollection children) - { - foreach (TreeNode child in children) - { - child.Checked = false; - DiselectChildNodes_DelAnn(child.Nodes); - } - } - private void CheckChildNodes_DelAnn(TreeNode treeNode, bool isChecked) - { - foreach (TreeNode tn in treeNode.Nodes) - { - tn.Checked = isChecked; - - if (tn.Nodes.Count > 0) - CheckChildNodes_DelAnn(tn, isChecked); - } - } - private bool AtLeastOneNodeChecked_DelAnn() - { - foreach (TreeNode node in myTV.Nodes) - { - if (node.Checked || AnyChildNodeChecked_DelAnn(node)) - return true; - } - return false; - } - private bool AnyChildNodeChecked_DelAnn(TreeNode node) - { - foreach (TreeNode childNode in node.Nodes) - { - if (childNode.Checked || AnyChildNodeChecked_DelAnn(childNode)) - return true; - } - return false; - } private ProgressBarItem _ProgressBar = null; @@ -1788,14 +1726,24 @@ namespace VEPROMS List pil = new List(); List dvil = new List(); + //B2025-013 Admin Tool Tree Behavior + //For Procedures & Doc Versions + //To avoid processing duplicates + //only want to add highest nodes selected + // i.e. if both an item and it's parent is checked, then add the parent + // not each individual item + // if a parent isn't checked, then add the individual item + // one exception to this is if the parent is not in the docversions + // for example: the top node - VEPROMS + //if that is selected, then we will add its children instead of it. // Create a list of procedures the user selected foreach (TreeNode tn in myProcedures.Keys) - if (tn.Checked) + if (tn.Checked && (tn.Parent == null || !tn.Parent.Checked || !myDocVersions.ContainsKey(tn.Parent))) pil.Add(myProcedures[tn]); // Create a list of doc versions the user selected foreach (TreeNode tn in myDocVersions.Keys) - if (tn.Checked) + if (tn.Checked && (tn.Parent == null || !tn.Parent.Checked || !myDocVersions.ContainsKey(tn.Parent))) dvil.Add(myDocVersions[tn]); bool cancelledOut = false; // Flag to indicate if the process should be cancelled @@ -1987,15 +1935,6 @@ namespace VEPROMS return false; } } - - public List RetrieveChkAnnotations() - { - List pil = new List(); - foreach (TreeNode tn in myProcedures.Keys) - if (tn.Checked) - pil.Add(myProcedures[tn]); - return pil; - } //C2025-011 RO Update Admin Tool Memory Enhancements private void txtProcess_TextChanged(object sender, EventArgs e)