mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 05:00:20 +00:00
Undo: implement undo of dive site addition
Implement a dive site addition undo command and connect it to the add dive site button. The added dive site has a default name ("new dive site"). Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
2dcc0a7d1e
commit
56dcbd9588
6 changed files with 55 additions and 0 deletions
|
@ -93,4 +93,9 @@ void editDiveSiteDescription(dive_site *ds, const QString &value)
|
|||
execute(new EditDiveSiteDescription(ds, value));
|
||||
}
|
||||
|
||||
void addDiveSite(const QString &name)
|
||||
{
|
||||
execute(new AddDiveSite(name));
|
||||
}
|
||||
|
||||
} // namespace Command
|
||||
|
|
|
@ -43,6 +43,7 @@ void mergeDives(const QVector <dive *> &dives);
|
|||
void deleteDiveSites(const QVector <dive_site *> &sites);
|
||||
void editDiveSiteName(dive_site *ds, const QString &value);
|
||||
void editDiveSiteDescription(dive_site *ds, const QString &value);
|
||||
void addDiveSite(const QString &name);
|
||||
|
||||
} // namespace Command
|
||||
|
||||
|
|
|
@ -62,6 +62,28 @@ static std::vector<OwningDiveSitePtr> removeDiveSites(std::vector<dive_site *> &
|
|||
return res;
|
||||
}
|
||||
|
||||
AddDiveSite::AddDiveSite(const QString &name)
|
||||
{
|
||||
setText(tr("add dive site"));
|
||||
sitesToAdd.emplace_back(alloc_dive_site());
|
||||
sitesToAdd.back()->name = copy_qstring(name);
|
||||
}
|
||||
|
||||
bool AddDiveSite::workToBeDone()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void AddDiveSite::redo()
|
||||
{
|
||||
sitesToRemove = std::move(addDiveSites(sitesToAdd));
|
||||
}
|
||||
|
||||
void AddDiveSite::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()));
|
||||
|
|
|
@ -11,6 +11,23 @@
|
|||
// We put everything in a namespace, so that we can shorten names without polluting the global namespace
|
||||
namespace Command {
|
||||
|
||||
class AddDiveSite : public Base {
|
||||
public:
|
||||
AddDiveSite(const QString &name);
|
||||
private:
|
||||
bool workToBeDone() override;
|
||||
void undo() override;
|
||||
void redo() override;
|
||||
|
||||
// Note: we only add one dive site. Nevertheless, we use vectors so that we
|
||||
// can reuse the dive site deletion code.
|
||||
// For redo
|
||||
std::vector<dive_site *> sitesToRemove;
|
||||
|
||||
// For undo
|
||||
std::vector<OwningDiveSitePtr> sitesToAdd;
|
||||
};
|
||||
|
||||
class DeleteDiveSites : public Base {
|
||||
public:
|
||||
DeleteDiveSites(const QVector<dive_site *> &sites);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include "TabDiveSite.h"
|
||||
#include "qt-models/divelocationmodel.h"
|
||||
#include "desktop-widgets/command.h"
|
||||
|
||||
#include <qt-models/divecomputerextradatamodel.h>
|
||||
|
||||
|
@ -16,6 +17,8 @@ TabDiveSite::TabDiveSite(QWidget *parent) : TabBase(parent)
|
|||
// Show only the first few columns
|
||||
for (int i = LocationInformationModel::COORDS; i < LocationInformationModel::COLUMNS; ++i)
|
||||
ui.diveSites->view()->setColumnHidden(i, true);
|
||||
|
||||
connect(ui.diveSites, &TableView::addButtonClicked, this, &TabDiveSite::add);
|
||||
}
|
||||
|
||||
void TabDiveSite::updateData()
|
||||
|
@ -25,3 +28,8 @@ void TabDiveSite::updateData()
|
|||
void TabDiveSite::clear()
|
||||
{
|
||||
}
|
||||
|
||||
void TabDiveSite::add()
|
||||
{
|
||||
Command::addDiveSite(tr("New dive site"));
|
||||
}
|
||||
|
|
|
@ -12,6 +12,8 @@ public:
|
|||
TabDiveSite(QWidget *parent = 0);
|
||||
void updateData() override;
|
||||
void clear() override;
|
||||
private slots:
|
||||
void add();
|
||||
private:
|
||||
Ui::TabDiveSite ui;
|
||||
DiveSiteSortedModel model;
|
||||
|
|
Loading…
Reference in a new issue