diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp index 48ae6c6041a7f4417c6cd083cf662b656014c76a..0fca740baa54ec40bfdce6293d36c632840fe233 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.cpp +++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp @@ -89,8 +89,8 @@ QIcon QbsGroupNode::m_groupIcon = generateIcon(); class FileTreeNode { public: - explicit FileTreeNode(const QString &n = QString(), FileTreeNode *p = 0) : - parent(p), name(n) + explicit FileTreeNode(const QString &n = QString(), FileTreeNode *p = 0, bool f = false) : + parent(p), name(n), m_isFile(f) { if (p) p->children.append(this); @@ -101,16 +101,16 @@ public: qDeleteAll(children); } - FileTreeNode *addPart(const QString &n) + FileTreeNode *addPart(const QString &n, bool isFile) { foreach (FileTreeNode *c, children) { if (c->name == n) return c; } - return new FileTreeNode(n, this); + return new FileTreeNode(n, this, isFile); } - bool isFile() { return children.isEmpty(); } + bool isFile() { return m_isFile; } static FileTreeNode *moveChildrenUp(FileTreeNode *node) { @@ -145,6 +145,10 @@ public: static void reorder(FileTreeNode *node, const QString &basedir) { QTC_CHECK(!basedir.isEmpty()); + QString prefix = basedir; + if (basedir.startsWith(QLatin1Char('/'))) + prefix = basedir.mid(1); + prefix.append(QLatin1Char('/')); if (node->path() == basedir) { // Find root node: @@ -154,7 +158,7 @@ public: foreach (FileTreeNode *c, node->children) { // Update children names by prepending basedir - c->name = basedir + QLatin1Char('/') + c->name; + c->name = prefix + c->name; // Update parent information: c->parent = root; @@ -182,7 +186,7 @@ public: if (!node->parent) return; - if (node->children.count() == 0 && !node->isFile()) { + if (node->children.isEmpty() && !node->isFile()) { // Clean up empty folder nodes: node->parent->children.removeOne(node); node->parent = 0; @@ -208,6 +212,7 @@ public: QList<FileTreeNode *> children; FileTreeNode *parent; QString name; + bool m_isFile; }; // ---------------------------------------------------------------------- @@ -362,8 +367,10 @@ void QbsGroupNode::setupFiles(QbsBaseProjectNode *root, const QStringList &files QStringList pathSegments = path.split(QLatin1Char('/'), QString::SkipEmptyParts); FileTreeNode *root = &tree; - while (!pathSegments.isEmpty()) - root = root->addPart(pathSegments.takeFirst()); + while (!pathSegments.isEmpty()) { + bool isFile = pathSegments.count() == 1; + root = root->addPart(pathSegments.takeFirst(), isFile); + } } FileTreeNode::reorder(&tree, productPath); diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp index 7561fb297f526c01051878e84d957eca956d34e9..d0c493076101b5612cddf0c602b25f1cfb8fd971 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp +++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp @@ -423,6 +423,7 @@ void Qt4ProjectManagerPlugin::updateBuildFileAction() ProjectExplorer::Project *project = session->projectForFile(file); m_buildFileAction->setParameter(QFileInfo(file).fileName()); visible = qobject_cast<Qt4Project *>(project) + && node && qobject_cast<Qt4ProFileNode *>(node->projectNode()); enabled = !m_projectExplorer->buildManager()->isBuilding(project);