mobile/divelist: create memory management class for models

Since we want to add a second model, but not have to manage two models
everywhere, create a class MobileModels that contains both of the models. When
calling reset() on that class, it will reset both of the models, etc.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Berthold Stoeger 2019-12-11 10:37:50 +01:00 committed by Dirk Hohndel
parent 8e9e536ffd
commit 7e1ac2167b
4 changed files with 45 additions and 30 deletions

View file

@ -2,20 +2,9 @@
#include "mobilelistmodel.h"
#include "core/divelist.h" // for shown_dives
MobileListModel::MobileListModel(DiveTripModelBase *sourceIn) : source(sourceIn),
MobileListModel::MobileListModel(DiveTripModelBase *sourceIn) :
source(sourceIn),
expandedRow(-1)
{
connectSignals();
}
MobileListModel *MobileListModel::instance()
{
static DiveTripModelTree source;
static MobileListModel self(&source);
return &self;
}
void MobileListModel::connectSignals()
{
connect(source, &DiveTripModelBase::modelAboutToBeReset, this, &MobileListModel::beginResetModel);
connect(source, &DiveTripModelBase::modelReset, this, &MobileListModel::endResetModel);
@ -246,14 +235,6 @@ QVariant MobileListModel::data(const QModelIndex &index, int role) const
return source->data(mapToSource(index), role);
}
void MobileListModel::resetModel()
{
beginResetModel();
source->reset();
connectSignals();
endResetModel();
}
// Trivial helper to return and erase the last element of a stack
template<typename T>
static T pop(std::vector<T> &v)
@ -544,3 +525,28 @@ void MobileListModel::toggle(int row)
else
expand(row);
}
MobileModels *MobileModels::instance()
{
static MobileModels self;
return &self;
}
MobileModels::MobileModels() :
lm(&source)
{
}
MobileListModel *MobileModels::listModel()
{
return &lm;
}
void MobileModels::clear()
{
source.clear();
}
void MobileModels::reset()
{
source.reset();
}