diff options
Diffstat (limited to 'src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp')
-rw-r--r-- | src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp b/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp index b4dfa4325d..f5563678c7 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp @@ -95,6 +95,8 @@ public: QVector<FileTypeData> fileTypeData; QIcon projectIcon; + QIcon productIcon; + QIcon groupIcon; }; void clearQmakeStaticData(); @@ -114,6 +116,8 @@ QmakeStaticData::QmakeStaticData() } // Project icon projectIcon = Core::FileIconProvider::directoryIcon(ProjectExplorer::Constants::FILEOVERLAY_QT); + productIcon = Core::FileIconProvider::directoryIcon(ProjectExplorer::Constants::FILEOVERLAY_PRODUCT); + groupIcon = Core::FileIconProvider::directoryIcon(ProjectExplorer::Constants::FILEOVERLAY_GROUP); qAddPostRoutine(clearQmakeStaticData); } @@ -124,12 +128,20 @@ void clearQmakeStaticData() { qmakeStaticData()->fileTypeData.clear(); qmakeStaticData()->projectIcon = QIcon(); + qmakeStaticData()->productIcon = QIcon(); + qmakeStaticData()->groupIcon = QIcon(); } } // namespace namespace QmakeProjectManager { +static QIcon iconForProfile(const QmakeProFile *proFile) +{ + return proFile->projectType() == ProjectType::SubDirsTemplate ? qmakeStaticData()->projectIcon + : qmakeStaticData()->productIcon; +} + static void createTree(QmakeBuildSystem *buildSystem, const QmakePriFile *pri, QmakePriFileNode *node, @@ -139,7 +151,6 @@ static void createTree(QmakeBuildSystem *buildSystem, QTC_ASSERT(node, return); node->setDisplayName(pri->displayName()); - node->setIcon(qmakeStaticData()->projectIcon); // .pro/.pri-file itself: node->addNode(std::make_unique<FileNode>(pri->filePath(), FileType::Project)); @@ -211,7 +222,7 @@ static void createTree(QmakeBuildSystem *buildSystem, if (!generatedFiles.empty()) { QTC_CHECK(proFile); const FilePath baseDir = generatedFiles.size() == 1 ? generatedFiles.first().parentDir() - : proFile->buildDir(); + : buildSystem->buildDir(proFile->filePath()); auto genFolder = std::make_unique<VirtualFolderNode>(baseDir); genFolder->setDisplayName(QCoreApplication::translate("QmakeProjectManager::QmakePriFile", "Generated Files")); @@ -227,10 +238,14 @@ static void createTree(QmakeBuildSystem *buildSystem, // Virtual folders: for (QmakePriFile *c : pri->children()) { std::unique_ptr<QmakePriFileNode> newNode; - if (auto pf = dynamic_cast<QmakeProFile *>(c)) + if (auto pf = dynamic_cast<QmakeProFile *>(c)) { newNode = std::make_unique<QmakeProFileNode>(c->buildSystem(), c->filePath(), pf); - else - newNode = std::make_unique<QmakePriFileNode>(c->buildSystem(), node->proFileNode(), c->filePath(), c); + newNode->setIcon(iconForProfile(pf)); + } else { + newNode = std::make_unique<QmakePriFileNode>(c->buildSystem(), node->proFileNode(), + c->filePath(), c); + newNode->setIcon(qmakeStaticData->groupIcon); + } createTree(buildSystem, c, newNode.get(), toExclude); node->addNode(std::move(newNode)); } @@ -239,14 +254,14 @@ static void createTree(QmakeBuildSystem *buildSystem, std::unique_ptr<QmakeProFileNode> QmakeNodeTreeBuilder::buildTree(QmakeBuildSystem *buildSystem) { // Remove qmake implementation details that litter up the project data: - Target *t = buildSystem->target(); - BaseQtVersion *qt = QtKitAspect::qtVersion(t->kit()); + BaseQtVersion *qt = QtKitAspect::qtVersion(buildSystem->kit()); const FilePaths toExclude = qt ? qt->directoriesToIgnoreInProjectTree() : FilePaths(); auto root = std::make_unique<QmakeProFileNode>(buildSystem, buildSystem->projectFilePath(), buildSystem->rootProFile()); + root->setIcon(iconForProfile(buildSystem->rootProFile())); createTree(buildSystem, buildSystem->rootProFile(), root.get(), toExclude); return root; |