Exemplo n.º 1
0
    private static HierarchyNode CreateNode(IVsHierarchy hierarchy, Guid identifier, IVsImageService2 imageService, IVsHierarchyItemManager hierarchyItemManager)
    {
        ThreadHelper.ThrowIfNotOnUIThread();

        ImageMoniker collapsedIcon;
        ImageMoniker expandedIcon;
        string       name;
        bool         isFolder;


        name = HierarchyUtilities.GetHierarchyProperty <string>(
            hierarchy,
            VSConstants.VSITEMID_ROOT,
            (int)__VSHPROPID.VSHPROPID_Name
            );

        isFolder = HierarchyUtilities.IsSolutionFolder(
            hierarchyItemManager.GetHierarchyItem(hierarchy, VSConstants.VSITEMID_ROOT).HierarchyIdentity
            );

        collapsedIcon = imageService.GetImageMonikerForHierarchyItem(
            hierarchy,
            VSConstants.VSITEMID_ROOT,
            (int)__VSHIERARCHYIMAGEASPECT.HIA_Icon
            );

        expandedIcon = imageService.GetImageMonikerForHierarchyItem(
            hierarchy,
            VSConstants.VSITEMID_ROOT,
            (int)__VSHIERARCHYIMAGEASPECT.HIA_OpenFolderIcon
            );

        // Sometimes the icons can be blank.
        // In those cases, use some default icons.
        if (collapsedIcon.Id == 0 && collapsedIcon.Guid == default)
        {
            collapsedIcon = isFolder ? KnownMonikers.FolderClosed : KnownMonikers.DocumentCollection;
        }

        if (expandedIcon.Id == 0 && expandedIcon.Guid == default)
        {
            expandedIcon = isFolder ? KnownMonikers.FolderOpened : KnownMonikers.DocumentCollection;
        }

        return(new HierarchyNode(identifier, name, collapsedIcon, expandedIcon)
        {
            IsLoaded = !HierarchyUtilities.IsStubHierarchy(hierarchy),
            IsFolder = isFolder
        });
    }
Exemplo n.º 2
0
        ImageMoniker IVsDropdownBarClient4.GetEntryImage(int iCombo, int iIndex)
        {
            var item = GetItem(iCombo, iIndex);

            if (item is NavigationBarProjectItem projectItem)
            {
                if (_workspace.TryGetHierarchy(projectItem.DocumentId.ProjectId, out var hierarchy))
                {
                    return(_imageService.GetImageMonikerForHierarchyItem(hierarchy, VSConstants.VSITEMID_ROOT, (int)__VSHIERARCHYIMAGEASPECT.HIA_Icon));
                }
            }

            return(item.Glyph.GetImageMoniker());
        }
        private static bool TryGetImageListAndIndex(this IVsHierarchy hierarchy, IVsImageService2 imageService, uint itemId, out IntPtr imageList, out ushort index)
        {
            var itemIdToImageHandle = s_hierarchyToItemIdToImageHandle.GetValue(hierarchy, s_createValue);

            // Get the actual image moniker that the vs hierarchy is using to in solution explorer.
            var imageMoniker     = imageService.GetImageMonikerForHierarchyItem(hierarchy, itemId, (int)__VSHIERARCHYIMAGEASPECT.HIA_Icon);
            var monikerImageList = new VsImageMonikerImageList(imageMoniker);

            // Get an image handle to this image moniker, and keep it around for the lifetime of the
            // hierarchy itself.
            var imageHandle = imageService.AddCustomImageList(monikerImageList);

            itemIdToImageHandle[itemId] = imageHandle;

            // Now, we want to get an HIMAGELIST ptr for that image.
            var uiObject = imageService.GetImage(imageHandle.Moniker, new ImageAttributes
            {
                StructSize    = Marshal.SizeOf(typeof(ImageAttributes)),
                Dpi           = 96,
                LogicalWidth  = 16,
                LogicalHeight = 16,
                ImageType     = (uint)_UIImageType.IT_ImageList,
                Format        = (uint)_UIDataFormat.DF_Win32,
                Flags         = (uint)_ImageAttributesFlags.IAF_RequiredFlags,
            });

            if (uiObject != null)
            {
                var imageListData = Microsoft.Internal.VisualStudio.PlatformUI.Utilities.GetObjectData(uiObject) as IVsUIWin32ImageList;
                if (imageListData != null)
                {
                    int imageListInt;
                    if (ErrorHandler.Succeeded(imageListData.GetHIMAGELIST(out imageListInt)))
                    {
                        imageList = (IntPtr)imageListInt;
                        index     = 0;
                        return(true);
                    }
                }
            }

            imageList = default(IntPtr);
            index     = 0;
            return(false);
        }
        private static bool TryGetImageListAndIndex(this IVsHierarchy hierarchy, IVsImageService2 imageService, uint itemId, out IntPtr imageList, out ushort index)
        {
            var itemIdToImageHandle = s_hierarchyToItemIdToImageHandle.GetValue(hierarchy, s_createValue);

            // Get the actual image moniker that the vs hierarchy is using to in solution explorer.
            var imageMoniker = imageService.GetImageMonikerForHierarchyItem(hierarchy, itemId, (int)__VSHIERARCHYIMAGEASPECT.HIA_Icon);
            var monikerImageList = new VsImageMonikerImageList(imageMoniker);

            // Get an image handle to this image moniker, and keep it around for the lifetime of the
            // hierarchy itself.
            var imageHandle = imageService.AddCustomImageList(monikerImageList);
            itemIdToImageHandle[itemId] = imageHandle;

            // Now, we want to get an HIMAGELIST ptr for that image.  
            var uiObject = imageService.GetImage(imageHandle.Moniker, new ImageAttributes
            {
                StructSize = Marshal.SizeOf(typeof(ImageAttributes)),
                Dpi = 96,
                LogicalWidth = 16,
                LogicalHeight = 16,
                ImageType = (uint)_UIImageType.IT_ImageList,
                Format = (uint)_UIDataFormat.DF_Win32,
                Flags = (uint)_ImageAttributesFlags.IAF_RequiredFlags,
            });

            if (uiObject != null)
            {
                var imageListData = Microsoft.Internal.VisualStudio.PlatformUI.Utilities.GetObjectData(uiObject) as IVsUIWin32ImageList;
                if (imageListData != null)
                {
                    int imageListInt;
                    if (ErrorHandler.Succeeded(imageListData.GetHIMAGELIST(out imageListInt)))
                    {
                        imageList = (IntPtr)imageListInt;
                        index = 0;
                        return true;
                    }
                }
            }

            imageList = default(IntPtr);
            index = 0;
            return false;
        }
Exemplo n.º 5
0
        public static IVsImageService2 Create()
        {
            IVsImageService2 svc = Substitute.For <IVsImageService2>();

            IImageHandle h = ImageHandleMock.Create();

            svc.AddCustomImage(null).ReturnsForAnyArgs(h);
            svc.AddCustomImageList(null).ReturnsForAnyArgs(h);

            IVsUIObject uiObj = VsUiObjectMock.Create();

            svc.GetImage(Arg.Any <ImageMoniker>(), Arg.Any <ImageAttributes>()).ReturnsForAnyArgs(uiObj);
            svc.GetImageMonikerForFile(null).ReturnsForAnyArgs(KnownMonikers.AboutBox);
            svc.GetImageMonikerForHierarchyItem(null, 0u, 0).ReturnsForAnyArgs(KnownMonikers.AboutBox);
            svc.GetImageMonikerForName(null).ReturnsForAnyArgs(KnownMonikers.AboutBox);
            svc.GetImageMonikerType(Arg.Any <ImageMoniker>()).ReturnsForAnyArgs(0u);

            IVsImageMonikerImageList mock = VsImageMonikerImageListMock.Create();

            svc.CreateMonikerImageListFromHIMAGELIST(IntPtr.Zero).ReturnsForAnyArgs(mock);
            svc.GetImageListImageMonikers(Arg.Any <ImageMoniker>()).ReturnsForAnyArgs(mock);
            return(svc);
        }
Exemplo n.º 6
0
 public ImageMoniker GetImageMonikerForHierarchyItem(IVsHierarchy hierarchy)
 {
     ThreadHelper.ThrowIfNotOnUIThread();
     return(_vsImageService2.GetImageMonikerForHierarchyItem(hierarchy, (uint)VSConstants.VSITEMID.Root, (int)__VSHIERARCHYIMAGEASPECT.HIA_Icon));
 }