コード例 #1
0
            public static bool MaybeMapToNested(HierarchyItemPair outerInfo, out HierarchyItemPair nestedInfo)
            {
                Guid         IID_IVsHierarchy = typeof(IVsHierarchy).GUID;
                IVsHierarchy nestedHierarchy;
                uint         nestedItemId;
                IntPtr       nestedHierarchyPtr;

                if (ErrorHandler.Succeeded(outerInfo.Hierarchy.GetNestedHierarchy(outerInfo.ItemID, ref IID_IVsHierarchy, out nestedHierarchyPtr, out nestedItemId)) &&
                    nestedHierarchyPtr != IntPtr.Zero) // For items in solution folders, it succeeds with a returned null ptr!
                {
                    try
                    {
                        nestedHierarchy = Marshal.GetObjectForIUnknown(nestedHierarchyPtr) as IVsHierarchy;
                    }
                    finally
                    {
                        Marshal.Release(nestedHierarchyPtr);
                    }
                    nestedInfo = new HierarchyItemPair(nestedHierarchy, nestedItemId);
                    return(true);
                }
                else
                {
                    nestedInfo = outerInfo;
                    return(false);
                }
            }
コード例 #2
0
 private void EnsureNestedInfo()
 {
     if (!_isNestedInfoValid)
     {
         _isNestedItem      = HierarchyItemPair.MaybeMapToNested(_hierarchyInfo, out _nestedInfo);
         _isNestedInfoValid = true;
     }
 }
コード例 #3
0
            public HierarchyItemIdentity(IVsHierarchy hierarchy, uint itemid)
            {
                // see if this hierarchy/itemid pair is equal to a node in a parent hierarchy
                IVsHierarchy parentHierarchy;
                uint         parentItemid;

                if (itemid == (uint)VSConstants.VSITEMID.Root &&
                    TryGetHierarchyProperty(hierarchy, itemid, (int)__VSHPROPID.VSHPROPID_ParentHierarchy, out parentHierarchy) &&
                    TryGetHierarchyProperty(hierarchy, itemid, (int)__VSHPROPID.VSHPROPID_ParentHierarchyItemid, UnboxAsUInt32, out parentItemid))
                {
                    _isNestedInfoValid = true;
                    _isNestedItem      = true;
                    _hierarchyInfo     = new HierarchyItemPair(parentHierarchy, parentItemid);
                    _nestedInfo        = new HierarchyItemPair(hierarchy, itemid);
                }
                else
                {
                    _hierarchyInfo = new HierarchyItemPair(hierarchy, itemid);
                }
            }