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.
This commit is contained in:
mgrojo
2017-10-21 22:24:43 +02:00
committed by Martin Kleusberg
parent 37e5b62842
commit 5cef432159
2 changed files with 24 additions and 0 deletions

View File

@@ -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