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
*/
FolderNode::FolderNode(const QString &folderPath, NodeType nodeType) :
FolderNode::FolderNode(const QString &folderPath, NodeType nodeType, const QString &displayName) :
Node(nodeType, folderPath),
m_displayName(QDir::toNativeSeparators(folderPath))
m_displayName(displayName)
{
if (m_displayName.isEmpty())
m_displayName = QDir::toNativeSeparators(folderPath);
}
FolderNode::~FolderNode()

View File

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

View File

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