summaryrefslogtreecommitdiffstats
path: root/divecomputer.cpp
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2015-06-10 07:24:34 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-06-10 09:29:04 -0700
commit1ee447b5a95e97f5eb409ce67b0b06464138e572 (patch)
tree75070de371927ec4caa18eee6d5aed3c825b8594 /divecomputer.cpp
parent2365531c686be62954c201a690d89e0eebdef456 (diff)
downloadsubsurface-1ee447b5a95e97f5eb409ce67b0b06464138e572.tar.gz
When saving only selected dives, only include referenced dive computers
Since we should have far fewer dive computers than dives this straight forward algorithm shouldn't cause any performance issues. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'divecomputer.cpp')
-rw-r--r--divecomputer.cpp28
1 files changed, 25 insertions, 3 deletions
diff --git a/divecomputer.cpp b/divecomputer.cpp
index daea390c2..ac43bd00b 100644
--- a/divecomputer.cpp
+++ b/divecomputer.cpp
@@ -90,14 +90,36 @@ extern "C" bool compareDC(const DiveComputerNode &a, const DiveComputerNode &b)
}
extern "C" void call_for_each_dc (void *f, void (*callback)(void *, const char *, uint32_t,
- const char *, const char *, const char *))
+ const char *, const char *, const char *),
+ bool select_only)
{
QList<DiveComputerNode> values = dcList.dcMap.values();
qSort(values.begin(), values.end(), compareDC);
for (int i = 0; i < values.size(); i++) {
const DiveComputerNode *node = &values.at(i);
- callback(f, node->model.toUtf8().data(), node->deviceId, node->nickName.toUtf8().data(),
- node->serialNumber.toUtf8().data(), node->firmware.toUtf8().data());
+ bool found = false;
+ if (select_only) {
+ int j;
+ struct dive *d;
+ for_each_dive (j, d) {
+ struct divecomputer *dc;
+ if (!d->selected)
+ continue;
+ for_each_dc(d, dc) {
+ if (dc->deviceid == node->deviceId) {
+ found = true;
+ break;
+ }
+ }
+ if (found)
+ break;
+ }
+ } else {
+ found = true;
+ }
+ if (found)
+ callback(f, node->model.toUtf8().data(), node->deviceId, node->nickName.toUtf8().data(),
+ node->serialNumber.toUtf8().data(), node->firmware.toUtf8().data());
}
}