//public HierarchyEventSink GetHierarchyEvents(IVsHierarchy vsHierarchy) //{ // HierarchyEventSink target = this.TryGetHierarchyEventSink(new HierarchyIdentity(vsHierarchy)); // if (target == null) // { // target = new HierarchyEventSink(this, vsHierarchy); // this._weakHierarchies.Add(new HierarchyIdentity(vsHierarchy), new WeakReference(target)); // } // return target; //} //public HierarchyListItem GetHierarchyItem(HierarchyItemIdentity identity) //{ // HierarchyListItem target = this.TryGetHierarchyItem(identity); // if (target == null) // { // target = new HierarchyListItem(this, identity); // this.GetHierarchyEvents(identity.Hierarchy); // if (identity.IsNestedItem) // { // this.GetHierarchyEvents(identity.NestedHierarchy); // } // this._weakItems.Add(identity, new WeakReference(target)); // } // return target; //} //public HierarchyListItem GetHierarchyItem(IVsHierarchy vsHierarchy, uint itemid) //{ // return this.GetHierarchyItem(HierarchyItemIdentity.Create(vsHierarchy, itemid)); //} //private void RemoveIdentity(HierarchyItemIdentity identity) //{ // this._weakItems.Remove(identity); // this._hierarchyIdentities.Remove(identity.HierarchyInfo); // if (identity.IsNestedItem) // { // this._hierarchyIdentities.Remove(identity.NestedInfo); // } //} //private HierarchyEventSink TryGetHierarchyEventSink(HierarchyIdentity identity) //{ // WeakReference reference; // if (this._weakHierarchies.TryGetValue(identity, out reference)) // { // if (reference.IsAlive) // { // return (reference.Target as HierarchyEventSink); // } // this._weakHierarchies.Remove(identity); // } // return null; //} //public HierarchyListItem TryGetHierarchyItem(HierarchyItemIdentity identity) //{ // WeakReference reference; // if (this._weakItems.TryGetValue(identity, out reference)) // { // if (reference.IsAlive) // { // return (reference.Target as HierarchyListItem); // } // this._weakItems.Remove(identity); // } // return null; //} //public HierarchyListItem TryGetHierarchyItem(IVsHierarchy hierarchy, uint itemid) //{ // return this.TryGetHierarchyItem(HierarchyItemIdentity.Create(hierarchy, itemid)); //} public HierarchyItemIdentity TryGetHierarchyItemIdentity(IVsHierarchy hierarchy, uint itemid) { HierarchyItemIdentity identity; HierarchyItemPair key = new HierarchyItemPair(hierarchy, itemid); this._hierarchyIdentities.TryGetValue(key, out identity); return(identity); }
public override bool Equals(object obj) { HierarchyItemPair pair = obj as HierarchyItemPair; if (pair == null) { return(false); } return(ComUtilities.IsSameComObject(this.Hierarchy, pair.Hierarchy) && (this.ItemID == pair.ItemID)); }
// Methods private HierarchyItemIdentity(IVsHierarchy hierarchy, uint itemid) { IVsHierarchy hierarchy2; uint num; if (((itemid == 0xfffffffe) && HierarchyUtilities.TryGetHierarchyProperty <IVsHierarchy>(hierarchy, itemid, -2032, out hierarchy2)) && HierarchyUtilities.TryGetHierarchyProperty <uint>(hierarchy, itemid, -2033, var => Unbox.AsUInt32(var), out num)) { this._isNestedInfoValid = true; this._isNestedItem = true; this._hierarchyInfo = new HierarchyItemPair(hierarchy2, num); this._nestedInfo = new HierarchyItemPair(hierarchy, itemid); } else { this._hierarchyInfo = new HierarchyItemPair(hierarchy, itemid); } }
private bool MaybeMapToNested(out HierarchyItemPair nestedInfo) { uint num; IntPtr ptr; Guid gUID = typeof(IVsHierarchy).GUID; if (ErrorHandler.Succeeded(this.Hierarchy.GetNestedHierarchy(this.ItemID, ref gUID, out ptr, out num)) && (ptr != IntPtr.Zero)) { IVsHierarchy objectForIUnknown; using (SafeIUnknown unknown = new SafeIUnknown(ptr)) { objectForIUnknown = Marshal.GetObjectForIUnknown(unknown.Value) as IVsHierarchy; } nestedInfo = new HierarchyItemPair(objectForIUnknown, num); return(true); } nestedInfo = this._hierarchyInfo; return(false); }