diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2024-02-01 15:52:48 +0100 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2024-02-01 15:13:07 +0000 |
commit | b894ae3d16dee1cb2d53d26c8e60cb3f6cc5b283 (patch) | |
tree | 650fa204b8715ffe00cb1c2ed408e488b26e0e16 | |
parent | df0125547db2b8aaa8b839fa7b47b2c21a1a7280 (diff) |
QmlDesigner: Disable exports not supported for MCU
Add helper function getStartupBuildSystem() to avoid code duplication.
Task-number: QDS-11544
Change-Id: Id8d752d63171838ac9ea6402ff9f2b179d0d8f53
Reviewed-by: Aleksei German <aleksei.german@qt.io>
5 files changed, 34 insertions, 19 deletions
diff --git a/src/plugins/qmldesigner/generateresource.cpp b/src/plugins/qmldesigner/generateresource.cpp index de8cd5a80b..63370a82f1 100644 --- a/src/plugins/qmldesigner/generateresource.cpp +++ b/src/plugins/qmldesigner/generateresource.cpp @@ -16,6 +16,7 @@ #include <projectexplorer/projectmanager.h> #include <projectexplorer/target.h> +#include <qmlprojectmanager/buildsystem/qmlbuildsystem.h> #include <qmlprojectmanager/qmlprojectmanagerconstants.h> #include <qtsupport/baseqtversion.h> @@ -227,9 +228,12 @@ void GenerateResource::generateMenuEntry(QObject *parent) action->setEnabled(ProjectExplorer::ProjectManager::startupProject() != nullptr); // todo make it more intelligent when it gets enabled QObject::connect(ProjectExplorer::ProjectManager::instance(), - &ProjectExplorer::ProjectManager::startupProjectChanged, [action]() { - action->setEnabled(ProjectExplorer::ProjectManager::startupProject()); - }); + &ProjectExplorer::ProjectManager::startupProjectChanged, + [action]() { + if (auto buildSystem + = QmlProjectManager::QmlBuildSystem::getStartupBuildSystem()) + action->setEnabled(!buildSystem->qtForMCUs()); + }); Core::Command *cmd = Core::ActionManager::registerAction(action, "QmlProject.CreateResource"); QObject::connect(action, &QAction::triggered, [] () { diff --git a/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.cpp b/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.cpp index 4016cc6ac6..5131d9c57c 100644 --- a/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.cpp +++ b/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.cpp @@ -32,6 +32,7 @@ #include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/target.h> +#include "projectexplorer/projectmanager.h" #include "projectitem/qmlprojectitem.h" #include "projectnode/qmlprojectnodes.h" @@ -389,6 +390,16 @@ Utils::FilePath QmlBuildSystem::getStartupQmlFileWithFallback() const return {}; } +QmlBuildSystem *QmlBuildSystem::getStartupBuildSystem() +{ + auto project = ProjectExplorer::ProjectManager::startupProject(); + if (project && project->activeTarget() && project->activeTarget()->buildSystem()) { + return qobject_cast<QmlProjectManager::QmlBuildSystem *>( + project->activeTarget()->buildSystem()); + } + return nullptr; +} + Utils::FilePath QmlBuildSystem::mainFilePath() const { const QString fileName = mainFile(); diff --git a/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.h b/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.h index 95b66871eb..3615979e2d 100644 --- a/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.h +++ b/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.h @@ -102,6 +102,8 @@ public: Utils::FilePath getStartupQmlFileWithFallback() const; + static QmlBuildSystem *getStartupBuildSystem(); + signals: void projectChanged(); diff --git a/src/plugins/qmlprojectmanager/cmakegen/cmakeprojectconverter.cpp b/src/plugins/qmlprojectmanager/cmakegen/cmakeprojectconverter.cpp index 21a538c7c5..232d822cd5 100644 --- a/src/plugins/qmlprojectmanager/cmakegen/cmakeprojectconverter.cpp +++ b/src/plugins/qmlprojectmanager/cmakegen/cmakeprojectconverter.cpp @@ -15,6 +15,7 @@ #include <projectexplorer/projectmanager.h> #include <projectexplorer/target.h> +#include <qmlprojectmanager/buildsystem/qmlbuildsystem.h> #include <qmlprojectmanager/qmlprojectmanagerconstants.h> #include <QAction> @@ -44,9 +45,15 @@ void CmakeProjectConverter::generateMenuEntry(QObject *parent) action->setEnabled(isProjectConvertable(ProjectExplorer::ProjectManager::startupProject())); QObject::connect(ProjectExplorer::ProjectManager::instance(), - &ProjectExplorer::ProjectManager::startupProjectChanged, [action]() { - action->setEnabled(isProjectConvertable(ProjectExplorer::ProjectManager::startupProject())); - }); + &ProjectExplorer::ProjectManager::startupProjectChanged, + [action]() { + auto currentBuildSystem = QmlBuildSystem::getStartupBuildSystem(); + bool isMCU = currentBuildSystem ? currentBuildSystem->qtForMCUs() : false; + + action->setEnabled(isMCU + && isProjectConvertable( + ProjectExplorer::ProjectManager::startupProject())); + }); } bool CmakeProjectConverter::isProjectConvertable(const ProjectExplorer::Project *project) diff --git a/src/plugins/qmlprojectmanager/cmakegen/generatecmakelists.cpp b/src/plugins/qmlprojectmanager/cmakegen/generatecmakelists.cpp index cee9eb247e..76452c3e78 100644 --- a/src/plugins/qmlprojectmanager/cmakegen/generatecmakelists.cpp +++ b/src/plugins/qmlprojectmanager/cmakegen/generatecmakelists.cpp @@ -16,6 +16,7 @@ #include <projectexplorer/projectmanager.h> #include <projectexplorer/target.h> +#include <qmlprojectmanager/buildsystem/qmlbuildsystem.h> #include <qmlprojectmanager/qmlmainfileaspect.h> #include <qmlprojectmanager/qmlproject.h> #include <qmlprojectmanager/qmlprojectmanagerconstants.h> @@ -85,16 +86,6 @@ enum ProjectDirectoryError { const QString MENU_ITEM_GENERATE = Tr::tr("Generate CMake Build Files..."); -const QmlBuildSystem *getBuildSystem() -{ - auto project = ProjectExplorer::ProjectManager::startupProject(); - if (project && project->activeTarget() && project->activeTarget()->buildSystem()) { - return qobject_cast<QmlProjectManager::QmlBuildSystem *>( - project->activeTarget()->buildSystem()); - } - return nullptr; -} - void generateMenuEntry(QObject *parent) { Core::ActionContainer *menu = Core::ActionManager::actionContainer(Core::Constants::M_FILE); @@ -118,7 +109,7 @@ void generateMenuEntry(QObject *parent) QObject::connect(ProjectExplorer::ProjectManager::instance(), &ProjectExplorer::ProjectManager::startupProjectChanged, [action]() { - if (auto buildSystem = getBuildSystem()) + if (auto buildSystem = QmlBuildSystem::getStartupBuildSystem()) action->setEnabled(!buildSystem->qtForMCUs()); }); } @@ -284,7 +275,7 @@ const QString projectEnvironmentVariable(const QString &key) { QString value = {}; - if (auto buildSystem = getBuildSystem()) { + if (auto buildSystem = QmlBuildSystem::getStartupBuildSystem()) { auto envItems = buildSystem->environment(); auto confEnv = std::find_if(envItems.begin(), envItems.end(), [key](NameValueItem &item) { return item.name == key; @@ -636,7 +627,7 @@ bool CmakeFileGenerator::generateMainCpp(const FilePath &dir) bool envHeaderOk = true; QString environment; - if (auto buildSystem = getBuildSystem()) { + if (auto buildSystem = QmlBuildSystem::getStartupBuildSystem()) { for (EnvironmentItem &envItem : buildSystem->environment()) { QString key = envItem.name; QString value = envItem.value; |