diff --git a/PROMS/VEPROMS.CSLA.Library/VEObjects/VETreeNode.cs b/PROMS/VEPROMS.CSLA.Library/VEObjects/VETreeNode.cs index 66a45ad1..da4408f2 100644 --- a/PROMS/VEPROMS.CSLA.Library/VEObjects/VETreeNode.cs +++ b/PROMS/VEPROMS.CSLA.Library/VEObjects/VETreeNode.cs @@ -76,7 +76,7 @@ namespace VEPROMS.CSLA.Library { _VEObject = value; base.Text = _VEObject.ToString(); - ResetNode(); + ResetNode("Dummy Set_VEObject"); } } //public void Refresh() @@ -110,12 +110,12 @@ namespace VEPROMS.CSLA.Library Console.WriteLine("Error: {0}", ex.Message); } } - public void ResetNode() + public void ResetNode(string dummy) { if (_VEObject!=null && _VEObject.HasChildren && _ChildrenLoaded == false) { _ChildrenLoaded = false;// Reset the children loaded flag - this.Nodes.Add("Dummy");// Add a Dummy Node so that the item will appear to be expanable. + this.Nodes.Add(dummy);// Add a Dummy Node so that the item will appear to be expanable. } else { @@ -131,14 +131,14 @@ namespace VEPROMS.CSLA.Library } public void RefreshNode() { - ResetNode();// Drop Children + ResetNode("Dummy RefreshNode");// Drop Children LoadChildren();// Load Children } public static VETreeNode GetFolder(int folderID) { VETreeNode tn = new VETreeNode(FolderInfo.Get(folderID)); //tn.Nodes.Add("Dummy"); - tn.ResetNode(); + tn.ResetNode("Dummy GetFolder"); return tn; } // public abstract void LoadChildren(); @@ -179,41 +179,20 @@ namespace VEPROMS.CSLA.Library this.Nodes.Clear(); //tReset(); DateTime tStart = DateTime.Now; + //TVAddChildren(_VEObject, this); OnLoadingChildrenSQL(this, new VETreeNodeEventArgs()); - IList ol; - if(_VEObject.GetType() == typeof(StepInfo) ||_VEObject.GetType() == typeof(SectionInfo) ||_VEObject.GetType() == typeof(ItemInfo) ) + IList ol; + ItemInfo item = _VEObject as ItemInfo; + if (_VEObject.GetType() == typeof(StepInfo) || _VEObject.GetType() == typeof(SectionInfo) || _VEObject.GetType() == typeof(ItemInfo)) ol = ((ItemInfo)_VEObject).GetChildren(allParts); - else + else ol = _VEObject.GetChildren(); //tNext("GetChildren"); if (ol != null) { OnLoadingChildrenMax(this, new VETreeNodeEventArgs(ol.Count)); this.TreeView.BeginUpdate(); - int icnt = 0; - foreach (IVEDrillDownReadOnly o in ol) - { - OnLoadingChildrenValue(this,new VETreeNodeEventArgs( ++icnt)); - //tNext("Cycle"); - try - { - VETreeNode tmp = new VETreeNode(o); - - //tNext("Allocate VETreeNode"); - //tmp.ResetNode(); - if (o.HasChildren) - tmp.Nodes.Add("Dummy");// Add a Dummy Node so that the item will appear to be expanable. - else - tmp._ChildrenLoaded = true;// Reset the children loaded flag - //tNext("Add Children"); - this.Nodes.Add(tmp); - //tNext("Add To Nodes"); - } - catch (Exception ex) - { - Console.WriteLine("{0}\r\n{1}", ex.Message, ex.InnerException); - } - } + ExpandChildren(ol); //} //tNext("Set Nodes"); this.TreeView.EndUpdate(); @@ -225,6 +204,78 @@ namespace VEPROMS.CSLA.Library } } + private void ExpandChildren(IList ol) + { + int icnt = 0; + foreach (IVEDrillDownReadOnly o in ol) + { + OnLoadingChildrenValue(this, new VETreeNodeEventArgs(++icnt)); + //tNext("Cycle"); + try + { + VETreeNode tmp = new VETreeNode(o); + if (o.HasChildren) + { + if (o is PartInfo) + { + tmp.Nodes.Clear(); + tmp.ExpandChildren(o.GetChildren()); + tmp._ChildrenLoaded = true; + } + else + tmp.Nodes.Add(string.Format("dummy: {0}", o.GetType().Name));// Add a Dummy Node so that the item will appear to be expanable. + } + else + tmp._ChildrenLoaded = true;// Reset the children loaded flag + this.Nodes.Add(tmp); + } + catch (Exception ex) + { + Console.WriteLine("{0}\r\n{1}", ex.Message, ex.InnerException); + } + } + } + private void TVAddChildren(IVEDrillDownReadOnly veobj, VETreeNode tn) + { + OnLoadingChildrenSQL(tn, new VETreeNodeEventArgs()); + IList ol; + ItemInfo item = veobj as ItemInfo; + if (item != null && item.ItemID == 378) + Console.WriteLine("here"); + if (veobj.GetType() == typeof(StepInfo) || veobj.GetType() == typeof(SectionInfo) || veobj.GetType() == typeof(ItemInfo)) + ol = ((ItemInfo)veobj).GetChildren(true); + else + ol = veobj.GetChildren(); + if (ol != null) + { + OnLoadingChildrenMax(this, new VETreeNodeEventArgs(ol.Count)); + this.TreeView.BeginUpdate(); + int icnt = 0; + foreach (IVEDrillDownReadOnly o in ol) + { + OnLoadingChildrenValue(this, new VETreeNodeEventArgs(++icnt)); + try + { + VETreeNode tmp = new VETreeNode(o); + PartInfo pi = o as PartInfo; + if (pi == null && o.HasChildren) + tmp.Nodes.Add("Dummy");// Add a Dummy Node so that the item will appear to be expanable. + else + tmp._ChildrenLoaded = true;// Reset the children loaded flag + tn.Nodes.Add(tmp); + if (pi != null && o.HasChildren) + TVAddChildren(o, tmp); + } + catch (Exception ex) + { + Console.WriteLine("{0}\r\n{1}", ex.Message, ex.InnerException); + } + } + + //} + this.TreeView.EndUpdate(); + } + } void myItemInfo_Deleted(object sender) { VETreeNode parnode = Parent as VETreeNode; @@ -267,20 +318,41 @@ namespace VEPROMS.CSLA.Library : base(o.ToString()) { _VEObject = o;// Save the BusinessObject - ResetNode(); + ResetNode("Dummy VETreeNode(IVEDrillDownReadOnly o)"); ItemInfo myItemInfo = o as ItemInfo; if (myItemInfo != null) { myItemInfo.Deleted += new ItemInfoEvent(myItemInfo_Deleted); myItemInfo.MyContent.Changed += new ContentInfoEvent(MyContent_Changed); + myItemInfo.NewSiblingAfter += new ItemInfoInsertEvent(myItemInfo_NewSiblingAfter); + myItemInfo.NewSiblingBefore += new ItemInfoInsertEvent(myItemInfo_NewSiblingBefore); + myItemInfo.NewChild += new ItemInfoInsertEvent(myItemInfo_NewChild); } } - + void myItemInfo_NewChild(object sender, ItemInfoInsertEventArgs args) + { + bool isExpanded = IsExpanded; + // Restore the tree as it currently is expanded. + Collapse(); + Nodes.Clear(); + _ChildrenLoaded = false; + ResetNode("Dummy myItemInfo_NewChild"); + if (isExpanded) Expand(); + } + void myItemInfo_NewSiblingBefore(object sender, ItemInfoInsertEventArgs args) + { + this.Parent.Nodes.Insert(Index,(new VETreeNode(args.ItemInserted))); + } + void myItemInfo_NewSiblingAfter(object sender, ItemInfoInsertEventArgs args) + { + this.Parent.Nodes.Insert(Index+1, (new VETreeNode(args.ItemInserted))); + } void MyContent_Changed(object sender) { + ContentInfo myContent = sender as ContentInfo; + ItemInfo myItemInfo = myContent.ContentItems[0]; Text = _VEObject.ToString(); } - public VETreeNode(string s) : base(s) {