private IVsWindowFrame CreateDocWindow( Project project, string documentName, IVsHierarchy hier, uint itemId) { uint windowFlags = (uint)_VSRDTFLAGS.RDT_DontAddToMRU | (uint)_VSRDTFLAGS.RDT_DontSaveAs; var solutionManager = ServiceLocator.GetInstance <ISolutionManager>(); var nugetProject = solutionManager.GetNuGetProject(project.Name); var uiContextFactory = ServiceLocator.GetInstance <INuGetUIContextFactory>(); var uiContext = uiContextFactory.Create(this, new [] { nugetProject }); var uiFactory = ServiceLocator.GetInstance <INuGetUIFactory>(); var uiController = uiFactory.Create(uiContext, _uiProjectContext); var model = new PackageManagerModel(uiController, uiContext); var vsWindowSearchHostfactory = ServiceLocator.GetGlobalService <SVsWindowSearchHostFactory, IVsWindowSearchHostFactory>(); var control = new PackageManagerControl(model, Settings, vsWindowSearchHostfactory); var windowPane = new PackageManagerWindowPane(control); var ppunkDocView = Marshal.GetIUnknownForObject(windowPane); var ppunkDocData = Marshal.GetIUnknownForObject(model); var guidEditorType = Guid.Empty; var guidCommandUI = Guid.Empty; var caption = String.Format( CultureInfo.CurrentCulture, Resx.Label_NuGetWindowCaption, project.Name // **** myDoc.Target.Name); ); IVsWindowFrame windowFrame; IVsUIShell uiShell = (IVsUIShell)GetService(typeof(SVsUIShell)); int hr = uiShell.CreateDocumentWindow( windowFlags, documentName, (IVsUIHierarchy)hier, itemId, ppunkDocView, ppunkDocData, ref guidEditorType, null, ref guidCommandUI, null, caption, string.Empty, null, out windowFrame); ErrorHandler.ThrowOnFailure(hr); return(windowFrame); }
private async Task<IVsWindowFrame> CreateDocWindowForSolutionAsync() { IVsWindowFrame windowFrame = null; IVsSolution solution = ServiceLocator.GetInstance<IVsSolution>(); IVsUIShell uiShell = (IVsUIShell)GetService(typeof(SVsUIShell)); uint windowFlags = (uint)_VSRDTFLAGS.RDT_DontAddToMRU | (uint)_VSRDTFLAGS.RDT_DontSaveAs; var solutionManager = ServiceLocator.GetInstance<ISolutionManager>(); if (!solutionManager.IsSolutionAvailable) { throw new InvalidOperationException(Strings.SolutionIsNotSaved); } var projects = solutionManager.GetNuGetProjects(); if (!projects.Any()) { // NOTE: The menu 'Manage NuGet Packages For Solution' will be disabled in this case. // But, it is possible, that, before NuGetPackage is loaded in VS, the menu is enabled and used. // For once, this message will be shown. Once the package is loaded, the menu will get disabled as appropriate MessageHelper.ShowWarningMessage(Resources.NoSupportedProjectsInSolution, Resources.ErrorDialogBoxTitle); return null; } // load packages.config. This makes sure that an exception will get thrown if there // are problems with packages.config, such as duplicate packages. When an exception // is thrown, an error dialog will pop up and this doc window will not be created. foreach (var project in projects) { await project.GetInstalledPackagesAsync(CancellationToken.None); } var uiContextFactory = ServiceLocator.GetInstance<INuGetUIContextFactory>(); var uiContext = uiContextFactory.Create(this, projects); var uiFactory = ServiceLocator.GetInstance<INuGetUIFactory>(); var uiController = uiFactory.Create(uiContext, _uiProjectContext); var solutionName = (string)_dte.Solution.Properties.Item("Name").Value; var model = new PackageManagerModel(uiController, uiContext, isSolution: true, editorFactoryGuid: GuidList.guidNuGetEditorType); model.SolutionName = solutionName; var vsWindowSearchHostfactory = ServiceLocator.GetGlobalService<SVsWindowSearchHostFactory, IVsWindowSearchHostFactory>(); var vsShell = ServiceLocator.GetGlobalService<SVsShell, IVsShell4>(); var control = new PackageManagerControl(model, Settings, vsWindowSearchHostfactory, vsShell, _outputConsoleLogger); var windowPane = new PackageManagerWindowPane(control); var guidEditorType = GuidList.guidNuGetEditorType; var guidCommandUI = Guid.Empty; var caption = Resx.Label_SolutionNuGetWindowCaption; var documentName = _dte.Solution.FullName; IntPtr ppunkDocView = IntPtr.Zero; IntPtr ppunkDocData = IntPtr.Zero; int hr = 0; try { ppunkDocView = Marshal.GetIUnknownForObject(windowPane); ppunkDocData = Marshal.GetIUnknownForObject(model); hr = uiShell.CreateDocumentWindow( windowFlags, documentName, (IVsUIHierarchy)solution, (uint)VSConstants.VSITEMID.Root, ppunkDocView, ppunkDocData, ref guidEditorType, null, ref guidCommandUI, null, caption, string.Empty, null, out windowFrame); } finally { if (ppunkDocView != IntPtr.Zero) { Marshal.Release(ppunkDocData); } if (ppunkDocData != IntPtr.Zero) { Marshal.Release(ppunkDocView); } } ErrorHandler.ThrowOnFailure(hr); return windowFrame; }
private async Task<IVsWindowFrame> CreateDocWindowAsync( Project project, string documentName, IVsHierarchy hier, uint itemId) { uint windowFlags = (uint)_VSRDTFLAGS.RDT_DontAddToMRU | (uint)_VSRDTFLAGS.RDT_DontSaveAs; var solutionManager = ServiceLocator.GetInstance<ISolutionManager>(); if (!solutionManager.IsSolutionAvailable) { throw new InvalidOperationException(Strings.SolutionIsNotSaved); } var nugetProject = solutionManager.GetNuGetProject(EnvDTEProjectUtility.GetCustomUniqueName(project)); // If we failed to generate a cache entry in the solution manager something went wrong. if (nugetProject == null) { throw new InvalidOperationException( string.Format(Resources.ProjectHasAnInvalidNuGetConfiguration, project.Name)); } // load packages.config. This makes sure that an exception will get thrown if there // are problems with packages.config, such as duplicate packages. When an exception // is thrown, an error dialog will pop up and this doc window will not be created. var installedPackages = await nugetProject.GetInstalledPackagesAsync(CancellationToken.None); var uiContextFactory = ServiceLocator.GetInstance<INuGetUIContextFactory>(); var uiContext = uiContextFactory.Create(this, new[] { nugetProject }); var uiFactory = ServiceLocator.GetInstance<INuGetUIFactory>(); var uiController = uiFactory.Create(uiContext, _uiProjectContext); var model = new PackageManagerModel(uiController, uiContext, isSolution: false, editorFactoryGuid: GuidList.guidNuGetEditorType); var vsWindowSearchHostfactory = ServiceLocator.GetGlobalService<SVsWindowSearchHostFactory, IVsWindowSearchHostFactory>(); var vsShell = ServiceLocator.GetGlobalService<SVsShell, IVsShell4>(); var control = new PackageManagerControl(model, Settings, vsWindowSearchHostfactory, vsShell, _outputConsoleLogger); var windowPane = new PackageManagerWindowPane(control); var guidEditorType = GuidList.guidNuGetEditorType; var guidCommandUI = Guid.Empty; var caption = String.Format( CultureInfo.CurrentCulture, Resx.Label_NuGetWindowCaption, project.Name); IVsWindowFrame windowFrame; IVsUIShell uiShell = (IVsUIShell)GetService(typeof(SVsUIShell)); IntPtr ppunkDocView = IntPtr.Zero; IntPtr ppunkDocData = IntPtr.Zero; int hr = 0; try { ppunkDocView = Marshal.GetIUnknownForObject(windowPane); ppunkDocData = Marshal.GetIUnknownForObject(model); hr = uiShell.CreateDocumentWindow( windowFlags, documentName, (IVsUIHierarchy)hier, itemId, ppunkDocView, ppunkDocData, ref guidEditorType, null, ref guidCommandUI, null, caption, string.Empty, null, out windowFrame); } finally { if (ppunkDocView != IntPtr.Zero) { Marshal.Release(ppunkDocData); } if (ppunkDocData != IntPtr.Zero) { Marshal.Release(ppunkDocView); } } ErrorHandler.ThrowOnFailure(hr); return windowFrame; }
private async Task <IVsWindowFrame> CreateDocWindowForSolutionAsync() { ThreadHelper.ThrowIfNotOnUIThread(); IVsWindowFrame windowFrame = null; var solution = await this.GetServiceAsync <IVsSolution>(); var uiShell = await this.GetServiceAsync <SVsUIShell, IVsUIShell>(); var windowFlags = (uint)_VSRDTFLAGS.RDT_DontAddToMRU | (uint)_VSRDTFLAGS.RDT_DontSaveAs; // when VSSolutionManager is already initialized, then use the existing APIs to check pre-conditions. if (!await SolutionManager.Value.IsSolutionAvailableAsync()) { throw new InvalidOperationException(Resources.SolutionIsNotSaved); } var projects = (await SolutionManager.Value.GetNuGetProjectsAsync()).ToArray(); if (projects.Length == 0) { MessageHelper.ShowWarningMessage(Resources.NoSupportedProjectsInSolution, Resources.ErrorDialogBoxTitle); return(null); } // pass empty array of NuGetProject var uiController = UIFactory.Value.Create(projects); var solutionName = (string)_dte.Solution.Properties.Item("Name").Value; var model = new PackageManagerModel( uiController, isSolution: true, editorFactoryGuid: GuidList.guidNuGetEditorType) { SolutionName = solutionName }; var vsWindowSearchHostfactory = await GetServiceAsync(typeof(SVsWindowSearchHostFactory)) as IVsWindowSearchHostFactory; var vsShell = await GetServiceAsync(typeof(SVsShell)) as IVsShell4; var control = new PackageManagerControl(model, Settings.Value, vsWindowSearchHostfactory, vsShell, OutputConsoleLogger.Value); var windowPane = new PackageManagerWindowPane(control); var guidEditorType = GuidList.guidNuGetEditorType; var guidCommandUI = Guid.Empty; var caption = Resx.Label_SolutionNuGetWindowCaption; var documentName = await SolutionManager.Value.GetSolutionFilePathAsync(); var ppunkDocView = IntPtr.Zero; var ppunkDocData = IntPtr.Zero; var hr = 0; try { ppunkDocView = Marshal.GetIUnknownForObject(windowPane); ppunkDocData = Marshal.GetIUnknownForObject(model); hr = uiShell.CreateDocumentWindow( windowFlags, documentName, (IVsUIHierarchy)solution, (uint)VSConstants.VSITEMID.Root, ppunkDocView, ppunkDocData, ref guidEditorType, null, ref guidCommandUI, null, caption, string.Empty, null, out windowFrame); if (windowFrame != null) { WindowFrameHelper.AddF1HelpKeyword(windowFrame, keywordValue: F1KeywordValuePmUI); } } finally { if (ppunkDocView != IntPtr.Zero) { Marshal.Release(ppunkDocData); } if (ppunkDocData != IntPtr.Zero) { Marshal.Release(ppunkDocView); } } ErrorHandler.ThrowOnFailure(hr); return(windowFrame); }
private async Task <IVsWindowFrame> CreateDocWindowAsync( Project project, string documentName, IVsHierarchy hier, uint itemId) { ThreadHelper.ThrowIfNotOnUIThread(); var windowFlags = (uint)_VSRDTFLAGS.RDT_DontAddToMRU | (uint)_VSRDTFLAGS.RDT_DontSaveAs; if (!await SolutionManager.Value.IsSolutionAvailableAsync()) { throw new InvalidOperationException(Resources.SolutionIsNotSaved); } var uniqueName = EnvDTEProjectInfoUtility.GetUniqueName(project); var nugetProject = await SolutionManager.Value.GetNuGetProjectAsync(uniqueName); // If we failed to generate a cache entry in the solution manager something went wrong. if (nugetProject == null) { throw new InvalidOperationException( string.Format(Resources.ProjectHasAnInvalidNuGetConfiguration, project.Name)); } // load packages.config. This makes sure that an exception will get thrown if there // are problems with packages.config, such as duplicate packages. When an exception // is thrown, an error dialog will pop up and this doc window will not be created. var installedPackages = await nugetProject.GetInstalledPackagesAsync(CancellationToken.None); var uiController = UIFactory.Value.Create(nugetProject); var model = new PackageManagerModel( uiController, isSolution: false, editorFactoryGuid: GuidList.guidNuGetEditorType); var vsWindowSearchHostfactory = await GetServiceAsync(typeof(SVsWindowSearchHostFactory)) as IVsWindowSearchHostFactory; var vsShell = await GetServiceAsync(typeof(SVsShell)) as IVsShell4; var control = new PackageManagerControl(model, Settings.Value, vsWindowSearchHostfactory, vsShell, OutputConsoleLogger.Value); var windowPane = new PackageManagerWindowPane(control); var guidEditorType = GuidList.guidNuGetEditorType; var guidCommandUI = Guid.Empty; var caption = string.Format( CultureInfo.CurrentCulture, Resx.Label_NuGetWindowCaption, project.Name); IVsWindowFrame windowFrame; var uiShell = await GetServiceAsync(typeof(SVsUIShell)) as IVsUIShell; var ppunkDocView = IntPtr.Zero; var ppunkDocData = IntPtr.Zero; var hr = 0; try { ppunkDocView = Marshal.GetIUnknownForObject(windowPane); ppunkDocData = Marshal.GetIUnknownForObject(model); hr = uiShell.CreateDocumentWindow( windowFlags, documentName, (IVsUIHierarchy)hier, itemId, ppunkDocView, ppunkDocData, ref guidEditorType, null, ref guidCommandUI, null, caption, string.Empty, null, out windowFrame); if (windowFrame != null) { WindowFrameHelper.AddF1HelpKeyword(windowFrame, keywordValue: F1KeywordValuePmUI); } } finally { if (ppunkDocView != IntPtr.Zero) { Marshal.Release(ppunkDocData); } if (ppunkDocData != IntPtr.Zero) { Marshal.Release(ppunkDocView); } } ErrorHandler.ThrowOnFailure(hr); return(windowFrame); }
private async Task <IVsWindowFrame> CreateDocWindowForSolutionAsync() { ThreadHelper.ThrowIfNotOnUIThread(); IVsWindowFrame windowFrame = null; var solution = await this.GetServiceAsync <IVsSolution>(); var uiShell = await this.GetServiceAsync <SVsUIShell, IVsUIShell>(); var windowFlags = (uint)_VSRDTFLAGS.RDT_DontAddToMRU | (uint)_VSRDTFLAGS.RDT_DontSaveAs; if (await SolutionManager.SolutionHasDeferredProjectsAsync() && !SolutionManager.IsInitialized) { // when VSSolutionManager is not yet initialized, then do a quick pre-condition checks without initializing it fully // which might take some time so we'll initialize it after showing the manager ui window. var preCheckResult = await SolutionManager.CheckSolutionUIPreConditionsAsync(); // key represent if solution is available or not. if (!preCheckResult.Key) { throw new InvalidOperationException(Resources.SolutionIsNotSaved); } // value represent if there is any project in the solution which NuGet supports. if (!preCheckResult.Value) { // NOTE: The menu 'Manage NuGet Packages For Solution' will be disabled in this case. // But, it is possible, that, before NuGetPackage is loaded in VS, the menu is enabled and used. // For once, this message will be shown. Once the package is loaded, the menu will get disabled as appropriate MessageHelper.ShowWarningMessage(Resources.NoSupportedProjectsInSolution, Resources.ErrorDialogBoxTitle); return(null); } } else { // when VSSolutionManager is already initialized, then use the existing APIs to check pre-conditions. if (!await SolutionManager.IsSolutionAvailableAsync()) { throw new InvalidOperationException(Resources.SolutionIsNotSaved); } var projects = await SolutionManager.GetNuGetProjectsAsync(); if (!projects.Any()) { MessageHelper.ShowWarningMessage(Resources.NoSupportedProjectsInSolution, Resources.ErrorDialogBoxTitle); return(null); } } // pass empty array of NuGetProject var uiController = UIFactory.Create(new NuGetProject[0]); var solutionName = (string)_dte.Solution.Properties.Item("Name").Value; var model = new PackageManagerModel( uiController, isSolution: true, editorFactoryGuid: GuidList.guidNuGetEditorType) { SolutionName = solutionName }; var vsWindowSearchHostfactory = await GetServiceAsync(typeof(SVsWindowSearchHostFactory)) as IVsWindowSearchHostFactory; var vsShell = await GetServiceAsync(typeof(SVsShell)) as IVsShell4; var control = new PackageManagerControl(model, Settings.Value, vsWindowSearchHostfactory, vsShell, OutputConsoleLogger); var windowPane = new PackageManagerWindowPane(control); var guidEditorType = GuidList.guidNuGetEditorType; var guidCommandUI = Guid.Empty; var caption = Resx.Label_SolutionNuGetWindowCaption; var documentName = _dte.Solution.FullName; var ppunkDocView = IntPtr.Zero; var ppunkDocData = IntPtr.Zero; var hr = 0; try { ppunkDocView = Marshal.GetIUnknownForObject(windowPane); ppunkDocData = Marshal.GetIUnknownForObject(model); hr = uiShell.CreateDocumentWindow( windowFlags, documentName, (IVsUIHierarchy)solution, (uint)VSConstants.VSITEMID.Root, ppunkDocView, ppunkDocData, ref guidEditorType, null, ref guidCommandUI, null, caption, string.Empty, null, out windowFrame); } finally { if (ppunkDocView != IntPtr.Zero) { Marshal.Release(ppunkDocData); } if (ppunkDocData != IntPtr.Zero) { Marshal.Release(ppunkDocView); } } ErrorHandler.ThrowOnFailure(hr); return(windowFrame); }
private async Task <IVsWindowFrame> CreateDocWindowForSolutionAsync() { await NuGetUIThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); IVsWindowFrame windowFrame = null; var solution = await this.GetServiceAsync <IVsSolution>(); var uiShell = await this.GetServiceAsync <SVsUIShell, IVsUIShell>(); var windowFlags = (uint)_VSRDTFLAGS.RDT_DontAddToMRU | (uint)_VSRDTFLAGS.RDT_DontSaveAs; // when VSSolutionManager is already initialized, then use the existing APIs to check pre-conditions. if (!await SolutionManager.Value.IsSolutionAvailableAsync()) { throw new InvalidOperationException(Resources.SolutionIsNotSaved); } IServiceBroker serviceBroker = await ServiceBrokerProvider.Value.GetAsync(); IReadOnlyCollection <IProjectContextInfo> projectContexts; using (INuGetProjectManagerService projectManagerService = await serviceBroker.GetProxyAsync <INuGetProjectManagerService>( NuGetServices.ProjectManagerService)) { Assumes.NotNull(projectManagerService); projectContexts = await projectManagerService.GetProjectsAsync(CancellationToken.None); if (projectContexts.Count == 0) { MessageHelper.ShowWarningMessage(Resources.NoSupportedProjectsInSolution, Resources.ErrorDialogBoxTitle); return(null); } } INuGetUI uiController = await UIFactory.Value.CreateAsync(serviceBroker, projectContexts.ToArray()); var solutionName = (string)_dte.Solution.Properties.Item("Name").Value; // This model takes ownership of --- and Dispose() responsibility for --- the INuGetUI instance. var model = new PackageManagerModel( uiController, isSolution: true, editorFactoryGuid: GuidList.guidNuGetEditorType) { SolutionName = solutionName }; PackageManagerControl control = await PackageManagerControl.CreateAsync(model, OutputConsoleLogger.Value); var windowPane = new PackageManagerWindowPane(control); var guidEditorType = GuidList.guidNuGetEditorType; var guidCommandUI = Guid.Empty; var caption = Resx.Label_SolutionNuGetWindowCaption; var documentName = await SolutionManager.Value.GetSolutionFilePathAsync(); var ppunkDocView = IntPtr.Zero; var ppunkDocData = IntPtr.Zero; var hr = 0; try { ppunkDocView = Marshal.GetIUnknownForObject(windowPane); ppunkDocData = Marshal.GetIUnknownForObject(model); hr = uiShell.CreateDocumentWindow( windowFlags, documentName, (IVsUIHierarchy)solution, (uint)VSConstants.VSITEMID.Root, ppunkDocView, ppunkDocData, ref guidEditorType, null, ref guidCommandUI, null, caption, string.Empty, null, out windowFrame); if (windowFrame != null) { WindowFrameHelper.AddF1HelpKeyword(windowFrame, keywordValue: F1KeywordValuePmUI); WindowFrameHelper.DisableWindowAutoReopen(windowFrame); } } finally { if (ppunkDocView != IntPtr.Zero) { Marshal.Release(ppunkDocData); } if (ppunkDocData != IntPtr.Zero) { Marshal.Release(ppunkDocView); } } ErrorHandler.ThrowOnFailure(hr); return(windowFrame); }
private IVsWindowFrame CreateDocWindowForSolution() { // TODO: Need to wait until solution is loaded IVsWindowFrame windowFrame = null; IVsSolution solution = ServiceLocator.GetInstance <IVsSolution>(); IVsUIShell uiShell = (IVsUIShell)GetService(typeof(SVsUIShell)); uint windowFlags = (uint)_VSRDTFLAGS.RDT_DontAddToMRU | (uint)_VSRDTFLAGS.RDT_DontSaveAs; var solutionManager = ServiceLocator.GetInstance <ISolutionManager>(); var projects = solutionManager.GetNuGetProjects(); if (!projects.Any()) { // there are no supported projects. // TODO: MessageHelper.ShowWarningMessage( // Resx.NoSupportedProjectsInSolution, Resources.ErrorDialogBoxTitle); return(null); } var uiContextFactory = ServiceLocator.GetInstance <INuGetUIContextFactory>(); var uiContext = uiContextFactory.Create(this, projects); var uiFactory = ServiceLocator.GetInstance <INuGetUIFactory>(); var uiController = uiFactory.Create(uiContext, _uiProjectContext); var solutionName = (string)_dte.Solution.Properties.Item("Name").Value; var model = new PackageManagerModel(uiController, uiContext); model.SolutionName = solutionName; var vsWindowSearchHostfactory = ServiceLocator.GetGlobalService <SVsWindowSearchHostFactory, IVsWindowSearchHostFactory>(); var control = new PackageManagerControl(model, Settings, vsWindowSearchHostfactory); var windowPane = new PackageManagerWindowPane(control); var ppunkDocView = Marshal.GetIUnknownForObject(windowPane); var ppunkDocData = Marshal.GetIUnknownForObject(model); var guidEditorType = Guid.Empty; var guidCommandUI = Guid.Empty; var caption = String.Format( CultureInfo.CurrentCulture, Resx.Label_NuGetWindowCaption, solutionName); var documentName = _dte.Solution.FullName; int hr = uiShell.CreateDocumentWindow( windowFlags, documentName, (IVsUIHierarchy)solution, (uint)VSConstants.VSITEMID.Root, ppunkDocView, ppunkDocData, ref guidEditorType, null, ref guidCommandUI, null, caption, string.Empty, null, out windowFrame); ErrorHandler.ThrowOnFailure(hr); return(windowFrame); }