B2017-176: Search Panel - Remove Working Draft Nodes from Tree

This commit is contained in:
Kathy Ruffing 2017-09-20 14:57:04 +00:00
parent 01fcb29d28
commit d80c80f66b

View File

@ -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<DevComponents.AdvTree.Node> uncheckNodes = new List<Node>();
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<DevComponents.AdvTree.Node, bool> dicSelectedDocVersionNodes = new Dictionary<DevComponents.AdvTree.Node, bool>();
private Dictionary<DevComponents.AdvTree.Node, bool> dicExpandedDocVersionNodes = new Dictionary<DevComponents.AdvTree.Node, bool>();
private Dictionary<DevComponents.AdvTree.Node, bool> dicSelectedFolderNodes = new Dictionary<DevComponents.AdvTree.Node, bool>();
private Dictionary<DevComponents.AdvTree.Node, bool> dicExpandedFolderNodes = new Dictionary<DevComponents.AdvTree.Node, bool>();
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<DocVersionInfo> dvilTmp = new List<DocVersionInfo>();
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;
}
}