diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp index 199a9c057..04611977f 100644 --- a/qt-ui/models.cpp +++ b/qt-ui/models.cpp @@ -2600,15 +2600,14 @@ MultiFilterSortModel *MultiFilterSortModel::instance() return self; } -MultiFilterSortModel::MultiFilterSortModel(QObject *parent) : QSortFilterProxyModel(parent) +MultiFilterSortModel::MultiFilterSortModel(QObject *parent) : QSortFilterProxyModel(parent), justCleared(false) { } bool MultiFilterSortModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { - if (models.isEmpty()) { + if (justCleared || models.isEmpty()) return true; - } bool shouldShow = true; Q_FOREACH (MultiFilterInterface *model, models) { @@ -2616,7 +2615,6 @@ bool MultiFilterSortModel::filterAcceptsRow(int source_row, const QModelIndex &s shouldShow = false; } } - return shouldShow; } @@ -2627,7 +2625,6 @@ void MultiFilterSortModel::myInvalidate() DiveListView *dlv = MainWindow::instance()->dive_list(); invalidate(); - // first make sure the trips are no longer shown as selected // (but without updating the selection state of the dives... this just cleans // up an oddity in the filter handling) @@ -2664,6 +2661,40 @@ void MultiFilterSortModel::removeFilterModel(MultiFilterInterface *model) disconnect(itemModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), this, SLOT(myInvalidate())); } +void MultiFilterSortModel::clearFilter() +{ + justCleared = true; + Q_FOREACH(MultiFilterInterface *iface, models){ + iface->clearFilter(); + } + justCleared = false; + myInvalidate(); +} + +void BuddyFilterModel::clearFilter() +{ + memset(checkState, false, rowCount()); + checkState[rowCount() - 1] = false; + anyChecked = false; + emit dataChanged(createIndex(0,0), createIndex(rowCount()-1, 0)); +} + +void LocationFilterModel::clearFilter() +{ + memset(checkState, false, rowCount()); + checkState[rowCount() - 1] = false; + anyChecked = false; + emit dataChanged(createIndex(0,0), createIndex(rowCount()-1, 0)); +} + +void TagFilterModel::clearFilter() +{ + memset(checkState, false, rowCount()); + checkState[rowCount() - 1] = false; + anyChecked = false; + emit dataChanged(createIndex(0,0), createIndex(rowCount()-1, 0)); +} + ExtraDataModel::ExtraDataModel(QObject *parent) : CleanerTableModel(parent), rows(0) { diff --git a/qt-ui/models.h b/qt-ui/models.h index 0d385babd..470cf5fbc 100644 --- a/qt-ui/models.h +++ b/qt-ui/models.h @@ -442,6 +442,7 @@ class MultiFilterInterface { public: MultiFilterInterface() : checkState(NULL){}; virtual bool filterRow(int source_row, const QModelIndex &source_parent, QAbstractItemModel *sourceModel) const = 0; + virtual void clearFilter() = 0; bool *checkState; bool anyChecked; }; @@ -454,6 +455,7 @@ public: virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); virtual Qt::ItemFlags flags(const QModelIndex &index) const; virtual bool filterRow(int source_row, const QModelIndex &source_parent, QAbstractItemModel *sourceModel) const; + void clearFilter(); public slots: void repopulate(); @@ -470,6 +472,7 @@ public: virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); virtual Qt::ItemFlags flags(const QModelIndex &index) const; virtual bool filterRow(int source_row, const QModelIndex &source_parent, QAbstractItemModel *sourceModel) const; + void clearFilter(); public slots: void repopulate(); @@ -486,6 +489,7 @@ public: virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); virtual Qt::ItemFlags flags(const QModelIndex &index) const; virtual bool filterRow(int source_row, const QModelIndex &source_parent, QAbstractItemModel *sourceModel) const; + void clearFilter(); public slots: void repopulate(); @@ -504,8 +508,10 @@ public: void removeFilterModel(MultiFilterInterface *model); public slots: void myInvalidate(); + void clearFilter(); private: MultiFilterSortModel(QObject *parent = 0); QList models; + bool justCleared; }; #endif // MODELS_H