mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Undo: make dive site merging undoable
This one was rather trivial, as there is no actual merging done. Quite simply, a number of dive sites are removed and their dive added to a different dive site. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
7c63956ee4
commit
59239cec02
7 changed files with 66 additions and 36 deletions
|
@ -266,4 +266,45 @@ void EditDiveSiteTaxonomy::undo()
|
|||
redo();
|
||||
}
|
||||
|
||||
MergeDiveSites::MergeDiveSites(dive_site *dsIn, const QVector<dive_site *> &sites) : ds(dsIn)
|
||||
{
|
||||
setText(tr("merge dive sites"));
|
||||
sitesToRemove.reserve(sites.size());
|
||||
for (dive_site *site: sites) {
|
||||
if (site != ds)
|
||||
sitesToRemove.push_back(site);
|
||||
}
|
||||
}
|
||||
|
||||
bool MergeDiveSites::workToBeDone()
|
||||
{
|
||||
return !sitesToRemove.empty();
|
||||
}
|
||||
|
||||
void MergeDiveSites::redo()
|
||||
{
|
||||
// First, remove all dive sites
|
||||
sitesToAdd = std::move(removeDiveSites(sitesToRemove));
|
||||
|
||||
// The dives of the above dive sites were reset to no dive sites.
|
||||
// Add them to the merged-into dive site. Thankfully, we remember
|
||||
// the dives in the sitesToAdd vector.
|
||||
for (const OwningDiveSitePtr &site: sitesToAdd) {
|
||||
for (int i = 0; i < site->dives.nr; ++i)
|
||||
add_dive_to_dive_site(site->dives.dives[i], ds); // TODO: send dive changed signal
|
||||
}
|
||||
}
|
||||
|
||||
void MergeDiveSites::undo()
|
||||
{
|
||||
// Before readding the dive sites, unregister the corresponding dives so that they can be
|
||||
// readded to their old dive sites.
|
||||
for (const OwningDiveSitePtr &site: sitesToAdd) {
|
||||
for (int i = 0; i < site->dives.nr; ++i)
|
||||
unregister_dive_from_dive_site(site->dives.dives[i]);
|
||||
}
|
||||
|
||||
sitesToRemove = std::move(addDiveSites(sitesToAdd));
|
||||
}
|
||||
|
||||
} // namespace Command
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue