summaryrefslogtreecommitdiff
path: root/src/plugins/qbsprojectmanager
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qbsprojectmanager')
-rw-r--r--src/plugins/qbsprojectmanager/qbsnodes.cpp272
-rw-r--r--src/plugins/qbsprojectmanager/qbsnodes.h32
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.cpp2
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 = &notAddedDummy;
-
- 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 = &notRemovedDummy;
-
- 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 = &notAddedDummy;
-
- 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 = &notRemovedDummy;
-
- 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 = &notAddedDummy;
+
+ 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 = &notAddedDummy;
+
+ 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 = &notRemovedDummy;
+
+ 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 = &notRemovedDummy;
+
+ 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);