Skip to content

Commit

Permalink
#5746: Add a public method to toggle texture tool selection modes. Ad…
Browse files Browse the repository at this point in the history
…d unit tests. Refactoring.
  • Loading branch information
codereader committed Sep 25, 2021
1 parent 284b2b9 commit bd22004
Show file tree
Hide file tree
Showing 9 changed files with 95 additions and 47 deletions.
8 changes: 6 additions & 2 deletions include/itexturetoolmodel.h
Expand Up @@ -173,8 +173,12 @@ class ITextureToolSelectionSystem :
virtual void clearSelection() = 0;
virtual void clearComponentSelection() = 0;

virtual SelectionMode getMode() const = 0;
virtual void setMode(SelectionMode mode) = 0;
virtual SelectionMode getSelectionMode() const = 0;
virtual void setSelectionMode(SelectionMode mode) = 0;

// Will switch to the given selection mode. If already in mode, this switches back to Default mode (Surface).
virtual void toggleSelectionMode(SelectionMode mode) = 0;

virtual sigc::signal<void, SelectionMode>& signal_selectionModeChanged() = 0;

virtual void selectPoint(SelectionTest& test, selection::SelectionSystem::EModifier modifier) = 0;
Expand Down
2 changes: 1 addition & 1 deletion radiant/textool/TexTool.cpp
Expand Up @@ -511,7 +511,7 @@ void TexTool::drawUVCoords()
{
GlobalTextureToolSceneGraph().foreachNode([&](const textool::INode::Ptr& node)
{
node->render(GlobalTextureToolSelectionSystem().getMode());
node->render(GlobalTextureToolSelectionSystem().getSelectionMode());
return true;
});
}
Expand Down
2 changes: 1 addition & 1 deletion radiant/textool/TexToolModeToggles.h
Expand Up @@ -47,7 +47,7 @@ class TexToolModeToggles
GlobalCommandSystem().executeCommand("ToggleTextureToolSelectionMode", { "Vertex" });
});

onSelectionModeChanged(GlobalTextureToolSelectionSystem().getMode());
onSelectionModeChanged(GlobalTextureToolSelectionSystem().getSelectionMode());
onActiveManipulatorChanged(GlobalTextureToolSelectionSystem().getActiveManipulatorType());
}

Expand Down
4 changes: 2 additions & 2 deletions radiantcore/selection/textool/TextureToolDragManipulator.cpp
Expand Up @@ -73,7 +73,7 @@ void TextureToolDragManipulator::testSelect(SelectionTest& test, const Matrix4&
{
selection::SelectionPool selectionPool;

auto selectionMode = GlobalTextureToolSelectionSystem().getMode();
auto selectionMode = GlobalTextureToolSelectionSystem().getSelectionMode();

GlobalTextureToolSceneGraph().foreachNode([&](const INode::Ptr& node)
{
Expand Down Expand Up @@ -114,7 +114,7 @@ void TextureToolDragManipulator::translateSelected(const Vector2& translation)
{
auto transform = Matrix3::getTranslation(translation);

if (GlobalTextureToolSelectionSystem().getMode() == SelectionMode::Surface)
if (GlobalTextureToolSelectionSystem().getSelectionMode() == SelectionMode::Surface)
{
GlobalTextureToolSelectionSystem().foreachSelectedNode([&](const textool::INode::Ptr& node)
{
Expand Down
Expand Up @@ -13,7 +13,7 @@ void TextureToolManipulationPivot::updateFromSelection()
// Check the centerpoint of all selected items
AABB bounds;

if (GlobalTextureToolSelectionSystem().getMode() == SelectionMode::Surface)
if (GlobalTextureToolSelectionSystem().getSelectionMode() == SelectionMode::Surface)
{
GlobalTextureToolSelectionSystem().foreachSelectedNode([&](const INode::Ptr& node)
{
Expand Down
Expand Up @@ -247,7 +247,7 @@ void TextureToolRotateManipulator::rotateSelected(const Vector2& pivot, double a
transform.premultiplyBy(Matrix3::getRotation(-angle));
transform.premultiplyBy(Matrix3::getTranslation(pivot));

if (GlobalTextureToolSelectionSystem().getMode() == SelectionMode::Surface)
if (GlobalTextureToolSelectionSystem().getSelectionMode() == SelectionMode::Surface)
{
GlobalTextureToolSelectionSystem().foreachSelectedNode([&](const textool::INode::Ptr& node)
{
Expand Down
26 changes: 13 additions & 13 deletions radiantcore/selection/textool/TextureToolSelectionSystem.cpp
Expand Up @@ -28,7 +28,7 @@ void TextureToolSelectionSystem::initialiseModule(const IApplicationContext& ctx
{
rMessage() << getName() << "::initialiseModule called." << std::endl;

_mode = SelectionMode::Surface;
_selectionMode = SelectionMode::Surface;

_manipulationPivot.setFromMatrix(Matrix4::getIdentity());
registerManipulator(std::make_shared<TextureToolRotateManipulator>(_manipulationPivot));
Expand Down Expand Up @@ -63,17 +63,17 @@ void TextureToolSelectionSystem::shutdownModule()
_manipulators.clear();
}

SelectionMode TextureToolSelectionSystem::getMode() const
SelectionMode TextureToolSelectionSystem::getSelectionMode() const
{
return _mode;
return _selectionMode;
}

void TextureToolSelectionSystem::setMode(SelectionMode mode)
void TextureToolSelectionSystem::setSelectionMode(SelectionMode mode)
{
if (mode != _mode)
if (mode != _selectionMode)
{
_mode = mode;
_sigSelectionModeChanged.emit(_mode);
_selectionMode = mode;
_sigSelectionModeChanged.emit(_selectionMode);

_manipulationPivot.setUserLocked(false);
_manipulationPivot.setNeedsRecalculation(true);
Expand All @@ -83,15 +83,15 @@ void TextureToolSelectionSystem::setMode(SelectionMode mode)
void TextureToolSelectionSystem::toggleSelectionMode(SelectionMode mode)
{
// Switch back to Surface mode if toggling a non-default mode again
if (mode == _mode && mode != SelectionMode::Surface)
if (mode == _selectionMode && mode != SelectionMode::Surface)
{
// Toggle back to Surface mode
toggleSelectionMode(SelectionMode::Surface);
}
else
{
// setMode will only do something if we're not already in the target mode
setMode(mode);
setSelectionMode(mode);
}
}

Expand Down Expand Up @@ -176,7 +176,7 @@ void TextureToolSelectionSystem::foreachSelectedComponentNode(const std::functio

void TextureToolSelectionSystem::foreachSelectedNodeOfAnyType(const std::function<bool(const INode::Ptr&)>& functor)
{
if (getMode() == SelectionMode::Surface)
if (getSelectionMode() == SelectionMode::Surface)
{
foreachSelectedNode(functor);
}
Expand Down Expand Up @@ -243,15 +243,15 @@ void TextureToolSelectionSystem::clearComponentSelection()

void TextureToolSelectionSystem::handleUnselectRequest(selection::UnselectSelectionRequest& request)
{
if (getMode() == SelectionMode::Vertex)
if (getSelectionMode() == SelectionMode::Vertex)
{
if (countSelectedComponentNodes() > 0)
{
clearComponentSelection();
}
else // no selection, just switch modes
{
setMode(SelectionMode::Surface);
setSelectionMode(SelectionMode::Surface);
}

request.setHandled(true);
Expand Down Expand Up @@ -508,7 +508,7 @@ void TextureToolSelectionSystem::performSelectionTest(Selector& selector, Select
{
GlobalTextureToolSceneGraph().foreachNode([&](const INode::Ptr& node)
{
if (getMode() == SelectionMode::Surface)
if (getSelectionMode() == SelectionMode::Surface)
{
node->testSelect(selector, test);
}
Expand Down
8 changes: 4 additions & 4 deletions radiantcore/selection/textool/TextureToolSelectionSystem.h
Expand Up @@ -13,7 +13,7 @@ class TextureToolSelectionSystem :
public ITextureToolSelectionSystem
{
private:
SelectionMode _mode;
SelectionMode _selectionMode;

std::map<std::size_t, selection::ITextureToolManipulator::Ptr> _manipulators;

Expand All @@ -36,8 +36,9 @@ class TextureToolSelectionSystem :
void initialiseModule(const IApplicationContext& ctx) override;
void shutdownModule() override;

SelectionMode getMode() const override;
void setMode(SelectionMode mode) override;
SelectionMode getSelectionMode() const override;
void setSelectionMode(SelectionMode mode) override;
void toggleSelectionMode(SelectionMode mode) override;
sigc::signal<void, SelectionMode>& signal_selectionModeChanged() override;

void foreachSelectedNode(const std::function<bool(const INode::Ptr&)>& functor) override;
Expand Down Expand Up @@ -85,7 +86,6 @@ class TextureToolSelectionSystem :
void toggleManipulatorModeById(std::size_t manipId);
std::size_t getManipulatorIdForType(selection::IManipulator::Type type);

void toggleSelectionMode(SelectionMode mode);
void toggleSelectionModeCmd(const cmd::ArgumentList& args);

void performSelectionTest(Selector& selector, SelectionTest& test);
Expand Down

0 comments on commit bd22004

Please sign in to comment.