Undo: keep frontend informed of changes to dive site count

Add a new signal to DiveListNotifier. Send signal if dives are
added or removed and therefore the dive count of a dive site
changes. The dive sites are collected and the signal is sent
at the end of the command.

Add code to update the table view.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2019-03-10 16:03:39 +01:00 committed by Dirk Hohndel
parent dd12bdaf94
commit 8dcc33d8ab
6 changed files with 37 additions and 2 deletions

View file

@ -66,6 +66,9 @@ protected:
DivesAndTripsToAdd removeDives(DivesAndSitesToRemove &divesAndSitesToDelete);
DivesAndSitesToRemove addDives(DivesAndTripsToAdd &toAdd);
// Register dive sites where counts changed so that we can signal the frontend later.
void diveSiteCountChanged(struct dive_site *ds);
// Set the selection to a given state. Set the selectionChanged flag if anything changed.
void restoreSelection(const std::vector<dive *> &selection, dive *currentDive);
@ -74,9 +77,12 @@ protected:
// If this flag is set on first execution, a selectionChanged signal will
// be sent.
bool selectionChanged;
private:
// Keep track of dive sites where the number of dives changed
std::vector<dive_site *> sitesCountChanged;
void initWork(); // reset selectionChanged flag
void finishWork(); // emit signal if selection changed
void finishWork(); // emit signals if selection or dive site counts changed
void undo() override;
void redo() override;
virtual void redoit() = 0;