From 7451517e4a5e9aeffe31f1cd7346b07c0c9e15ac Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Sat, 23 Dec 2017 15:49:21 +0100 Subject: Add select-all, deselect-all and invert-selection options to filters To every filter list add a menu button that allows selection of all, selection of none or inversion of selection. Implements #435. Signed-off-by: Berthold Stoeger --- qt-models/filtermodels.cpp | 15 +++++++++++++++ qt-models/filtermodels.h | 2 ++ 2 files changed, 17 insertions(+) (limited to 'qt-models') diff --git a/qt-models/filtermodels.cpp b/qt-models/filtermodels.cpp index 26759571a..0dece6f8f 100644 --- a/qt-models/filtermodels.cpp +++ b/qt-models/filtermodels.cpp @@ -100,6 +100,21 @@ void FilterModelBase::clearFilter() emit dataChanged(createIndex(0,0), createIndex(rowCount()-1, 0)); } +void FilterModelBase::selectAll() +{ + std::fill(checkState.begin(), checkState.end(), true); + anyChecked = true; + emit dataChanged(createIndex(0,0), createIndex(rowCount()-1, 0)); +} + +void FilterModelBase::invertSelection() +{ + for (char &b: checkState) + b = !b; + anyChecked = std::any_of(checkState.begin(), checkState.end(), [](char b){return !!b;}); + emit dataChanged(createIndex(0,0), createIndex(rowCount()-1, 0)); +} + SuitsFilterModel::SuitsFilterModel(QObject *parent) : FilterModelBase(parent) { } diff --git a/qt-models/filtermodels.h b/qt-models/filtermodels.h index d0c3a215a..9db5e5a97 100644 --- a/qt-models/filtermodels.h +++ b/qt-models/filtermodels.h @@ -11,6 +11,8 @@ class FilterModelBase : public QStringListModel { public: virtual bool doFilter(struct dive *d, QModelIndex &index0, QAbstractItemModel *sourceModel) const = 0; void clearFilter(); + void selectAll(); + void invertSelection(); std::vector checkState; bool anyChecked; protected: -- cgit v1.2.3-70-g09d2