mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Undo: use dive * instead of unique index in renumber-dives
Now, that pointers to dives are stable, we might just as well use dive * instead of the unique-id. This also affects the merge-dive command, as this uses the same renumbering machinery. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
26901a8dbd
commit
96d8727399
5 changed files with 16 additions and 16 deletions
|
@ -21,7 +21,7 @@ void shiftTime(const QVector<dive *> &changedDives, int amount)
|
||||||
execute(new ShiftTime(changedDives, amount));
|
execute(new ShiftTime(changedDives, amount));
|
||||||
}
|
}
|
||||||
|
|
||||||
void renumberDives(const QVector<QPair<int, int>> &divesToRenumber)
|
void renumberDives(const QVector<QPair<dive *, int>> &divesToRenumber)
|
||||||
{
|
{
|
||||||
execute(new RenumberDives(divesToRenumber));
|
execute(new RenumberDives(divesToRenumber));
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@ QAction *redoAction(QObject *parent); // Create an redo action.
|
||||||
void addDive(dive *d, bool autogroup);
|
void addDive(dive *d, bool autogroup);
|
||||||
void deleteDive(const QVector<struct dive*> &divesToDelete);
|
void deleteDive(const QVector<struct dive*> &divesToDelete);
|
||||||
void shiftTime(const QVector<dive *> &changedDives, int amount);
|
void shiftTime(const QVector<dive *> &changedDives, int amount);
|
||||||
void renumberDives(const QVector<QPair<int, int>> &divesToRenumber);
|
void renumberDives(const QVector<QPair<dive *, int>> &divesToRenumber);
|
||||||
void removeDivesFromTrip(const QVector<dive *> &divesToRemove);
|
void removeDivesFromTrip(const QVector<dive *> &divesToRemove);
|
||||||
void removeAutogenTrips();
|
void removeAutogenTrips();
|
||||||
void addDivesToTrip(const QVector<dive *> &divesToAddIn, dive_trip *trip);
|
void addDivesToTrip(const QVector<dive *> &divesToAddIn, dive_trip *trip);
|
||||||
|
|
|
@ -151,10 +151,10 @@ static std::vector<dive *> addDives(std::vector<DiveToAdd> &divesToAdd)
|
||||||
// This helper function renumbers dives according to an array of id/number pairs.
|
// This helper function renumbers dives according to an array of id/number pairs.
|
||||||
// The old numbers are stored in the array, thus calling this function twice has no effect.
|
// The old numbers are stored in the array, thus calling this function twice has no effect.
|
||||||
// TODO: switch from uniq-id to indexes once all divelist-actions are controlled by undo-able commands
|
// TODO: switch from uniq-id to indexes once all divelist-actions are controlled by undo-able commands
|
||||||
static void renumberDives(QVector<QPair<int, int>> &divesToRenumber)
|
static void renumberDives(QVector<QPair<dive *, int>> &divesToRenumber)
|
||||||
{
|
{
|
||||||
for (auto &pair: divesToRenumber) {
|
for (auto &pair: divesToRenumber) {
|
||||||
dive *d = get_dive_by_uniq_id(pair.first);
|
dive *d = pair.first;
|
||||||
if (!d)
|
if (!d)
|
||||||
continue;
|
continue;
|
||||||
std::swap(d->number, pair.second);
|
std::swap(d->number, pair.second);
|
||||||
|
@ -165,7 +165,7 @@ static void renumberDives(QVector<QPair<int, int>> &divesToRenumber)
|
||||||
std::vector<std::pair<dive_trip *, dive *>> dives;
|
std::vector<std::pair<dive_trip *, dive *>> dives;
|
||||||
dives.reserve(divesToRenumber.size());
|
dives.reserve(divesToRenumber.size());
|
||||||
for (const auto &pair: divesToRenumber) {
|
for (const auto &pair: divesToRenumber) {
|
||||||
dive *d = get_dive_by_uniq_id(pair.first);
|
dive *d = pair.first;
|
||||||
dives.push_back({ d->divetrip, d });
|
dives.push_back({ d->divetrip, d });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -413,7 +413,7 @@ void ShiftTime::undo()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
RenumberDives::RenumberDives(const QVector<QPair<int, int>> &divesToRenumberIn) : divesToRenumber(divesToRenumberIn)
|
RenumberDives::RenumberDives(const QVector<QPair<dive *, int>> &divesToRenumberIn) : divesToRenumber(divesToRenumberIn)
|
||||||
{
|
{
|
||||||
setText(tr("renumber %n dive(s)", "", divesToRenumber.count()));
|
setText(tr("renumber %n dive(s)", "", divesToRenumber.count()));
|
||||||
}
|
}
|
||||||
|
@ -641,7 +641,7 @@ MergeDives::MergeDives(const QVector <dive *> &dives)
|
||||||
// Stop renumbering if stuff isn't in order (see also core/divelist.c)
|
// Stop renumbering if stuff isn't in order (see also core/divelist.c)
|
||||||
if (newnr <= previousnr)
|
if (newnr <= previousnr)
|
||||||
break;
|
break;
|
||||||
divesToRenumber.append(QPair<int,int>(dive_table.dives[i]->id, newnr));
|
divesToRenumber.append(QPair<dive *,int>(dive_table.dives[i], newnr));
|
||||||
previousnr = newnr;
|
previousnr = newnr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,14 +85,14 @@ private:
|
||||||
|
|
||||||
class RenumberDives : public Base {
|
class RenumberDives : public Base {
|
||||||
public:
|
public:
|
||||||
RenumberDives(const QVector<QPair<int, int>> &divesToRenumber);
|
RenumberDives(const QVector<QPair<dive *, int>> &divesToRenumber);
|
||||||
private:
|
private:
|
||||||
void undo() override;
|
void undo() override;
|
||||||
void redo() override;
|
void redo() override;
|
||||||
bool workToBeDone() override;
|
bool workToBeDone() override;
|
||||||
|
|
||||||
// For redo and undo: pairs of dive-id / new number
|
// For redo and undo: pairs of dive-id / new number
|
||||||
QVector<QPair<int, int>> divesToRenumber;
|
QVector<QPair<dive *, int>> divesToRenumber;
|
||||||
};
|
};
|
||||||
|
|
||||||
// The classes RemoveDivesFromTrip, RemoveAutogenTrips, CreateTrip, AutogroupDives
|
// The classes RemoveDivesFromTrip, RemoveAutogenTrips, CreateTrip, AutogroupDives
|
||||||
|
@ -166,7 +166,7 @@ private:
|
||||||
std::vector<DiveToAdd> unmergedDives;
|
std::vector<DiveToAdd> unmergedDives;
|
||||||
|
|
||||||
// For undo and redo
|
// For undo and redo
|
||||||
QVector<QPair<int, int>> divesToRenumber;
|
QVector<QPair<dive *, int>> divesToRenumber;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Command
|
} // namespace Command
|
||||||
|
|
|
@ -161,14 +161,14 @@ void RenumberDialog::buttonClicked(QAbstractButton *button)
|
||||||
if (ui.buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole) {
|
if (ui.buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole) {
|
||||||
MainWindow::instance()->dive_list()->rememberSelection();
|
MainWindow::instance()->dive_list()->rememberSelection();
|
||||||
// we remember a list from dive uuid to a new number
|
// we remember a list from dive uuid to a new number
|
||||||
QVector<QPair<int, int>> renumberedDives;
|
QVector<QPair<dive *, int>> renumberedDives;
|
||||||
int i;
|
int i;
|
||||||
int newNr = ui.spinBox->value();
|
int newNr = ui.spinBox->value();
|
||||||
struct dive *dive = NULL;
|
struct dive *d;
|
||||||
for_each_dive (i, dive) {
|
for_each_dive (i, d) {
|
||||||
if (!selectedOnly || dive->selected) {
|
if (!selectedOnly || d->selected) {
|
||||||
invalidate_dive_cache(dive);
|
invalidate_dive_cache(d);
|
||||||
renumberedDives.append(QPair<int, int>(dive->id, newNr++));
|
renumberedDives.append({ d, newNr++ });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Command::renumberDives(renumberedDives);
|
Command::renumberDives(renumberedDives);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue