From d80c80f66b68d9215cda44ecaa5514b36346613f Mon Sep 17 00:00:00 2001 From: Kathy Date: Wed, 20 Sep 2017 14:57:04 +0000 Subject: [PATCH] B2017-176: Search Panel - Remove Working Draft Nodes from Tree --- .../Volian.Controls.Library/DisplaySearch.cs | 271 +++++++++++------- 1 file changed, 161 insertions(+), 110 deletions(-) diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index d17e367d..0a198e0f 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -98,6 +98,8 @@ namespace Volian.Controls.Library _MyRODbID = _MyDocVersion.DocVersionAssociations[0].MyROFst.RODbID; } } + else + MyROFSTLookup = null; } } @@ -156,14 +158,18 @@ namespace Volian.Controls.Library void tabSearchTypes_SelectedTabChanged(object sender, TabStripTabChangedEventArgs e) { - if (e.NewTab == tabTranSearch) + if (e.NewTab == tabROSearch) + { + LoadROComboTree(); + } + else if (e.NewTab == tabTranSearch) { //enable-disable doc version nodes based on version type if selected if (cbxTranVersion.SelectedIndex > -1) { - if (dicExpandedDocVersionNodes.Count > 0) + if (dicExpandedFolderNodes.Count > 0) { - foreach (DevComponents.AdvTree.Node n in dicExpandedDocVersionNodes.Keys) + foreach (DevComponents.AdvTree.Node n in dicExpandedFolderNodes.Keys) { DocVersionInfo dvi = (DocVersionInfo)n.Tag; if(cbxTranVersion.Tag.ToString().Contains(dvi.VersionID.ToString())) @@ -196,15 +202,15 @@ namespace Volian.Controls.Library } else { - foreach (DevComponents.AdvTree.Node n in dicExpandedDocVersionNodes.Keys) + foreach (DevComponents.AdvTree.Node n in dicExpandedFolderNodes.Keys) n.Enabled = true; - if (dicSelectedDocVersionNodes.Count > 0) + if (dicSelectedFolderNodes.Count > 0) { - foreach (DevComponents.AdvTree.Node n in dicSelectedDocVersionNodes.Keys) + foreach (DevComponents.AdvTree.Node n in dicSelectedFolderNodes.Keys) { n.Enabled = true; } - dicSelectedDocVersionNodes.Clear(); + dicSelectedFolderNodes.Clear(); } } } @@ -291,12 +297,16 @@ namespace Volian.Controls.Library } cbxTranVersion.Tag = versionList; cbxTranFormatFillIn(versionList); - if (dicExpandedDocVersionNodes.Count > 0) + if (dicExpandedFolderNodes.Count > 0) { - foreach (DevComponents.AdvTree.Node n in dicExpandedDocVersionNodes.Keys) + foreach (DevComponents.AdvTree.Node n in dicExpandedFolderNodes.Keys) { - DocVersionInfo dvi = (DocVersionInfo)n.Tag; - if (cbxTranVersion.Tag.ToString().Contains(dvi.VersionID.ToString())) + FolderInfo fi = (FolderInfo)n.Tag; + // if this folder has a docversion, use its id: + string svid = null; + if (fi.FolderDocVersionCount > 0) + svid = fi.FolderDocVersions[0].VersionID.ToString(); + if (cbxTranVersion.Tag.ToString().Contains(svid)) n.Enabled = true; else n.Enabled = false; @@ -304,10 +314,14 @@ namespace Volian.Controls.Library } List uncheckNodes = new List(); - foreach (DevComponents.AdvTree.Node n in dicSelectedDocVersionNodes.Keys) + foreach (DevComponents.AdvTree.Node n in dicSelectedFolderNodes.Keys) { - DocVersionInfo dvi = (DocVersionInfo)n.Tag; - if (!versionList.Contains(dvi.VersionID.ToString())) + FolderInfo fi = (FolderInfo)n.Tag; // this was crashing in old version of code + // if this folder has a docversion, use its id: + string svid = null; + if (fi.FolderDocVersionCount > 0) + svid = fi.FolderDocVersions[0].VersionID.ToString(); + if (svid !=null && !versionList.Contains(svid)) uncheckNodes.Add(n); else n.Enabled = true; @@ -323,14 +337,14 @@ namespace Volian.Controls.Library if (MessageBox.Show(this, "Do you want to expand to all relevant procedure sets for the selected format?", "Expand Procedure Sets", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { lstCheckedDocVersions.Clear(); - foreach (DevComponents.AdvTree.Node n in dicSelectedDocVersionNodes.Keys) + foreach (DevComponents.AdvTree.Node n in dicSelectedFolderNodes.Keys) uncheckNodes.Add(n); while (uncheckNodes.Count > 0) { uncheckNodes[0].Checked = false; uncheckNodes.Remove(uncheckNodes[0]); } - dicSelectedDocVersionNodes.Clear(); + dicSelectedFolderNodes.Clear(); } } this.Cursor = Cursors.Default; @@ -512,9 +526,12 @@ namespace Volian.Controls.Library cntnd++; if (fic.ChildFolderCount > 0 || fic.FolderDocVersionCount > 0) // allow for '+' for tree expansion { - DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node(); - tnt.Text = "VLN_DUMMY"; - newnode.Nodes.Add(tnt); + if (fic.ChildFolderCount > 0) // B2017-176: Do not display the Working Draft node (don't create dummy for expander) + { + DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node(); + tnt.Text = "VLN_DUMMY"; + newnode.Nodes.Add(tnt); + } topnode.Nodes.Add(newnode); } } @@ -525,7 +542,6 @@ namespace Volian.Controls.Library newnode.Text = fi.ToString(); newnode.Tag = fi; AddCheckBox(true, newnode);//C2016-045 Allow Folders to be selected. - AddDocVersionNodes(newnode, fi, true); topnode.Nodes.Add(newnode); lstCheckedDocVersions.Add(Mydocversion); buildSetToSearchPanelTitle(); @@ -565,8 +581,8 @@ namespace Volian.Controls.Library // } // vlnStackTrace.ShowStackLocal(e.Node.Text,1,10); //} - private Dictionary dicSelectedDocVersionNodes = new Dictionary(); - private Dictionary dicExpandedDocVersionNodes = new Dictionary(); + private Dictionary dicSelectedFolderNodes = new Dictionary(); + private Dictionary dicExpandedFolderNodes = new Dictionary(); void advTreeProcSets_BeforeExpand(object sender, DevComponents.AdvTree.AdvTreeNodeCancelEventArgs e) { DevComponents.AdvTree.Node par = e.Node; @@ -588,46 +604,29 @@ namespace Volian.Controls.Library newnode.Tag = fic; par.Nodes.Add(newnode); AddCheckBox(true, newnode);//C2016-045 Allow Folders to be selected. - if (fic.HasChildren) // allow for '+' for tree expansion + newnode.Enabled = true; + if (fic.ChildFolderCount > 0) // B2017-176: Only expand if folder has folders (not working draft nodes) { DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node(); tnt.Text = "VLN_DUMMY"; newnode.Nodes.Add(tnt); + // B2017-176: Only expand if folder has folders (not working draft nodes): the following was moved from the code + // that would check if this should be enabled if seraching for transition types. The transition controls + // had a list of associated docversions, so needed to get the docversion in the folder: + if (tabSearchTypes.SelectedTab == tabTranSearch) + { + if (!dicSelectedFolderNodes.ContainsKey(newnode)) dicSelectedFolderNodes.Add(newnode, false); + // get the docversion for this folder, if it has one and determine whether it is enabled for transitions: + string svid = null; + if (fic.FolderDocVersionCount > 0) + svid = fic.FolderDocVersions[0].VersionID.ToString(); + newnode.Enabled = svid != null && cbxTranVersion.Tag != null ? cbxTranVersion.Tag.ToString().Contains(svid) : false; + } } } } - else if (fi.FolderDocVersionCount > 0) - { - AddDocVersionNodes(par, fi, false); - } } } - - private void AddDocVersionNodes(DevComponents.AdvTree.Node par, FolderInfo fi, bool isChecked) - { - foreach (DocVersionInfo dv in fi.FolderDocVersions) - { - //if ((VersionTypeEnum)dv.VersionType == VersionTypeEnum.WorkingDraft) - //{ - DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node(); - newnode.Text = dv.ToString(); - newnode.Tag = dv; - newnode.Selectable = true; - AddCheckBox(true, newnode);//C2016-045 Allow Folders to be selected. - newnode.Checked = isChecked; - if (tabSearchTypes.SelectedTab == tabTranSearch) - { - if (!dicSelectedDocVersionNodes.ContainsKey(newnode)) dicSelectedDocVersionNodes.Add(newnode, false); - newnode.Enabled = cbxTranVersion.Tag != null ? cbxTranVersion.Tag.ToString().Contains(dv.VersionID.ToString()) : false; - } - else - newnode.Enabled = true; - par.Nodes.Add(newnode); - dicExpandedDocVersionNodes.Add(newnode, newnode.Enabled); - //} - } - } - private Node LookInTree(NodeCollection monkeys, string bananna) { Node foundit = null; @@ -657,7 +656,7 @@ namespace Volian.Controls.Library //crumbs.Push(Mydocversion.MyFolder.MyParent.Name); // ex: "STPNOC-South Texas" //crumbs.Push(advTreeProcSets.Nodes[0].Text); //top node of my tree - crumbs.Push(Mydocversion.Name); // ex: "working draft" + //crumbs.Push(Mydocversion.Name); // ex: "working draft" crumbs.Push(Mydocversion.MyFolder.Name); // ex: "Emergency Procedures" FolderInfo fi = Mydocversion.MyFolder.MyParent; while (fi != null) @@ -688,18 +687,63 @@ namespace Volian.Controls.Library #region ROFST Combo Tree private void LoadROComboTree() { - if (_MyROFSTLookup == null) return; cmboTreeROs.Nodes.Clear(); + // if only one docversion selected, this RoFst can be used. If more than one or none (none is all docversions), then check if they + // use the same RO fst. If not, put a message as the first tree node and return, otherwise, load the tree. + List dvilTmp = new List(); + if (lstCheckedDocVersions == null || lstCheckedDocVersions.Count == 0) + { + DocVersionInfoList dvil = DocVersionInfoList.Get(); + foreach (DocVersionInfo dvi in dvil) dvilTmp.Add(dvi); + } + else + dvilTmp = lstCheckedDocVersions; + + bool same = true; + // get the first rofstId for comparing to the rest: + int rofstId = (dvilTmp.Count > 0)? (dvilTmp[0].DocVersionAssociations != null && dvilTmp[0].DocVersionAssociations.Count > 0) ? dvilTmp[0].DocVersionAssociations[0].ROFstID: -1 : -1; + + // for remaining folder/docversions in the list, check if they have an associated rofst & if so, if it is the same as the first in list. + for (int i = 1; i < dvilTmp.Count; i++) + { + if (dvilTmp[i].DocVersionAssociations != null && dvilTmp[i].DocVersionAssociations.Count > 0) + { + if (rofstId != dvilTmp[i].DocVersionAssociations[0].ROFstID) + { + same = false; + break; + } + } + } + + // rofsts for selected folder/docversions are not the same, cannot do an ro search: + if (!same) + { + DevComponents.AdvTree.Node tn = new DevComponents.AdvTree.Node(); + tn.Text = "Incompatible Referenced Objects in selected folders"; + cmboTreeROs.Nodes.Add(tn); + return; + } this.cmboTreeROs.AdvTree.BeforeExpand += new DevComponents.AdvTree.AdvTreeNodeCancelEventHandler(this.cmboTreeROs_BeforeExpand); cmboTreeROs.AdvTree.AfterExpand += new AdvTreeNodeEventHandler(AdvTree_AfterExpandorCollapse); cmboTreeROs.AdvTree.AfterCollapse += new AdvTreeNodeEventHandler(AdvTree_AfterExpandorCollapse); - for (int i = 0; i < _MyROFSTLookup.myHdr.myDbs.Length; i++) + // populate the tree - only 1 folder/docversion is selected or all selected use the same rofst: + if (lstCheckedDocVersions != null && lstCheckedDocVersions.Count > 0) { - DevComponents.AdvTree.Node tn = new DevComponents.AdvTree.Node(); - tn.Text = _MyROFSTLookup.myHdr.myDbs[i].dbiTitle; - tn.Tag = _MyROFSTLookup.myHdr.myDbs[i]; - cmboTreeROs.Nodes.Add(tn); - AddDummyGroup(_MyROFSTLookup.myHdr.myDbs[i], tn); + _MyDocVersion = lstCheckedDocVersions[0]; + if (_MyDocVersion.DocVersionAssociations != null && _MyDocVersion.DocVersionAssociations.Count > 0) + { + _MyROFSTLookup = _MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(_MyDocVersion); + + for (int i = 0; i < _MyROFSTLookup.myHdr.myDbs.Length; i++) + { + DevComponents.AdvTree.Node tn = new DevComponents.AdvTree.Node(); + tn.Text = _MyROFSTLookup.myHdr.myDbs[i].dbiTitle; + tn.Tag = _MyROFSTLookup.myHdr.myDbs[i]; + cmboTreeROs.Nodes.Add(tn); + AddDummyGroup(_MyROFSTLookup.myHdr.myDbs[i], tn); + } + } } } void AdvTree_AfterExpandorCollapse(object sender, AdvTreeNodeEventArgs e) @@ -1505,65 +1549,72 @@ namespace Volian.Controls.Library #region ProcSetSelection private int _MyRODbID; + private static bool checkingChildren = false; private void advTreeProcSets_AfterCheck(object sender, DevComponents.AdvTree.AdvTreeCellEventArgs e) { + // this method gets called if child nodes get checked by the code, return if doing this process. + if (checkingChildren) return; DevComponents.AdvTree.Node n = advTreeProcSets.SelectedNode; - dicSelectedDocVersionNodes[n] = n.Checked; + dicSelectedFolderNodes[n] = n.Checked; + // if this tree node is checked, and there are children, check the children too. if (n.Checked) { - n.Style = DevComponents.AdvTree.NodeStyles.Apple; - if (n.Tag is DocVersionInfo)//If it is a DocVersion add one DocVersion ID - { - lstCheckedDocVersions.Add((DocVersionInfo)n.Tag); - RefreshStepTypes();// Refresh Step Types after Working Draft is checked. - if (lstCheckedDocVersions.Count == 1)//Mydocversion == null) - { - Mydocversion = (DocVersionInfo)n.Tag; - StartAdvTreeStepTypesFillIn();// B2016-258 Hang after selecting a procedure if the Step Type panel is open on the search panel - } - } - else if (n.Tag is FolderInfo) // If it is a folder add all of the doc version children - { - AddAllVersions(n.Tag as FolderInfo); - } + checkingChildren = true; + if (n.Nodes != null && n.Nodes.Count > 0 && n.Nodes[0].Text != "VLN_DUMMY") CheckTreeNodeChildren(n.Nodes); + checkingChildren = false; } - else + // if the selected folder has a docversion, handle it: + FolderInfo fi = (FolderInfo)n.Tag; + RefreshLstCheckedDocVersions(); + RefreshStepTypes();// Refresh Step Types after Working Draft is checked. + if (lstCheckedDocVersions.Count == 1 && fi.FolderDocVersions != null && fi.FolderDocVersions.Count > 0) { - n.Style = null; - if (n.Tag is DocVersionInfo)// If docVersion Remove 1 DocVersion - { - lstCheckedDocVersions.Remove((DocVersionInfo)n.Tag); - RefreshStepTypes();// Refresh Step Types after Working Draft is unchecked. - if (lstCheckedDocVersions.Count == 1) - { - if (Mydocversion != lstCheckedDocVersions[0]) - { - Mydocversion = lstCheckedDocVersions[0]; - StartAdvTreeStepTypesFillIn();// B2016-258 Hang after selecting a procedure if the Step Type panel is open on the search panel - } - } - else - { - if (lstCheckedDocVersions.Count == 0) - Mydocversion = null; - // do this if either none, or more than one procedure set selected - ResetStepTypes();// - } - } - else if (n.Tag is FolderInfo) // If foldre remove all docversion children. - { - RemoveAllVersions(n.Tag as FolderInfo); - } + Mydocversion = fi.FolderDocVersions[0]; + StartAdvTreeStepTypesFillIn();// B2016-258 Hang after selecting a procedure if the Step Type panel is open on the search panel } - //// Enable the RO combo list only if at least one procedure set node - //// is selected - //cmboTreeROs.Enabled = (lstCheckedDocVersions.Count > 0); - //gpFindROs.Enabled = cmboTreeROs.Enabled; - SetupContextMenu(); - buildSetToSearchPanelTitle(); } + // check all folder nodes below this + private void CheckTreeNodeChildren(NodeCollection nodeCollection) + { + foreach (Node tn in nodeCollection) + { + if (!tn.Checked) tn.Checked = true; + if (tn.Nodes != null && tn.Nodes.Count > 0 && tn.Nodes[0].Text != "VLN_DUMMY") CheckTreeNodeChildren(tn.Nodes); + } + } + // The 'lstCheckedDocVersions' maintains a list of the docversions that are associated with folders that are checked + // on the search tree of folders, i.e. procedure sets that should be included in the search. + private void RefreshLstCheckedDocVersions() + { + lstCheckedDocVersions.Clear(); + AddFromTreeNodes(advTreeProcSets.Nodes); // add docversions to the list + LoadROComboTree(); // reset the ro tree based on docversion selections. + } + private void AddFromTreeNodes(NodeCollection nodeCollection) + { + foreach (Node tn in nodeCollection) + AddFromTreeNode(tn); + } + private void AddFromTreeNode(Node tn) + { + if (tn.Checked) + { + tn.Style = DevComponents.AdvTree.NodeStyles.Apple; // sets green background on selected folder(s) + FolderInfo fi = (FolderInfo)tn.Tag; + // if this folder has a docversion, use its id: + if (tn.Nodes != null && tn.Nodes.Count > 0 && tn.Nodes[0].Text != "VLN_DUMMY") // Folder has been expanded, so add its docversion list + { + if (fi.FolderDocVersionCount > 0) lstCheckedDocVersions.Add(fi.FolderDocVersions[0]); + } + else // it has not been expanded process all below. + AddAllChildVersions(fi); + } + else // not checked, set style so no background color + tn.Style = null; + if (tn.Nodes != null) AddFromTreeNodes(tn.Nodes); + } private void RemoveAllVersions(FolderInfo child) { RemoveAllChildVersions(child); @@ -1606,7 +1657,7 @@ namespace Volian.Controls.Library { if (formatName != dvi.ActiveFormat.Name) { - ResetStepTypes("... folders selected include mutliple formats"); + ResetStepTypes("...folders selected include multiple formats"); return; } }