From 006f685db1b6a52dcff47a8ce267200927d67ec3 Mon Sep 17 00:00:00 2001 From: "Zheng, Lei" Date: Sun, 29 Sep 2019 17:58:41 +0800 Subject: [PATCH] Spreadsheet: column/row select on right click --- src/Mod/Spreadsheet/Gui/SheetTableView.cpp | 25 ++++++++++++++++++++-- src/Mod/Spreadsheet/Gui/SheetTableView.h | 7 +++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/Mod/Spreadsheet/Gui/SheetTableView.cpp b/src/Mod/Spreadsheet/Gui/SheetTableView.cpp index 344a6c6add..363c4a5819 100644 --- a/src/Mod/Spreadsheet/Gui/SheetTableView.cpp +++ b/src/Mod/Spreadsheet/Gui/SheetTableView.cpp @@ -53,6 +53,25 @@ void SheetViewHeader::mouseReleaseEvent(QMouseEvent *event) resizeFinished(); } +bool SheetViewHeader::viewportEvent(QEvent *e) { + if(e->type() == QEvent::ContextMenu) { + auto *ce = static_cast(e); + int section = logicalIndexAt(ce->pos()); + if(section>=0) { + if(orientation() == Qt::Horizontal) { + if(!owner->selectionModel()->isColumnSelected(section,owner->rootIndex())) { + owner->clearSelection(); + owner->selectColumn(section); + } + }else if(!owner->selectionModel()->isRowSelected(section,owner->rootIndex())) { + owner->clearSelection(); + owner->selectRow(section); + } + } + } + return QHeaderView::viewportEvent(e); +} + SheetTableView::SheetTableView(QWidget *parent) : QTableView(parent) , sheet(0) @@ -62,8 +81,10 @@ SheetTableView::SheetTableView(QWidget *parent) QAction * insertColumns = new QAction(tr("Insert columns"), this); QAction * removeColumns = new QAction(tr("Remove columns"), this); - setHorizontalHeader(new SheetViewHeader(Qt::Horizontal)); - setVerticalHeader(new SheetViewHeader(Qt::Vertical)); + setHorizontalHeader(new SheetViewHeader(this,Qt::Horizontal)); + setVerticalHeader(new SheetViewHeader(this,Qt::Vertical)); + setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); + setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); horizontalHeader()->addAction(insertColumns); horizontalHeader()->addAction(removeColumns); diff --git a/src/Mod/Spreadsheet/Gui/SheetTableView.h b/src/Mod/Spreadsheet/Gui/SheetTableView.h index abf0377861..8507833f58 100644 --- a/src/Mod/Spreadsheet/Gui/SheetTableView.h +++ b/src/Mod/Spreadsheet/Gui/SheetTableView.h @@ -34,7 +34,9 @@ namespace SpreadsheetGui { class SheetViewHeader : public QHeaderView { Q_OBJECT public: - SheetViewHeader(Qt::Orientation o) : QHeaderView(o) { + SheetViewHeader(QTableView *owner, Qt::Orientation o) + : QHeaderView(o),owner(owner) + { #if QT_VERSION >= 0x050000 setSectionsClickable(true); #else @@ -45,6 +47,9 @@ Q_SIGNALS: void resizeFinished(); protected: void mouseReleaseEvent(QMouseEvent * event); + bool viewportEvent(QEvent *e); +private: + QTableView *owner; }; class SheetTableView : public QTableView