mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Add undo/redo commands for importing dive sites
ImportDiveSites adds the provided dive sites to the core dive site table and stores the source data so it can be undone. Signed-off-by: Doug Junkins <junkins@foghead.com>
This commit is contained in:
parent
c38a86bebf
commit
704ff9f82e
4 changed files with 59 additions and 1 deletions
|
|
@ -100,6 +100,42 @@ void AddDiveSite::undo()
|
|||
sitesToAdd = std::move(removeDiveSites(sitesToRemove));
|
||||
}
|
||||
|
||||
ImportDiveSites::ImportDiveSites(struct dive_site_table *sites, const QString &source)
|
||||
{
|
||||
setText(tr("import dive sites from %1").arg(source));
|
||||
|
||||
for (int i = 0; i < sites->nr; ++i) {
|
||||
struct dive_site *new_ds = sites->dive_sites[i];
|
||||
|
||||
// Don't import dive sites that already exist. Currently we only check for
|
||||
// the same name. We might want to be smarter here and merge dive site data, etc.
|
||||
struct dive_site *old_ds = get_same_dive_site(new_ds);
|
||||
if (old_ds) {
|
||||
free_dive_site(new_ds);
|
||||
continue;
|
||||
}
|
||||
sitesToAdd.emplace_back(new_ds);
|
||||
}
|
||||
|
||||
// All site have been consumed
|
||||
sites->nr = 0;
|
||||
}
|
||||
|
||||
bool ImportDiveSites::workToBeDone()
|
||||
{
|
||||
return !sitesToAdd.empty();
|
||||
}
|
||||
|
||||
void ImportDiveSites::redo()
|
||||
{
|
||||
sitesToRemove = std::move(addDiveSites(sitesToAdd));
|
||||
}
|
||||
|
||||
void ImportDiveSites::undo()
|
||||
{
|
||||
sitesToAdd = std::move(removeDiveSites(sitesToRemove));
|
||||
}
|
||||
|
||||
DeleteDiveSites::DeleteDiveSites(const QVector<dive_site *> &sites) : sitesToRemove(sites.toStdVector())
|
||||
{
|
||||
setText(tr("delete %n dive site(s)", "", sites.size()));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue