Add our own sort proxy class which provides two helper functions

These can then be used from QML to map the index into the model (the sort
model corresponds directly to the indices in QML) to the dive id and back.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2016-01-28 18:23:14 -08:00
parent dbe9bad0aa
commit af9f07626a
2 changed files with 41 additions and 0 deletions

View file

@ -2,6 +2,28 @@
#include "helpers.h"
#include <QDateTime>
DiveListSortModel::DiveListSortModel(QObject *parent) : QSortFilterProxyModel(parent)
{
}
int DiveListSortModel::getDiveId(int idx)
{
DiveListModel *mySourceModel = qobject_cast<DiveListModel *>(sourceModel());
return mySourceModel->getDiveId(mapToSource(index(idx,0)).row());
}
int DiveListSortModel::getIdxForId(int id)
{
for (int i = 0; i < rowCount(); i++) {
QVariant v = data(index(i, 0), DiveListModel::DiveRole);
DiveObjectHelper *d = v.value<DiveObjectHelper *>();
if (d->id() == id)
return i;
}
return -1;
}
DiveListModel *DiveListModel::m_instance = NULL;
DiveListModel::DiveListModel(QObject *parent) : QAbstractListModel(parent)
@ -52,6 +74,13 @@ int DiveListModel::rowCount(const QModelIndex &) const
return m_dives.count();
}
int DiveListModel::getDiveId(int idx) const
{
if (idx < 0 || idx >= m_dives.count())
return -1;
return m_dives[idx]->id();
}
QVariant DiveListModel::data(const QModelIndex &index, int role) const
{
if(index.row() < 0 || index.row() > m_dives.count())