mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
map: use value semantics for MapLocation
This makes memory management more simple, as not explicit deletion is necessary. A rather large commit, because changing QVector<> to std::vector<> is propagated up the call chain. Adds a new range_contains() helper function for collection types such as std::vector<>. I didn't want to call it contains(), since we already have a contains function for strings and let's keep argument overloading simple. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
e39dea3d68
commit
6b835710bc
17 changed files with 84 additions and 75 deletions
|
|
@ -22,6 +22,7 @@
|
|||
#include "commands/command_base.h"
|
||||
#include "core/errorhelper.h"
|
||||
#include "core/qthelper.h"
|
||||
#include "core/range.h"
|
||||
#include "core/trip.h"
|
||||
#include "desktop-widgets/divelistview.h"
|
||||
#include "core/metrics.h"
|
||||
|
|
@ -439,13 +440,13 @@ void DiveListView::selectDiveSitesOnMap(const std::vector<dive *> &dives)
|
|||
// the dive-site selection is controlled by the filter not
|
||||
// by the selected dives.
|
||||
if (!DiveFilter::instance()->diveSiteMode()) {
|
||||
QVector<dive_site *> selectedSites;
|
||||
std::vector<dive_site *> selectedSites;
|
||||
selectedSites.reserve(dives.size());
|
||||
for (dive *d: dives) {
|
||||
if (!d->hidden_by_filter && d->dive_site && !selectedSites.contains(d->dive_site))
|
||||
if (!d->hidden_by_filter && d->dive_site && !range_contains(selectedSites, d->dive_site))
|
||||
selectedSites.push_back(d->dive_site);
|
||||
}
|
||||
MapWidget::instance()->setSelected(selectedSites);
|
||||
MapWidget::instance()->setSelected(std::move(selectedSites));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -207,7 +207,7 @@ void DiveLogExportDialog::on_buttonBox_accepted()
|
|||
if (!filename.contains('.'))
|
||||
filename.append(".xml");
|
||||
QByteArray bt = QFile::encodeName(filename);
|
||||
std::vector<const dive_site *> sites = getDiveSitesToExport(ui->exportSelected->isChecked());
|
||||
auto sites = getDiveSitesToExport(ui->exportSelected->isChecked());
|
||||
save_dive_sites_logic(bt.data(), sites.data(), (int)sites.size(), ui->anonymize->isChecked());
|
||||
}
|
||||
} else if (ui->exportImageDepths->isChecked()) {
|
||||
|
|
|
|||
|
|
@ -115,14 +115,14 @@ void DiveSiteListView::on_filterText_textChanged(const QString &text)
|
|||
model->setFilter(text);
|
||||
}
|
||||
|
||||
QVector<dive_site *> DiveSiteListView::selectedDiveSites()
|
||||
std::vector<dive_site *> DiveSiteListView::selectedDiveSites()
|
||||
{
|
||||
const QModelIndexList indices = ui.diveSites->view()->selectionModel()->selectedRows();
|
||||
QVector<dive_site *> sites;
|
||||
std::vector<dive_site *> sites;
|
||||
sites.reserve(indices.size());
|
||||
for (const QModelIndex &idx: indices) {
|
||||
struct dive_site *ds = model->getDiveSite(idx);
|
||||
sites.append(ds);
|
||||
sites.push_back(ds);
|
||||
}
|
||||
return sites;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ private slots:
|
|||
private:
|
||||
Ui::DiveSiteListView ui;
|
||||
DiveSiteSortedModel *model;
|
||||
QVector<dive_site *> selectedDiveSites();
|
||||
std::vector<dive_site *> selectedDiveSites();
|
||||
void hideEvent(QHideEvent *) override;
|
||||
void showEvent(QShowEvent *) override;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -260,7 +260,7 @@ void LocationInformationWidget::initFields(dive_site *ds)
|
|||
filter_model.set(ds, ds->location);
|
||||
updateLabels();
|
||||
enableLocationButtons(dive_site_has_gps_location(ds));
|
||||
DiveFilter::instance()->startFilterDiveSites(QVector<dive_site *>{ ds });
|
||||
DiveFilter::instance()->startFilterDiveSites(std::vector<dive_site *>{ ds });
|
||||
filter_model.invalidate();
|
||||
} else {
|
||||
filter_model.set(0, location_t());
|
||||
|
|
|
|||
|
|
@ -79,10 +79,10 @@ bool MapWidget::editMode() const
|
|||
return isReady && m_mapHelper->editMode();
|
||||
}
|
||||
|
||||
void MapWidget::setSelected(const QVector<dive_site *> &divesites)
|
||||
void MapWidget::setSelected(std::vector<dive_site *> divesites)
|
||||
{
|
||||
CHECK_IS_READY_RETURN_VOID();
|
||||
m_mapHelper->setSelected(divesites);
|
||||
m_mapHelper->setSelected(std::move(divesites));
|
||||
m_mapHelper->centerOnSelectedDiveSite();
|
||||
}
|
||||
|
||||
|
|
@ -97,7 +97,7 @@ void MapWidget::selectedDivesChanged(const QList<int> &list)
|
|||
if (dive *d = get_dive(idx))
|
||||
selection.push_back(d);
|
||||
}
|
||||
setSelection(selection, current_dive, -1);
|
||||
setSelection(std::move(selection), current_dive, -1);
|
||||
}
|
||||
|
||||
void MapWidget::coordinatesChanged(struct dive_site *ds, const location_t &location)
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
#include "core/units.h"
|
||||
#include "core/subsurface-qt/divelistnotifier.h"
|
||||
#include <vector>
|
||||
#include <QQuickWidget>
|
||||
#include <QList>
|
||||
|
||||
|
|
@ -23,7 +24,7 @@ public:
|
|||
|
||||
static MapWidget *instance();
|
||||
void reload();
|
||||
void setSelected(const QVector<dive_site *> &divesites);
|
||||
void setSelected(std::vector<dive_site *> divesites);
|
||||
bool editMode() const;
|
||||
|
||||
public slots:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue