aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@qt.io>2018-05-16 13:07:10 +0200
committerNikolai Kosjar <nikolai.kosjar@qt.io>2018-05-18 06:28:07 +0000
commitf083293c317129dfb411c6b5611c505b148733fc (patch)
tree414b342f896c4af6222c891b339804a2bb34968c /src
parent92103a25a36147f8a2c6fc692a22c4b053f95321 (diff)
ClangTools: Adapt button state to checked fixits
"Apply Fixits" is disabled by default and enabled as soon as some fixits are checked by the user. Change-Id: I7e1345512b206f52d1e8628705c81c6b34dfb9ba Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/clangtools/clangtidyclazytool.cpp4
-rw-r--r--src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp15
-rw-r--r--src/plugins/clangtools/clangtoolsdiagnosticmodel.h12
3 files changed, 27 insertions, 4 deletions
diff --git a/src/plugins/clangtools/clangtidyclazytool.cpp b/src/plugins/clangtools/clangtidyclazytool.cpp
index fdf6a9adc6..2b977c4548 100644
--- a/src/plugins/clangtools/clangtidyclazytool.cpp
+++ b/src/plugins/clangtools/clangtidyclazytool.cpp
@@ -161,6 +161,10 @@ ClangTidyClazyTool::ClangTidyClazyTool()
// Apply fixits button
m_applyFixitsButton = new QToolButton;
m_applyFixitsButton->setText(tr("Apply Fixits"));
+ m_applyFixitsButton->setEnabled(false);
+ connect(m_diagnosticModel,
+ &ClangToolsDiagnosticModel::fixItsToApplyCountChanged,
+ [this](int c) { m_applyFixitsButton->setEnabled(c); });
connect(m_applyFixitsButton, &QToolButton::clicked, [this]() {
QVector<Diagnostic> diagnosticsWithFixits;
diff --git a/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp b/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp
index 1ffc3351e5..1f1dba4039 100644
--- a/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp
+++ b/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp
@@ -61,8 +61,13 @@ ClangToolsDiagnosticModel::ClangToolsDiagnosticModel(QObject *parent)
void ClangToolsDiagnosticModel::addDiagnostics(const QList<Diagnostic> &diagnostics)
{
- foreach (const Diagnostic &d, diagnostics)
- rootItem()->appendChild(new DiagnosticItem(d));
+ const auto onFixItChanged = [this](bool checked){
+ m_fixItsToApplyCount += checked ? +1 : -1;
+ emit fixItsToApplyCountChanged(m_fixItsToApplyCount);
+ };
+
+ for (const Diagnostic &d : diagnostics)
+ rootItem()->appendChild(new DiagnosticItem(d, onFixItChanged));
}
QList<Diagnostic> ClangToolsDiagnosticModel::diagnostics() const
@@ -199,7 +204,9 @@ static QString fullText(const Diagnostic &diagnostic)
}
-DiagnosticItem::DiagnosticItem(const Diagnostic &diag) : m_diagnostic(diag)
+DiagnosticItem::DiagnosticItem(const Diagnostic &diag, const OnCheckedFixit &onCheckedFixit)
+ : m_diagnostic(diag)
+ , m_onCheckedFixit(onCheckedFixit)
{
// Don't show explaining steps if they add no information.
if (diag.explainingSteps.count() == 1) {
@@ -277,6 +284,8 @@ bool DiagnosticItem::setData(int column, const QVariant &data, int role)
if (column == DiagnosticView::FixItColumn && role == Qt::CheckStateRole) {
m_applyFixits = data.value<Qt::CheckState>() == Qt::Checked ? true : false;
update();
+ if (m_onCheckedFixit)
+ m_onCheckedFixit(m_applyFixits);
return true;
}
diff --git a/src/plugins/clangtools/clangtoolsdiagnosticmodel.h b/src/plugins/clangtools/clangtoolsdiagnosticmodel.h
index 0fbc99a5b7..61aa6055c5 100644
--- a/src/plugins/clangtools/clangtoolsdiagnosticmodel.h
+++ b/src/plugins/clangtools/clangtoolsdiagnosticmodel.h
@@ -35,6 +35,8 @@
#include <QPointer>
#include <QSortFilterProxyModel>
+#include <functional>
+
namespace ProjectExplorer { class Project; }
namespace ClangTools {
@@ -43,7 +45,8 @@ namespace Internal {
class DiagnosticItem : public Utils::TreeItem
{
public:
- DiagnosticItem(const Diagnostic &diag);
+ using OnCheckedFixit = std::function<void(bool)>;
+ DiagnosticItem(const Diagnostic &diag, const OnCheckedFixit &onCheckedFixit);
Diagnostic diagnostic() const { return m_diagnostic; }
bool applyFixits() const { return m_applyFixits; }
@@ -56,6 +59,7 @@ private:
private:
const Diagnostic m_diagnostic;
bool m_applyFixits = false;
+ OnCheckedFixit m_onCheckedFixit;
};
class ClangToolsDiagnosticModel : public Utils::TreeModel<>
@@ -71,6 +75,12 @@ public:
enum ItemRole {
DiagnosticRole = Debugger::DetailedErrorView::FullTextRole + 1
};
+
+signals:
+ void fixItsToApplyCountChanged(int count);
+
+private:
+ int m_fixItsToApplyCount = 0;
};
class DiagnosticFilterModel : public QSortFilterProxyModel