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 }); }
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; }
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); }
public ImageMoniker GetImageMonikerForHierarchyItem(IVsHierarchy hierarchy) { ThreadHelper.ThrowIfNotOnUIThread(); return(_vsImageService2.GetImageMonikerForHierarchyItem(hierarchy, (uint)VSConstants.VSITEMID.Root, (int)__VSHIERARCHYIMAGEASPECT.HIA_Icon)); }