summaryrefslogtreecommitdiff
path: root/src/plugins/qtsupport/exampleslistmodel.cpp
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@digia.com>2012-11-27 17:13:02 +0100
committerhjk <qthjk@ovi.com>2012-11-27 17:54:47 +0100
commit110c31b1dac47c9c23abdcca23d0d52c60b509ca (patch)
treefe0e50228bdcdceafa8fe7bbf956be4d7bf3f2b0 /src/plugins/qtsupport/exampleslistmodel.cpp
parentfbe6834a167d73c2031598fb4099c9fba18639d1 (diff)
downloadqt-creator-110c31b1dac47c9c23abdcca23d0d52c60b509ca.tar.gz
Resolve demos and examples also relative to qt install paths.
Qt5 has the manifest files in QT_INSTALL_DOCS but the actual examples in QT_INSTALL_EXAMPLES/DEMOS, which can be completely independent. The patch tries to resolves files relative to the manifest, and if that fails, relative to the install paths. Change-Id: I7d449e1edab01f18680a5ffe6edcb508e7b194f6 Reviewed-by: hjk <qthjk@ovi.com>
Diffstat (limited to 'src/plugins/qtsupport/exampleslistmodel.cpp')
-rw-r--r--src/plugins/qtsupport/exampleslistmodel.cpp50
1 files changed, 38 insertions, 12 deletions
diff --git a/src/plugins/qtsupport/exampleslistmodel.cpp b/src/plugins/qtsupport/exampleslistmodel.cpp
index 1b80b460a3..25af45834e 100644
--- a/src/plugins/qtsupport/exampleslistmodel.cpp
+++ b/src/plugins/qtsupport/exampleslistmodel.cpp
@@ -101,7 +101,23 @@ static inline QStringList trimStringList(const QStringList &stringlist)
return returnList;
}
-QList<ExampleItem> ExamplesListModel::parseExamples(QXmlStreamReader* reader, const QString& projectsOffset)
+static QString relativeOrInstallPath(const QString &path, const QString &manifestPath,
+ const QString &installPath)
+{
+ const QChar slash = QLatin1Char('/');
+ const QString relativeResolvedPath = manifestPath + slash + path;
+ const QString installResolvedPath = installPath + slash + path;
+ if (QFile::exists(relativeResolvedPath))
+ return relativeResolvedPath;
+ else if (QFile::exists(installResolvedPath))
+ return installResolvedPath;
+ // doesn't exist, just return relative
+ return relativeResolvedPath;
+}
+
+QList<ExampleItem> ExamplesListModel::parseExamples(QXmlStreamReader *reader,
+ const QString &projectsOffset,
+ const QString &examplesInstallPath)
{
QList<ExampleItem> examples;
ExampleItem item;
@@ -116,12 +132,12 @@ QList<ExampleItem> ExamplesListModel::parseExamples(QXmlStreamReader* reader, co
item.name = attributes.value(QLatin1String("name")).toString();
item.projectPath = attributes.value(QLatin1String("projectPath")).toString();
item.hasSourceCode = !item.projectPath.isEmpty();
- item.projectPath.prepend(slash);
- item.projectPath.prepend(projectsOffset);
+ item.projectPath = relativeOrInstallPath(item.projectPath, projectsOffset, examplesInstallPath);
item.imageUrl = attributes.value(QLatin1String("imageUrl")).toString();
item.docUrl = attributes.value(QLatin1String("docUrl")).toString();
} else if (reader->name() == QLatin1String("fileToOpen")) {
- item.filesToOpen.append(projectsOffset + slash + reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement));
+ item.filesToOpen.append(relativeOrInstallPath(reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement),
+ projectsOffset, examplesInstallPath));
} else if (reader->name() == QLatin1String("description")) {
item.description = fixStringForTags(reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement));
} else if (reader->name() == QLatin1String("dependency")) {
@@ -151,7 +167,9 @@ QList<ExampleItem> ExamplesListModel::parseExamples(QXmlStreamReader* reader, co
return examples;
}
-QList<ExampleItem> ExamplesListModel::parseDemos(QXmlStreamReader* reader, const QString& projectsOffset)
+QList<ExampleItem> ExamplesListModel::parseDemos(QXmlStreamReader *reader,
+ const QString &projectsOffset,
+ const QString &demosInstallPath)
{
QList<ExampleItem> demos;
ExampleItem item;
@@ -166,12 +184,12 @@ QList<ExampleItem> ExamplesListModel::parseDemos(QXmlStreamReader* reader, const
item.name = attributes.value(QLatin1String("name")).toString();
item.projectPath = attributes.value(QLatin1String("projectPath")).toString();
item.hasSourceCode = !item.projectPath.isEmpty();
- item.projectPath.prepend(slash);
- item.projectPath.prepend(projectsOffset);
+ item.projectPath = relativeOrInstallPath(item.projectPath, projectsOffset, demosInstallPath);
item.imageUrl = attributes.value(QLatin1String("imageUrl")).toString();
item.docUrl = attributes.value(QLatin1String("docUrl")).toString();
} else if (reader->name() == QLatin1String("fileToOpen")) {
- item.filesToOpen.append(projectsOffset + slash + reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement));
+ item.filesToOpen.append(relativeOrInstallPath(reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement),
+ projectsOffset, demosInstallPath));
} else if (reader->name() == QLatin1String("description")) {
item.description = fixStringForTags(reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement));
} else if (reader->name() == QLatin1String("dependency")) {
@@ -258,11 +276,14 @@ void ExamplesListModel::handleQtVersionsChanged()
void ExamplesListModel::updateExamples()
{
clear();
+ QString examplesInstallPath;
+ QString demosInstallPath;
QString examplesFallback;
QString demosFallback;
QString sourceFallback;
foreach (const QString &exampleSource,
- exampleSources(&examplesFallback, &demosFallback, &sourceFallback)) {
+ exampleSources(&examplesInstallPath, &demosInstallPath,
+ &examplesFallback, &demosFallback, &sourceFallback)) {
QFile exampleFile(exampleSource);
if (!exampleFile.open(QIODevice::ReadOnly)) {
qDebug() << Q_FUNC_INFO << "Could not open file" << exampleSource;
@@ -291,9 +312,9 @@ void ExamplesListModel::updateExamples()
switch (reader.readNext()) {
case QXmlStreamReader::StartElement:
if (reader.name() == QLatin1String("examples"))
- addItems(parseExamples(&reader, examplesDir.path()));
+ addItems(parseExamples(&reader, examplesDir.path(), examplesInstallPath));
else if (reader.name() == QLatin1String("demos"))
- addItems(parseDemos(&reader, demosDir.path()));
+ addItems(parseDemos(&reader, demosDir.path(), demosInstallPath));
else if (reader.name() == QLatin1String("tutorials"))
addItems(parseTutorials(&reader, examplesDir.path()));
break;
@@ -310,7 +331,8 @@ void ExamplesListModel::updateExamples()
emit tagsUpdated();
}
-QStringList ExamplesListModel::exampleSources(QString *examplesFallback, QString *demosFallback,
+QStringList ExamplesListModel::exampleSources(QString *examplesInstallPath, QString *demosInstallPath,
+ QString *examplesFallback, QString *demosFallback,
QString *sourceFallback)
{
QTC_CHECK(examplesFallback);
@@ -379,6 +401,10 @@ QStringList ExamplesListModel::exampleSources(QString *examplesFallback, QString
if (!fis.isEmpty()) {
foreach (const QFileInfo &fi, fis)
sources.append(fi.filePath());
+ if (examplesInstallPath)
+ *examplesInstallPath = version->examplesPath();
+ if (demosInstallPath)
+ *demosInstallPath = version->demosPath();
return sources;
}
}