diff options
Diffstat (limited to 'src/plugins/qbsprojectmanager')
-rw-r--r-- | src/plugins/qbsprojectmanager/qbsnodes.cpp | 272 | ||||
-rw-r--r-- | src/plugins/qbsprojectmanager/qbsnodes.h | 32 | ||||
-rw-r--r-- | src/plugins/qbsprojectmanager/qbsproject.cpp | 2 |
3 files changed, 170 insertions, 136 deletions
diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp index 4a7f5fa541..002ebe77fb 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.cpp +++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp @@ -236,72 +236,6 @@ QbsGroupNode::QbsGroupNode(const qbs::GroupData &grp, const QString &productPath m_qbsGroupData = grp; } -bool QbsGroupNode::supportsAction(ProjectAction action, const Node *node) const -{ - if (action == AddNewFile || action == AddExistingFile) - return true; - - return supportsNodeAction(action, node); -} - -bool QbsGroupNode::addFiles(const QStringList &filePaths, QStringList *notAdded) -{ - QStringList notAddedDummy; - if (!notAdded) - notAdded = ¬AddedDummy; - - const QbsProjectNode *prjNode = parentQbsProjectNode(this); - if (!prjNode || !prjNode->qbsProject().isValid()) { - *notAdded += filePaths; - return false; - } - - const QbsProductNode *prdNode = parentQbsProductNode(this); - if (!prdNode || !prdNode->qbsProductData().isValid()) { - *notAdded += filePaths; - return false; - } - - return prjNode->project()->addFilesToProduct(filePaths, prdNode->qbsProductData(), - m_qbsGroupData, notAdded); -} - -RemovedFilesFromProject QbsGroupNode::removeFiles(const QStringList &filePaths, - QStringList *notRemoved) -{ - QStringList notRemovedDummy; - if (!notRemoved) - notRemoved = ¬RemovedDummy; - - const QbsProjectNode *prjNode = parentQbsProjectNode(this); - if (!prjNode || !prjNode->qbsProject().isValid()) { - *notRemoved += filePaths; - return RemovedFilesFromProject::Error; - } - - const QbsProductNode *prdNode = parentQbsProductNode(this); - if (!prdNode || !prdNode->qbsProductData().isValid()) { - *notRemoved += filePaths; - return RemovedFilesFromProject::Error; - } - - return prjNode->project()->removeFilesFromProduct(filePaths, prdNode->qbsProductData(), - m_qbsGroupData, notRemoved); -} - -bool QbsGroupNode::renameFile(const QString &filePath, const QString &newFilePath) -{ - const QbsProjectNode *prjNode = parentQbsProjectNode(this); - if (!prjNode || !prjNode->qbsProject().isValid()) - return false; - const QbsProductNode *prdNode = parentQbsProductNode(this); - if (!prdNode || !prdNode->qbsProductData().isValid()) - return false; - - return prjNode->project()->renameFileInProduct(filePath, newFilePath, - prdNode->qbsProductData(), m_qbsGroupData); -} - FolderNode::AddNewInformation QbsGroupNode::addNewInformation(const QStringList &files, Node *context) const { @@ -338,66 +272,6 @@ QbsProductNode::QbsProductNode(const qbs::ProductData &prd) : } } -bool QbsProductNode::supportsAction(ProjectAction action, const Node *node) const -{ - if (action == AddNewFile || action == AddExistingFile) - return true; - - return supportsNodeAction(action, node); -} - -bool QbsProductNode::addFiles(const QStringList &filePaths, QStringList *notAdded) -{ - QStringList notAddedDummy; - if (!notAdded) - notAdded = ¬AddedDummy; - - const QbsProjectNode *prjNode = parentQbsProjectNode(this); - if (!prjNode || !prjNode->qbsProject().isValid()) { - *notAdded += filePaths; - return false; - } - - qbs::GroupData grp = findMainQbsGroup(m_qbsProductData); - if (grp.isValid()) { - return prjNode->project()->addFilesToProduct(filePaths, m_qbsProductData, grp, notAdded); - } - - QTC_ASSERT(false, return false); -} - -RemovedFilesFromProject QbsProductNode::removeFiles(const QStringList &filePaths, - QStringList *notRemoved) -{ - QStringList notRemovedDummy; - if (!notRemoved) - notRemoved = ¬RemovedDummy; - - const QbsProjectNode *prjNode = parentQbsProjectNode(this); - if (!prjNode || !prjNode->qbsProject().isValid()) { - *notRemoved += filePaths; - return RemovedFilesFromProject::Error; - } - - qbs::GroupData grp = findMainQbsGroup(m_qbsProductData); - if (grp.isValid()) { - return prjNode->project()->removeFilesFromProduct(filePaths, m_qbsProductData, grp, - notRemoved); - } - - QTC_ASSERT(false, return RemovedFilesFromProject::Error); -} - -bool QbsProductNode::renameFile(const QString &filePath, const QString &newFilePath) -{ - const QbsProjectNode * prjNode = parentQbsProjectNode(this); - if (!prjNode || !prjNode->qbsProject().isValid()) - return false; - const qbs::GroupData grp = findMainQbsGroup(m_qbsProductData); - QTC_ASSERT(grp.isValid(), return false); - return prjNode->project()->renameFileInProduct(filePath, newFilePath, m_qbsProductData, grp); -} - void QbsProductNode::build() { QbsProjectManagerPlugin::buildNamedProduct(static_cast<QbsProject *>(getProject()), @@ -487,5 +361,151 @@ QbsRootProjectNode::QbsRootProjectNode(QbsProject *project) : m_project(project) { } +// -------------------------------------------------------------------- +// QbsBuildSystem: +// -------------------------------------------------------------------- + +QbsBuildSystem::QbsBuildSystem(Project *project) + : BuildSystem(project) +{ +} + +bool QbsBuildSystem::supportsAction(Node *context, ProjectAction action, const Node *node) const +{ + if (dynamic_cast<QbsGroupNode *>(context)) { + if (action == AddNewFile || action == AddExistingFile) + return true; + } + + if (dynamic_cast<QbsProductNode *>(context)) { + if (action == AddNewFile || action == AddExistingFile) + return true; + } + + return supportsNodeAction(action, node); +} + +bool QbsBuildSystem::addFiles(Node *context, const QStringList &filePaths, QStringList *notAdded) +{ + if (auto n = dynamic_cast<QbsGroupNode *>(context)) { + QStringList notAddedDummy; + if (!notAdded) + notAdded = ¬AddedDummy; + + const QbsProjectNode *prjNode = parentQbsProjectNode(n); + if (!prjNode || !prjNode->qbsProject().isValid()) { + *notAdded += filePaths; + return false; + } + + const QbsProductNode *prdNode = parentQbsProductNode(n); + if (!prdNode || !prdNode->qbsProductData().isValid()) { + *notAdded += filePaths; + return false; + } + + return prjNode->project()->addFilesToProduct(filePaths, prdNode->qbsProductData(), + n->m_qbsGroupData, notAdded); + } + + if (auto n = dynamic_cast<QbsProductNode *>(context)) { + QStringList notAddedDummy; + if (!notAdded) + notAdded = ¬AddedDummy; + + const QbsProjectNode *prjNode = parentQbsProjectNode(n); + if (!prjNode || !prjNode->qbsProject().isValid()) { + *notAdded += filePaths; + return false; + } + + qbs::GroupData grp = findMainQbsGroup(n->qbsProductData()); + if (grp.isValid()) + return prjNode->project()->addFilesToProduct(filePaths, n->qbsProductData(), grp, notAdded); + + QTC_ASSERT(false, return false); + } + + return BuildSystem::addFiles(context, filePaths, notAdded); +} + +RemovedFilesFromProject QbsBuildSystem::removeFiles(Node *context, const QStringList &filePaths, + QStringList *notRemoved) +{ + if (auto n = dynamic_cast<QbsGroupNode *>(context)) { + QStringList notRemovedDummy; + if (!notRemoved) + notRemoved = ¬RemovedDummy; + + const QbsProjectNode *prjNode = parentQbsProjectNode(n); + if (!prjNode || !prjNode->qbsProject().isValid()) { + *notRemoved += filePaths; + return RemovedFilesFromProject::Error; + } + + const QbsProductNode *prdNode = parentQbsProductNode(n); + if (!prdNode || !prdNode->qbsProductData().isValid()) { + *notRemoved += filePaths; + return RemovedFilesFromProject::Error; + } + + return project()->removeFilesFromProduct(filePaths, prdNode->qbsProductData(), + n->m_qbsGroupData, notRemoved); + } + + if (auto n = dynamic_cast<QbsProductNode *>(context)) { + QStringList notRemovedDummy; + if (!notRemoved) + notRemoved = ¬RemovedDummy; + + const QbsProjectNode *prjNode = parentQbsProjectNode(n); + if (!prjNode || !prjNode->qbsProject().isValid()) { + *notRemoved += filePaths; + return RemovedFilesFromProject::Error; + } + + qbs::GroupData grp = findMainQbsGroup(n->qbsProductData()); + if (grp.isValid()) { + return prjNode->project()->removeFilesFromProduct(filePaths, n->qbsProductData(), grp, + notRemoved); + } + + QTC_ASSERT(false, return RemovedFilesFromProject::Error); + } + + return BuildSystem::removeFiles(context, filePaths, notRemoved); +} + +bool QbsBuildSystem::renameFile(Node *context, const QString &filePath, const QString &newFilePath) +{ + if (auto *n = dynamic_cast<QbsGroupNode *>(context)) { + const QbsProjectNode *prjNode = parentQbsProjectNode(n); + if (!prjNode || !prjNode->qbsProject().isValid()) + return false; + const QbsProductNode *prdNode = parentQbsProductNode(n); + if (!prdNode || !prdNode->qbsProductData().isValid()) + return false; + + return project()->renameFileInProduct(filePath, newFilePath, + prdNode->qbsProductData(), n->m_qbsGroupData); + } + + if (auto *n = dynamic_cast<QbsProductNode *>(context)) { + const QbsProjectNode * prjNode = parentQbsProjectNode(n); + if (!prjNode || !prjNode->qbsProject().isValid()) + return false; + const qbs::GroupData grp = findMainQbsGroup(n->qbsProductData()); + QTC_ASSERT(grp.isValid(), return false); + return prjNode->project()->renameFileInProduct(filePath, newFilePath, n->qbsProductData(), grp); + } + + return BuildSystem::renameFile(context, filePath, newFilePath); +} + +QbsProject *QbsBuildSystem::project() const +{ + return static_cast<QbsProject *>(BuildSystem::project()); +} + } // namespace Internal } // namespace QbsProjectManager diff --git a/src/plugins/qbsprojectmanager/qbsnodes.h b/src/plugins/qbsprojectmanager/qbsnodes.h index e31fc2b9b9..a2439dcdb6 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.h +++ b/src/plugins/qbsprojectmanager/qbsnodes.h @@ -25,6 +25,7 @@ #pragma once +#include <projectexplorer/buildsystem.h> #include <projectexplorer/projectnodes.h> #include <qbs.h> @@ -35,6 +36,26 @@ namespace Internal { class QbsNodeTreeBuilder; class QbsProject; +class QbsBuildSystem : public ProjectExplorer::BuildSystem +{ +public: + explicit QbsBuildSystem(ProjectExplorer::Project *project); + + bool supportsAction(ProjectExplorer::Node *context, + ProjectExplorer::ProjectAction action, + const ProjectExplorer::Node *node) const final; + bool addFiles(ProjectExplorer::Node *context, + const QStringList &filePaths, + QStringList *notAdded = nullptr) override; + ProjectExplorer::RemovedFilesFromProject removeFiles(ProjectExplorer::Node *context, + const QStringList &filePaths, + QStringList *notRemoved = nullptr) override; + bool renameFile(ProjectExplorer::Node *context, + const QString &filePath, const QString &newFilePath) override; + + QbsProject *project() const; +}; + // -------------------------------------------------------------------- // QbsGroupNode: // -------------------------------------------------------------------- @@ -45,13 +66,9 @@ public: QbsGroupNode(const qbs::GroupData &grp, const QString &productPath); bool showInSimpleTree() const final { return false; } - bool supportsAction(ProjectExplorer::ProjectAction action, const Node *node) const final; - bool addFiles(const QStringList &filePaths, QStringList *notAdded = nullptr) override; - ProjectExplorer::RemovedFilesFromProject removeFiles(const QStringList &filePaths, - QStringList *notRemoved = nullptr) override; - bool renameFile(const QString &filePath, const QString &newFilePath) override; private: + friend class QbsBuildSystem; AddNewInformation addNewInformation(const QStringList &files, Node *context) const override; QVariant data(Core::Id role) const override; @@ -68,11 +85,6 @@ class QbsProductNode : public ProjectExplorer::ProjectNode public: explicit QbsProductNode(const qbs::ProductData &prd); - bool supportsAction(ProjectExplorer::ProjectAction action, const Node *node) const final; - bool addFiles(const QStringList &filePaths, QStringList *notAdded = nullptr) override; - ProjectExplorer::RemovedFilesFromProject removeFiles(const QStringList &filePaths, - QStringList *notRemoved = nullptr) override; - bool renameFile(const QString &filePath, const QString &newFilePath) override; void build() override; QStringList targetApplications() const override; diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index 37e94751ff..ade70195c9 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -135,6 +135,8 @@ QbsProject::QbsProject(const FilePath &fileName) setProjectLanguages(Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID)); setCanBuildProducts(); + setBuildSystemCreator([](Project *p) { return new QbsBuildSystem(p); }); + rebuildProjectTree(); connect(this, &Project::activeTargetChanged, this, &QbsProject::changeActiveTarget); |