diff --git a/src/plugins/qtsupport/exampleslistmodel.cpp b/src/plugins/qtsupport/exampleslistmodel.cpp index 885f3cd59d2eb5bb3032f0846a64cbcebc381d4d..860a3bacf87556dd2a25260c1814d161a3e0874f 100644 --- a/src/plugins/qtsupport/exampleslistmodel.cpp +++ b/src/plugins/qtsupport/exampleslistmodel.cpp @@ -71,60 +71,17 @@ QtVersionsModel::QtVersionsModel(ExamplesListModel *examplesModel, QObject *pare roleNames[Qt::UserRole + 1] = "text"; roleNames[Qt::UserRole + 2] = "QtId"; setRoleNames(roleNames); -} - -int QtVersionsModel::findHighestQtVersion() -{ - QList<BaseQtVersion *> qtVersions = examplesModel->qtVersions(); - - BaseQtVersion *newVersion = 0; - - foreach (BaseQtVersion *version, qtVersions) { - if (!newVersion) { - newVersion = version; - } else { - if (version->qtVersion() > newVersion->qtVersion()) { - newVersion = version; - } else if (version->qtVersion() == newVersion->qtVersion() - && version->uniqueId() < newVersion->uniqueId()) { - newVersion = version; - } - } - } - if (!newVersion && !qtVersions.isEmpty()) - newVersion = qtVersions.first(); - - if (!newVersion) - return noQtVersionsId; - - return newVersion->uniqueId(); + connect(examplesModel, SIGNAL(qtVersionsUpdated()), this, SLOT(update())); } -void QtVersionsModel::setupQtVersions() +void QtVersionsModel::update() { beginResetModel(); clear(); QList<BaseQtVersion *> qtVersions = examplesModel->qtVersions(); - int qtVersionSetting = uniqueQtVersionIdSetting(); - int newQtVersionSetting = noQtVersionsId; - if (qtVersionSetting != noQtVersionsId) { - //ensure that the unique Qt id is valid - foreach (BaseQtVersion *version, qtVersions) { - if (version->uniqueId() == qtVersionSetting) - newQtVersionSetting = qtVersionSetting; - } - } - - if (newQtVersionSetting == noQtVersionsId) - newQtVersionSetting = findHighestQtVersion(); - - if (newQtVersionSetting != qtVersionSetting) - setUniqueQtVersionIdSetting(newQtVersionSetting); - - foreach (BaseQtVersion *version, qtVersions) { QStandardItem *newItem = new QStandardItem(); newItem->setData(version->displayName(), Qt::UserRole + 1); @@ -458,8 +415,7 @@ void ExamplesListModel::updateExamples() emit tagsUpdated(); } - -QList<QtSupport::BaseQtVersion*> ExamplesListModel::qtVersions() const +void ExamplesListModel::updateQtVersions() { QList<BaseQtVersion*> versions = QtVersionManager::validVersions(); @@ -477,7 +433,59 @@ QList<QtSupport::BaseQtVersion*> ExamplesListModel::qtVersions() const if (defaultVersion && versions.contains(defaultVersion)) versions.move(versions.indexOf(defaultVersion), 0); - return versions; + if (m_qtVersions == versions) + return; + + m_qtVersions = versions; + emit qtVersionsUpdated(); + + // determine Qt version to show + int newUniqueId = noQtVersionsId; + if (m_uniqueQtId != noQtVersionsId) { + //ensure that the unique Qt id is valid + foreach (BaseQtVersion *version, m_qtVersions) { + if (version->uniqueId() == m_uniqueQtId) + newUniqueId = m_uniqueQtId; + } + } + + if (newUniqueId == noQtVersionsId) + newUniqueId = findHighestQtVersion(); + + if (newUniqueId != m_uniqueQtId) { + m_uniqueQtId = newUniqueId; + setUniqueQtVersionIdSetting(m_uniqueQtId); + emit selectedQtVersionChanged(); + } + +} + +int ExamplesListModel::findHighestQtVersion() const +{ + QList<BaseQtVersion *> versions = qtVersions(); + + BaseQtVersion *newVersion = 0; + + foreach (BaseQtVersion *version, versions) { + if (!newVersion) { + newVersion = version; + } else { + if (version->qtVersion() > newVersion->qtVersion()) { + newVersion = version; + } else if (version->qtVersion() == newVersion->qtVersion() + && version->uniqueId() < newVersion->uniqueId()) { + newVersion = version; + } + } + } + + if (!newVersion && !versions.isEmpty()) + newVersion = versions.first(); + + if (!newVersion) + return noQtVersionsId; + + return newVersion->uniqueId(); } QStringList ExamplesListModel::exampleSources(QString *examplesInstallPath, QString *demosInstallPath, @@ -650,12 +658,27 @@ QStringList ExamplesListModel::tags() const return m_tags; } -void ExamplesListModel::setUniqueQtId(int id) +void ExamplesListModel::update() { - m_uniqueQtId = id; + updateQtVersions(); updateExamples(); } +int ExamplesListModel::selectedQtVersion() const +{ + return m_uniqueQtId; +} + +void ExamplesListModel::selectQtVersion(int id) +{ + if (m_uniqueQtId != id) { + m_uniqueQtId = id; + setUniqueQtVersionIdSetting(id); + updateExamples(); + emit selectedQtVersionChanged(); + } +} + ExamplesListModelFilter::ExamplesListModelFilter(ExamplesListModel *sourceModel, QObject *parent) : QSortFilterProxyModel(parent), m_showTutorialsOnly(true), @@ -676,6 +699,8 @@ ExamplesListModelFilter::ExamplesListModelFilter(ExamplesListModel *sourceModel, connect(this, SIGNAL(showTutorialsOnlyChanged()), SLOT(updateFilter())); + connect(m_sourceModel, SIGNAL(selectedQtVersionChanged()), this, SIGNAL(qtVersionIndexChanged())); + setSourceModel(m_sourceModel); } @@ -764,8 +789,7 @@ void ExamplesListModelFilter::filterForQtById(int id) if (m_blockIndexUpdate || !m_initalized) return; - setUniqueQtVersionIdSetting(id); - m_sourceModel->setUniqueQtId(id); + m_sourceModel->selectQtVersion(id); } void ExamplesListModelFilter::setShowTutorialsOnly(bool showTutorialsOnly) @@ -777,9 +801,7 @@ void ExamplesListModelFilter::setShowTutorialsOnly(bool showTutorialsOnly) void ExamplesListModelFilter::handleQtVersionsChanged() { m_blockIndexUpdate = true; - m_qtVersionModel->setupQtVersions(); - m_sourceModel->updateExamples(); - emit qtVersionIndexChanged(); + m_sourceModel->update(); m_blockIndexUpdate = false; } @@ -812,7 +834,6 @@ void ExamplesListModelFilter::tryToInitialize() connect(ProjectExplorer::KitManager::instance(), SIGNAL(defaultkitChanged()), this, SLOT(handleQtVersionsChanged())); handleQtVersionsChanged(); - m_sourceModel->updateExamples(); } } @@ -826,8 +847,8 @@ void ExamplesListModelFilter::delayedUpdateFilter() int ExamplesListModelFilter::qtVersionIndex() const { - int id = uniqueQtVersionIdSetting(); - int index = m_qtVersionModel->indexForUniqueId(id); + int id = m_sourceModel->selectedQtVersion(); + int index = m_qtVersionModel->indexForUniqueId(id); return index; } diff --git a/src/plugins/qtsupport/exampleslistmodel.h b/src/plugins/qtsupport/exampleslistmodel.h index 24a0b2ced8fc4920adf294e2d8743c94e2f0dd8d..a269a4f3125bd8fd9e441f6fc1ea52a52935101d 100644 --- a/src/plugins/qtsupport/exampleslistmodel.h +++ b/src/plugins/qtsupport/exampleslistmodel.h @@ -49,11 +49,11 @@ class QtVersionsModel : public QStandardItemModel public: QtVersionsModel(ExamplesListModel *examplesModel, QObject *parent); - int findHighestQtVersion(); - void setupQtVersions(); int indexForUniqueId(int uniqueId); public slots: + void update(); + QVariant get(int i); QVariant getId(int i); @@ -110,15 +110,25 @@ public: void beginReset() { beginResetModel(); } void endReset() { endResetModel(); } - void setUniqueQtId(int id); - void updateExamples(); + void update(); + + int selectedQtVersion() const; + void selectQtVersion(int id); - QList<BaseQtVersion*> qtVersions() const; + QList<BaseQtVersion*> qtVersions() const { return m_qtVersions; } signals: + void qtVersionsUpdated(); + void selectedQtVersionChanged(); void tagsUpdated(); private: + void updateQtVersions(); + void updateExamples(); + + void updateSelectedQtVersion(); + int findHighestQtVersion() const; + void parseExamples(QXmlStreamReader *reader, const QString &projectsOffset, const QString &examplesInstallPath); void parseDemos(QXmlStreamReader *reader, const QString &projectsOffset, @@ -128,6 +138,7 @@ private: QString *examplesFallback, QString *demosFallback, QString *sourceFallback); + QList<BaseQtVersion*> m_qtVersions; QList<ExampleItem> m_exampleItems; QStringList m_tags; int m_uniqueQtId;