From 0a02ce6ae23e15f7ddd394ec2edd4cbf03dd66a6 Mon Sep 17 00:00:00 2001
From: Daniel Teske <daniel.teske@digia.com>
Date: Thu, 31 Jan 2013 14:13:24 +0100
Subject: [PATCH] KitManager: Enable KitInformations to be invisible for Kits

This was only possible in theory but not in pratice.

Change-Id: Ia5100569c371134e3cabacfcd76084c8763f5ecc
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
---
 src/plugins/projectexplorer/kitconfigwidget.h |  1 +
 src/plugins/projectexplorer/kitmanager.cpp    |  2 ++
 src/plugins/projectexplorer/kitmanager.h      |  1 -
 .../kitmanagerconfigwidget.cpp                | 32 +++++++++++++++----
 .../projectexplorer/kitmanagerconfigwidget.h  |  5 ++-
 5 files changed, 33 insertions(+), 8 deletions(-)

diff --git a/src/plugins/projectexplorer/kitconfigwidget.h b/src/plugins/projectexplorer/kitconfigwidget.h
index b1d518900e2..ccee9c32690 100644
--- a/src/plugins/projectexplorer/kitconfigwidget.h
+++ b/src/plugins/projectexplorer/kitconfigwidget.h
@@ -53,6 +53,7 @@ public:
     virtual QString toolTip() const { return QString(); }
     virtual void makeReadOnly() = 0;
     virtual void refresh() = 0;
+    virtual bool visibleInKit() { return true; }
 
     virtual QWidget *mainWidget() const = 0;
     virtual QWidget *buttonWidget() const { return 0; }
diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp
index 44c3c1910b8..b57869d1b26 100644
--- a/src/plugins/projectexplorer/kitmanager.cpp
+++ b/src/plugins/projectexplorer/kitmanager.cpp
@@ -379,6 +379,8 @@ Internal::KitManagerConfigWidget *KitManager::createConfigWidget(Kit *k) const
     foreach (KitInformation *ki, d->m_informationList)
         result->addConfigWidget(ki->createConfigWidget(result->workingCopy()));
 
+    result->updateVisibility();
+
     return result;
 }
 
diff --git a/src/plugins/projectexplorer/kitmanager.h b/src/plugins/projectexplorer/kitmanager.h
index bfe1b9ff380..41803785597 100644
--- a/src/plugins/projectexplorer/kitmanager.h
+++ b/src/plugins/projectexplorer/kitmanager.h
@@ -72,7 +72,6 @@ public:
 
     virtual unsigned int priority() const = 0; // the higher the closer to the top.
 
-    virtual bool visibleIn(Kit *) { return true; }
     virtual QVariant defaultValue(Kit *) const = 0;
 
     // called to find issues with the kit
diff --git a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp
index 52421f30519..64af360bed0 100644
--- a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp
+++ b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp
@@ -75,8 +75,11 @@ KitManagerConfigWidget::KitManagerConfigWidget(Kit *k) :
     mainLayout->setMargin(1);
     mainLayout->addWidget(scroll, 0, 0);
 
+    static const Qt::Alignment alignment
+            = static_cast<Qt::Alignment>(style()->styleHint(QStyle::SH_FormLayoutLabelAlignment));
     QString toolTip = tr("Kit name and icon.");
-    setLabel(tr("Name:"), toolTip, 0);
+    QLabel *label = createLabel(tr("Name:"), toolTip);
+    m_layout->addWidget(label, 0, LabelColumn, alignment);
     m_iconButton->setToolTip(toolTip);
 
     discard();
@@ -171,9 +174,26 @@ void KitManagerConfigWidget::addConfigWidget(ProjectExplorer::KitConfigWidget *w
     m_layout->addWidget(widget->mainWidget(), row, WidgetColumn);
     if (QWidget *button = widget->buttonWidget())
         m_layout->addWidget(button, row, ButtonColumn);
-    setLabel(name, toolTip, row);
 
+    static const Qt::Alignment alignment
+        = static_cast<Qt::Alignment>(style()->styleHint(QStyle::SH_FormLayoutLabelAlignment));
+    QLabel *label = createLabel(name, toolTip);
+    m_layout->addWidget(label, row, LabelColumn, alignment);
     m_widgets.append(widget);
+    m_labels.append(label);
+}
+
+void KitManagerConfigWidget::updateVisibility()
+{
+    int count = m_widgets.count();
+    for (int i = 0; i < count; ++i) {
+        KitConfigWidget *widget = m_widgets.at(i);
+        bool visible = widget->visibleInKit();
+        widget->mainWidget()->setVisible(visible);
+        if (widget->buttonWidget())
+            widget->buttonWidget()->setVisible(visible);
+        m_labels.at(i)->setVisible(visible);
+    }
 }
 
 void KitManagerConfigWidget::makeReadOnly()
@@ -249,6 +269,7 @@ void KitManagerConfigWidget::workingCopyWasUpdated(Kit *k)
         w->refresh();
     m_nameEdit->setText(k->displayName());
     m_iconButton->setIcon(k->icon());
+    updateVisibility();
     emit dirty();
 }
 
@@ -256,15 +277,14 @@ void KitManagerConfigWidget::kitWasUpdated(Kit *k)
 {
     if (m_kit == k)
         discard();
+    updateVisibility();
 }
 
-void KitManagerConfigWidget::setLabel(const QString &name, const QString &toolTip, int row)
+QLabel *KitManagerConfigWidget::createLabel(const QString &name, const QString &toolTip)
 {
-    static const Qt::Alignment alignment
-        = static_cast<Qt::Alignment>(style()->styleHint(QStyle::SH_FormLayoutLabelAlignment));
     QLabel *label = new QLabel(name);
     label->setToolTip(toolTip);
-    m_layout->addWidget(label, row, LabelColumn, alignment);
+    return label;
 }
 
 void KitManagerConfigWidget::paintEvent(QPaintEvent *)
diff --git a/src/plugins/projectexplorer/kitmanagerconfigwidget.h b/src/plugins/projectexplorer/kitmanagerconfigwidget.h
index 8c969aa6cfe..0945e6dc368 100644
--- a/src/plugins/projectexplorer/kitmanagerconfigwidget.h
+++ b/src/plugins/projectexplorer/kitmanagerconfigwidget.h
@@ -36,6 +36,7 @@
 
 QT_BEGIN_NAMESPACE
 class QGridLayout;
+class QLabel;
 class QLineEdit;
 class QToolButton;
 QT_END_NAMESPACE
@@ -68,6 +69,7 @@ public:
     void setIsDefaultKit(bool d);
     bool isDefaultKit() const;
     void removeKit();
+    void updateVisibility();
 
 signals:
     void dirty();
@@ -85,13 +87,14 @@ private:
         ButtonColumn
     };
 
-    void setLabel(const QString &name, const QString &toolTip, int row);
+    QLabel *createLabel(const QString &name, const QString &toolTip);
     void paintEvent(QPaintEvent *ev);
 
     QGridLayout *m_layout;
     QToolButton *m_iconButton;
     QLineEdit *m_nameEdit;
     QList<KitConfigWidget *> m_widgets;
+    QList<QLabel *> m_labels;
     Kit *m_kit;
     Kit *m_modifiedKit;
     bool m_isDefaultKit;
-- 
GitLab