From 2421fef2191da8dec87b4f7d25b1c56ed657aa06 Mon Sep 17 00:00:00 2001 From: Martin Kleusberg Date: Wed, 28 Jun 2017 16:30:03 +0200 Subject: [PATCH] Add context menu to all table views Add a context menu to all table view widgets in the program (Browse Data tab and Execute SQL tab) which opens when right clicking a table item. Currently the menu only allows you to copy and paste the selected item(s). Only activate the paste action when the current view is writable. --- src/ExtendedTableWidget.cpp | 28 ++++++++++++++++++++++++++++ src/ExtendedTableWidget.h | 2 ++ src/icons/icons.qrc | 1 + src/icons/page_paste.png | Bin 0 -> 703 bytes 4 files changed, 31 insertions(+) create mode 100644 src/icons/page_paste.png diff --git a/src/ExtendedTableWidget.cpp b/src/ExtendedTableWidget.cpp index 0c1314b3..68d8d378 100644 --- a/src/ExtendedTableWidget.cpp +++ b/src/ExtendedTableWidget.cpp @@ -12,6 +12,7 @@ #include #include #include +#include namespace { @@ -75,7 +76,34 @@ ExtendedTableWidget::ExtendedTableWidget(QWidget* parent) : m_tableHeader = new FilterTableHeader(this); setHorizontalHeader(m_tableHeader); + // Set up vertical header context menu verticalHeader()->setContextMenuPolicy(Qt::CustomContextMenu); + + // Set up table view context menu + m_contextMenu = new QMenu(this); + QAction* copyAction = new QAction(QIcon(":/icons/copy"), "Copy", m_contextMenu); + QAction* pasteAction = new QAction(QIcon(":/icons/paste"), "Paste", m_contextMenu); + m_contextMenu->addAction(copyAction); + m_contextMenu->addAction(pasteAction); + setContextMenuPolicy(Qt::CustomContextMenu); + + // Set up context menu actions + connect(this, static_cast(&QTableView::customContextMenuRequested), + [=](const QPoint& pos) + { + // Try to find out whether the current view is editable and (de)activate menu options according to that + bool editable = editTriggers() != QAbstractItemView::NoEditTriggers; + pasteAction->setEnabled(editable); + + // Show menu + m_contextMenu->popup(viewport()->mapToGlobal(pos)); + }); + connect(copyAction, &QAction::triggered, [&]() { + copy(); + }); + connect(pasteAction, &QAction::triggered, [&]() { + paste(); + }); } void ExtendedTableWidget::reloadSettings() diff --git a/src/ExtendedTableWidget.h b/src/ExtendedTableWidget.h index 5be2668a..3b4512e7 100644 --- a/src/ExtendedTableWidget.h +++ b/src/ExtendedTableWidget.h @@ -6,6 +6,7 @@ #include #include +class QMenu; class FilterTableHeader; class ExtendedTableWidget : public QTableView @@ -47,6 +48,7 @@ protected: virtual void dropEvent(QDropEvent* event); FilterTableHeader* m_tableHeader; + QMenu* m_contextMenu; }; #endif diff --git a/src/icons/icons.qrc b/src/icons/icons.qrc index 2fe96579..24e7b26d 100644 --- a/src/icons/icons.qrc +++ b/src/icons/icons.qrc @@ -54,5 +54,6 @@ folder.png database.png cog_go.png + page_paste.png diff --git a/src/icons/page_paste.png b/src/icons/page_paste.png new file mode 100644 index 0000000000000000000000000000000000000000..968f073fdddc1cc0f0800b1ac4001cd9a55f053d GIT binary patch literal 703 zcmV;w0zmzVP)AVs!l4K}n~L(tL`6d4Up4iSWnZ3Qg~4n+_J zDGk-qQdogO5JUtO-d5pRp7Nd7_r1^a|M&Zq%mn9Oe((|e0sw%Ur!K7T1pojj=U#f? zQM`qbQrM^DPkwa?DK_be^~z<~RgSMIa<`xP_4P7gg2jCwJ{9^k!fsU=#Ti|%I3p;>90Qd+7|~0h&mIklA#nb>ATL2+v$&u)OBgB z;nsHb)I&QRKeX40H~~cIZxCd}5C} z=79lXoXK%6YlyLtsV$~bSm?Upq|DJh#{|*a7XMm`4QJWZ>s6nL2R1|&J z0VPEwJ9?!n`o5PKAjc->P1Gi8BY*%!5&FVp=#)$mMJYul1Jton}gujiUf??eOy!x&!tsjxy;=Q3_DdcXx=a^OBhW0N~`A@4xB0a*%F? l+@c^sQA%W+?pa#c`9H5UNfS6T{e=Jk002ovPDHLkV1grvM=byV literal 0 HcmV?d00001