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