diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.cs index 2afb3de2..6dbb00de 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.cs @@ -323,11 +323,19 @@ namespace VEPROMS // Check to make sure that a node has been selected and // that the mouse is within the bounds of the node. if (tn != null && tn.Bounds.Left < newPoint.X) - { + { tv.SelectedNode = tn; - tv.Enabled = false; - tmrTreeView.Enabled = true; - } + tv.Enabled = false; + tmrTreeView.Enabled = true; + } + else + { + if (tc.SelectedDisplayTabItem != null && tc.SelectedDisplayTabItem.SelectedItemInfo != null) + { + tv.AdjustTree(tc.SelectedDisplayTabItem.SelectedItemInfo); + tc.SelectedDisplayTabItem.Focus(); + } + } } } /// diff --git a/PROMS/Volian.Controls.Library/vlnTreeView.cs b/PROMS/Volian.Controls.Library/vlnTreeView.cs index 4320f572..c0e46c6b 100644 --- a/PROMS/Volian.Controls.Library/vlnTreeView.cs +++ b/PROMS/Volian.Controls.Library/vlnTreeView.cs @@ -293,7 +293,8 @@ namespace Volian.Controls.Library #region MenuSupport private void tv_AfterSelect(object sender, TreeViewEventArgs e) { - OnNodeSelectionChange(sender, new vlnTreeEventArgs(e.Node)); + if(!_AdjustingTree) + OnNodeSelectionChange(sender, new vlnTreeEventArgs(e.Node)); } // use to determine which menu items have been selected for those tree nodes // that allow more than one type of operation associated with their selection. @@ -1631,6 +1632,46 @@ namespace Volian.Controls.Library return false;// Must not be a child at this level } #endregion + private bool _AdjustingTree = false; + public void AdjustTree(ItemInfo selectedItem) + { + // start at the top parent and walk down the nodes to find child + VETreeNode node = FindNodeAndExpand(selectedItem); + _AdjustingTree = true; + this.SelectedNode = node; + _AdjustingTree = false; + } + public VETreeNode FindNodeAndExpand(IVEDrillDownReadOnly selectedItem) + { + if (selectedItem.ActiveParent == null) + { + return (VETreeNode)this.Nodes[0]; // Return the top node + } + VETreeNode parent = FindNodeAndExpand(selectedItem.ActiveParent); + if (!parent.IsExpanded) + parent.Expand(); + foreach (VETreeNode child in parent.Nodes) + if (CompareVEObject(child.VEObject, selectedItem)) + return child; + foreach (VETreeNode child in parent.Nodes) + foreach (VETreeNode grandchild in child.Nodes) + if (CompareVEObject(grandchild.VEObject, selectedItem)) + return grandchild; + return null; + } + public bool CompareVEObject(IVEDrillDownReadOnly obj1, IVEDrillDownReadOnly obj2) + { + ItemInfo myItem = obj1 as ItemInfo; + if (myItem != null) + if (myItem.ItemID == ((ItemInfo)obj2).ItemID) return true; + DocVersionInfo myDV = obj1 as DocVersionInfo; + if (myDV != null) + if (myDV.VersionID == ((DocVersionInfo)obj2).VersionID) return true; + FolderInfo myFolder = obj1 as FolderInfo; + if (myFolder != null) + if (myFolder.FolderID == ((FolderInfo)obj2).FolderID) return true; + return false; + } } #region DragHelper public class DragHelper