Unify selection of 'valid' Qt versions for welcome page

Change-Id: I79ba4ac9f132a535efd9d362790b8e1d2b62d900
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com>
This commit is contained in:
Kai Koehne
2014-02-03 17:17:08 +01:00
parent fdb543620e
commit dc72ebd273
2 changed files with 55 additions and 47 deletions

View File

@@ -63,8 +63,9 @@ void setUniqueQtVersionIdSetting(int id)
settings->setValue(QLatin1String(currentQtVersionFilterSettingsKeyC), id); settings->setValue(QLatin1String(currentQtVersionFilterSettingsKeyC), id);
} }
QtVersionsModel::QtVersionsModel(QObject *parent) QtVersionsModel::QtVersionsModel(ExamplesListModel *examplesModel, QObject *parent) :
: QStandardItemModel(parent) QStandardItemModel(parent),
examplesModel(examplesModel)
{ {
QHash<int, QByteArray> roleNames; QHash<int, QByteArray> roleNames;
roleNames[Qt::UserRole + 1] = "text"; roleNames[Qt::UserRole + 1] = "text";
@@ -74,22 +75,19 @@ QtVersionsModel::QtVersionsModel(QObject *parent)
int QtVersionsModel::findHighestQtVersion() int QtVersionsModel::findHighestQtVersion()
{ {
QList<BaseQtVersion *> qtVersions = QtVersionManager::validVersions(); QList<BaseQtVersion *> qtVersions = examplesModel->qtVersions();
BaseQtVersion *newVersion = 0; BaseQtVersion *newVersion = 0;
foreach (BaseQtVersion *version, qtVersions) { foreach (BaseQtVersion *version, qtVersions) {
if (!newVersion) {
if (version->isValid() && version->hasDemos() && version->hasExamples()) { newVersion = version;
if (!newVersion) { } else {
if (version->qtVersion() > newVersion->qtVersion()) {
newVersion = version;
} else if (version->qtVersion() == newVersion->qtVersion()
&& version->uniqueId() < newVersion->uniqueId()) {
newVersion = version; newVersion = version;
} else {
if (version->qtVersion() > newVersion->qtVersion()) {
newVersion = version;
} else if (version->qtVersion() == newVersion->qtVersion()
&& version->uniqueId() < newVersion->uniqueId()) {
newVersion = version;
}
} }
} }
} }
@@ -108,12 +106,7 @@ void QtVersionsModel::setupQtVersions()
beginResetModel(); beginResetModel();
clear(); clear();
// prioritize default qt version QList<BaseQtVersion *> qtVersions = examplesModel->qtVersions();
QList<BaseQtVersion *> qtVersions = QtVersionManager::validVersions();
ProjectExplorer::Kit *defaultKit = ProjectExplorer::KitManager::defaultKit();
BaseQtVersion *defaultVersion = QtKitInformation::qtVersion(defaultKit);
if (defaultVersion && qtVersions.contains(defaultVersion))
qtVersions.move(qtVersions.indexOf(defaultVersion), 0);
int qtVersionSetting = uniqueQtVersionIdSetting(); int qtVersionSetting = uniqueQtVersionIdSetting();
int newQtVersionSetting = noQtVersionsId; int newQtVersionSetting = noQtVersionsId;
@@ -133,12 +126,10 @@ void QtVersionsModel::setupQtVersions()
foreach (BaseQtVersion *version, qtVersions) { foreach (BaseQtVersion *version, qtVersions) {
if (version->hasDemos() || version->hasExamples()) { QStandardItem *newItem = new QStandardItem();
QStandardItem *newItem = new QStandardItem(); newItem->setData(version->displayName(), Qt::UserRole + 1);
newItem->setData(version->displayName(), Qt::UserRole + 1); newItem->setData(version->uniqueId(), Qt::UserRole + 2);
newItem->setData(version->uniqueId(), Qt::UserRole + 2); appendRow(newItem);
appendRow(newItem);
}
} }
endResetModel(); endResetModel();
} }
@@ -467,6 +458,28 @@ void ExamplesListModel::updateExamples()
emit tagsUpdated(); emit tagsUpdated();
} }
QList<QtSupport::BaseQtVersion*> ExamplesListModel::qtVersions() const
{
QList<BaseQtVersion*> versions = QtVersionManager::validVersions();
QMutableListIterator<BaseQtVersion*> iter(versions);
while (iter.hasNext()) {
BaseQtVersion *version = iter.next();
if (!version->hasExamples()
&& !version->hasDemos())
iter.remove();
}
// prioritize default qt version
ProjectExplorer::Kit *defaultKit = ProjectExplorer::KitManager::defaultKit();
BaseQtVersion *defaultVersion = QtKitInformation::qtVersion(defaultKit);
if (defaultVersion && versions.contains(defaultVersion))
versions.move(versions.indexOf(defaultVersion), 0);
return versions;
}
QStringList ExamplesListModel::exampleSources(QString *examplesInstallPath, QString *demosInstallPath, QStringList ExamplesListModel::exampleSources(QString *examplesInstallPath, QString *demosInstallPath,
QString *examplesFallback, QString *demosFallback, QString *examplesFallback, QString *demosFallback,
QString *sourceFallback) QString *sourceFallback)
@@ -510,21 +523,12 @@ QStringList ExamplesListModel::exampleSources(QString *examplesInstallPath, QStr
QString potentialSourceFallback; QString potentialSourceFallback;
const QStringList pattern(QLatin1String("*.xml")); const QStringList pattern(QLatin1String("*.xml"));
// prioritize default qt version foreach (BaseQtVersion *version, qtVersions()) {
QList<BaseQtVersion *> qtVersions = QtVersionManager::validVersions();
ProjectExplorer::Kit *defaultKit = ProjectExplorer::KitManager::defaultKit();
BaseQtVersion *defaultVersion = QtKitInformation::qtVersion(defaultKit);
if (defaultVersion && qtVersions.contains(defaultVersion))
qtVersions.move(qtVersions.indexOf(defaultVersion), 0);
foreach (BaseQtVersion *version, qtVersions) {
//filter for qt versions //filter for qt versions
if (version->uniqueId() != m_uniqueQtId && m_uniqueQtId != noQtVersionsId) if (version->uniqueId() != m_uniqueQtId && m_uniqueQtId != noQtVersionsId)
continue; continue;
// qt5 with examples OR demos manifest if (version->qtVersion().majorVersion == 5) {
if (version->qtVersion().majorVersion == 5 && (version->hasExamples() || version->hasDemos())) {
// examples directory in Qt5 is under the qtbase submodule, // examples directory in Qt5 is under the qtbase submodule,
// search other submodule directories for further manifest files // search other submodule directories for further manifest files
QDir qt5docPath = QDir(version->documentationPath()); QDir qt5docPath = QDir(version->documentationPath());
@@ -532,10 +536,8 @@ QStringList ExamplesListModel::exampleSources(QString *examplesInstallPath, QStr
const QStringList demosPattern(QLatin1String("demos-manifest.xml")); const QStringList demosPattern(QLatin1String("demos-manifest.xml"));
QFileInfoList fis; QFileInfoList fis;
foreach (QFileInfo subDir, qt5docPath.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot)) { foreach (QFileInfo subDir, qt5docPath.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot)) {
if (version->hasExamples()) fis << QDir(subDir.absoluteFilePath()).entryInfoList(examplesPattern);
fis << QDir(subDir.absoluteFilePath()).entryInfoList(examplesPattern); fis << QDir(subDir.absoluteFilePath()).entryInfoList(demosPattern);
if (version->hasDemos())
fis << QDir(subDir.absoluteFilePath()).entryInfoList(demosPattern);
} }
if (!fis.isEmpty()) { if (!fis.isEmpty()) {
foreach (const QFileInfo &fi, fis) foreach (const QFileInfo &fi, fis)
@@ -549,17 +551,15 @@ QStringList ExamplesListModel::exampleSources(QString *examplesInstallPath, QStr
} }
QFileInfoList fis; QFileInfoList fis;
if (version->hasExamples()) fis << QDir(version->examplesPath()).entryInfoList(pattern);
fis << QDir(version->examplesPath()).entryInfoList(pattern); fis << QDir(version->demosPath()).entryInfoList(pattern);
if (version->hasDemos())
fis << QDir(version->demosPath()).entryInfoList(pattern);
if (!fis.isEmpty()) { if (!fis.isEmpty()) {
foreach (const QFileInfo &fi, fis) foreach (const QFileInfo &fi, fis)
sources.append(fi.filePath()); sources.append(fi.filePath());
return sources; return sources;
} }
// check if this Qt version would be the preferred fallback, Qt 4 only // check if this Qt version would be the preferred fallback, Qt 4 only
if (version->qtVersion().majorVersion == 4 && version->hasExamples() && version->hasDemos()) { // cached, so no performance hit if (version->qtVersion().majorVersion == 4) { // cached, so no performance hit
if (potentialExamplesFallback.isEmpty()) { if (potentialExamplesFallback.isEmpty()) {
potentialExamplesFallback = version->examplesPath(); potentialExamplesFallback = version->examplesPath();
potentialDemosFallback = version->demosPath(); potentialDemosFallback = version->demosPath();
@@ -661,7 +661,7 @@ ExamplesListModelFilter::ExamplesListModelFilter(ExamplesListModel *sourceModel,
m_showTutorialsOnly(true), m_showTutorialsOnly(true),
m_sourceModel(sourceModel), m_sourceModel(sourceModel),
m_timerId(0), m_timerId(0),
m_qtVersionModel(new QtVersionsModel(this)), m_qtVersionModel(new QtVersionsModel(sourceModel, this)),
m_blockIndexUpdate(false), m_blockIndexUpdate(false),
m_qtVersionManagerInitialized(false), m_qtVersionManagerInitialized(false),
m_helpManagerInitialized(false), m_helpManagerInitialized(false),

View File

@@ -35,16 +35,19 @@
#include <QStandardItemModel> #include <QStandardItemModel>
#include <QStringList> #include <QStringList>
#include <QXmlStreamReader> #include <QXmlStreamReader>
#include <qtsupport/baseqtversion.h>
namespace QtSupport { namespace QtSupport {
namespace Internal { namespace Internal {
class ExamplesListModel;
class QtVersionsModel : public QStandardItemModel class QtVersionsModel : public QStandardItemModel
{ {
Q_OBJECT Q_OBJECT
public: public:
QtVersionsModel(QObject *parent); QtVersionsModel(ExamplesListModel *examplesModel, QObject *parent);
int findHighestQtVersion(); int findHighestQtVersion();
void setupQtVersions(); void setupQtVersions();
@@ -53,6 +56,9 @@ public:
public slots: public slots:
QVariant get(int i); QVariant get(int i);
QVariant getId(int i); QVariant getId(int i);
private:
ExamplesListModel *examplesModel;
}; };
enum ExampleRoles enum ExampleRoles
@@ -107,6 +113,8 @@ public:
void setUniqueQtId(int id); void setUniqueQtId(int id);
void updateExamples(); void updateExamples();
QList<BaseQtVersion*> qtVersions() const;
signals: signals:
void tagsUpdated(); void tagsUpdated();