diff options
author | Martin Haase <martin.haase@fdtech.de> | 2019-05-13 12:18:07 +0200 |
---|---|---|
committer | Martin Haase <martin.haase@fdtech.de> | 2019-05-23 07:32:11 +0000 |
commit | 76d44aea0d4c1c05b9fb9156c6d370f55aa71c54 (patch) | |
tree | 3ab37ff7d975aae4148fb47bf1f6c21a3a2ac500 /src/plugins/genericprojectmanager | |
parent | fc8be0ccc65851a943ba36e0309dbc2680989423 (diff) | |
download | qt-creator-76d44aea0d4c1c05b9fb9156c6d370f55aa71c54.tar.gz |
Generic Project: cut common part of path in project explorer
This is necessary, if the project files on a
different directory than the source files. In this case, the project
explorer will show the full path e.g. in windows starting by C: for each
directory until the source files.
use-case:
some directory
|- project directory
|- *.creator & *.files & ... generic project files
|- source directory
|- some sub-directories and the source files
Fixes: QTCREATORBUG-19454
Change-Id: I95eee4afdc11adf4281220edc5f6ff29da41a3a5
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: André Hartmann <aha_1980@gmx.de>
Diffstat (limited to 'src/plugins/genericprojectmanager')
-rw-r--r-- | src/plugins/genericprojectmanager/genericproject.cpp | 23 | ||||
-rw-r--r-- | src/plugins/genericprojectmanager/genericproject.h | 1 |
2 files changed, 23 insertions, 1 deletions
diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index d8e9f8458b..d1edc12eb3 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -382,6 +382,23 @@ void GenericProject::parseProject(RefreshOptions options) } } +QString GenericProject::findCommonSourceRoot(const QStringList &list) +{ + QString root = list.front(); + for (const QString &item : list) { + if (root.length() > item.length()) + root.truncate(item.length()); + + for (int i = 0; i < root.length(); ++i) { + if (root[i] != item[i]) { + root.truncate(i); + break; + } + } + } + return QFileInfo(root).absolutePath(); +} + void GenericProject::refresh(RefreshOptions options) { emitParsingStarted(); @@ -390,11 +407,14 @@ void GenericProject::refresh(RefreshOptions options) if (options & Files) { auto newRoot = std::make_unique<GenericProjectNode>(this); + // find the common base directory of all source files + Utils::FileName baseDir = FileName::fromFileInfo(QFileInfo(findCommonSourceRoot(m_files))); + for (const QString &f : m_files) { FileType fileType = FileType::Source; // ### FIXME if (f.endsWith(".qrc")) fileType = FileType::Resource; - newRoot->addNestedNode(std::make_unique<FileNode>(FileName::fromString(f), fileType)); + newRoot->addNestedNode(std::make_unique<FileNode>(FileName::fromString(f), fileType), baseDir); } newRoot->addNestedNode(std::make_unique<FileNode>(FileName::fromString(m_filesFileName), @@ -408,6 +428,7 @@ void GenericProject::refresh(RefreshOptions options) newRoot->addNestedNode(std::make_unique<FileNode>(FileName::fromString(m_cflagsFileName), FileType::Project)); + newRoot->compress(); setRootProjectNode(std::move(newRoot)); } diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h index 7202d91810..f713bdb24b 100644 --- a/src/plugins/genericprojectmanager/genericproject.h +++ b/src/plugins/genericprojectmanager/genericproject.h @@ -66,6 +66,7 @@ private: QStringList processEntries(const QStringList &paths, QHash<QString, QString> *map = nullptr) const; + static QString findCommonSourceRoot(const QStringList &list); void refreshCppCodeModel(); void updateDeploymentData(); void activeTargetWasChanged(); |