diff options
author | Eike Ziller <eike.ziller@qt.io> | 2019-10-04 12:22:47 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2019-10-04 11:17:16 +0000 |
commit | a0f3ce69bd20aeb77f76186a7773c4b4af5bf984 (patch) | |
tree | ba5b872023cf28704e214a94fb57d3b9cf127632 /src/plugins | |
parent | 77cf25751e043572dc40d9a2be0ba3a0aceb83c1 (diff) |
Revert "Revert "Designer: Fix look-up of resources for UI files""
This reverts commit d907df03496551907259d95fe417b9910d7f7963.
The original change was pushed to 4.10 and reverted there for
binary compatibility reasons. Revert the revert here.
Conflicts:
src/plugins/projectexplorer/projectnodes.h
Change-Id: Ibfd84a30a6cfdd78e1fa1b1c61785d391a5a18be
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp | 2 | ||||
-rw-r--r-- | src/plugins/designer/resourcehandler.cpp | 33 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectnodes.h | 9 | ||||
-rw-r--r-- | src/plugins/qbsprojectmanager/qbsnodes.cpp | 9 | ||||
-rw-r--r-- | src/plugins/qmakeprojectmanager/qmakenodes.cpp | 9 |
5 files changed, 45 insertions, 17 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp index aeee344aeae..6c29cf53fd1 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp @@ -174,7 +174,7 @@ CMakeTargetNode::CMakeTargetNode(const Utils::FilePath &directory, const QString setPriority(Node::DefaultProjectPriority + 900); setIcon(QIcon(":/projectexplorer/images/build.png")); // TODO: Use proper icon! setListInProject(false); - setIsProduct(); + setProductType(ProductType::Other); } QString CMakeTargetNode::tooltip() const diff --git a/src/plugins/designer/resourcehandler.cpp b/src/plugins/designer/resourcehandler.cpp index a86bf217927..392b632a8f8 100644 --- a/src/plugins/designer/resourcehandler.cpp +++ b/src/plugins/designer/resourcehandler.cpp @@ -103,26 +103,37 @@ void ResourceHandler::updateResourcesHelper(bool updateProjectResources) // Find the (sub-)project the file belongs to. We don't want to find resources // from other parts of the project tree, e.g. via a qmake subdirs project. - ProjectNode *projectNode = project->rootProjectNode(); - Node * const fileNode = projectNode->findNode([&fileName](const Node *n) { + Node * const fileNode = project->rootProjectNode()->findNode([&fileName](const Node *n) { return n->filePath().toString() == fileName; }); + ProjectNode *projectNodeForUiFile = nullptr; if (fileNode) { // We do not want qbs groups or qmake .pri files here, as they contain only a subset // of the relevant files. - projectNode = fileNode->parentProjectNode(); - while (projectNode && !projectNode->isProduct()) - projectNode = projectNode->parentProjectNode(); + projectNodeForUiFile = fileNode->parentProjectNode(); + while (projectNodeForUiFile && !projectNodeForUiFile->isProduct()) + projectNodeForUiFile = projectNodeForUiFile->parentProjectNode(); } - if (!projectNode) - projectNode = project->rootProjectNode(); + if (!projectNodeForUiFile) + projectNodeForUiFile = project->rootProjectNode(); + + const auto useQrcFile = [projectNodeForUiFile, project](const Node *qrcNode) { + if (projectNodeForUiFile == project->rootProjectNode()) + return true; + ProjectNode *projectNodeForQrcFile = qrcNode->parentProjectNode(); + while (projectNodeForQrcFile && !projectNodeForQrcFile->isProduct()) + projectNodeForQrcFile = projectNodeForQrcFile->parentProjectNode(); + return !projectNodeForQrcFile + || projectNodeForQrcFile == projectNodeForUiFile + || projectNodeForQrcFile->productType() != ProductType::App; + }; QStringList projectQrcFiles; - projectNode->forEachNode([&](FileNode *node) { - if (node->fileType() == FileType::Resource) + project->rootProjectNode()->forEachNode([&](FileNode *node) { + if (node->fileType() == FileType::Resource && useQrcFile(node)) projectQrcFiles.append(node->filePath().toString()); }, [&](FolderNode *node) { - if (dynamic_cast<ResourceEditor::ResourceTopLevelNode *>(node)) + if (dynamic_cast<ResourceEditor::ResourceTopLevelNode *>(node) && useQrcFile(node)) projectQrcFiles.append(node->filePath().toString()); }); // Check if the user has chosen to update the lacking resource inside designer @@ -134,7 +145,7 @@ void ResourceHandler::updateResourcesHelper(bool updateProjectResources) } if (!qrcPathsToBeAdded.isEmpty()) { m_handlingResources = true; - projectNode->addFiles(qrcPathsToBeAdded); + projectNodeForUiFile->addFiles(qrcPathsToBeAdded); m_handlingResources = false; projectQrcFiles += qrcPathsToBeAdded; } diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h index f4c6c09a672..68e11a178de 100644 --- a/src/plugins/projectexplorer/projectnodes.h +++ b/src/plugins/projectexplorer/projectnodes.h @@ -57,6 +57,8 @@ enum class FileType : quint16 { FileTypeSize }; +enum class ProductType { App, Lib, Other, None }; + enum ProjectAction { // Special value to indicate that the actions are handled by the parent InheritedFromParent, @@ -379,7 +381,8 @@ public: virtual QVariant data(Core::Id role) const; virtual bool setData(Core::Id role, const QVariant &value) const; - bool isProduct() const { return m_isProduct; } + bool isProduct() const { return m_productType != ProductType::None; } + ProductType productType() const { return m_productType; } // TODO: Currently used only for "Build for current run config" functionality, but we should // probably use it to centralize the node-specific "Build" functionality that @@ -391,13 +394,13 @@ public: void setFallbackData(Core::Id key, const QVariant &value); protected: - void setIsProduct() { m_isProduct = true; } + void setProductType(ProductType type) { m_productType = type; } QString m_target; private: QHash<Core::Id, QVariant> m_fallbackData; // Used in data(), unless overridden. - bool m_isProduct = false; + ProductType m_productType = ProductType::None; }; class PROJECTEXPLORER_EXPORT ContainerNode : public FolderNode diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp index 719897ec78a..4a7f5fa5418 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.cpp +++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp @@ -328,7 +328,14 @@ QbsProductNode::QbsProductNode(const qbs::ProductData &prd) : { static QIcon productIcon = Core::FileIconProvider::directoryIcon(Constants::QBS_PRODUCT_OVERLAY_ICON); setIcon(productIcon); - setIsProduct(); + if (m_qbsProductData.isRunnable()) { + setProductType(ProductType::App); + } else if (m_qbsProductData.type().contains("dynamiclibrary") + || m_qbsProductData.type().contains("staticlibrary")) { + setProductType(ProductType::Lib); + } else { + setProductType(ProductType::Other); + } } bool QbsProductNode::supportsAction(ProjectAction action, const Node *node) const diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp index a51c09f0ac2..c2a15c9eaf9 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp @@ -257,7 +257,14 @@ FolderNode::AddNewInformation QmakePriFileNode::addNewInformation(const QStringL QmakeProFileNode::QmakeProFileNode(QmakeProject *project, const FilePath &filePath, QmakeProFile *pf) : QmakePriFileNode(project, this, filePath, pf) { - setIsProduct(); + if (projectType() == ProjectType::ApplicationTemplate) { + setProductType(ProductType::App); + } else if (projectType() == ProjectType::SharedLibraryTemplate + || projectType() == ProjectType::StaticLibraryTemplate) { + setProductType(ProductType::Lib); + } else if (projectType() != ProjectType::SubDirsTemplate) { + setProductType(ProductType::Other); + } } bool QmakeProFileNode::showInSimpleTree() const |