Undo: only show warning message if dives were actually edited

The multiple-dives-edited message was shown even if the value was
not changed. Notably, when tab-flipping through the dive fields.

Therefore, changed the execute_edit() function to return zero
when no command was executed. For this, return a boolean from
the execute() function indicating whether the command was really
executed or trashed.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2019-05-24 21:17:22 +02:00 committed by Dirk Hohndel
parent 944a9aed54
commit f51e402e04
3 changed files with 10 additions and 8 deletions

View file

@ -148,9 +148,8 @@ void purgeUnusedDiveSites()
// Execute an edit-command and return number of edited dives // Execute an edit-command and return number of edited dives
static int execute_edit(EditDivesBase *cmd) static int execute_edit(EditDivesBase *cmd)
{ {
int res = cmd->numDives(); int count = cmd->numDives();
execute(cmd); return execute(cmd) ? count : 0;
return res;
} }
// Dive editing related commands // Dive editing related commands

View file

@ -38,12 +38,15 @@ QAction *redoAction(QObject *parent)
return undoStack.createRedoAction(parent, QCoreApplication::translate("Command", "&Redo")); return undoStack.createRedoAction(parent, QCoreApplication::translate("Command", "&Redo"));
} }
void execute(Base *cmd) bool execute(Base *cmd)
{ {
if (cmd->workToBeDone()) if (cmd->workToBeDone()) {
undoStack.push(cmd); undoStack.push(cmd);
else return true;
} else {
delete cmd; delete cmd;
return false;
}
} }
} // namespace Command } // namespace Command

View file

@ -168,8 +168,8 @@ public:
// Put a command on the undoStack (and take ownership), but test whether there // Put a command on the undoStack (and take ownership), but test whether there
// is something to be done beforehand by calling the workToBeDone() function. // is something to be done beforehand by calling the workToBeDone() function.
// If nothing is to be done, the command will be deleted. // If nothing is to be done, the command will be deleted and false is returned.
void execute(Base *cmd); bool execute(Base *cmd);
} // namespace Command } // namespace Command