summaryrefslogtreecommitdiff
path: root/src/plugins/genericprojectmanager/genericproject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/genericprojectmanager/genericproject.cpp')
-rw-r--r--src/plugins/genericprojectmanager/genericproject.cpp49
1 files changed, 40 insertions, 9 deletions
diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp
index 4fe7138c83..c3b82136e6 100644
--- a/src/plugins/genericprojectmanager/genericproject.cpp
+++ b/src/plugins/genericprojectmanager/genericproject.cpp
@@ -141,18 +141,25 @@ static QStringList readLines(const QString &absoluteFileName)
bool GenericProject::saveRawFileList(const QStringList &rawFileList)
{
+ bool result = saveRawList(rawFileList, filesFileName());
+ refresh(GenericProject::Files);
+ return result;
+}
+
+bool GenericProject::saveRawList(const QStringList &rawList, const QString &fileName)
+{
+ DocumentManager::expectFileChange(fileName);
// Make sure we can open the file for writing
- Utils::FileSaver saver(filesFileName(), QIODevice::Text);
+ Utils::FileSaver saver(fileName, QIODevice::Text);
if (!saver.hasError()) {
QTextStream stream(saver.file());
- foreach (const QString &filePath, rawFileList)
+ foreach (const QString &filePath, rawList)
stream << filePath << QLatin1Char('\n');
saver.setResult(&stream);
}
- if (!saver.finalize(ICore::mainWindow()))
- return false;
- refresh(GenericProject::Files);
- return true;
+ bool result = saver.finalize(ICore::mainWindow());
+ DocumentManager::unexpectFileChange(fileName);
+ return result;
}
bool GenericProject::addFiles(const QStringList &filePaths)
@@ -163,7 +170,30 @@ bool GenericProject::addFiles(const QStringList &filePaths)
foreach (const QString &filePath, filePaths)
newList.append(baseDir.relativeFilePath(filePath));
- return saveRawFileList(newList);
+
+ QSet<QString> includes = projectIncludePaths().toSet();
+ QSet<QString> toAdd;
+
+ foreach (const QString &filePaths, filePaths) {
+ QString directory = QFileInfo(filePaths).absolutePath();
+ if (!includes.contains(directory)
+ && !toAdd.contains(directory))
+ toAdd << directory;
+ }
+
+ const QDir dir(projectDirectory().toString());
+ foreach (const QString &path, toAdd) {
+ QString relative = dir.relativeFilePath(path);
+ if (relative.isEmpty())
+ relative = QLatin1String(".");
+ m_rawProjectIncludePaths.append(relative);
+ }
+
+ bool result = saveRawList(newList, filesFileName());
+ result &= saveRawList(m_rawProjectIncludePaths, includesFileName());
+ refresh(GenericProject::Everything);
+
+ return result;
}
bool GenericProject::removeFiles(const QStringList &filePaths)
@@ -214,7 +244,8 @@ void GenericProject::parseProject(RefreshOptions options)
}
if (options & Configuration) {
- m_projectIncludePaths = processEntries(readLines(includesFileName()));
+ m_rawProjectIncludePaths = readLines(includesFileName());
+ m_projectIncludePaths = processEntries(m_rawProjectIncludePaths);
// TODO: Possibly load some configuration from the project file
//QSettings projectInfo(m_fileName, QSettings::IniFormat);
@@ -227,7 +258,7 @@ void GenericProject::parseProject(RefreshOptions options)
void GenericProject::refresh(RefreshOptions options)
{
QSet<QString> oldFileList;
- if (!(options & Configuration))
+ if (options & Files)
oldFileList = m_files.toSet();
parseProject(options);