mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Dive site: pass dive-site pointers to merge_dive_sites()
Instead of passing uuids, pass a pointer to the dive site. This is small step in an effort to remove uuids. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
f527a70831
commit
64f0902e0d
3 changed files with 14 additions and 13 deletions
|
@ -309,26 +309,26 @@ void clear_dive_site(struct dive_site *ds)
|
||||||
free_taxonomy(&ds->taxonomy);
|
free_taxonomy(&ds->taxonomy);
|
||||||
}
|
}
|
||||||
|
|
||||||
void merge_dive_sites(uint32_t ref, uint32_t* uuids, int count)
|
void merge_dive_sites(struct dive_site *ref, struct dive_site *dive_sites[], int count)
|
||||||
{
|
{
|
||||||
int curr_dive, i;
|
int curr_dive, i;
|
||||||
struct dive *d;
|
struct dive *d;
|
||||||
for(i = 0; i < count; i++){
|
for(i = 0; i < count; i++){
|
||||||
if (uuids[i] == ref)
|
if (dive_sites[i] == ref)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
for_each_dive(curr_dive, d) {
|
for_each_dive(curr_dive, d) {
|
||||||
if (d->dive_site_uuid != uuids[i] )
|
if (d->dive_site_uuid != dive_sites[i]->uuid )
|
||||||
continue;
|
continue;
|
||||||
d->dive_site_uuid = ref;
|
d->dive_site_uuid = ref->uuid;
|
||||||
invalidate_dive_cache(d);
|
invalidate_dive_cache(d);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(i = 0; i < count; i++) {
|
for(i = 0; i < count; i++) {
|
||||||
if (uuids[i] == ref)
|
if (dive_sites[i] == ref)
|
||||||
continue;
|
continue;
|
||||||
delete_dive_site(get_dive_site_by_uuid(uuids[i]));
|
delete_dive_site(dive_sites[i]);
|
||||||
}
|
}
|
||||||
mark_divelist_changed(true);
|
mark_divelist_changed(true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,7 @@ void merge_dive_site(struct dive_site *a, struct dive_site *b);
|
||||||
void clear_dive_site(struct dive_site *ds);
|
void clear_dive_site(struct dive_site *ds);
|
||||||
unsigned int get_distance(const location_t *loc1, const location_t *loc2);
|
unsigned int get_distance(const location_t *loc1, const location_t *loc2);
|
||||||
struct dive_site *find_or_create_dive_site_with_name(const char *name, timestamp_t divetime);
|
struct dive_site *find_or_create_dive_site_with_name(const char *name, timestamp_t divetime);
|
||||||
void merge_dive_sites(uint32_t ref, uint32_t *uuids, int count);
|
void merge_dive_sites(struct dive_site *ref, struct dive_site *dive_sites[], int count);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,17 +80,18 @@ void LocationInformationWidget::mergeSelectedDiveSites()
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QModelIndexList selection = ui.diveSiteListView->selectionModel()->selectedIndexes();
|
QModelIndexList selection = ui.diveSiteListView->selectionModel()->selectedIndexes();
|
||||||
uint32_t *selected_dive_sites = (uint32_t *)malloc(sizeof(uint32_t) * selection.count());
|
// std::vector guarantees contiguous storage and can therefore be passed to C-code
|
||||||
int i = 0;
|
std::vector<struct dive_site *> selected_dive_sites;
|
||||||
|
selected_dive_sites.reserve(selection.count());
|
||||||
Q_FOREACH (const QModelIndex &idx, selection) {
|
Q_FOREACH (const QModelIndex &idx, selection) {
|
||||||
selected_dive_sites[i] = (uint32_t)idx.data(LocationInformationModel::UUID_ROLE).toInt();
|
struct dive_site *ds = get_dive_site_by_uuid(idx.data(LocationInformationModel::UUID_ROLE).toUInt());
|
||||||
i++;
|
if (ds)
|
||||||
|
selected_dive_sites.push_back(ds);
|
||||||
}
|
}
|
||||||
merge_dive_sites(diveSite->uuid, selected_dive_sites, i);
|
merge_dive_sites(diveSite, selected_dive_sites.data(), (int)selected_dive_sites.size());
|
||||||
LocationInformationModel::instance()->update();
|
LocationInformationModel::instance()->update();
|
||||||
QSortFilterProxyModel *m = (QSortFilterProxyModel *)ui.diveSiteListView->model();
|
QSortFilterProxyModel *m = (QSortFilterProxyModel *)ui.diveSiteListView->model();
|
||||||
m->invalidate();
|
m->invalidate();
|
||||||
free(selected_dive_sites);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LocationInformationWidget::updateLabels()
|
void LocationInformationWidget::updateLabels()
|
||||||
|
|
Loading…
Add table
Reference in a new issue