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:
Berthold Stoeger 2018-07-30 15:55:29 +02:00 committed by Dirk Hohndel
parent 26901a8dbd
commit 96d8727399
5 changed files with 16 additions and 16 deletions

View file

@ -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));
} }

View file

@ -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);

View file

@ -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;
} }
} }

View file

@ -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

View file

@ -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);