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>
This commit is contained in:
Thomas Hartmann
2024-02-01 15:52:48 +01:00
parent df0125547d
commit b894ae3d16
5 changed files with 34 additions and 19 deletions

View File

@@ -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();

View File

@@ -102,6 +102,8 @@ public:
Utils::FilePath getStartupQmlFileWithFallback() const;
static QmlBuildSystem *getStartupBuildSystem();
signals:
void projectChanged();

View File

@@ -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)

View File

@@ -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;