private void CreateInfoBar(IVsInfoBarUIFactory factory, IVsWindowFrame frame, string title, Action onClose, Action onEnableClicked = null, Action onEnableAndIgnoreClicked = null) { object unknown; if (frame.GetProperty((int)__VSFPROPID7.VSFPROPID_InfoBarHost, out unknown) == VSConstants.S_OK) { var textSpans = new List <IVsInfoBarTextSpan>() { new InfoBarTextSpan(title) }; // create action item list var actionItems = new List <IVsInfoBarActionItem>(); if (onEnableClicked != null) { actionItems.Add(s_enableItem); } if (onEnableAndIgnoreClicked != null) { actionItems.Add(s_enableAndIgnoreItem); } var infoBarModel = new InfoBarModel( textSpans, actionItems.ToArray(), KnownMonikers.StatusInformation, isCloseButtonVisible: true); IVsInfoBarUIElement infoBarUI; if (TryCreateInfoBarUI(factory, infoBarModel, out infoBarUI)) { uint? infoBarCookie = null; InfoBarEvents eventSink = new InfoBarEvents(() => { onClose(); if (infoBarCookie.HasValue) { infoBarUI.Unadvise(infoBarCookie.Value); } }, onEnableClicked, onEnableAndIgnoreClicked); uint cookie; infoBarUI.Advise(eventSink, out cookie); infoBarCookie = cookie; IVsInfoBarHost host = (IVsInfoBarHost)unknown; host.AddInfoBar(infoBarUI); } } }
public static async System.Threading.Tasks.Task ShowInfoBar(InfoBar infoBar) { IVsInfoBarUIFactory infoBarUIFactory = await ServiceProvider.GetGlobalServiceAsync(typeof(SVsInfoBarUIFactory)) as IVsInfoBarUIFactory; var uiElement = infoBarUIFactory.CreateInfoBar(infoBar); IVsShell shell = await ServiceProvider.GetGlobalServiceAsync(typeof(SVsShell)) as IVsShell; shell.GetProperty((int)__VSSPROPID7.VSSPROPID_MainWindowInfoBarHost, out var host); if (host is IVsInfoBarHost infoBarHost) { var eventSink = new InfoBarEvents(infoBar, uiElement); uiElement.Advise(eventSink, out var cookie); eventSink.Cookie = cookie; infoBarHost.AddInfoBar(uiElement); } }
private void CreateInfoBar(string name, Action onEnableClicked, Action onEnableAndIgnoreClicked, Action onClose, IVsWindowFrame frame, IVsInfoBarUIFactory factory) { object unknown; if (frame.GetProperty((int)__VSFPROPID7.VSFPROPID_InfoBarHost, out unknown) == VSConstants.S_OK) { var textSpans = new List <IVsInfoBarTextSpan>() { new InfoBarTextSpan(string.Format(ServicesVSResources.CodefixOrRefactoringEncounteredError, name)), }; var infoBarModel = new InfoBarModel( textSpans, new IVsInfoBarActionItem[] { s_enableItem, s_enableAndIgnoreItem }, KnownMonikers.StatusInformation, isCloseButtonVisible: true); IVsInfoBarUIElement infoBarUI; if (TryCreateInfoBarUI(factory, infoBarModel, out infoBarUI)) { uint? infoBarCookie = null; InfoBarEvents eventSink = new InfoBarEvents(onEnableClicked, onEnableAndIgnoreClicked, () => { onClose(); if (infoBarCookie.HasValue) { infoBarUI.Unadvise(infoBarCookie.Value); } }); uint cookie; infoBarUI.Advise(eventSink, out cookie); infoBarCookie = cookie; IVsInfoBarHost host = (IVsInfoBarHost)unknown; host.AddInfoBar(infoBarUI); } } }
private void CreateInfoBar(string name, Action onEnableClicked, Action onEnableAndIgnoreClicked, Action onClose, IVsWindowFrame frame, IVsInfoBarUIFactory factory) { object unknown; if (frame.GetProperty((int)__VSFPROPID7.VSFPROPID_InfoBarHost, out unknown) == VSConstants.S_OK) { var textSpans = new List<IVsInfoBarTextSpan>() { new InfoBarTextSpan(string.Format(ServicesVSResources.CodefixOrRefactoringEncounteredError, name)), }; var infoBarModel = new InfoBarModel( textSpans, new IVsInfoBarActionItem[] { s_enableItem, s_enableAndIgnoreItem }, KnownMonikers.StatusInformation, isCloseButtonVisible: true); IVsInfoBarUIElement infoBarUI; if (TryCreateInfoBarUI(factory, infoBarModel, out infoBarUI)) { uint? infoBarCookie = null; InfoBarEvents eventSink = new InfoBarEvents(onEnableClicked, onEnableAndIgnoreClicked, () => { onClose(); if (infoBarCookie.HasValue) { infoBarUI.Unadvise(infoBarCookie.Value); } }); uint cookie; infoBarUI.Advise(eventSink, out cookie); infoBarCookie = cookie; IVsInfoBarHost host = (IVsInfoBarHost)unknown; host.AddInfoBar(infoBarUI); } } }
/// <summary> /// Displays an <see cref="InfoBar"/> in VS. /// </summary> /// <param name="infoBar">The InfoBar object to display.</param> /// <param name="serviceProvider">VS async service provider.</param> /// <returns>A task that completes once the infobar is displayed.</returns> public static async Task ShowInfoBarAsync(InfoBar infoBar, IAsyncServiceProvider serviceProvider) { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); IVsInfoBarUIFactory infoBarUIFactory = await serviceProvider.GetServiceAsync(typeof(SVsInfoBarUIFactory)) as IVsInfoBarUIFactory; Assumes.Present(infoBarUIFactory); var uiElement = infoBarUIFactory.CreateInfoBar(infoBar); IVsShell shell = await ServiceProvider.GetGlobalServiceAsync(typeof(SVsShell)) as IVsShell; shell.GetProperty((int)__VSSPROPID7.VSSPROPID_MainWindowInfoBarHost, out var host); if (host is IVsInfoBarHost infoBarHost) { var eventSink = new InfoBarEvents(infoBar, uiElement); uiElement.Advise(eventSink, out var cookie); eventSink.Cookie = cookie; infoBarHost.AddInfoBar(uiElement); } }
private void CreateInfoBar(IVsInfoBarHost infoBarHost, string message, InfoBarUI[] items) { if ( !( _serviceProvider.GetService(typeof(SVsInfoBarUIFactory)) is IVsInfoBarUIFactory factory ) ) { // no info bar factory, don't do anything return; } var textSpans = new List <IVsInfoBarTextSpan>() { new InfoBarTextSpan(message) }; // create action item list var actionItems = new List <IVsInfoBarActionItem>(); foreach (var item in items) { switch (item.Kind) { case InfoBarUI.UIKind.Button: actionItems.Add(new InfoBarButton(item.Title)); break; case InfoBarUI.UIKind.HyperLink: actionItems.Add(new InfoBarHyperlink(item.Title)); break; case InfoBarUI.UIKind.Close: break; default: throw ExceptionUtilities.UnexpectedValue(item.Kind); } } var infoBarModel = new InfoBarModel( textSpans, actionItems.ToArray(), KnownMonikers.StatusInformation, isCloseButtonVisible: true ); if (!TryCreateInfoBarUI(factory, infoBarModel, out var infoBarUI)) { return; } uint?infoBarCookie = null; var eventSink = new InfoBarEvents( items, () => { // run given onClose action if there is one. items.FirstOrDefault(i => i.Kind == InfoBarUI.UIKind.Close).Action?.Invoke(); if (infoBarCookie.HasValue) { infoBarUI.Unadvise(infoBarCookie.Value); } } ); infoBarUI.Advise(eventSink, out var cookie); infoBarCookie = cookie; infoBarHost.AddInfoBar(infoBarUI); }
private void CreateInfoBar(IVsInfoBarUIFactory factory, IVsWindowFrame frame, string title, Action onClose, Action onEnableClicked = null, Action onEnableAndIgnoreClicked = null) { object unknown; if (frame.GetProperty((int)__VSFPROPID7.VSFPROPID_InfoBarHost, out unknown) == VSConstants.S_OK) { var textSpans = new List<IVsInfoBarTextSpan>() { new InfoBarTextSpan(title) }; // create action item list var actionItems = new List<IVsInfoBarActionItem>(); if (onEnableClicked != null) { actionItems.Add(s_enableItem); } if (onEnableAndIgnoreClicked != null) { actionItems.Add(s_enableAndIgnoreItem); } var infoBarModel = new InfoBarModel( textSpans, actionItems.ToArray(), KnownMonikers.StatusInformation, isCloseButtonVisible: true); IVsInfoBarUIElement infoBarUI; if (TryCreateInfoBarUI(factory, infoBarModel, out infoBarUI)) { uint? infoBarCookie = null; InfoBarEvents eventSink = new InfoBarEvents(() => { onClose(); if (infoBarCookie.HasValue) { infoBarUI.Unadvise(infoBarCookie.Value); } }, onEnableClicked, onEnableAndIgnoreClicked); uint cookie; infoBarUI.Advise(eventSink, out cookie); infoBarCookie = cookie; IVsInfoBarHost host = (IVsInfoBarHost)unknown; host.AddInfoBar(infoBarUI); } } }
private void CreateInfoBar(IVsInfoBarUIFactory factory, IVsWindowFrame frame, string message, ErrorReportingUI[] items) { object unknown; if (ErrorHandler.Failed(frame.GetProperty((int)__VSFPROPID7.VSFPROPID_InfoBarHost, out unknown))) { return; } var textSpans = new List <IVsInfoBarTextSpan>() { new InfoBarTextSpan(message) }; // create action item list var actionItems = new List <IVsInfoBarActionItem>(); foreach (var item in items) { switch (item.Kind) { case ErrorReportingUI.UIKind.Button: actionItems.Add(new InfoBarButton(item.Title)); break; case ErrorReportingUI.UIKind.HyperLink: actionItems.Add(new InfoBarHyperlink(item.Title)); break; case ErrorReportingUI.UIKind.Close: break; default: throw ExceptionUtilities.UnexpectedValue(item.Kind); } } var infoBarModel = new InfoBarModel( textSpans, actionItems.ToArray(), KnownMonikers.StatusInformation, isCloseButtonVisible: true); IVsInfoBarUIElement infoBarUI; if (!TryCreateInfoBarUI(factory, infoBarModel, out infoBarUI)) { return; } uint?infoBarCookie = null; var eventSink = new InfoBarEvents(items, () => { // run given onClose action if there is one. items.FirstOrDefault(i => i.Kind == ErrorReportingUI.UIKind.Close).Action?.Invoke(); if (infoBarCookie.HasValue) { infoBarUI.Unadvise(infoBarCookie.Value); } }); uint cookie; infoBarUI.Advise(eventSink, out cookie); infoBarCookie = cookie; var host = (IVsInfoBarHost)unknown; host.AddInfoBar(infoBarUI); }
private void CreateInfoBar(IVsInfoBarUIFactory factory, IVsWindowFrame frame, string message, ErrorReportingUI[] items) { object unknown; if (ErrorHandler.Failed(frame.GetProperty((int)__VSFPROPID7.VSFPROPID_InfoBarHost, out unknown))) { return; } var textSpans = new List<IVsInfoBarTextSpan>() { new InfoBarTextSpan(message) }; // create action item list var actionItems = new List<IVsInfoBarActionItem>(); foreach (var item in items) { switch (item.Kind) { case ErrorReportingUI.UIKind.Button: actionItems.Add(new InfoBarButton(item.Title)); break; case ErrorReportingUI.UIKind.HyperLink: actionItems.Add(new InfoBarHyperlink(item.Title)); break; case ErrorReportingUI.UIKind.Close: break; default: throw ExceptionUtilities.UnexpectedValue(item.Kind); } } var infoBarModel = new InfoBarModel( textSpans, actionItems.ToArray(), KnownMonikers.StatusInformation, isCloseButtonVisible: true); IVsInfoBarUIElement infoBarUI; if (!TryCreateInfoBarUI(factory, infoBarModel, out infoBarUI)) { return; } uint? infoBarCookie = null; var eventSink = new InfoBarEvents(items, () => { // run given onClose action if there is one. items.FirstOrDefault(i => i.Kind == ErrorReportingUI.UIKind.Close).Action?.Invoke(); if (infoBarCookie.HasValue) { infoBarUI.Unadvise(infoBarCookie.Value); } }); uint cookie; infoBarUI.Advise(eventSink, out cookie); infoBarCookie = cookie; var host = (IVsInfoBarHost)unknown; host.AddInfoBar(infoBarUI); }