Spreadsheet: column/row select on right click
This commit is contained in:
@@ -53,6 +53,25 @@ void SheetViewHeader::mouseReleaseEvent(QMouseEvent *event)
|
||||
resizeFinished();
|
||||
}
|
||||
|
||||
bool SheetViewHeader::viewportEvent(QEvent *e) {
|
||||
if(e->type() == QEvent::ContextMenu) {
|
||||
auto *ce = static_cast<QContextMenuEvent*>(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);
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user