Qbs: Do not crash when using simplified project view

Root cause is trying to set the display name on a FolderNode that
is not in the tree yet.

Allow setting the displayname in the constructor and use that new
constructor where it makes sense.

Task-number: QTCREATORBUG-12897
Change-Id: I907e48cac837966e38524bfe88a87ef17d93f0b2
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
This commit is contained in:
Tobias Hunger
2014-09-23 13:05:00 +02:00
parent 917aa1064e
commit 06615843df
3 changed files with 11 additions and 7 deletions

View File

@@ -247,10 +247,12 @@ bool FileNode::isGenerated() const
\sa ProjectExplorer::FileNode, ProjectExplorer::ProjectNode \sa ProjectExplorer::FileNode, ProjectExplorer::ProjectNode
*/ */
FolderNode::FolderNode(const QString &folderPath, NodeType nodeType) : FolderNode::FolderNode(const QString &folderPath, NodeType nodeType, const QString &displayName) :
Node(nodeType, folderPath), Node(nodeType, folderPath),
m_displayName(QDir::toNativeSeparators(folderPath)) m_displayName(displayName)
{ {
if (m_displayName.isEmpty())
m_displayName = QDir::toNativeSeparators(folderPath);
} }
FolderNode::~FolderNode() FolderNode::~FolderNode()

View File

@@ -162,7 +162,8 @@ private:
class PROJECTEXPLORER_EXPORT FolderNode : public Node { class PROJECTEXPLORER_EXPORT FolderNode : public Node {
Q_OBJECT Q_OBJECT
public: public:
explicit FolderNode(const QString &folderPath, NodeType nodeType = FolderNodeType); explicit FolderNode(const QString &folderPath, NodeType nodeType = FolderNodeType,
const QString &displayName = QString());
virtual ~FolderNode(); virtual ~FolderNode();
QString displayName() const; QString displayName() const;

View File

@@ -527,14 +527,15 @@ void QbsGroupNode::setupFolder(ProjectExplorer::FolderNode *root,
break; break;
} }
if (!fn) { if (!fn) {
fn = new FolderNode(c->path()); fn = new FolderNode(c->path(), ProjectExplorer::FolderNodeType,
displayNameFromPath(c->path(), baseDir));
root->addFolderNodes(QList<FolderNode *>() << fn); root->addFolderNodes(QList<FolderNode *>() << fn);
} else { } else {
foldersToRemove.removeOne(fn); foldersToRemove.removeOne(fn);
if (updateExisting) if (updateExisting)
fn->emitNodeUpdated(); fn->emitNodeUpdated();
}
fn->setDisplayName(displayNameFromPath(c->path(), baseDir)); fn->setDisplayName(displayNameFromPath(c->path(), baseDir));
}
setupFolder(fn, c, c->path(), updateExisting); setupFolder(fn, c, c->path(), updateExisting);
} }
@@ -811,9 +812,9 @@ QbsProjectNode *QbsProjectNode::findProjectNode(const QString &name)
QbsRootProjectNode::QbsRootProjectNode(QbsProject *project) : QbsRootProjectNode::QbsRootProjectNode(QbsProject *project) :
QbsProjectNode(project->projectFilePath().toString()), QbsProjectNode(project->projectFilePath().toString()),
m_project(project), m_project(project),
m_buildSystemFiles(new ProjectExplorer::FolderNode(project->projectDirectory().toString())) m_buildSystemFiles(new ProjectExplorer::FolderNode(project->projectDirectory().toString(),
ProjectExplorer::FolderNodeType, tr("Qbs files")))
{ {
m_buildSystemFiles->setDisplayName(tr("Qbs files"));
addFolderNodes(QList<FolderNode *>() << m_buildSystemFiles); addFolderNodes(QList<FolderNode *>() << m_buildSystemFiles);
} }