From 15ecaf167c6ab0048015b764c8f3b0409d257ca1 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 24 Aug 2017 14:01:19 +0100 Subject: [PATCH] Select rows at once in perf viewer, and add copy-paste handler --- qrenderdoc/Widgets/Extended/RDTableWidget.cpp | 34 ++++++++++++++++++- qrenderdoc/Widgets/Extended/RDTableWidget.h | 4 +++ .../Windows/PerformanceCounterViewer.ui | 12 ++++++- 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/qrenderdoc/Widgets/Extended/RDTableWidget.cpp b/qrenderdoc/Widgets/Extended/RDTableWidget.cpp index d4e20783d..d9e354271 100644 --- a/qrenderdoc/Widgets/Extended/RDTableWidget.cpp +++ b/qrenderdoc/Widgets/Extended/RDTableWidget.cpp @@ -23,6 +23,8 @@ ******************************************************************************/ #include "RDTableWidget.h" +#include +#include #include RDTableWidget::RDTableWidget(QWidget *parent) : QTableWidget(parent) @@ -81,6 +83,36 @@ void RDTableWidget::dropEvent(QDropEvent *event) void RDTableWidget::keyPressEvent(QKeyEvent *e) { - QTableView::keyPressEvent(e); + if(!m_customCopyPaste && e->matches(QKeySequence::Copy)) + { + QList items = selectedItems(); + + std::sort(items.begin(), items.end(), [this](QTableWidgetItem *a, QTableWidgetItem *b) { + if(row(a) != row(b)) + return row(a) < row(b); + return column(a) < column(b); + }); + + int prevRow = row(items[0]); + + QString clipboardText; + for(QTableWidgetItem *i : items) + { + clipboardText += i->text(); + + if(prevRow != row(i)) + clipboardText += lit("\n"); + else + clipboardText += lit(" | "); + } + + QClipboard *clipboard = QApplication::clipboard(); + clipboard->setText(clipboardText.trimmed()); + } + else + { + QTableView::keyPressEvent(e); + } + emit(keyPress(e)); } diff --git a/qrenderdoc/Widgets/Extended/RDTableWidget.h b/qrenderdoc/Widgets/Extended/RDTableWidget.h index 1002dd650..2e0fe08e2 100644 --- a/qrenderdoc/Widgets/Extended/RDTableWidget.h +++ b/qrenderdoc/Widgets/Extended/RDTableWidget.h @@ -32,6 +32,8 @@ class RDTableWidget : public QTableWidget public: explicit RDTableWidget(QWidget *parent = 0); + bool customCopyPasteHandler() { return m_customCopyPaste; } + void setCustomCopyPasteHandler(bool custom) { m_customCopyPaste = custom; } signals: void keyPress(QKeyEvent *e); @@ -39,4 +41,6 @@ private: // implement reordering row drag-drop behaviour void dropEvent(QDropEvent *event) override; void keyPressEvent(QKeyEvent *e) override; + + bool m_customCopyPaste = false; }; diff --git a/qrenderdoc/Windows/PerformanceCounterViewer.ui b/qrenderdoc/Windows/PerformanceCounterViewer.ui index 063ec9e95..423f2e0bb 100644 --- a/qrenderdoc/Windows/PerformanceCounterViewer.ui +++ b/qrenderdoc/Windows/PerformanceCounterViewer.ui @@ -72,10 +72,13 @@ - + QAbstractItemView::NoEditTriggers + + QAbstractItemView::SelectRows + false @@ -83,6 +86,13 @@ + + + RDTableWidget + QTableWidget +
Widgets/Extended/RDTableWidget.h
+
+