From 5c568a68d3e61de755cba5ab64b2bf64f107a797 Mon Sep 17 00:00:00 2001 From: Tobias Hunger <tobias.hunger@nokia.com> Date: Fri, 5 Mar 2010 10:19:20 +0100 Subject: [PATCH] Disable targets in the targetselectionpage * Allow to restrict possible targets in the targetselectionpage * Only show the page when it makes sense Reviewed-by: Friedemann Kleint --- .../qt4projectmanager/wizards/qtwizard.cpp | 7 +++- .../qt4projectmanager/wizards/qtwizard.h | 3 +- .../qt4projectmanager/wizards/targetspage.cpp | 38 ++++++++++++++++++- .../qt4projectmanager/wizards/targetspage.h | 5 +++ 4 files changed, 49 insertions(+), 4 deletions(-) diff --git a/src/plugins/qt4projectmanager/wizards/qtwizard.cpp b/src/plugins/qt4projectmanager/wizards/qtwizard.cpp index b4c3bddcfb4..3cec15fef80 100644 --- a/src/plugins/qt4projectmanager/wizards/qtwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/qtwizard.cpp @@ -203,11 +203,16 @@ void BaseQt4ProjectWizardDialog::addModulesPage(int id) } } -void BaseQt4ProjectWizardDialog::addTargetsPage(int id) +void BaseQt4ProjectWizardDialog::addTargetsPage(QSet<QString> targets, int id) { if (!m_targetsPage) return; + m_targetsPage->setValidTargets(targets); + + if (!m_targetsPage->needToDisplayPage()) + return; + if (id >= 0) setPage(id, m_targetsPage); else diff --git a/src/plugins/qt4projectmanager/wizards/qtwizard.h b/src/plugins/qt4projectmanager/wizards/qtwizard.h index ae9d5a3da53..67a5b3a2c88 100644 --- a/src/plugins/qt4projectmanager/wizards/qtwizard.h +++ b/src/plugins/qt4projectmanager/wizards/qtwizard.h @@ -35,6 +35,7 @@ #include <coreplugin/basefilewizard.h> +#include <QtCore/QSet> namespace Qt4ProjectManager { namespace Internal { @@ -101,7 +102,7 @@ protected: QWidget *parent = 0); void addModulesPage(int id = -1); - void addTargetsPage(int id = -1); + void addTargetsPage(QSet<QString> targets = QSet<QString>(), int id = -1); public: QString selectedModules() const; diff --git a/src/plugins/qt4projectmanager/wizards/targetspage.cpp b/src/plugins/qt4projectmanager/wizards/targetspage.cpp index 366c86a2911..eca5cf9ea67 100644 --- a/src/plugins/qt4projectmanager/wizards/targetspage.cpp +++ b/src/plugins/qt4projectmanager/wizards/targetspage.cpp @@ -100,11 +100,28 @@ TargetsPage::TargetsPage(QWidget *parent) emit completeChanged(); } +void TargetsPage::setValidTargets(const QSet<QString> &targets) +{ + if (targets.isEmpty()) + return; + + for (int i = 0; i < m_treeWidget->topLevelItemCount(); ++i) { + QTreeWidgetItem *currentTargetItem = m_treeWidget->topLevelItem(i); + QString currentTarget = currentTargetItem->data(0, Qt::UserRole).toString(); + if (targets.contains(currentTarget)) + currentTargetItem->setHidden(false); + else + currentTargetItem->setHidden(true); + } +} + QSet<QString> TargetsPage::selectedTargets() const { QSet<QString> result; for (int i = 0; i < m_treeWidget->topLevelItemCount(); ++i) { - QString target = m_treeWidget->topLevelItem(i)->data(0, Qt::UserRole).toString(); + QTreeWidgetItem * targetItem = m_treeWidget->topLevelItem(i); + QString target = targetItem->data(0, Qt::UserRole).toString(); + QList<int> versions = selectedVersionIdsForTarget(target); if (!versions.isEmpty()) result.insert(target); @@ -118,7 +135,7 @@ QList<int> TargetsPage::selectedVersionIdsForTarget(const QString &t) const for (int i = 0; i < m_treeWidget->topLevelItemCount(); ++i) { QTreeWidgetItem * current = m_treeWidget->topLevelItem(i); QString target = current->data(0, Qt::UserRole).toString(); - if (t != target) + if (t != target || current->isHidden()) continue; for (int j = 0; j < current->childCount(); ++j) { @@ -140,3 +157,20 @@ bool TargetsPage::isComplete() const { return !selectedTargets().isEmpty(); } + +bool TargetsPage::needToDisplayPage() const +{ + int targetCount = 0; + for (int i = 0; i < m_treeWidget->topLevelItemCount(); ++i) { + QTreeWidgetItem * current = m_treeWidget->topLevelItem(i); + if (current->isHidden()) + continue; + ++targetCount; + if (targetCount > 1) + return true; + + if (current->childCount() > 1) + return true; + } + return false; +} diff --git a/src/plugins/qt4projectmanager/wizards/targetspage.h b/src/plugins/qt4projectmanager/wizards/targetspage.h index cf7c30486c9..e85f5e4944a 100644 --- a/src/plugins/qt4projectmanager/wizards/targetspage.h +++ b/src/plugins/qt4projectmanager/wizards/targetspage.h @@ -50,15 +50,20 @@ class TargetsPage : public QWizardPage public: explicit TargetsPage(QWidget* parent = 0); + void setValidTargets(const QSet<QString> &targets); + QSet<QString> selectedTargets() const; QList<int> selectedVersionIdsForTarget(const QString &) const; bool isComplete() const; + bool needToDisplayPage() const; + private slots: void itemWasClicked(); private: + QSet<QString> m_validTargets; QTreeWidget * m_treeWidget; bool m_isComplete; }; -- GitLab