diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-12-09 15:37:26 +0100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2019-12-10 18:45:30 -0800 |
commit | 6ec82a3c80e0f362abc59a6df8ea793013f01c65 (patch) | |
tree | f381e928ccbc788b8302b0404f14bcb04af40de9 /qt-models/filtermodels.cpp | |
parent | 0f417a3bc1f282b34509df1c9295197522344a55 (diff) | |
download | subsurface-6ec82a3c80e0f362abc59a6df8ea793013f01c65.tar.gz |
Dive list: remove global pointer to DiveTrip model
This part of the code had that horrible pattern, where reseting
the model would invalidate all pointers to the DiveTrip model.
Internalize these complexities in the MultiFilterSortModel.
All accesses are now performed via that proxy model.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'qt-models/filtermodels.cpp')
-rw-r--r-- | qt-models/filtermodels.cpp | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/qt-models/filtermodels.cpp b/qt-models/filtermodels.cpp index 463276e13..d07de02c0 100644 --- a/qt-models/filtermodels.cpp +++ b/qt-models/filtermodels.cpp @@ -15,6 +15,7 @@ MultiFilterSortModel *MultiFilterSortModel::instance() MultiFilterSortModel::MultiFilterSortModel(QObject *parent) : QSortFilterProxyModel(parent) { + resetModel(DiveTripModelBase::TREE); setFilterKeyColumn(-1); // filter all columns setFilterRole(DiveTripModelBase::SHOWN_ROLE); // Let the proxy-model known that is has to react to change events involving SHOWN_ROLE setFilterCaseSensitivity(Qt::CaseInsensitive); @@ -22,19 +23,20 @@ MultiFilterSortModel::MultiFilterSortModel(QObject *parent) : QSortFilterProxyMo void MultiFilterSortModel::resetModel(DiveTripModelBase::Layout layout) { - DiveTripModelBase::resetModel(layout); - // DiveTripModelBase::resetModel() generates a new instance. - // Thus, the source model must be reset and the connections must be reset. - DiveTripModelBase *m = DiveTripModelBase::instance(); - setSourceModel(m); - connect(m, &DiveTripModelBase::selectionChanged, this, &MultiFilterSortModel::selectionChangedSlot); - connect(m, &DiveTripModelBase::currentDiveChanged, this, &MultiFilterSortModel::currentDiveChangedSlot); - m->initSelection(); + if (layout == DiveTripModelBase::TREE) + model.reset(new DiveTripModelTree); + else + model.reset(new DiveTripModelList); + + setSourceModel(model.get()); + connect(model.get(), &DiveTripModelBase::selectionChanged, this, &MultiFilterSortModel::selectionChangedSlot); + connect(model.get(), &DiveTripModelBase::currentDiveChanged, this, &MultiFilterSortModel::currentDiveChangedSlot); + model->initSelection(); } void MultiFilterSortModel::clear() { - DiveTripModelBase::instance()->clear(); + model->clear(); } // Translate selection into local indexes and re-emit signal @@ -68,5 +70,5 @@ bool MultiFilterSortModel::filterAcceptsRow(int source_row, const QModelIndex &s bool MultiFilterSortModel::lessThan(const QModelIndex &i1, const QModelIndex &i2) const { // Hand sorting down to the source model. - return DiveTripModelBase::instance()->lessThan(i1, i2); + return model->lessThan(i1, i2); } |