| | |
| | | /****************************************************************************
|
| | | **
|
| | | ** Copyright (C) 2016 The Qt Company Ltd.
|
| | | ** Copyright (C) 2022 The Qt Company Ltd.
|
| | | ** Contact: https://www.qt.io/licensing/
|
| | | **
|
| | | ** This file is part of the Qt VS Tools.
|
| | |
| | | **
|
| | | ****************************************************************************/
|
| | |
|
| | | using EnvDTE;
|
| | | using Microsoft.VisualStudio;
|
| | | using Microsoft.VisualStudio.Shell;
|
| | | using Microsoft.VisualStudio.Shell.Interop;
|
| | | using Microsoft.VisualStudio.VCProjectEngine;
|
| | | using QtVsTools.Core;
|
| | | using QtVsTools.VisualStudio;
|
| | | using System;
|
| | | using System.ComponentModel.Design;
|
| | | using System.Windows.Forms;
|
| | | using Microsoft.VisualStudio.Shell;
|
| | | using EnvDTE;
|
| | |
|
| | | namespace QtVsTools
|
| | | {
|
| | | using Core;
|
| | | using QtMsBuild;
|
| | | using VisualStudio;
|
| | |
|
| | | /// <summary>
|
| | | /// Command handler
|
| | |
| | | /// <summary>
|
| | | /// Command menu group (command set GUID).
|
| | | /// </summary>
|
| | | public static readonly Guid ProjectContextMenuGuid = new Guid("5732faa9-6074-4e07-b035-2816e809f50e");
|
| | | private static readonly Guid ProjectContextMenuGuid = new Guid("5732faa9-6074-4e07-b035-2816e809f50e");
|
| | |
|
| | | /// <summary>
|
| | | /// Gets the instance of the command.
|
| | | /// </summary>
|
| | | public static QtProjectContextMenu Instance
|
| | | private static QtProjectContextMenu Instance
|
| | | {
|
| | | get;
|
| | | private set;
|
| | | set;
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// Initializes the singleton instance of the command.
|
| | | /// </summary>
|
| | | /// <param name="package">Owner package, not null.</param>
|
| | | public static void Initialize(Package package)
|
| | | public static void Initialize()
|
| | | {
|
| | | Instance = new QtProjectContextMenu(package);
|
| | | Instance = new QtProjectContextMenu();
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | |
| | | ImportPriFileProjectId = 0x0114,
|
| | | ExportPriFileProjectId = 0x0115,
|
| | | ExportProFileProjectId = 0x0116,
|
| | | CreateNewTsFileProjectId = 0x0117,
|
| | | lUpdateOnProjectId = 0x0118,
|
| | | lReleaseOnProjectId = 0x0119,
|
| | | ProjectConvertToQtMsBuild = 0x0130,
|
| | | ProjectRefreshIntelliSense = 0x0131,
|
| | | ConvertToQtProjectId = 0x0120,
|
| | | ConvertToQmakeProjectId = 0x0121,
|
| | | QtProjectSettingsProjectId = 0x0122,
|
| | | ChangeProjectQtVersionProjectId = 0x0123,
|
| | | ProjectAddNewQtClassProjectId = 0x200
|
| | | ChangeProjectQtVersionProjectId = 0x0123
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// VS Package that provides this command, not null.
|
| | | /// </summary>
|
| | | private readonly Package m_package;
|
| | |
|
| | | /// <summary>
|
| | | /// Initializes a new instance of the <see cref="QtMainMenu"/> class.
|
| | | /// Adds our command handlers for menu (commands must exist in the command table file)
|
| | | /// </summary>
|
| | | /// <param name="package">Owner package, not null.</param>
|
| | | private QtProjectContextMenu(Package package)
|
| | | private QtProjectContextMenu()
|
| | | {
|
| | | if (package == null)
|
| | | throw new ArgumentNullException("package");
|
| | |
|
| | | m_package = package;
|
| | |
|
| | | var commandService = VsServiceProvider
|
| | | .GetService<IMenuCommandService, OleMenuCommandService>();
|
| | | if (commandService == null)
|
| | |
| | |
|
| | | private void execHandler(object sender, EventArgs e)
|
| | | {
|
| | | ThreadHelper.ThrowIfNotOnUIThread();
|
| | |
|
| | | var command = sender as OleMenuCommand;
|
| | | if (command == null)
|
| | | return;
|
| | |
| | | case CommandId.ExportProFileProjectId:
|
| | | ExtLoader.ExportProFile();
|
| | | break;
|
| | | case CommandId.CreateNewTsFileProjectId:
|
| | | Translation.CreateNewTranslationFile(HelperFunctions.GetSelectedQtProject(QtVsToolsPackage
|
| | | .Instance.Dte));
|
| | | break;
|
| | | case CommandId.lUpdateOnProjectId:
|
| | | Translation.RunlUpdate(HelperFunctions.GetSelectedQtProject(QtVsToolsPackage.Instance.Dte));
|
| | | break;
|
| | | case CommandId.lReleaseOnProjectId:
|
| | | Translation.RunlRelease(HelperFunctions.GetSelectedQtProject(QtVsToolsPackage.Instance.Dte));
|
| | | break;
|
| | | case CommandId.ConvertToQtProjectId:
|
| | | case CommandId.ConvertToQmakeProjectId: {
|
| | | var caption = SR.GetString("ConvertTitle");
|
| | | var text = SR.GetString("ConvertConfirmation");
|
| | | if (MessageBox.Show(text, caption, MessageBoxButtons.YesNo) == DialogResult.Yes) {
|
| | | HelperFunctions.ToggleProjectKind(HelperFunctions.GetSelectedProject(QtVsToolsPackage
|
| | | .Instance.Dte));
|
| | | }
|
| | | }
|
| | | break;
|
| | | case CommandId.QtProjectSettingsProjectId: {
|
| | | var pro = HelperFunctions.GetSelectedQtProject(QtVsToolsPackage.Instance.Dte);
|
| | |
| | | if (projectVersion >= Resources.qtMinFormatVersion_Settings) {
|
| | | QtVsToolsPackage.Instance.Dte.ExecuteCommand("Project.Properties");
|
| | | } else if (pro != null) {
|
| | | using (var formProjectQtSettings = new FormProjectQtSettings()) {
|
| | | formProjectQtSettings.SetProject(pro);
|
| | | formProjectQtSettings.StartPosition = FormStartPosition.CenterParent;
|
| | | var ww = new MainWinWrapper(QtVsToolsPackage.Instance.Dte);
|
| | | formProjectQtSettings.ShowDialog(ww);
|
| | | }
|
| | | Legacy.QtMenu.ShowFormProjectQtSettings(pro);
|
| | | } else {
|
| | | MessageBox.Show(SR.GetString("NoProjectOpened"));
|
| | | }
|
| | | }
|
| | | break;
|
| | | case CommandId.ChangeProjectQtVersionProjectId: {
|
| | | var pro = HelperFunctions.GetSelectedQtProject(QtVsToolsPackage.Instance.Dte);
|
| | | if (HelperFunctions.IsQMakeProject(pro)) {
|
| | | using (var formChangeQtVersion = new FormChangeQtVersion()) {
|
| | | formChangeQtVersion.UpdateContent(ChangeFor.Project);
|
| | | var ww = new MainWinWrapper(QtVsToolsPackage.Instance.Dte);
|
| | | if (formChangeQtVersion.ShowDialog(ww) == DialogResult.OK) {
|
| | | var qtVersion = formChangeQtVersion.GetSelectedQtVersion();
|
| | | HelperFunctions.SetDebuggingEnvironment(pro, "PATH=" + QtVersionManager
|
| | | .The().GetInstallPath(qtVersion) + @"\bin;$(PATH)", true);
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | case CommandId.ChangeProjectQtVersionProjectId:
|
| | | Legacy.QtMenu.ShowFormChangeProjectQtVersion();
|
| | | break;
|
| | | case CommandId.ProjectConvertToQtMsBuild: {
|
| | | QtMsBuildConverter.ProjectToQtMsBuild(
|
| | |
| | | break;
|
| | | case CommandId.ProjectRefreshIntelliSense: {
|
| | | var selectedProject = HelperFunctions.GetSelectedProject(QtVsToolsPackage.Instance.Dte);
|
| | | var tracker = QtProjectTracker.Get(selectedProject);
|
| | | var tracker = QtProjectTracker.Get(selectedProject, selectedProject.FullName);
|
| | | QtProjectIntellisense.Refresh(tracker.Project);
|
| | | }
|
| | | break;
|
| | | case CommandId.ProjectAddNewQtClassProjectId: {
|
| | | try {
|
| | | var project = HelperFunctions.GetSelectedProject(QtVsToolsPackage.Instance.Dte);
|
| | | if (!HelperFunctions.IsQtProject(project))
|
| | | return;
|
| | |
|
| | | var vcProject = project.Object as VCProject;
|
| | | if (vcProject == null)
|
| | | return;
|
| | |
|
| | | var loop = true;
|
| | | do {
|
| | | var classWizard = new Wizards.ClassWizard.AddClassWizard();
|
| | | loop = classWizard.Run(QtVsToolsPackage.Instance.Dte, vcProject.Name,
|
| | | vcProject.ProjectDirectory) == Wizards.WizardResult.Exception;
|
| | | } while (loop);
|
| | | } catch {
|
| | | // Deliberately ignore any kind of exception but close the dialog.
|
| | | }
|
| | | }
|
| | | break;
|
| | | }
|
| | |
| | | return;
|
| | |
|
| | | var project = HelperFunctions.GetSelectedProject(QtVsToolsPackage.Instance.Dte);
|
| | | var isQtProject = HelperFunctions.IsQtProject(project);
|
| | | var isQMakeProject = HelperFunctions.IsQMakeProject(project);
|
| | | var isQtProject = HelperFunctions.IsVsToolsProject(project);
|
| | | var isQMakeProject = HelperFunctions.IsQtProject(project);
|
| | | var isQtMsBuildEnabled = QtProject.IsQtMsBuildEnabled(project);
|
| | |
|
| | | if (!isQtProject && !isQMakeProject) {
|
| | |
| | | }
|
| | |
|
| | | switch ((CommandId)command.CommandID.ID) {
|
| | | // TODO: Fix these functionality and re-enable the menu items
|
| | | case CommandId.ConvertToQtProjectId:
|
| | | case CommandId.ConvertToQmakeProjectId: {
|
| | | command.Visible = false;
|
| | | }
|
| | | break;
|
| | | case CommandId.ImportPriFileProjectId:
|
| | | case CommandId.ExportPriFileProjectId:
|
| | | case CommandId.ExportProFileProjectId:
|
| | | case CommandId.CreateNewTsFileProjectId:
|
| | | command.Visible = true;
|
| | | command.Enabled = HelperFunctions.IsVsToolsProject(HelperFunctions
|
| | | .GetSelectedProject(QtVsToolsPackage.Instance.Dte));
|
| | | break;
|
| | | case CommandId.lUpdateOnProjectId:
|
| | | case CommandId.lReleaseOnProjectId:
|
| | | command.Visible = true;
|
| | | command.Enabled = HelperFunctions.IsQtProject(HelperFunctions
|
| | | .GetSelectedProject(QtVsToolsPackage.Instance.Dte));
|
| | | command.Enabled = Translation.ToolsAvailable(project);
|
| | | break;
|
| | | //case CommandId.ConvertToQmakeProjectId:
|
| | | case CommandId.QtProjectSettingsProjectId:
|
| | | case CommandId.ProjectAddNewQtClassProjectId: {
|
| | | case CommandId.QtProjectSettingsProjectId: {
|
| | | var status = vsCommandStatus.vsCommandStatusSupported;
|
| | | if (project != null) {
|
| | | if (isQtProject)
|
| | |
| | | command.Visible = ((status & vsCommandStatus.vsCommandStatusInvisible) == 0);
|
| | | }
|
| | | break;
|
| | | //case CommandId.ConvertToQtProjectId:
|
| | | case CommandId.ChangeProjectQtVersionProjectId: {
|
| | | var status = vsCommandStatus.vsCommandStatusSupported;
|
| | | if ((project == null) || isQtProject)
|