mirror of
https://github.com/subsurface/subsurface.git
synced 2025-01-31 19:13:24 +00:00
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:
parent
2ad3696230
commit
f43b3f56b2
2 changed files with 0 additions and 58 deletions
|
@ -381,7 +381,6 @@ void DiveListBase::finishWork()
|
|||
|
||||
void DiveListBase::undo()
|
||||
{
|
||||
auto marker = diveListNotifier.enterCommand();
|
||||
initWork();
|
||||
undoit();
|
||||
finishWork();
|
||||
|
@ -389,7 +388,6 @@ void DiveListBase::undo()
|
|||
|
||||
void DiveListBase::redo()
|
||||
{
|
||||
auto marker = diveListNotifier.enterCommand();
|
||||
initWork();
|
||||
redoit();
|
||||
finishWork();
|
||||
|
|
|
@ -121,68 +121,12 @@ signals:
|
|||
// This is necessary, so that the user can't click on the "undo" button and undo
|
||||
// an unrelated command.
|
||||
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 ¬ifier;
|
||||
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.
|
||||
// We can simply define it as a global object.
|
||||
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 ¬ifierIn) : 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) :
|
||||
nr((flags & NR) != 0),
|
||||
datetime((flags & DATETIME) != 0),
|
||||
|
|
Loading…
Add table
Reference in a new issue