mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Dive site: remove UUIDs from LocationInformationModel
Replace UUIDs from LocationInformationModel and fix the fallout. Notably, replace the UUID "column" by a DIVESITE "column". Getting pointers through Qt's QVariant is horrible, we'll have to think about a better solution. RECENTLY_ADDED_DIVESITE now defines to a special pointer to struct dive_site (defined as ~0). This fixes an interesting logic bug: The old code checked the uuid of the LocationInformationModel (currUuid) for the value "1", which corresponded to RECENTLY_ADDED_DIVESITE. If equal, currType would be set to NEW_DIVE_SITE. Later, _currType_ was compared against _RECENTLY_ADDED_DIVESITE_. This would only work because NEW_DIVE_SITE and RECENTLY_ADDED_DIVESITE both were defined as 1. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
6f98dca26e
commit
b9b1b3146b
8 changed files with 64 additions and 69 deletions
|
@ -41,7 +41,7 @@ QVariant LocationInformationModel::getDiveSiteData(const struct dive_site *ds, i
|
|||
case Qt::EditRole:
|
||||
case Qt::DisplayRole :
|
||||
switch(column) {
|
||||
case UUID: return ds->uuid;
|
||||
case DIVESITE: return QVariant::fromValue<void*>((void *)ds); // Not nice: casting away const
|
||||
case NAME: return ds->name;
|
||||
case LATITUDE: return ds->location.lat.udeg;
|
||||
case LONGITUDE: return ds->location.lon.udeg;
|
||||
|
@ -102,7 +102,8 @@ bool LocationInformationModel::removeRows(int row, int, const QModelIndex&)
|
|||
return true;
|
||||
}
|
||||
|
||||
GeoReferencingOptionsModel *GeoReferencingOptionsModel::instance() {
|
||||
GeoReferencingOptionsModel *GeoReferencingOptionsModel::instance()
|
||||
{
|
||||
static GeoReferencingOptionsModel *self = new GeoReferencingOptionsModel();
|
||||
return self;
|
||||
}
|
||||
|
@ -118,24 +119,23 @@ GeoReferencingOptionsModel::GeoReferencingOptionsModel(QObject *parent) : QStrin
|
|||
|
||||
bool GPSLocationInformationModel::filterAcceptsRow(int sourceRow, const QModelIndex &parent) const
|
||||
{
|
||||
uint32_t uuid = sourceModel()->index(sourceRow, LocationInformationModel::UUID, parent).data().toUInt();
|
||||
if (uuid == ignoreUuid || uuid == RECENTLY_ADDED_DIVESITE)
|
||||
struct dive_site *ds = (struct dive_site *)sourceModel()->index(sourceRow, LocationInformationModel::DIVESITE, parent).data().value<void *>();
|
||||
if (ds == ignoreDs || ds == RECENTLY_ADDED_DIVESITE)
|
||||
return false;
|
||||
struct dive_site *ds = get_dive_site_by_uuid(uuid);
|
||||
|
||||
return ds && same_location(&ds->location, &location);
|
||||
}
|
||||
|
||||
GPSLocationInformationModel::GPSLocationInformationModel(QObject *parent) : QSortFilterProxyModel(parent),
|
||||
ignoreUuid(0),
|
||||
ignoreDs(nullptr),
|
||||
location({{0},{0}})
|
||||
{
|
||||
setSourceModel(LocationInformationModel::instance());
|
||||
}
|
||||
|
||||
void GPSLocationInformationModel::set(uint32_t ignoreUuidIn, const location_t &locationIn)
|
||||
void GPSLocationInformationModel::set(const struct dive_site *ignoreDsIn, const location_t &locationIn)
|
||||
{
|
||||
ignoreUuid = ignoreUuidIn;
|
||||
ignoreDs = ignoreDsIn;
|
||||
location = locationIn;
|
||||
invalidate();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue