Skip to content

Commit

Permalink
#5451: Introduce DeleteLayer command
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Dec 25, 2020
1 parent 06d0f8b commit 3c1db14
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 3 deletions.
2 changes: 1 addition & 1 deletion radiant/ui/layers/LayerControl.cpp
Expand Up @@ -177,7 +177,7 @@ void LayerControl::onDelete(wxCommandEvent& ev)

if (box->run() == IDialog::RESULT_YES)
{
layerSystem.deleteLayer(layerSystem.getLayerName(_layerID));
GlobalCommandSystem().executeCommand("DeleteLayer", cmd::Argument(_layerID));
}
}

Expand Down
28 changes: 28 additions & 0 deletions radiantcore/layers/LayerModule.cpp
Expand Up @@ -5,6 +5,7 @@
#include "imap.h"

#include "module/StaticModule.h"
#include "command/ExecutionFailure.h"
#include "LayerManager.h"
#include "LayerInfoFileModule.h"

Expand All @@ -15,6 +16,7 @@ namespace
{

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

GlobalCommandSystem().addCommand(COMMAND_DELETELAYER,
std::bind(&LayerModule::deleteLayer, this, std::placeholders::_1),
{ cmd::ARGTYPE_INT });

GlobalMapInfoFileManager().registerInfoFileModule(
std::make_shared<LayerInfoFileModule>()
);
Expand All @@ -111,6 +117,28 @@ class LayerModule :
});
}

void deleteLayer(const cmd::ArgumentList& args)
{
if (args.size() != 1)
{
rError() << "Usage: " << COMMAND_DELETELAYER << " <LayerID> " << std::endl;
return;
}

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

if (layerName.empty())
{
throw cmd::ExecutionFailure(_("This layer ID doesn't exist"));
}

manager.deleteLayer(layerName);
GlobalMapModule().setModified(true);
});
}

void addSelectionToLayer(const cmd::ArgumentList& args)
{
if (args.size() != 1)
Expand Down
5 changes: 3 additions & 2 deletions test/LayerManipulation.cpp
Expand Up @@ -42,9 +42,10 @@ TEST_F(LayerTest, DeleteLayerMarksMapAsModified)
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.deleteLayer("Second Layer");
GlobalCommandSystem().executeCommand("DeleteLayer", cmd::Argument(layerId));

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

0 comments on commit 3c1db14

Please sign in to comment.