From 24274cd90702606583d7ce6275e112a6ffcfb1ae Mon Sep 17 00:00:00 2001 From: Tapani Mattila Date: Tue, 22 Feb 2022 19:09:41 +0200 Subject: CMake project converter: Enable only if project is old format Task-number: QDS-6250 Change-Id: I41ca02ff76e53cb7470056b2f956b05d2027e773 Reviewed-by: Reviewed-by: Qt CI Bot Reviewed-by: Thomas Hartmann --- src/plugins/qmldesigner/cmakeprojectconverter.cpp | 37 +++++++++++++++++++++-- src/plugins/qmldesigner/cmakeprojectconverter.h | 2 ++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/plugins/qmldesigner/cmakeprojectconverter.cpp b/src/plugins/qmldesigner/cmakeprojectconverter.cpp index 87c8731708..9d1320438d 100644 --- a/src/plugins/qmldesigner/cmakeprojectconverter.cpp +++ b/src/plugins/qmldesigner/cmakeprojectconverter.cpp @@ -65,13 +65,46 @@ void CmakeProjectConverter::generateMenuEntry() Core::Command *cmd = Core::ActionManager::registerAction(action, "QmlProject.ConvertToCmakeProject"); menu->addAction(cmd, Core::Constants::G_FILE_EXPORT); - action->setEnabled(ProjectExplorer::SessionManager::startupProject() != nullptr); + action->setEnabled(isProjectConvertable(ProjectExplorer::SessionManager::startupProject())); QObject::connect(ProjectExplorer::SessionManager::instance(), &ProjectExplorer::SessionManager::startupProjectChanged, [action]() { - action->setEnabled(ProjectExplorer::SessionManager::startupProject() != nullptr); + action->setEnabled(isProjectConvertable(ProjectExplorer::SessionManager::startupProject())); }); } +bool CmakeProjectConverter::isProjectConvertable(const ProjectExplorer::Project *project) +{ + if (!project) + return false; + + return !isProjectCurrentFormat(project); +} + +const QStringList sanityCheckFiles({FILENAME_CMAKELISTS, + FILENAME_MODULES, + FILENAME_MAINQML, + QString(DIRNAME_CONTENT)+'/'+FILENAME_CMAKELISTS, + QString(DIRNAME_IMPORT)+'/'+FILENAME_CMAKELISTS, + QString(DIRNAME_CPP)+'/'+FILENAME_MAINCPP, + QString(DIRNAME_CPP)+'/'+FILENAME_ENV_HEADER, + QString(DIRNAME_CPP)+'/'+FILENAME_MAINCPP_HEADER + }); + +bool CmakeProjectConverter::isProjectCurrentFormat(const ProjectExplorer::Project *project) +{ + const QmlProjectManager::QmlProject *qmlprj = qobject_cast(project); + + if (!qmlprj) + return false; + + FilePath rootDir = qmlprj->rootProjectDirectory(); + for (const QString &file : sanityCheckFiles) + if (!rootDir.pathAppended(file).exists()) + return false; + + return true; +} + void CmakeProjectConverter::onConvertProject() { ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject(); diff --git a/src/plugins/qmldesigner/cmakeprojectconverter.h b/src/plugins/qmldesigner/cmakeprojectconverter.h index 3356311aa2..c5f4361cb1 100644 --- a/src/plugins/qmldesigner/cmakeprojectconverter.h +++ b/src/plugins/qmldesigner/cmakeprojectconverter.h @@ -51,6 +51,8 @@ public: const Utils::FilePath &targetDir); static void generateMenuEntry(); static void onConvertProject(); + static bool isProjectConvertable(const ProjectExplorer::Project *project); + static bool isProjectCurrentFormat(const ProjectExplorer::Project *project); private: bool prepareAndExecute(); -- cgit v1.2.1