From d2fcbda7fc5ee5c307214e565ca4fcfdb8da0cb0 Mon Sep 17 00:00:00 2001 From: Milian Wolff <mail@milianw.de> Date: Fri, 4 Mar 2011 16:00:04 +0100 Subject: [PATCH] assign DEL as shortcut to 'suppress error' Merge-request: 265 Reviewed-by: hjk <qtc-committer@nokia.com> --- src/plugins/memcheck/memcheckerrorview.cpp | 37 ++++++++++++++-------- src/plugins/memcheck/memcheckerrorview.h | 4 +++ src/plugins/memcheck/suppressiondialog.cpp | 12 ++++++- src/plugins/memcheck/suppressiondialog.h | 2 ++ 4 files changed, 41 insertions(+), 14 deletions(-) diff --git a/src/plugins/memcheck/memcheckerrorview.cpp b/src/plugins/memcheck/memcheckerrorview.cpp index 37542b91628..754a1159ba9 100644 --- a/src/plugins/memcheck/memcheckerrorview.cpp +++ b/src/plugins/memcheck/memcheckerrorview.cpp @@ -429,6 +429,14 @@ MemcheckErrorView::MemcheckErrorView(QWidget *parent) m_copyAction->setShortcutContext(Qt::WidgetWithChildrenShortcut); connect(m_copyAction, SIGNAL(triggered()), itemDelegate(), SLOT(copy())); addAction(m_copyAction); + + m_suppressAction = new QAction(this); + m_suppressAction->setText(tr("Suppress Error")); + m_suppressAction->setIcon(QIcon(QLatin1String(":/qmldesigner/images/eye_crossed.png"))); + m_suppressAction->setShortcut(QKeySequence(Qt::Key_Delete)); + m_suppressAction->setShortcutContext(Qt::WidgetWithChildrenShortcut); + connect(m_suppressAction, SIGNAL(triggered()), this, SLOT(suppressError())); + addAction(m_suppressAction); } MemcheckErrorView::~MemcheckErrorView() @@ -474,9 +482,9 @@ void MemcheckErrorView::settingsChanged(AnalyzerSettings *settings) void MemcheckErrorView::contextMenuEvent(QContextMenuEvent *e) { const QModelIndexList indizes = selectionModel()->selectedRows(); - if (indizes.isEmpty()) { + if (indizes.isEmpty()) return; - } + QList<Error> errors; foreach(const QModelIndex &index, indizes) { @@ -488,16 +496,19 @@ void MemcheckErrorView::contextMenuEvent(QContextMenuEvent *e) QMenu menu; menu.addAction(m_copyAction); menu.addSeparator(); - QAction *suppress = menu.addAction(tr("Suppress Error(s)", "", errors.size())); - suppress->setIcon(QIcon(QLatin1String(":/qmldesigner/images/eye_crossed.png"))); - suppress->setEnabled(!errors.isEmpty()); - - if (QAction *executed = menu.exec(e->globalPos())) { - if (executed == suppress) { - SuppressionDialog *dialog = new SuppressionDialog(this); - dialog->setModal(true); - dialog->show(); - dialog->setAttribute(Qt::WA_DeleteOnClose, true); - } + menu.addAction(m_suppressAction); + m_suppressAction->setEnabled(!errors.isEmpty()); + menu.exec(e->globalPos()); +} + +void MemcheckErrorView::suppressError() +{ + SuppressionDialog *dialog = new SuppressionDialog(this); + if (dialog->shouldShow()) { + dialog->setModal(true); + dialog->show(); + dialog->setAttribute(Qt::WA_DeleteOnClose, true); + } else { + delete dialog; } } diff --git a/src/plugins/memcheck/memcheckerrorview.h b/src/plugins/memcheck/memcheckerrorview.h index cf04447de7f..b303164cc8c 100644 --- a/src/plugins/memcheck/memcheckerrorview.h +++ b/src/plugins/memcheck/memcheckerrorview.h @@ -111,12 +111,16 @@ signals: public slots: void settingsChanged(AnalyzerSettings *settings); +private slots: + void suppressError(); + protected: void resizeEvent(QResizeEvent *e); void contextMenuEvent(QContextMenuEvent *e); private: QAction *m_copyAction; + QAction *m_suppressAction; QString m_defaultSuppFile; AnalyzerSettings *m_settings; }; diff --git a/src/plugins/memcheck/suppressiondialog.cpp b/src/plugins/memcheck/suppressiondialog.cpp index 07024ae0580..2ffb57b30b0 100644 --- a/src/plugins/memcheck/suppressiondialog.cpp +++ b/src/plugins/memcheck/suppressiondialog.cpp @@ -156,7 +156,12 @@ SuppressionDialog::SuppressionDialog(MemcheckErrorView *view, QWidget *parent, Q SLOT(validate())); QString suppressions; - foreach(const QModelIndex &index, m_view->selectionModel()->selectedRows()) { + QModelIndexList indizes = m_view->selectionModel()->selectedRows(); + if (indizes.isEmpty() && m_view->selectionModel()->currentIndex().isValid()) { + // can happen when using arrow keys to navigate and shortcut to trigger suppression + indizes << m_view->selectionModel()->currentIndex(); + } + foreach(const QModelIndex &index, indizes) { Error error = m_view->model()->data(index, ErrorListModel::ErrorRole).value<Error>(); if (!error.suppression().isNull()) m_errors << error; @@ -170,6 +175,11 @@ SuppressionDialog::SuppressionDialog(MemcheckErrorView *view, QWidget *parent, Q setWindowTitle(tr("Save Suppression")); } +bool SuppressionDialog::shouldShow() const +{ + return !m_errors.isEmpty(); +} + void SuppressionDialog::accept() { const QString path = m_ui->fileChooser->path(); diff --git a/src/plugins/memcheck/suppressiondialog.h b/src/plugins/memcheck/suppressiondialog.h index 89c504c56a4..7223ef2b3fb 100644 --- a/src/plugins/memcheck/suppressiondialog.h +++ b/src/plugins/memcheck/suppressiondialog.h @@ -65,6 +65,8 @@ public: virtual void accept(); virtual void reject(); + bool shouldShow() const; + private slots: void validate(); -- GitLab