Skip to content

Commit

Permalink
#5451: Add "RenameLayer" command. Mark map as modified after renaming…
Browse files Browse the repository at this point in the history
… a layer.
  • Loading branch information
codereader committed Dec 25, 2020
1 parent 3c1db14 commit f1db2f5
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 2 deletions.
1 change: 1 addition & 0 deletions radiant/ui/layers/LayerControl.cpp
Expand Up @@ -216,6 +216,7 @@ void LayerControl::onRename(wxCommandEvent& ev)
if (success)
{
// Stop here, the control might already have been destroyed
GlobalMapModule().setModified(true);
return;
}
else
Expand Down
27 changes: 27 additions & 0 deletions radiantcore/layers/LayerModule.cpp
Expand Up @@ -16,6 +16,7 @@ namespace
{

const char* const COMMAND_CREATELAYER("CreateLayer");
const char* const COMMAND_RENAMELAYER("RenameLayer");
const char* const COMMAND_DELETELAYER("DeleteLayer");
const char* const COMMAND_ADDTOLAYER("AddSelectionToLayer");
const char* const COMMAND_MOVETOLAYER("MoveSelectionToLayer");
Expand Down Expand Up @@ -87,6 +88,10 @@ class LayerModule :
std::bind(&LayerModule::createLayer, this, std::placeholders::_1),
{ cmd::ARGTYPE_STRING });

GlobalCommandSystem().addCommand(COMMAND_RENAMELAYER,
std::bind(&LayerModule::renameLayer, this, std::placeholders::_1),
{ cmd::ARGTYPE_INT, cmd::ARGTYPE_STRING });

GlobalCommandSystem().addCommand(COMMAND_DELETELAYER,
std::bind(&LayerModule::deleteLayer, this, std::placeholders::_1),
{ cmd::ARGTYPE_INT });
Expand Down Expand Up @@ -117,6 +122,28 @@ class LayerModule :
});
}

void renameLayer(const cmd::ArgumentList& args)
{
if (args.size() != 2)
{
rError() << "Usage: " << COMMAND_RENAMELAYER << " <LayerID> <NewLayerName>" << std::endl;
return;
}

DoWithMapLayerManager([&](ILayerManager& manager)
{
auto layerName = manager.getLayerName(args[0].getInt());

if (args[1].getString().empty())
{
throw cmd::ExecutionFailure(_("Cannot use an empty string as new layer name"));
}

manager.renameLayer(args[0].getInt(), args[1].getString());
GlobalMapModule().setModified(true);
});
}

void deleteLayer(const cmd::ArgumentList& args)
{
if (args.size() != 1)
Expand Down
5 changes: 3 additions & 2 deletions test/LayerManipulation.cpp
Expand Up @@ -28,9 +28,10 @@ TEST_F(LayerTest, RenameLayerMarksMapAsModified)
auto& layerManager = GlobalMapModule().getRoot()->getLayerManager();

EXPECT_FALSE(GlobalMapModule().isModified());
EXPECT_NE(layerManager.getLayerID("Second Layer"), -1);
auto layerId = layerManager.getLayerID("Second Layer");
EXPECT_NE(layerId, -1);

layerManager.renameLayer(layerManager.getLayerID("Second Layer"), "Renamed Layer");
GlobalCommandSystem().executeCommand("RenameLayer", cmd::Argument(layerId), cmd::Argument("Renamed Layer"));

EXPECT_TRUE(GlobalMapModule().isModified());
}
Expand Down

0 comments on commit f1db2f5

Please sign in to comment.