summaryrefslogtreecommitdiff
path: root/src/plugins/genericprojectmanager
diff options
context:
space:
mode:
authorMartin Haase <martin.haase@fdtech.de>2019-05-13 12:18:07 +0200
committerMartin Haase <martin.haase@fdtech.de>2019-05-23 07:32:11 +0000
commit76d44aea0d4c1c05b9fb9156c6d370f55aa71c54 (patch)
tree3ab37ff7d975aae4148fb47bf1f6c21a3a2ac500 /src/plugins/genericprojectmanager
parentfc8be0ccc65851a943ba36e0309dbc2680989423 (diff)
downloadqt-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.cpp23
-rw-r--r--src/plugins/genericprojectmanager/genericproject.h1
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();