From 5cef43215939756021f41796739e000231ace7dc Mon Sep 17 00:00:00 2001 From: mgrojo Date: Sat, 21 Oct 2017 22:24:43 +0200 Subject: [PATCH] New option in the context menu for using the value as filter (#1182) * Added an option in the context menu for using the currently selected cell as filter in this column. This allows quick filtering by selected values. * Changes to pull request #1182 requested by @MKleusberg: get internal cell data and check for the NULL special case. --- src/ExtendedTableWidget.cpp | 23 +++++++++++++++++++++++ src/ExtendedTableWidget.h | 1 + 2 files changed, 24 insertions(+) diff --git a/src/ExtendedTableWidget.cpp b/src/ExtendedTableWidget.cpp index 2b93e9c3..f955ce2c 100644 --- a/src/ExtendedTableWidget.cpp +++ b/src/ExtendedTableWidget.cpp @@ -84,6 +84,9 @@ ExtendedTableWidget::ExtendedTableWidget(QWidget* parent) : QAction* nullAction = new QAction(tr("Set to NULL"), m_contextMenu); QAction* copyAction = new QAction(QIcon(":/icons/copy"), tr("Copy"), m_contextMenu); QAction* pasteAction = new QAction(QIcon(":/icons/paste"), tr("Paste"), m_contextMenu); + QAction* filterAction = new QAction(tr("Use as Filter"), m_contextMenu); + m_contextMenu->addAction(filterAction); + m_contextMenu->addSeparator(); m_contextMenu->addAction(nullAction); m_contextMenu->addSeparator(); m_contextMenu->addAction(copyAction); @@ -102,6 +105,9 @@ ExtendedTableWidget::ExtendedTableWidget(QWidget* parent) : // Show menu m_contextMenu->popup(viewport()->mapToGlobal(pos)); }); + connect(filterAction, &QAction::triggered, [&]() { + useAsFilter(); + }); connect(nullAction, &QAction::triggered, [&]() { foreach(const QModelIndex& index, selectedIndexes()) model()->setData(index, QVariant()); @@ -341,6 +347,23 @@ void ExtendedTableWidget::paste() } +void ExtendedTableWidget::useAsFilter() +{ + QModelIndex index = selectionModel()->currentIndex(); + + // Abort if there's nothing to filter + if (!index.isValid() || !selectionModel()->hasSelection()) + return; + + QVariant data = model()->data(index, Qt::EditRole); + + if (data.isNull()) + m_tableHeader->setFilter(index.column(), "=NULL"); + else + m_tableHeader->setFilter(index.column(), "=" + data.toString()); + +} + void ExtendedTableWidget::keyPressEvent(QKeyEvent* event) { // Call a custom copy method when Ctrl-C is pressed diff --git a/src/ExtendedTableWidget.h b/src/ExtendedTableWidget.h index 4d5c86da..9243aa3e 100644 --- a/src/ExtendedTableWidget.h +++ b/src/ExtendedTableWidget.h @@ -33,6 +33,7 @@ signals: private: void copy(); void paste(); + void useAsFilter(); typedef QList QByteArrayList; QList m_buffer;