mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 05:00:20 +00:00
Undo: implement undo of dive site description editing
Simply duplicate the code of dive site name editing. Split out the common functionality that swaps a C and a Qt string. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
0fd85832b7
commit
2dcc0a7d1e
6 changed files with 58 additions and 4 deletions
|
@ -88,4 +88,9 @@ void editDiveSiteName(dive_site *ds, const QString &value)
|
|||
execute(new EditDiveSiteName(ds, value));
|
||||
}
|
||||
|
||||
void editDiveSiteDescription(dive_site *ds, const QString &value)
|
||||
{
|
||||
execute(new EditDiveSiteDescription(ds, value));
|
||||
}
|
||||
|
||||
} // namespace Command
|
||||
|
|
|
@ -42,6 +42,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);
|
||||
|
||||
} // namespace Command
|
||||
|
||||
|
|
|
@ -82,6 +82,15 @@ void DeleteDiveSites::undo()
|
|||
sitesToRemove = std::move(addDiveSites(sitesToAdd));
|
||||
}
|
||||
|
||||
// Helper function: swap C and Qt string
|
||||
static void swap(char *&c, QString &q)
|
||||
{
|
||||
QString s = c;
|
||||
free(c);
|
||||
c = copy_qstring(q);
|
||||
q = s;
|
||||
}
|
||||
|
||||
EditDiveSiteName::EditDiveSiteName(dive_site *dsIn, const QString &name) : ds(dsIn),
|
||||
value(name)
|
||||
{
|
||||
|
@ -95,10 +104,7 @@ bool EditDiveSiteName::workToBeDone()
|
|||
|
||||
void EditDiveSiteName::redo()
|
||||
{
|
||||
QString s = ds->name;
|
||||
free(ds->name);
|
||||
ds->name = copy_qstring(value);
|
||||
value = s;
|
||||
swap(ds->name, value);
|
||||
emit diveListNotifier.diveSiteChanged(ds, LocationInformationModel::NAME); // Inform frontend of changed dive site.
|
||||
}
|
||||
|
||||
|
@ -108,4 +114,27 @@ void EditDiveSiteName::undo()
|
|||
redo();
|
||||
}
|
||||
|
||||
EditDiveSiteDescription::EditDiveSiteDescription(dive_site *dsIn, const QString &description) : ds(dsIn),
|
||||
value(description)
|
||||
{
|
||||
setText(tr("Edit dive site description"));
|
||||
}
|
||||
|
||||
bool EditDiveSiteDescription::workToBeDone()
|
||||
{
|
||||
return value != QString(ds->description);
|
||||
}
|
||||
|
||||
void EditDiveSiteDescription::redo()
|
||||
{
|
||||
swap(ds->description, value);
|
||||
emit diveListNotifier.diveSiteChanged(ds, LocationInformationModel::DESCRIPTION); // Inform frontend of changed dive site.
|
||||
}
|
||||
|
||||
void EditDiveSiteDescription::undo()
|
||||
{
|
||||
// Undo and redo do the same
|
||||
redo();
|
||||
}
|
||||
|
||||
} // namespace Command
|
||||
|
|
|
@ -38,6 +38,18 @@ private:
|
|||
QString value; // Value to be set
|
||||
};
|
||||
|
||||
class EditDiveSiteDescription : public Base {
|
||||
public:
|
||||
EditDiveSiteDescription(dive_site *ds, const QString &description);
|
||||
private:
|
||||
bool workToBeDone() override;
|
||||
void undo() override;
|
||||
void redo() override;
|
||||
|
||||
dive_site *ds;
|
||||
QString value; // Value to be set
|
||||
};
|
||||
|
||||
} // namespace Command
|
||||
|
||||
#endif // COMMAND_DIVESITE_H
|
||||
|
|
|
@ -131,6 +131,10 @@ void LocationInformationWidget::diveSiteChanged(struct dive_site *ds, int field)
|
|||
switch (field) {
|
||||
case LocationInformationModel::NAME:
|
||||
ui.diveSiteName->setText(diveSite->name);
|
||||
return;
|
||||
case LocationInformationModel::DESCRIPTION:
|
||||
ui.diveSiteDescription->setText(diveSite->description);
|
||||
return;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -234,6 +234,9 @@ bool DiveSiteSortedModel::setData(const QModelIndex &index, const QVariant &valu
|
|||
case LocationInformationModel::NAME:
|
||||
Command::editDiveSiteName(ds, value.toString());
|
||||
return true;
|
||||
case LocationInformationModel::DESCRIPTION:
|
||||
Command::editDiveSiteDescription(ds, value.toString());
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue