Наша сборка Qt VS Tools
giy
2022-09-02 ca47896204482bf4a6979e3838bf7f09f61cebeb
QtVsTools.Package/Package/QtMainMenu.cs
@@ -1,6 +1,6 @@
/****************************************************************************
**
** 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.
@@ -26,16 +26,17 @@
**
****************************************************************************/
using EnvDTE;
using Microsoft.VisualStudio.Shell;
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 VisualStudio;
    /// <summary>
    /// Command handler
    /// </summary>
@@ -44,24 +45,23 @@
        /// <summary>
        /// Command menu group (command set GUID).
        /// </summary>
        public static readonly Guid MainMenuGuid = new Guid("58f83fff-d39d-4c66-810b-2702e1f04e73");
        private static readonly Guid MainMenuGuid = new Guid("58f83fff-d39d-4c66-810b-2702e1f04e73");
        /// <summary>
        /// Gets the instance of the command.
        /// </summary>
        public static QtMainMenu Instance
        private static QtMainMenu 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 QtMainMenu(package);
            Instance = new QtMainMenu();
        }
        /// <summary>
@@ -71,16 +71,14 @@
        {
            QtVersionId = 0x0500,
            ViewQtHelpId = 0x0501,
            ViewGettingStartedId = 0x0503,
            LaunchDesignerId = 0x0100,
            LaunchLinguistId = 0x0101,
            OpenProFileId = 0x0102,
            ImportPriFileId = 0x0103,
            ExportPriFileId = 0x0104,
            ExportProFileId = 0x0105,
            CreateNewTsFileId = 0x0107,
            ConvertToQtMsBuild = 0x0130,
            ConvertToQtId = 0x0124,
            ConvertToQmakeId = 0x0108,
            QtProjectSettingsId = 0x0109,
            ChangeProjectQtVersionId = 0x0126,
            QtOptionsId = 0x0110,
@@ -88,22 +86,12 @@
        }
        /// <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 QtMainMenu(Package package)
        private QtMainMenu()
        {
            if (package == null)
                throw new ArgumentNullException("package");
            m_package = package;
            var commandService = VsServiceProvider
                .GetService<IMenuCommandService, OleMenuCommandService>();
            if (commandService == null)
@@ -119,6 +107,8 @@
        private void execHandler(object sender, EventArgs e)
        {
            ThreadHelper.ThrowIfNotOnUIThread();
            var command = sender as OleMenuCommand;
            if (command == null)
                return;
@@ -126,6 +116,9 @@
            switch ((CommandId)command.CommandID.ID) {
            case CommandId.ViewQtHelpId:
                VsShellUtilities.OpenSystemBrowser("https://www.qt.io/developers");
                break;
            case CommandId.ViewGettingStartedId:
                VsShellUtilities.OpenSystemBrowser("https://doc.qt.io/qtvstools/qtvstools-getting-started.html");
                break;
            case CommandId.LaunchDesignerId:
                QtVsToolsPackage.Instance.QtDesigner.Start(hideWindow: false);
@@ -145,23 +138,8 @@
            case CommandId.ExportProFileId:
                ExtLoader.ExportProFile();
                break;
            case CommandId.CreateNewTsFileId:
                Translation.CreateNewTranslationFile(HelperFunctions.GetSelectedQtProject(QtVsToolsPackage
                    .Instance.Dte));
                break;
            case CommandId.ConvertToQtId:
            case CommandId.ConvertToQmakeId: {
                    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.ConvertToQtMsBuild: {
                    QtMsBuildConverter.SolutionToQtMsBuild();
                }
            case CommandId.ConvertToQtMsBuild:
                QtMsBuildConverter.SolutionToQtMsBuild();
                break;
            case CommandId.QtProjectSettingsId: {
                    var pro = HelperFunctions.GetSelectedQtProject(QtVsToolsPackage.Instance.Dte);
@@ -169,31 +147,14 @@
                    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.ChangeProjectQtVersionId: {
                    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.ChangeProjectQtVersionId:
                Legacy.QtMenu.ShowFormChangeProjectQtVersion();
                break;
            case CommandId.QtOptionsId:
                QtVsToolsPackage.Instance.ShowOptionPage(typeof(Options.QtOptionsPage));
@@ -206,12 +167,17 @@
        private void beforeQueryStatus(object sender, EventArgs e)
        {
            ThreadHelper.ThrowIfNotOnUIThread();
            var command = sender as OleMenuCommand;
            if (command == null)
                return;
            var project = HelperFunctions.GetSelectedProject(QtVsToolsPackage.Instance.Dte);
            switch ((CommandId)command.CommandID.ID) {
            case CommandId.ViewQtHelpId:
            case CommandId.ViewGettingStartedId:
                command.Visible = command.Enabled = true;
                break;
            case CommandId.QtVersionId:
@@ -230,39 +196,26 @@
            case CommandId.ImportPriFileId:
            case CommandId.ExportPriFileId:
            case CommandId.ExportProFileId:
            case CommandId.CreateNewTsFileId: {
                    command.Visible = true;
                    command.Enabled = HelperFunctions.IsQtProject(HelperFunctions
                        .GetSelectedProject(QtVsToolsPackage.Instance.Dte));
                }
                command.Visible = true;
                command.Enabled = HelperFunctions.IsVsToolsProject(project);
                break;
            // TODO: Fix these functionality and re-enable the menu items
            case CommandId.ConvertToQtId:
            case CommandId.ConvertToQmakeId: {
                    command.Visible = false;
                }
                break;
            //case CommandId.ConvertToQmakeId:
            case CommandId.QtProjectSettingsId: {
                    var status = vsCommandStatus.vsCommandStatusSupported;
                    var project = HelperFunctions.GetSelectedProject(QtVsToolsPackage.Instance.Dte);
                    if (project != null) {
                        if (HelperFunctions.IsQtProject(project))
                        if (HelperFunctions.IsVsToolsProject(project))
                            status |= vsCommandStatus.vsCommandStatusEnabled;
                        else if (HelperFunctions.IsQMakeProject(project))
                        else if (HelperFunctions.IsQtProject(project))
                            status |= vsCommandStatus.vsCommandStatusInvisible;
                    }
                    command.Enabled = ((status & vsCommandStatus.vsCommandStatusEnabled) != 0);
                    command.Visible = ((status & vsCommandStatus.vsCommandStatusInvisible) == 0);
                }
                break;
            //case CommandId.ConvertToQtId:
            case CommandId.ChangeProjectQtVersionId: {
                    var status = vsCommandStatus.vsCommandStatusSupported;
                    var project = HelperFunctions.GetSelectedProject(QtVsToolsPackage.Instance.Dte);
                    if ((project == null) || HelperFunctions.IsQtProject(project))
                    if ((project == null) || HelperFunctions.IsVsToolsProject(project))
                        status |= vsCommandStatus.vsCommandStatusInvisible;
                    else if (HelperFunctions.IsQMakeProject(project))
                    else if (HelperFunctions.IsQtProject(project))
                        status |= vsCommandStatus.vsCommandStatusEnabled;
                    else
                        status |= vsCommandStatus.vsCommandStatusInvisible;