Skip to content

Commit

Permalink
#5408: Refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Oct 26, 2021
1 parent bb0e005 commit 918a1ce
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 21 deletions.
22 changes: 7 additions & 15 deletions radiantcore/undo/UndoSystem.cpp
Expand Up @@ -69,7 +69,7 @@ void UndoSystem::finish(const std::string& command)
if (finishUndo(command))
{
rMessage() << command << std::endl;
foreachTracker([&](Tracker& tracker) { tracker.onOperationRecorded(); });
for (auto tracker : _trackers) { tracker->onOperationRecorded(); }
}
}

Expand All @@ -94,7 +94,7 @@ void UndoSystem::undo()
operation->restoreSnapshot();
finishRedo(operation->getName());
_undoStack.pop_back();
foreachTracker([&](Tracker& tracker) { tracker.onOperationUndone(); });
for (auto tracker : _trackers) { tracker->onOperationUndone(); }

_signalPostUndo.emit();

Expand Down Expand Up @@ -129,7 +129,7 @@ void UndoSystem::redo()
operation->restoreSnapshot();
finishUndo(operation->getName());
_redoStack.pop_back();
foreachTracker([&](Tracker& tracker) { tracker.onOperationRedone(); });
for (auto tracker : _trackers) { tracker->onOperationRedone(); }

_signalPostRedo.emit();

Expand All @@ -148,7 +148,7 @@ void UndoSystem::clear()
setActiveUndoStack(nullptr);
_undoStack.clear();
_redoStack.clear();
foreachTracker([&](Tracker& tracker) { tracker.onAllOperationsCleared(); });
for (auto tracker : _trackers) { tracker->onAllOperationsCleared(); }

// greebo: This is called on map shutdown, so don't clear the observers,
// there are some "persistent" observers like EntityInspector and ShaderClipboard
Expand All @@ -167,13 +167,13 @@ sigc::signal<void>& UndoSystem::signal_postRedo()

void UndoSystem::attachTracker(Tracker& tracker)
{
ASSERT_MESSAGE(_trackers.find(&tracker) == _trackers.end(), "undo tracker already attached");
ASSERT_MESSAGE(_trackers.count(&tracker) == 0, "undo tracker already attached");
_trackers.insert(&tracker);
}

void UndoSystem::detachTracker(Tracker& tracker)
{
ASSERT_MESSAGE(_trackers.find(&tracker) != _trackers.end(), "undo tracker cannot be detached");
ASSERT_MESSAGE(_trackers.count(&tracker) > 0, "undo tracker cannot be detached");
_trackers.erase(&tracker);
}

Expand Down Expand Up @@ -208,18 +208,10 @@ void UndoSystem::setActiveUndoStack(UndoStack* stack)
{
_activeUndoStack = stack;

for (UndoablesMap::value_type& pair : _undoables)
for (auto& pair : _undoables)
{
pair.second.setStack(_activeUndoStack);
}
}

void UndoSystem::foreachTracker(const std::function<void(Tracker&)>& functor) const
{
std::for_each(_trackers.begin(), _trackers.end(), [&] (Tracker* tracker)
{
functor(*tracker);
});
}

} // namespace undo
8 changes: 2 additions & 6 deletions radiantcore/undo/UndoSystem.h
Expand Up @@ -44,13 +44,11 @@ class UndoSystem final :

UndoStack* _activeUndoStack;

typedef std::map<IUndoable*, UndoStackFiller> UndoablesMap;
UndoablesMap _undoables;
std::map<IUndoable*, UndoStackFiller> _undoables;

registry::CachedKey<std::size_t> _undoLevels;

typedef std::set<Tracker*> Trackers;
Trackers _trackers;
std::set<Tracker*> _trackers;

sigc::signal<void> _signalPostUndo;
sigc::signal<void> _signalPostRedo;
Expand Down Expand Up @@ -95,8 +93,6 @@ class UndoSystem final :

// Assigns the given stack to all of the Undoables listed in the map
void setActiveUndoStack(UndoStack* stack);

void foreachTracker(const std::function<void(Tracker&)>& functor) const;
};

}

0 comments on commit 918a1ce

Please sign in to comment.