示例#1
0
        //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);
        }
示例#2
0
        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));
        }
示例#3
0
        // 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);
            }
        }
示例#4
0
        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);
        }