diff options
author | hjk <qthjk@ovi.com> | 2012-12-19 10:19:35 +0100 |
---|---|---|
committer | hjk <qthjk@ovi.com> | 2012-12-20 16:09:51 +0100 |
commit | 96788d299079a46884a1ea46136b7a7b06d84f4e (patch) | |
tree | eb80084c667732fe7af08a2064bcbb32241e234d /src/plugins/qtsupport/exampleslistmodel.cpp | |
parent | 4f22904b6ed8d0ec3fd9b5c8e174f07b9affce2a (diff) | |
download | qt-creator-96788d299079a46884a1ea46136b7a7b06d84f4e.tar.gz |
Cleanup and simplify ExamplesListModel implementation.
Change-Id: Ie93eefa638560c91aaf83e6878466d97393bde72
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
Diffstat (limited to 'src/plugins/qtsupport/exampleslistmodel.cpp')
-rw-r--r-- | src/plugins/qtsupport/exampleslistmodel.cpp | 109 |
1 files changed, 38 insertions, 71 deletions
diff --git a/src/plugins/qtsupport/exampleslistmodel.cpp b/src/plugins/qtsupport/exampleslistmodel.cpp index 653821ab92..94aac27015 100644 --- a/src/plugins/qtsupport/exampleslistmodel.cpp +++ b/src/plugins/qtsupport/exampleslistmodel.cpp @@ -29,28 +29,23 @@ #include "exampleslistmodel.h" -#include <QFile> +#include <QDebug> #include <QDir> +#include <QFile> #include <QUrl> #include <QXmlStreamReader> -#include <QDebug> - -#include <coreplugin/icore.h> #include <coreplugin/helpmanager.h> +#include <coreplugin/icore.h> +#include <projectexplorer/kitmanager.h> +#include <qtsupport/qtkitinformation.h> #include <qtsupport/qtversionmanager.h> +#include <utils/environment.h> #include <utils/qtcassert.h> -#include <utils/environment.h> -#include <projectexplorer/kitmanager.h> -#include <qtsupport/qtkitinformation.h> #include <algorithm> -using QtSupport::QtVersionManager; -using QtSupport::BaseQtVersion; - namespace QtSupport { - namespace Internal { ExamplesListModel::ExamplesListModel(QObject *parent) : @@ -85,7 +80,7 @@ ExamplesListModel::ExamplesListModel(QObject *parent) : SLOT(handleQtVersionsChanged())); } -static inline QString fixStringForTags(const QString &string) +static QString fixStringForTags(const QString &string) { QString returnString = string; returnString.remove(QLatin1String("<i>")); @@ -95,7 +90,7 @@ static inline QString fixStringForTags(const QString &string) return returnString; } -static inline QStringList trimStringList(const QStringList &stringlist) +static QStringList trimStringList(const QStringList &stringlist) { QStringList returnList; foreach (const QString &string, stringlist) @@ -112,7 +107,7 @@ static QString relativeOrInstallPath(const QString &path, const QString &manifes const QString installResolvedPath = installPath + slash + path; if (QFile::exists(relativeResolvedPath)) return relativeResolvedPath; - else if (QFile::exists(installResolvedPath)) + if (QFile::exists(installResolvedPath)) return installResolvedPath; // doesn't exist, just return relative return relativeResolvedPath; @@ -151,11 +146,9 @@ static bool isValidExampleOrDemo(ExampleItem &item) return ok || debugExamples(); } -QList<ExampleItem> ExamplesListModel::parseExamples(QXmlStreamReader *reader, - const QString &projectsOffset, - const QString &examplesInstallPath) +void ExamplesListModel::parseExamples(QXmlStreamReader *reader, + const QString &projectsOffset, const QString &examplesInstallPath) { - QList<ExampleItem> examples; ExampleItem item; const QChar slash = QLatin1Char('/'); while (!reader->atEnd()) { @@ -175,7 +168,7 @@ QList<ExampleItem> ExamplesListModel::parseExamples(QXmlStreamReader *reader, item.filesToOpen.append(relativeOrInstallPath(reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement), projectsOffset, examplesInstallPath)); } else if (reader->name() == QLatin1String("description")) { - item.description = fixStringForTags(reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement)); + item.description = fixStringForTags(reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement)); } else if (reader->name() == QLatin1String("dependency")) { item.dependencies.append(projectsOffset + slash + reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement)); } else if (reader->name() == QLatin1String("tags")) { @@ -188,23 +181,20 @@ QList<ExampleItem> ExamplesListModel::parseExamples(QXmlStreamReader *reader, case QXmlStreamReader::EndElement: if (reader->name() == QLatin1String("example")) { if (isValidExampleOrDemo(item)) - examples.append(item); + m_exampleItems.append(item); } else if (reader->name() == QLatin1String("examples")) { - return examples; + return; } break; default: // nothing break; } } - return examples; } -QList<ExampleItem> ExamplesListModel::parseDemos(QXmlStreamReader *reader, - const QString &projectsOffset, - const QString &demosInstallPath) +void ExamplesListModel::parseDemos(QXmlStreamReader *reader, + const QString &projectsOffset, const QString &demosInstallPath) { - QList<ExampleItem> demos; ExampleItem item; const QChar slash = QLatin1Char('/'); while (!reader->atEnd()) { @@ -234,21 +224,19 @@ QList<ExampleItem> ExamplesListModel::parseDemos(QXmlStreamReader *reader, case QXmlStreamReader::EndElement: if (reader->name() == QLatin1String("demo")) { if (isValidExampleOrDemo(item)) - demos.append(item); + m_exampleItems.append(item); } else if (reader->name() == QLatin1String("demos")) { - return demos; + return; } break; default: // nothing break; } } - return demos; } -QList<ExampleItem> ExamplesListModel::parseTutorials(QXmlStreamReader* reader, const QString& projectsOffset) +void ExamplesListModel::parseTutorials(QXmlStreamReader *reader, const QString &projectsOffset) { - QList<ExampleItem> tutorials; ExampleItem item; const QChar slash = QLatin1Char('/'); while (!reader->atEnd()) { @@ -285,16 +273,14 @@ QList<ExampleItem> ExamplesListModel::parseTutorials(QXmlStreamReader* reader, c break; case QXmlStreamReader::EndElement: if (reader->name() == QLatin1String("tutorial")) - tutorials.append(item); + m_exampleItems.append(item); else if (reader->name() == QLatin1String("tutorials")) - return tutorials; + return; break; default: // nothing break; } } - - return tutorials; } void ExamplesListModel::handleQtVersionsChanged() @@ -305,15 +291,20 @@ void ExamplesListModel::handleQtVersionsChanged() void ExamplesListModel::updateExamples() { - clear(); QString examplesInstallPath; QString demosInstallPath; QString examplesFallback; QString demosFallback; QString sourceFallback; - foreach (const QString &exampleSource, - exampleSources(&examplesInstallPath, &demosInstallPath, - &examplesFallback, &demosFallback, &sourceFallback)) { + + QStringList sources = exampleSources(&examplesInstallPath, &demosInstallPath, + &examplesFallback, &demosFallback, &sourceFallback); + + beginResetModel(); + m_tags.clear(); + m_exampleItems.clear(); + + foreach (const QString &exampleSource, sources) { QFile exampleFile(exampleSource); if (!exampleFile.open(QIODevice::ReadOnly)) { if (debugExamples()) @@ -345,11 +336,11 @@ void ExamplesListModel::updateExamples() switch (reader.readNext()) { case QXmlStreamReader::StartElement: if (reader.name() == QLatin1String("examples")) - addItems(parseExamples(&reader, examplesDir.path(), examplesInstallPath)); + parseExamples(&reader, examplesDir.path(), examplesInstallPath); else if (reader.name() == QLatin1String("demos")) - addItems(parseDemos(&reader, demosDir.path(), demosInstallPath)); + parseDemos(&reader, demosDir.path(), demosInstallPath); else if (reader.name() == QLatin1String("tutorials")) - addItems(parseTutorials(&reader, examplesDir.path())); + parseTutorials(&reader, examplesDir.path()); break; default: // nothing break; @@ -358,6 +349,7 @@ void ExamplesListModel::updateExamples() if (reader.hasError() && debugExamples()) qWarning() << QString::fromLatin1("ERROR: Could not parse file as XML document ('%1')").arg(exampleSource); } + endResetModel(); m_tags.sort(); m_tags.erase(std::unique(m_tags.begin(), m_tags.end()), m_tags.end()); @@ -476,40 +468,21 @@ QStringList ExamplesListModel::exampleSources(QString *examplesInstallPath, QStr return sources; } -void ExamplesListModel::clear() -{ - if (exampleItems.count() > 0) { - beginRemoveRows(QModelIndex(), 0, exampleItems.size()-1); - exampleItems.clear(); - endRemoveRows(); - } - m_tags.clear(); -} - -void ExamplesListModel::addItems(const QList<ExampleItem> &newItems) -{ - if (newItems.isEmpty()) - return; - beginInsertRows(QModelIndex(), exampleItems.size(), exampleItems.size() - 1 + newItems.size()); - exampleItems.append(newItems); - endInsertRows(); -} - int ExamplesListModel::rowCount(const QModelIndex &) const { ensureInitialized(); - return exampleItems.size(); + return m_exampleItems.size(); } QVariant ExamplesListModel::data(const QModelIndex &index, int role) const { ensureInitialized(); - if (!index.isValid() || index.row()+1 > exampleItems.count()) { + if (!index.isValid() || index.row()+1 > m_exampleItems.count()) { qDebug() << Q_FUNC_INFO << "invalid index requested"; return QVariant(); } - ExampleItem item = exampleItems.at(index.row()); + ExampleItem item = m_exampleItems.at(index.row()); switch (role) { case Qt::DisplayRole: // for search only @@ -548,7 +521,6 @@ QVariant ExamplesListModel::data(const QModelIndex &index, int role) const qDebug() << Q_FUNC_INFO << "role type not supported"; return QVariant(); } - } QStringList ExamplesListModel::tags() const @@ -626,7 +598,6 @@ bool ExamplesListModelFilter::filterAcceptsRow(int sourceRow, const QModelIndex const QString description = sourceModel()->index(sourceRow, 0, sourceParent).data(Description).toString(); const QString name = sourceModel()->index(sourceRow, 0, sourceParent).data(Name).toString(); - foreach (const QString &subString, m_searchString) { bool wordMatch = false; wordMatch |= (bool)name.contains(subString, Qt::CaseInsensitive); @@ -641,11 +612,7 @@ bool ExamplesListModelFilter::filterAcceptsRow(int sourceRow, const QModelIndex } } - bool ok = QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent); - if (!ok) - return false; - - return true; + return QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent); } int ExamplesListModelFilter::rowCount(const QModelIndex &parent) const |