presentation/MapMarkerModel.cpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #include "MapMarkerModel.h" | ||
| 2 | |||
| 3 | #include <QHash> | ||
| 4 | #include <QSet> | ||
| 5 | |||
| 6 |
1/2✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 4925 times.
|
4925 | int MapMarkerModel::rowCount(const QModelIndex &parent) const { return parent.isValid() ? 0 : int(m_rows.size()); } |
| 7 | |||
| 8 | 1282 | QVariant MapMarkerModel::data(const QModelIndex &index, int role) const { | |
| 9 |
4/8✓ Branch 3 → 4 taken 1282 times.
✗ Branch 3 → 8 not taken.
✓ Branch 6 → 7 taken 1282 times.
✗ Branch 6 → 8 not taken.
✗ Branch 7 → 8 not taken.
✓ Branch 7 → 9 taken 1282 times.
✗ Branch 10 → 11 not taken.
✓ Branch 10 → 12 taken 1282 times.
|
1282 | if (!index.isValid() || index.row() >= m_rows.size() || role != MarkerRole) |
| 10 | ✗ | return {}; | |
| 11 | 1282 | return m_rows.at(index.row()); | |
| 12 | } | ||
| 13 | |||
| 14 |
3/9✓ Branch 3 → 4 taken 27 times.
✓ Branch 5 → 6 taken 27 times.
✓ Branch 5 → 7 taken 27 times.
✗ Branch 10 → 11 not taken.
✗ Branch 10 → 12 not taken.
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 18 not taken.
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
|
54 | QHash<int, QByteArray> MapMarkerModel::roleNames() const { return {{MarkerRole, m_roleName}}; } |
| 15 | |||
| 16 | 504 | void MapMarkerModel::setMarkers(const QVariantList &markers) { | |
| 17 | 504 | QHash<QString, int> wanted; // id → position in `markers` | |
| 18 |
2/2✓ Branch 20 → 3 taken 4139 times.
✓ Branch 20 → 21 taken 504 times.
|
4643 | for (int i = 0; i < markers.size(); ++i) |
| 19 |
4/4✓ Branch 4 → 5 taken 4139 times.
✓ Branch 9 → 10 taken 4139 times.
✓ Branch 10 → 11 taken 4139 times.
✓ Branch 11 → 12 taken 4139 times.
|
8278 | wanted.insert(markers.at(i).toMap().value(QStringLiteral("id")).toString(), i); |
| 20 | 504 | const int before = int(m_rows.size()); | |
| 21 | // Rows whose cluster left, from the end so the indices stay valid. | ||
| 22 |
2/2✓ Branch 45 → 24 taken 3273 times.
✓ Branch 45 → 46 taken 504 times.
|
3777 | for (int row = int(m_rows.size()) - 1; row >= 0; --row) |
| 23 |
5/5✓ Branch 25 → 26 taken 3273 times.
✓ Branch 30 → 31 taken 3273 times.
✓ Branch 31 → 32 taken 3273 times.
✓ Branch 39 → 40 taken 962 times.
✓ Branch 39 → 44 taken 2311 times.
|
6546 | if (!wanted.contains(m_rows.at(row).toMap().value(QStringLiteral("id")).toString())) { |
| 24 |
1/1✓ Branch 41 → 42 taken 962 times.
|
962 | beginRemoveRows({}, row, row); |
| 25 |
1/1✓ Branch 42 → 43 taken 962 times.
|
962 | m_rows.removeAt(row); |
| 26 |
1/1✓ Branch 43 → 44 taken 962 times.
|
962 | endRemoveRows(); |
| 27 | } | ||
| 28 | // Kept rows get their new data in place. | ||
| 29 | 504 | QSet<QString> kept; | |
| 30 |
2/2✓ Branch 82 → 48 taken 2311 times.
✓ Branch 82 → 83 taken 504 times.
|
2815 | for (int row = 0; row < m_rows.size(); ++row) { |
| 31 |
3/3✓ Branch 49 → 50 taken 2311 times.
✓ Branch 54 → 55 taken 2311 times.
✓ Branch 55 → 56 taken 2311 times.
|
4622 | const QString id = m_rows.at(row).toMap().value(QStringLiteral("id")).toString(); |
| 32 |
1/1✓ Branch 61 → 62 taken 2311 times.
|
2311 | kept.insert(id); |
| 33 |
1/1✓ Branch 64 → 65 taken 2311 times.
|
2311 | const QVariant next = markers.at(wanted.value(id)); |
| 34 |
3/3✓ Branch 66 → 67 taken 2311 times.
✓ Branch 67 → 68 taken 969 times.
✓ Branch 67 → 78 taken 1342 times.
|
2311 | if (next != m_rows.at(row)) { |
| 35 |
2/2✓ Branch 68 → 69 taken 969 times.
✓ Branch 69 → 70 taken 969 times.
|
969 | m_rows[row] = next; |
| 36 |
4/4✓ Branch 70 → 71 taken 969 times.
✓ Branch 72 → 73 taken 969 times.
✓ Branch 74 → 75 taken 969 times.
✓ Branch 75 → 76 taken 969 times.
|
969 | emit dataChanged(index(row), index(row), {MarkerRole}); |
| 37 | } | ||
| 38 | 2311 | } | |
| 39 | // New clusters at the end. | ||
| 40 | 504 | QVariantList added; | |
| 41 |
2/2✓ Branch 104 → 85 taken 4139 times.
✓ Branch 104 → 105 taken 504 times.
|
4643 | for (const QVariant &marker : markers) |
| 42 |
5/5✓ Branch 86 → 87 taken 4139 times.
✓ Branch 91 → 92 taken 4139 times.
✓ Branch 92 → 93 taken 4139 times.
✓ Branch 100 → 101 taken 1828 times.
✓ Branch 100 → 102 taken 2311 times.
|
8278 | if (!kept.contains(marker.toMap().value(QStringLiteral("id")).toString())) |
| 43 |
1/1✓ Branch 101 → 102 taken 1828 times.
|
1828 | added.append(marker); |
| 44 |
2/2✓ Branch 106 → 107 taken 133 times.
✓ Branch 106 → 114 taken 371 times.
|
504 | if (!added.isEmpty()) { |
| 45 |
1/1✓ Branch 111 → 112 taken 133 times.
|
133 | beginInsertRows({}, int(m_rows.size()), int(m_rows.size() + added.size()) - 1); |
| 46 |
1/1✓ Branch 112 → 113 taken 133 times.
|
133 | m_rows.append(added); |
| 47 |
1/1✓ Branch 113 → 114 taken 133 times.
|
133 | endInsertRows(); |
| 48 | } | ||
| 49 |
2/2✓ Branch 115 → 116 taken 140 times.
✓ Branch 115 → 117 taken 364 times.
|
504 | if (m_rows.size() != before) |
| 50 |
1/1✓ Branch 116 → 117 taken 140 times.
|
140 | emit countChanged(); |
| 51 | 504 | } | |
| 52 |