diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp index 1e13b921e98..d53260ac52e 100644 --- a/src/plugins/projectexplorer/projectnodes.cpp +++ b/src/plugins/projectexplorer/projectnodes.cpp @@ -134,7 +134,10 @@ QString Node::tooltip() const bool Node::isEnabled() const { - return parentFolderNode()->isEnabled(); + if (!m_isEnabled) + return false; + FolderNode *parent = parentFolderNode(); + return parent ? parent->isEnabled() : true; } QList Node::supportedActions(Node *node) const @@ -144,6 +147,14 @@ QList Node::supportedActions(Node *node) const return list; } +void Node::setEnabled(bool enabled) +{ + if (m_isEnabled == enabled) + return; + m_isEnabled = enabled; + emitNodeUpdated(); +} + void Node::setProjectNode(ProjectNode *project) { m_projectNode = project; diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h index 15b6e30b72d..069f7000886 100644 --- a/src/plugins/projectexplorer/projectnodes.h +++ b/src/plugins/projectexplorer/projectnodes.h @@ -115,10 +115,11 @@ public: int line() const; virtual QString displayName() const; virtual QString tooltip() const; - virtual bool isEnabled() const; + bool isEnabled() const; virtual QList supportedActions(Node *node) const; + void setEnabled(bool enabled); void setAbsoluteFilePathAndLine(const Utils::FileName &filePath, int line); void emitNodeUpdated(); @@ -143,6 +144,7 @@ private: Utils::FileName m_filePath; int m_line; NodeType m_nodeType; + bool m_isEnabled = true; }; class PROJECTEXPLORER_EXPORT FileNode : public Node @@ -270,8 +272,6 @@ public: void accept(NodesVisitor *visitor) override; - bool isEnabled() const override { return true; } - // to be called in implementation of // the corresponding public functions void addProjectNodes(const QList &subProjects); @@ -306,8 +306,6 @@ public: void accept(NodesVisitor *visitor) override; - bool isEnabled() const override { return true; } - bool showInSimpleTree() const override; void projectDisplayNameChanged(Node *node); diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp index dee9bf364e9..7981ca483d2 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.cpp +++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp @@ -330,14 +330,6 @@ QbsGroupNode::QbsGroupNode(const qbs::GroupData &grp, const QString &productPath updateQbsGroupData(grp, productPath, true, true); } -bool QbsGroupNode::isEnabled() const -{ - if (!parentFolderNode() || !m_qbsGroupData.isValid()) - return false; - return static_cast(parentFolderNode())->isEnabled() - && m_qbsGroupData.isEnabled(); -} - QList QbsGroupNode::supportedActions(ProjectExplorer::Node *node) const { return supportedNodeActions(node, true); @@ -413,6 +405,8 @@ void QbsGroupNode::updateQbsGroupData(const qbs::GroupData &grp, const QString & bool groupIsEnabled = productIsEnabled && grp.isEnabled(); bool updateExisting = groupWasEnabled != groupIsEnabled; + setEnabled(groupIsEnabled); + m_productPath = productPath; m_qbsGroupData = grp; @@ -598,11 +592,6 @@ QbsProductNode::QbsProductNode(const qbs::Project &project, const qbs::ProductDa setQbsProductData(project, prd); } -bool QbsProductNode::isEnabled() const -{ - return m_qbsProductData.isEnabled(); -} - bool QbsProductNode::showInSimpleTree() const { return true; @@ -675,6 +664,8 @@ void QbsProductNode::setQbsProductData(const qbs::Project &project, const qbs::P bool productIsEnabled = prd.isEnabled(); bool updateExisting = productWasEnabled != productIsEnabled; + setEnabled(prd.isEnabled()); + setDisplayName(QbsProject::productDisplayName(project, prd)); setAbsoluteFilePathAndLine(Utils::FileName::fromString(prd.location().filePath()), line()); const QString &productPath = QFileInfo(prd.location().filePath()).absolutePath(); diff --git a/src/plugins/qbsprojectmanager/qbsnodes.h b/src/plugins/qbsprojectmanager/qbsnodes.h index cfc86deb89a..846b93f8ff1 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.h +++ b/src/plugins/qbsprojectmanager/qbsnodes.h @@ -92,7 +92,6 @@ class QbsGroupNode : public QbsBaseProjectNode public: QbsGroupNode(const qbs::GroupData &grp, const QString &productPath); - bool isEnabled() const override; QList supportedActions(Node *node) const override; bool addFiles(const QStringList &filePaths, QStringList *notAdded = 0) override; bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = 0) override; @@ -130,7 +129,6 @@ class QbsProductNode : public QbsBaseProjectNode public: explicit QbsProductNode(const qbs::Project &project, const qbs::ProductData &prd); - bool isEnabled() const override; bool showInSimpleTree() const override; QList supportedActions(Node *node) const override; bool addFiles(const QStringList &filePaths, QStringList *notAdded = 0) override;