mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Undo: consider dive site in AddDive()
If a dive site was added for a new dive, remove it on undo. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
2134d99d0c
commit
a2be015a43
8 changed files with 49 additions and 16 deletions
|
@ -6,9 +6,9 @@
|
|||
namespace Command {
|
||||
|
||||
// Dive-list related commands
|
||||
void addDive(dive *d, bool autogroup, bool newNumber)
|
||||
void addDive(dive *d, const QString &newDS, bool autogroup, bool newNumber)
|
||||
{
|
||||
execute(new AddDive(d, autogroup, newNumber));
|
||||
execute(new AddDive(d, newDS, autogroup, newNumber));
|
||||
}
|
||||
|
||||
void importDives(struct dive_table *dives, struct trip_table *trips, struct dive_site_table *sites, int flags, const QString &source)
|
||||
|
|
|
@ -17,10 +17,13 @@ QAction *redoAction(QObject *parent); // Create an redo action.
|
|||
|
||||
// 2) Dive-list related commands
|
||||
|
||||
void addDive(dive *d, bool autogroup, bool newNumber); // If d->dive_trip is null and autogroup is true, dives within the auto-group
|
||||
// distance are added to a trip. dive d is consumed (the structure is reset)!
|
||||
// If newNumber is true, the dive is assigned a new number, depending on the
|
||||
// insertion position.
|
||||
// If d->dive_trip is null and autogroup is true, dives within the auto-group
|
||||
// distance are added to a trip. dive d is consumed (the structure is reset)!
|
||||
// If newNumber is true, the dive is assigned a new number, depending on the
|
||||
// insertion position.
|
||||
// Id newDS is not empty, a dive site with that name will be created. d->dive_site
|
||||
// should be null in this case.
|
||||
void addDive(dive *d, const QString &newDS, bool autogroup, bool newNumber);
|
||||
void importDives(struct dive_table *dives, struct trip_table *trips, struct dive_site_table *sites, int flags, const QString &source);
|
||||
void deleteDive(const QVector<struct dive*> &divesToDelete);
|
||||
void shiftTime(const QVector<dive *> &changedDives, int amount);
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include "desktop-widgets/divelistview.h"
|
||||
#include "core/divelist.h"
|
||||
#include "core/display.h" // for amount_selected
|
||||
#include "core/qthelper.h"
|
||||
#include "core/subsurface-qt/DiveListNotifier.h"
|
||||
#include "qt-models/filtermodels.h"
|
||||
|
||||
|
@ -489,7 +490,7 @@ void DiveListBase::redo()
|
|||
finishWork();
|
||||
}
|
||||
|
||||
AddDive::AddDive(dive *d, bool autogroup, bool newNumber)
|
||||
AddDive::AddDive(dive *d, const QString &newDS, bool autogroup, bool newNumber)
|
||||
{
|
||||
setText(tr("add dive"));
|
||||
// By convention, d is "displayed dive" and can be overwritten.
|
||||
|
@ -497,6 +498,14 @@ AddDive::AddDive(dive *d, bool autogroup, bool newNumber)
|
|||
d->dc.maxdepth.mm = 0;
|
||||
fixup_dive(d);
|
||||
|
||||
// Create new dive site if requested.
|
||||
if (!newDS.isEmpty()) {
|
||||
struct dive_site *ds = alloc_dive_site();
|
||||
ds->name = copy_qstring(newDS);
|
||||
d->dive_site = ds;
|
||||
divesToAdd.sites.emplace_back(ds);
|
||||
}
|
||||
|
||||
// Get an owning pointer to a copied or moved dive
|
||||
// Note: if move is true, this destroys the old dive!
|
||||
OwningDivePtr divePtr(clone_dive(d));
|
||||
|
|
|
@ -85,7 +85,7 @@ private:
|
|||
|
||||
class AddDive : public DiveListBase {
|
||||
public:
|
||||
AddDive(dive *dive, bool autogroup, bool newNumber);
|
||||
AddDive(dive *dive, const QString &newDS, bool autogroup, bool newNumber);
|
||||
private:
|
||||
void undoit() override;
|
||||
void redoit() override;
|
||||
|
|
|
@ -712,11 +712,19 @@ void MainTab::acceptChanges()
|
|||
hideMessage();
|
||||
ui.equipmentTab->setEnabled(true);
|
||||
if (editMode == ADD) {
|
||||
// make sure that the dive site is handled as well
|
||||
updateDiveSite(ui.location->currDiveSite(), &displayed_dive);
|
||||
// Handle dive site
|
||||
struct dive_site *pickedDs = ui.location->currDiveSite();
|
||||
QString newDiveSiteName;
|
||||
if (pickedDs == RECENTLY_ADDED_DIVESITE) {
|
||||
newDiveSiteName = ui.location->text();
|
||||
displayed_dive.dive_site = nullptr;
|
||||
} else {
|
||||
displayed_dive.dive_site = pickedDs;
|
||||
}
|
||||
|
||||
copyTagsToDisplayedDive();
|
||||
|
||||
Command::addDive(&displayed_dive, autogroup, true);
|
||||
Command::addDive(&displayed_dive, newDiveSiteName, autogroup, true);
|
||||
|
||||
editMode = NONE;
|
||||
MainWindow::instance()->exitEditState();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue