From 5765439c7cff4e314a0c5732432bdb7b20e91efd Mon Sep 17 00:00:00 2001 From: Mikaƫl Capelle Date: Thu, 7 Jan 2021 19:47:31 +0100 Subject: Alt+Click select/deselect the rows below from a separator. --- src/modlistview.cpp | 24 ++++++++++++++++++++++++ src/modlistview.h | 1 + 2 files changed, 25 insertions(+) (limited to 'src') diff --git a/src/modlistview.cpp b/src/modlistview.cpp index 7c67c599..7c770709 100644 --- a/src/modlistview.cpp +++ b/src/modlistview.cpp @@ -1311,6 +1311,30 @@ void ModListView::timerEvent(QTimerEvent* event) } } +void ModListView::mousePressEvent(QMouseEvent* event) +{ + // we call the parent class first so that we can use the actual + // selection state of the item after + QTreeView::mousePressEvent(event); + + const auto index = indexAt(event->pos()); + + if (event->isAccepted() + && hasCollapsibleSeparators() + && index.isValid() && model()->hasChildren(indexAt(event->pos())) + && (event->modifiers() & Qt::AltModifier)) { + + const auto flag = selectionModel()->isSelected(index) ? + QItemSelectionModel::Select : QItemSelectionModel::Deselect; + const bool expanded = isExpanded(index); + const QItemSelection selection( + model()->index(0, index.column(), index), + model()->index(model()->rowCount(index) - 1, index.column(), index)); + selectionModel()->select(selection, flag | QItemSelectionModel::Rows); + setExpanded(index, expanded); + } +} + bool ModListView::event(QEvent* event) { if (event->type() == QEvent::KeyPress diff --git a/src/modlistview.h b/src/modlistview.h index af4e83c0..08ecd935 100644 --- a/src/modlistview.h +++ b/src/modlistview.h @@ -161,6 +161,7 @@ protected: void dragEnterEvent(QDragEnterEvent* event) override; void dragMoveEvent(QDragMoveEvent* event) override; void dropEvent(QDropEvent* event) override; + void mousePressEvent(QMouseEvent* event) override; bool event(QEvent* event) override; protected slots: -- cgit v1.3.1