diff --git a/PROMS/Volian.Controls.Library/DisplayReports.cs b/PROMS/Volian.Controls.Library/DisplayReports.cs index 0cc2e0bd..5f11e78c 100644 --- a/PROMS/Volian.Controls.Library/DisplayReports.cs +++ b/PROMS/Volian.Controls.Library/DisplayReports.cs @@ -106,7 +106,16 @@ namespace Volian.Controls.Library ROList.Clear(); foreach (object rolkup in lstCheckedROs) { - if (rolkup is ROFSTLookup.rodbi) + if (rolkup == null) // All Referenced Objects selected, return list of RO databases + { + foreach (ROFSTLookup.rodbi rodbi in _MyROFSTLookup.GetRODatabaseList()) + { + rtnStr = _MyRODbID.ToString() + ":" + string.Format("{0}", rodbi.dbiID.ToString("X4")); + ROList.Add(rtnStr); + } + continue; + } + else if (rolkup is ROFSTLookup.rodbi) rtnStr = _MyRODbID.ToString() + ":" + string.Format("{0}", ((ROFSTLookup.rodbi)rolkup).dbiID.ToString("X4")); else if (rolkup is ROFSTLookup.rochild) { @@ -192,6 +201,29 @@ namespace Volian.Controls.Library tabROReports.PerformClick(); } + private void AddSelectedROChildren(DevComponents.AdvTree.NodeCollection chldrn) + { + if (chldrn.Count > 0) + { + foreach (DevComponents.AdvTree.Node n in chldrn) + { + if (n.Checked) + lstCheckedROs.Add(n.Tag); + else + AddSelectedROChildren(n.Nodes); + } + } + } + private void BuildCheckedROsList() + { + lstCheckedROs.Clear(); + DevComponents.AdvTree.Node node = advTreeRO.Nodes[0]; + if (node.Checked) // top node (all Referenced Objects) selected + lstCheckedROs.Add(node.Tag); + else + AddSelectedROChildren(node.Nodes); + } + private void EnableOrDisablePrintButton() { switch (tctrlReports.SelectedTabIndex) @@ -200,6 +232,7 @@ namespace Volian.Controls.Library btnPrintReport.Enabled = (lstCheckedDocVersions.Count > 0); break; case 1: // Referenced Objects Reports + BuildCheckedROsList(); // this list is sent to the report generator if (cbxROUsage.Checked) btnPrintReport.Enabled = (lstCheckedDocVersions.Count > 0 && lstCheckedROs.Count > 0); else @@ -701,20 +734,39 @@ namespace Volian.Controls.Library tabTransitionReports.PerformClick(); } + // when a node is checked (selected) then uncheck any of its children + private void UncheckChildren(DevComponents.AdvTree.NodeCollection chldrn) + { + if (chldrn.Count > 0) + { + foreach (DevComponents.AdvTree.Node n in chldrn) + { + if (n.Checked) + n.Checked = false; + else + UncheckChildren(n.Nodes); + } + } + } + // when a node is checked (selected), uncheck the parents, grand parents, great grand parents, etc. + private void UncheckParents(DevComponents.AdvTree.Node pNode) + { + while (pNode != null) + { + if (pNode.Checked) pNode.Checked = false; + pNode = pNode.Parent; + } + } + private void advTreeRO_AfterCheck(object sender, AdvTreeCellEventArgs e) { DevComponents.AdvTree.Node n = advTreeRO.SelectedNode; - //ROFSTLookup. rolkup = (ROFSTLookup)n.Tag; if (n.Checked) - //lstCheckedROs.Add((ROFSTLookup)n.Tag); - //lstCheckedROs.Add(rolkup); - //lstROObj.Add(n.Tag); - lstCheckedROs.Add(n.Tag); - else - //lstCheckedROs.Remove((ROFSTLookup)n.Tag); - //lstCheckedROs.Remove(rolkup); - //lstROObj.Remove(n.Tag); - lstCheckedROs.Remove(n.Tag); + { + UncheckChildren(n.Nodes); + UncheckParents(n.Parent); + } + EnableOrDisablePrintButton(); }