summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--qt-models/divelistmodel.cpp22
-rw-r--r--qt-models/divelistmodel.h1
2 files changed, 16 insertions, 7 deletions
diff --git a/qt-models/divelistmodel.cpp b/qt-models/divelistmodel.cpp
index 8143dd550..64661a3f8 100644
--- a/qt-models/divelistmodel.cpp
+++ b/qt-models/divelistmodel.cpp
@@ -62,13 +62,12 @@ int DiveListSortModel::shown()
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 *mySourceModel = qobject_cast<DiveListModel *>(sourceModel());
+ QModelIndex sourceIdx = mySourceModel->getDiveQIdx(id);
+ if (!sourceIdx.isValid())
+ return -1;
+ QModelIndex localIdx = mapFromSource(sourceIdx);
+ return localIdx.row();
}
void DiveListSortModel::reload()
@@ -187,11 +186,20 @@ int DiveListModel::rowCount(const QModelIndex &) const
return dive_table.nr;
}
+// Get the index of a dive in the global dive list by the dive's unique id. Returns an integer [0..nrdives).
int DiveListModel::getDiveIdx(int id) const
{
return get_idx_by_uniq_id(id);
}
+// Get an index of a dive. In contrast to getDiveIdx, this returns a Qt model-index,
+// which can be used to access data of a Qt model.
+QModelIndex DiveListModel::getDiveQIdx(int id)
+{
+ int idx = getDiveIdx(id);
+ return idx >= 0 ? createIndex(idx, 0) : QModelIndex();
+}
+
QVariant DiveListModel::data(const QModelIndex &index, int role) const
{
if(index.row() < 0 || index.row() >= dive_table.nr)
diff --git a/qt-models/divelistmodel.h b/qt-models/divelistmodel.h
index 193d728ea..c355aceaf 100644
--- a/qt-models/divelistmodel.h
+++ b/qt-models/divelistmodel.h
@@ -58,6 +58,7 @@ public:
struct dive *getDive(int i);
int rowCount(const QModelIndex &parent = QModelIndex()) const;
int getDiveIdx(int id) const;
+ QModelIndex getDiveQIdx(int id);
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
QHash<int, QByteArray> roleNames() const;
QString startAddDive();