Dive site: add proximity field to dive site list

Merging dive sites is currently only possible if dive sites are at
the exact same position.

Introduce a field where the user can enter a distance up to which all
dive sites should be listed. These can then be merged.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2019-03-25 22:18:32 +01:00 committed by Dirk Hohndel
parent 22fe0c14e8
commit 8287d86d2b
5 changed files with 63 additions and 5 deletions

View file

@ -302,15 +302,17 @@ GeoReferencingOptionsModel::GeoReferencingOptionsModel(QObject *parent) : QStrin
bool GPSLocationInformationModel::filterAcceptsRow(int sourceRow, const QModelIndex &parent) const
{
struct dive_site *ds = sourceModel()->index(sourceRow, LocationInformationModel::DIVESITE, parent).data().value<dive_site *>();
if (ds == ignoreDs || ds == RECENTLY_ADDED_DIVESITE)
if (!ds || ds == ignoreDs || ds == RECENTLY_ADDED_DIVESITE)
return false;
return ds && same_location(&ds->location, &location);
return distance <= 0 ? same_location(&ds->location, &location)
: (int64_t)get_distance(&ds->location, &location) * 1000 <= distance; // We need 64 bit to represent distances in mm
}
GPSLocationInformationModel::GPSLocationInformationModel(QObject *parent) : QSortFilterProxyModel(parent),
ignoreDs(nullptr),
location({{0},{0}})
location({{0},{0}}),
distance(0)
{
setSourceModel(LocationInformationModel::instance());
}
@ -327,3 +329,9 @@ void GPSLocationInformationModel::setCoordinates(const location_t &locationIn)
location = locationIn;
invalidate();
}
void GPSLocationInformationModel::setDistance(int64_t dist)
{
distance = dist;
invalidate();
}