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 00000000..968f073f Binary files /dev/null and b/src/icons/page_paste.png differ