forked from qt-creator/qt-creator
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:
@@ -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),
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user