aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2019-02-05 14:42:30 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2019-02-14 14:11:26 +0000
commit83e08a0d504c4cd7648732536ade581b6c01739a (patch)
treefa31ccfb589a8e1c036f93261275ce371a553831
parentc41ff1164be2826572f9dd2be868a4ecf2ee4b81 (diff)
Let the user choose which kit settings to display
Almost every single aspect of a kit is probably irrelevant to some users, so let them configure which ones they want to see. Fixes: QTCREATORBUG-9134 Change-Id: I218d43bd1d00479130278259dff552c9624afa30 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
-rw-r--r--src/plugins/projectexplorer/filterkitaspectsdialog.cpp163
-rw-r--r--src/plugins/projectexplorer/filterkitaspectsdialog.h49
-rw-r--r--src/plugins/projectexplorer/kit.cpp25
-rw-r--r--src/plugins/projectexplorer/kit.h3
-rw-r--r--src/plugins/projectexplorer/kitinformation.cpp1
-rw-r--r--src/plugins/projectexplorer/kitmanager.cpp17
-rw-r--r--src/plugins/projectexplorer/kitmanager.h6
-rw-r--r--src/plugins/projectexplorer/kitmanagerconfigwidget.cpp4
-rw-r--r--src/plugins/projectexplorer/kitmodel.cpp7
-rw-r--r--src/plugins/projectexplorer/kitmodel.h2
-rw-r--r--src/plugins/projectexplorer/kitoptionspage.cpp34
-rw-r--r--src/plugins/projectexplorer/projectexplorer.pro2
-rw-r--r--src/plugins/projectexplorer/projectexplorer.qbs1
13 files changed, 309 insertions, 5 deletions
diff --git a/src/plugins/projectexplorer/filterkitaspectsdialog.cpp b/src/plugins/projectexplorer/filterkitaspectsdialog.cpp
new file mode 100644
index 0000000000..418ae03564
--- /dev/null
+++ b/src/plugins/projectexplorer/filterkitaspectsdialog.cpp
@@ -0,0 +1,163 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "filterkitaspectsdialog.h"
+
+#include "kitmanager.h"
+
+#include <utils/itemviews.h>
+#include <utils/qtcassert.h>
+#include <utils/treemodel.h>
+
+#include <QDialogButtonBox>
+#include <QHeaderView>
+#include <QString>
+#include <QVBoxLayout>
+
+using namespace Utils;
+
+namespace ProjectExplorer {
+namespace Internal {
+
+class FilterTreeItem : public TreeItem
+{
+public:
+ FilterTreeItem(const KitAspect *aspect, bool enabled) : m_aspect(aspect), m_enabled(enabled)
+ { }
+
+ QString displayName() const { return m_aspect->displayName(); }
+ Core::Id id() const { return m_aspect->id(); }
+ bool enabled() const { return m_enabled; }
+
+private:
+ QVariant data(int column, int role) const override
+ {
+ QTC_ASSERT(column < 2, return QVariant());
+ if (column == 0 && role == Qt::DisplayRole)
+ return displayName();
+ if (column == 1 && role == Qt::CheckStateRole)
+ return m_enabled ? Qt::Checked : Qt::Unchecked;
+ return QVariant();
+ }
+
+ bool setData(int column, const QVariant &data, int role) override
+ {
+ QTC_ASSERT(column == 1 && !m_aspect->isEssential(), return false);
+ if (role == Qt::CheckStateRole) {
+ m_enabled = data.toInt() == Qt::Checked;
+ return true;
+ }
+ return false;
+ }
+
+ Qt::ItemFlags flags(int column) const override
+ {
+ QTC_ASSERT(column < 2, return Qt::ItemFlags());
+ Qt::ItemFlags flags = Qt::ItemIsSelectable;
+ if (column == 0 || !m_aspect->isEssential())
+ flags |= Qt::ItemIsEnabled;
+ if (column == 1 && !m_aspect->isEssential())
+ flags |= Qt::ItemIsUserCheckable;
+ return flags;
+ }
+
+ const KitAspect * const m_aspect;
+ bool m_enabled;
+};
+
+class FilterKitAspectsModel : public TreeModel<TreeItem, FilterTreeItem>
+{
+public:
+ FilterKitAspectsModel(const Kit *kit, QObject *parent) : TreeModel(parent)
+ {
+ setHeader({tr("Setting"), tr("Visible")});
+ for (const KitAspect * const aspect : KitManager::kitAspects()) {
+ if (kit && !aspect->isApplicableToKit(kit))
+ continue;
+ const QSet<Core::Id> irrelevantAspects = kit ? kit->irrelevantAspects()
+ : KitManager::irrelevantAspects();
+ auto * const item = new FilterTreeItem(aspect,
+ !irrelevantAspects.contains(aspect->id()));
+ rootItem()->appendChild(item);
+ }
+ static const auto cmp = [](const TreeItem *item1, const TreeItem *item2) {
+ return static_cast<const FilterTreeItem *>(item1)->displayName()
+ < static_cast<const FilterTreeItem *>(item2)->displayName();
+ };
+ rootItem()->sortChildren(cmp);
+ }
+
+ QSet<Core::Id> disabledItems() const
+ {
+ QSet<Core::Id> ids;
+ for (int i = 0; i < rootItem()->childCount(); ++i) {
+ const FilterTreeItem * const item
+ = static_cast<FilterTreeItem *>(rootItem()->childAt(i));
+ if (!item->enabled())
+ ids << item->id();
+ }
+ return ids;
+ }
+};
+
+class FilterTreeView : public TreeView
+{
+public:
+ FilterTreeView(QWidget *parent) : TreeView(parent)
+ {
+ setUniformRowHeights(true);
+ }
+
+private:
+ QSize sizeHint() const override
+ {
+ const int width = columnWidth(0) + columnWidth(1);
+ const int height = model()->rowCount() * rowHeight(model()->index(0, 0))
+ + header()->sizeHint().height();
+ return {width, height};
+ }
+};
+
+FilterKitAspectsDialog::FilterKitAspectsDialog(const Kit *kit, QWidget *parent)
+ : QDialog(parent), m_model(new FilterKitAspectsModel(kit, this))
+{
+ auto * const layout = new QVBoxLayout(this);
+ auto * const view = new FilterTreeView(this);
+ view->setModel(m_model);
+ view->resizeColumnToContents(0);
+ layout->addWidget(view);
+ auto * const buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
+ layout->addWidget(buttonBox);
+ connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
+ connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
+}
+
+QSet<Core::Id> FilterKitAspectsDialog::irrelevantAspects() const
+{
+ return static_cast<FilterKitAspectsModel *>(m_model)->disabledItems();
+}
+
+} // namespace Internal
+} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/filterkitaspectsdialog.h b/src/plugins/projectexplorer/filterkitaspectsdialog.h
new file mode 100644
index 0000000000..441abd658d
--- /dev/null
+++ b/src/plugins/projectexplorer/filterkitaspectsdialog.h
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include <coreplugin/id.h>
+
+#include <QDialog>
+
+namespace Utils { class BaseTreeModel; }
+
+namespace ProjectExplorer {
+class Kit;
+namespace Internal {
+
+class FilterKitAspectsDialog : public QDialog
+{
+public:
+ FilterKitAspectsDialog(const Kit *kit, QWidget *parent);
+ QSet<Core::Id> irrelevantAspects() const;
+
+private:
+ Utils::BaseTreeModel * const m_model;
+};
+
+} // namespace Internal
+} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/kit.cpp b/src/plugins/projectexplorer/kit.cpp
index ba0a76f8ab..e92e66c5b2 100644
--- a/src/plugins/projectexplorer/kit.cpp
+++ b/src/plugins/projectexplorer/kit.cpp
@@ -36,6 +36,7 @@
#include <utils/fileutils.h>
#include <utils/icon.h>
#include <utils/macroexpander.h>
+#include <utils/optional.h>
#include <utils/qtcassert.h>
#include <QApplication>
@@ -58,6 +59,7 @@ const char DATA_KEY[] = "PE.Profile.Data";
const char ICON_KEY[] = "PE.Profile.Icon";
const char MUTABLE_INFO_KEY[] = "PE.Profile.MutableInfo";
const char STICKY_INFO_KEY[] = "PE.Profile.StickyInfo";
+const char IRRELEVANT_ASPECTS_KEY[] = "PE.Kit.IrrelevantAspects";
namespace ProjectExplorer {
namespace Internal {
@@ -122,6 +124,7 @@ public:
QHash<Id, QVariant> m_data;
QSet<Id> m_sticky;
QSet<Id> m_mutable;
+ optional<QSet<Id>> m_irrelevantAspects;
MacroExpander m_macroExpander;
};
@@ -158,6 +161,9 @@ Kit::Kit(const QVariantMap &data) :
d->m_fileSystemFriendlyName = data.value(QLatin1String(FILESYSTEMFRIENDLYNAME_KEY)).toString();
d->m_iconPath = FileName::fromString(data.value(QLatin1String(ICON_KEY),
d->m_iconPath.toString()).toString());
+ const auto it = data.constFind(IRRELEVANT_ASPECTS_KEY);
+ if (it != data.constEnd())
+ d->m_irrelevantAspects = transform<QSet<Id>>(it.value().toList(), &Id::fromSetting);
QVariantMap extra = data.value(QLatin1String(DATA_KEY)).toMap();
d->m_data.clear(); // remove default values
@@ -206,6 +212,7 @@ Kit *Kit::clone(bool keepName) const
k->d->m_iconPath = d->m_iconPath;
k->d->m_sticky = d->m_sticky;
k->d->m_mutable = d->m_mutable;
+ k->d->m_irrelevantAspects = d->m_irrelevantAspects;
return k;
}
@@ -222,6 +229,7 @@ void Kit::copyFrom(const Kit *k)
d->m_mustNotify = true;
d->m_sticky = k->d->m_sticky;
d->m_mutable = k->d->m_mutable;
+ d->m_irrelevantAspects = k->d->m_irrelevantAspects;
}
bool Kit::isValid() const
@@ -461,8 +469,8 @@ bool Kit::isEqual(const Kit *other) const
&& d->m_iconPath == other->d->m_iconPath
&& d->m_unexpandedDisplayName == other->d->m_unexpandedDisplayName
&& d->m_fileSystemFriendlyName == other->d->m_fileSystemFriendlyName
+ && d->m_irrelevantAspects == other->d->m_irrelevantAspects
&& d->m_mutable == other->d->m_mutable;
-
}
QVariantMap Kit::toMap() const
@@ -489,6 +497,11 @@ QVariantMap Kit::toMap() const
stickyInfo << id.toString();
data.insert(QLatin1String(STICKY_INFO_KEY), stickyInfo);
+ if (d->m_irrelevantAspects) {
+ data.insert(IRRELEVANT_ASPECTS_KEY, transform<QVariantList>(d->m_irrelevantAspects.value(),
+ &Id::toSetting));
+ }
+
QVariantMap extra;
const IdVariantConstIt cend = d->m_data.constEnd();
@@ -611,6 +624,16 @@ bool Kit::isMutable(Id id) const
return d->m_mutable.contains(id);
}
+void Kit::setIrrelevantAspects(const QSet<Id> &irrelevant)
+{
+ d->m_irrelevantAspects = irrelevant;
+}
+
+QSet<Id> Kit::irrelevantAspects() const
+{
+ return d->m_irrelevantAspects.value_or(KitManager::irrelevantAspects());
+}
+
QSet<Id> Kit::supportedPlatforms() const
{
QSet<Id> platforms;
diff --git a/src/plugins/projectexplorer/kit.h b/src/plugins/projectexplorer/kit.h
index 6a6b014033..adfef62c0f 100644
--- a/src/plugins/projectexplorer/kit.h
+++ b/src/plugins/projectexplorer/kit.h
@@ -123,6 +123,9 @@ public:
void setMutable(Core::Id id, bool b);
bool isMutable(Core::Id id) const;
+ void setIrrelevantAspects(const QSet<Core::Id> &irrelevant);
+ QSet<Core::Id> irrelevantAspects() const;
+
QSet<Core::Id> supportedPlatforms() const;
QSet<Core::Id> availableFeatures() const;
bool hasFeatures(const QSet<Core::Id> &features) const;
diff --git a/src/plugins/projectexplorer/kitinformation.cpp b/src/plugins/projectexplorer/kitinformation.cpp
index fbc2078364..ce8796e786 100644
--- a/src/plugins/projectexplorer/kitinformation.cpp
+++ b/src/plugins/projectexplorer/kitinformation.cpp
@@ -810,6 +810,7 @@ DeviceTypeKitAspect::DeviceTypeKitAspect()
setDisplayName(tr("Device type"));
setDescription(tr("The type of device to run applications on."));
setPriority(33000);
+ makeEssential();
}
QVariant DeviceTypeKitAspect::defaultValue(const Kit *k) const
diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp
index 57069ffcf1..0b4984fd24 100644
--- a/src/plugins/projectexplorer/kitmanager.cpp
+++ b/src/plugins/projectexplorer/kitmanager.cpp
@@ -54,6 +54,7 @@ const char KIT_DATA_KEY[] = "Profile.";
const char KIT_COUNT_KEY[] = "Profile.Count";
const char KIT_FILE_VERSION_KEY[] = "Version";
const char KIT_DEFAULT_KEY[] = "Profile.Default";
+const char KIT_IRRELEVANT_ASPECTS_KEY[] = "Kit.IrrelevantAspects";
const char KIT_FILENAME[] = "/profiles.xml";
static FileName settingsFileName()
@@ -73,6 +74,7 @@ public:
std::vector<std::unique_ptr<KitAspect>> m_informationList;
std::vector<std::unique_ptr<Kit>> m_kitList;
std::unique_ptr<PersistentSettingsWriter> m_writer;
+ QSet<Id> m_irrelevantAspects;
};
} // namespace Internal
@@ -220,6 +222,8 @@ void KitManager::saveKits()
data.insert(QLatin1String(KIT_COUNT_KEY), count);
data.insert(QLatin1String(KIT_DEFAULT_KEY),
d->m_defaultKit ? QString::fromLatin1(d->m_defaultKit->id().name()) : QString());
+ data.insert(KIT_IRRELEVANT_ASPECTS_KEY,
+ transform<QVariantList>(d->m_irrelevantAspects, &Id::toSetting));
d->m_writer->save(data, ICore::mainWindow());
}
@@ -335,6 +339,9 @@ KitManager::KitList KitManager::restoreKits(const FileName &fileName)
if (Utils::contains(result.kits, [id](const std::unique_ptr<Kit> &k) { return k->id() == id; }))
result.defaultKit = id;
+ const auto it = data.constFind(KIT_IRRELEVANT_ASPECTS_KEY);
+ if (it != data.constEnd())
+ d->m_irrelevantAspects = transform<QSet<Id>>(it.value().toList(), &Id::fromSetting);
return result;
}
@@ -370,6 +377,16 @@ const QList<KitAspect *> KitManager::kitAspects()
return Utils::toRawPointer<QList>(d->m_informationList);
}
+const QSet<Id> KitManager::irrelevantAspects()
+{
+ return d->m_irrelevantAspects;
+}
+
+void KitManager::setIrrelevantAspects(const QSet<Id> &aspects)
+{
+ d->m_irrelevantAspects = aspects;
+}
+
void KitManager::notifyAboutUpdate(Kit *k)
{
if (!k || !isLoaded())
diff --git a/src/plugins/projectexplorer/kitmanager.h b/src/plugins/projectexplorer/kitmanager.h
index 6d7ef22742..4b031846a0 100644
--- a/src/plugins/projectexplorer/kitmanager.h
+++ b/src/plugins/projectexplorer/kitmanager.h
@@ -34,6 +34,7 @@
#include <QObject>
#include <QPair>
+#include <QSet>
#include <functional>
@@ -76,6 +77,7 @@ public:
int priority() const { return m_priority; }
QString displayName() const { return m_displayName; }
QString description() const { return m_description; }
+ bool isEssential() const { return m_essential; }
virtual QVariant defaultValue(const Kit *) const = 0;
@@ -108,6 +110,7 @@ protected:
void setId(Core::Id id) { m_id = id; }
void setDisplayName(const QString &name) { m_displayName = name; }
void setDescription(const QString &desc) { m_description = desc; }
+ void makeEssential() { m_essential = true; }
void setPriority(int priority) { m_priority = priority; }
void notifyAboutUpdate(Kit *k);
@@ -116,6 +119,7 @@ private:
QString m_description;
Core::Id m_id;
int m_priority = 0; // The higher the closer to the top.
+ bool m_essential = false;
};
class PROJECTEXPLORER_EXPORT KitAspectWidget : public QObject
@@ -166,6 +170,8 @@ public:
static Kit *defaultKit();
static const QList<KitAspect *> kitAspects();
+ static const QSet<Core::Id> irrelevantAspects();
+ static void setIrrelevantAspects(const QSet<Core::Id> &aspects);
static bool registerKit(std::unique_ptr<Kit> &&k);
static void deregisterKit(Kit *k);
diff --git a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp
index 2923b7a6f7..7624da21d9 100644
--- a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp
+++ b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp
@@ -45,6 +45,7 @@
#include <QLabel>
#include <QLineEdit>
#include <QPainter>
+#include <QPushButton>
#include <QToolButton>
#include <QScrollArea>
#include <QSizePolicy>
@@ -262,7 +263,8 @@ void KitManagerConfigWidget::updateVisibility()
int count = m_widgets.count();
for (int i = 0; i < count; ++i) {
KitAspectWidget *widget = m_widgets.at(i);
- bool visible = widget->visibleInKit();
+ const bool visible = widget->visibleInKit()
+ && !m_modifiedKit->irrelevantAspects().contains(widget->kitInformationId());
widget->mainWidget()->setVisible(visible);
if (widget->buttonWidget())
widget->buttonWidget()->setVisible(visible);
diff --git a/src/plugins/projectexplorer/kitmodel.cpp b/src/plugins/projectexplorer/kitmodel.cpp
index 8e4ca2de4a..7795f3f02c 100644
--- a/src/plugins/projectexplorer/kitmodel.cpp
+++ b/src/plugins/projectexplorer/kitmodel.cpp
@@ -266,6 +266,13 @@ Kit *KitModel::markForAddition(Kit *baseKit)
return k;
}
+void KitModel::updateVisibility()
+{
+ forItemsAtLevel<2>([](const TreeItem *ti) {
+ static_cast<const KitNode *>(ti)->widget->updateVisibility();
+ });
+}
+
KitNode *KitModel::findWorkingCopy(Kit *k) const
{
return findItemAtLevel<2>([k](KitNode *n) { return n->widget->workingCopy() == k; });
diff --git a/src/plugins/projectexplorer/kitmodel.h b/src/plugins/projectexplorer/kitmodel.h
index 8070eefe30..c752215d41 100644
--- a/src/plugins/projectexplorer/kitmodel.h
+++ b/src/plugins/projectexplorer/kitmodel.h
@@ -69,6 +69,8 @@ public:
void markForRemoval(Kit *k);
Kit *markForAddition(Kit *baseKit);
+ void updateVisibility();
+
signals:
void kitStateChanged();
diff --git a/src/plugins/projectexplorer/kitoptionspage.cpp b/src/plugins/projectexplorer/kitoptionspage.cpp
index 262d6c2706..d9ebe3f0e0 100644
--- a/src/plugins/projectexplorer/kitoptionspage.cpp
+++ b/src/plugins/projectexplorer/kitoptionspage.cpp
@@ -25,6 +25,7 @@
#include "kitoptionspage.h"
+#include "filterkitaspectsdialog.h"
#include "kitmodel.h"
#include "kit.h"
#include "projectexplorerconstants.h"
@@ -32,6 +33,8 @@
#include "kitmanagerconfigwidget.h"
#include "kitmanager.h"
+#include <utils/qtcassert.h>
+
#include <QHBoxLayout>
#include <QHeaderView>
#include <QItemSelectionModel>
@@ -67,10 +70,12 @@ public:
QPushButton *m_cloneButton = nullptr;
QPushButton *m_delButton = nullptr;
QPushButton *m_makeDefaultButton = nullptr;
+ QPushButton *m_filterButton = nullptr;
+ QPushButton *m_defaultFilterButton = nullptr;
KitModel *m_model = nullptr;
QItemSelectionModel *m_selectionModel = nullptr;
- QWidget *m_currentWidget = nullptr;
+ KitManagerConfigWidget *m_currentWidget = nullptr;
};
KitOptionsPageWidget::KitOptionsPageWidget()
@@ -85,6 +90,12 @@ KitOptionsPageWidget::KitOptionsPageWidget()
m_cloneButton = new QPushButton(KitOptionsPage::tr("Clone"), this);
m_delButton = new QPushButton(KitOptionsPage::tr("Remove"), this);
m_makeDefaultButton = new QPushButton(KitOptionsPage::tr("Make Default"), this);
+ m_filterButton = new QPushButton(KitOptionsPage::tr("Settings Filter..."), this);
+ m_filterButton->setToolTip(KitOptionsPage::tr(
+ "Choose which settings to display for this kit."));
+ m_defaultFilterButton = new QPushButton(KitOptionsPage::tr("Default Settings Filter..."), this);
+ m_defaultFilterButton->setToolTip(KitOptionsPage::tr(
+ "Choose which kit settings to display by default."));
auto buttonLayout = new QVBoxLayout;
buttonLayout->setSpacing(6);
@@ -93,6 +104,8 @@ KitOptionsPageWidget::KitOptionsPageWidget()
buttonLayout->addWidget(m_cloneButton);
buttonLayout->addWidget(m_delButton);
buttonLayout->addWidget(m_makeDefaultButton);
+ buttonLayout->addWidget(m_filterButton);
+ buttonLayout->addWidget(m_defaultFilterButton);
buttonLayout->addStretch();
auto horizontalLayout = new QHBoxLayout;
@@ -131,14 +144,28 @@ KitOptionsPageWidget::KitOptionsPageWidget()
this, &KitOptionsPageWidget::removeKit);
connect(m_makeDefaultButton, &QAbstractButton::clicked,
this, &KitOptionsPageWidget::makeDefaultKit);
-
+ connect(m_filterButton, &QAbstractButton::clicked, this, [this] {
+ QTC_ASSERT(m_currentWidget, return);
+ FilterKitAspectsDialog dlg(m_currentWidget->workingCopy(), this);
+ if (dlg.exec() == QDialog::Accepted) {
+ m_currentWidget->workingCopy()->setIrrelevantAspects(dlg.irrelevantAspects());
+ m_currentWidget->updateVisibility();
+ }
+ });
+ connect(m_defaultFilterButton, &QAbstractButton::clicked, this, [this] {
+ FilterKitAspectsDialog dlg(nullptr, this);
+ if (dlg.exec() == QDialog::Accepted) {
+ KitManager::setIrrelevantAspects(dlg.irrelevantAspects());
+ m_model->updateVisibility();
+ }
+ });
updateState();
}
void KitOptionsPageWidget::kitSelectionChanged()
{
QModelIndex current = currentIndex();
- QWidget *newWidget = m_model->widget(current);
+ KitManagerConfigWidget * const newWidget = m_model->widget(current);
if (newWidget == m_currentWidget)
return;
@@ -216,6 +243,7 @@ void KitOptionsPageWidget::updateState()
m_cloneButton->setEnabled(canCopy);
m_delButton->setEnabled(canDelete);
m_makeDefaultButton->setEnabled(canMakeDefault);
+ m_filterButton->setEnabled(canCopy);
}
QModelIndex KitOptionsPageWidget::currentIndex() const
diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro
index 8ba656b36b..14033e5c47 100644
--- a/src/plugins/projectexplorer/projectexplorer.pro
+++ b/src/plugins/projectexplorer/projectexplorer.pro
@@ -17,6 +17,7 @@ HEADERS += projectexplorer.h \
environmentaspect.h \
environmentaspectwidget.h \
extraabi.h \
+ filterkitaspectsdialog.h \
gcctoolchain.h \
importwidget.h \
userfileaccessor.h \
@@ -168,6 +169,7 @@ SOURCES += projectexplorer.cpp \
environmentaspect.cpp \
environmentaspectwidget.cpp \
extraabi.cpp \
+ filterkitaspectsdialog.cpp \
gcctoolchain.cpp \
importwidget.cpp \
projectconfigurationmodel.cpp \
diff --git a/src/plugins/projectexplorer/projectexplorer.qbs b/src/plugins/projectexplorer/projectexplorer.qbs
index 59038d9875..5294cbd7a5 100644
--- a/src/plugins/projectexplorer/projectexplorer.qbs
+++ b/src/plugins/projectexplorer/projectexplorer.qbs
@@ -69,6 +69,7 @@ Project {
"expanddata.cpp", "expanddata.h",
"extraabi.cpp", "extraabi.h",
"extracompiler.cpp", "extracompiler.h",
+ "filterkitaspectsdialog.cpp", "filterkitaspectsdialog.h",
"foldernavigationwidget.cpp", "foldernavigationwidget.h",
"gccparser.cpp", "gccparser.h",
"gcctoolchain.cpp", "gcctoolchain.h",