cleanup: remove Command::inCommand()

This was used by the divelist to check wether a selection change is
programmatical or user-initiated. However, since there is only one
entry point for programmatical selection changes, this is not needed
anymore. Remove it - this removes an inter-module dependency.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2020-04-26 19:09:28 +02:00 committed by Dirk Hohndel
parent 2ad3696230
commit f43b3f56b2
2 changed files with 0 additions and 58 deletions

View file

@ -381,7 +381,6 @@ void DiveListBase::finishWork()
void DiveListBase::undo() void DiveListBase::undo()
{ {
auto marker = diveListNotifier.enterCommand();
initWork(); initWork();
undoit(); undoit();
finishWork(); finishWork();
@ -389,7 +388,6 @@ void DiveListBase::undo()
void DiveListBase::redo() void DiveListBase::redo()
{ {
auto marker = diveListNotifier.enterCommand();
initWork(); initWork();
redoit(); redoit();
finishWork(); finishWork();

View file

@ -121,68 +121,12 @@ signals:
// This is necessary, so that the user can't click on the "undo" button and undo // This is necessary, so that the user can't click on the "undo" button and undo
// an unrelated command. // an unrelated command.
void commandExecuted(); void commandExecuted();
public:
// Desktop uses the QTreeView class to present the list of dives. The layout
// of this class gives us a very fundamental problem, as we can not easily
// distinguish between user-initiated changes of the selection and changes
// that are due to actions of the Command-classes. To solve this problem,
// the frontend can use this function to query whether a dive list-modifying
// command is currently executed. If this function returns true, the
// frontend is supposed to not modify the selection.
bool inCommand() const;
// The following class and function are used by divelist-modifying commands
// to signal that they are in-flight. If the returned object goes out of scope,
// the command-in-flight status is reset to its previous value. Thus, the
// function can be called recursively.
class InCommandMarker {
DiveListNotifier &notifier;
bool oldValue;
InCommandMarker(DiveListNotifier &);
friend DiveListNotifier;
public:
~InCommandMarker();
};
// Usage:
// void doWork()
// {
// auto marker = diveListNotifier.enterCommand();
// ... do work ...
// }
InCommandMarker enterCommand();
private:
friend InCommandMarker;
bool commandExecuting;
}; };
// The DiveListNotifier class has only trivial state. // The DiveListNotifier class has only trivial state.
// We can simply define it as a global object. // We can simply define it as a global object.
extern DiveListNotifier diveListNotifier; extern DiveListNotifier diveListNotifier;
// InCommandMarker is so trivial that the functions can be inlined.
// TODO: perhaps move this into own header-file.
inline DiveListNotifier::InCommandMarker::InCommandMarker(DiveListNotifier &notifierIn) : notifier(notifierIn),
oldValue(notifier.commandExecuting)
{
notifier.commandExecuting = true;
}
inline DiveListNotifier::InCommandMarker::~InCommandMarker()
{
notifier.commandExecuting = oldValue;
}
inline bool DiveListNotifier::inCommand() const
{
return commandExecuting;
}
inline DiveListNotifier::InCommandMarker DiveListNotifier::enterCommand()
{
return InCommandMarker(*this);
}
inline DiveField::DiveField(int flags) : inline DiveField::DiveField(int flags) :
nr((flags & NR) != 0), nr((flags & NR) != 0),
datetime((flags & DATETIME) != 0), datetime((flags & DATETIME) != 0),