From 3b6455123609039c4c19c4e68bcb47acf8827ec7 Mon Sep 17 00:00:00 2001 From: codereader Date: Mon, 4 May 2020 16:53:39 +0200 Subject: [PATCH] #5231: Add SetFilterState command, accepting the filter name and the state as arguments. --- radiant/filters/BasicFilterSystem.cpp | 25 +++++++++++++++++++++++++ radiant/filters/BasicFilterSystem.h | 1 + 2 files changed, 26 insertions(+) diff --git a/radiant/filters/BasicFilterSystem.cpp b/radiant/filters/BasicFilterSystem.cpp index f3a03a7e12..38a1dd8259 100644 --- a/radiant/filters/BasicFilterSystem.cpp +++ b/radiant/filters/BasicFilterSystem.cpp @@ -68,6 +68,26 @@ void BasicFilterSystem::setAllFilterStatesCmd(const cmd::ArgumentList& args) setAllFilterStates(args.front().getInt() != 0); } +void BasicFilterSystem::setFilterStateCmd(const cmd::ArgumentList& args) +{ + if (args.size() != 2) + { + rMessage() << "Usage: SetFilterState <1|0>" << std::endl; + rMessage() << " an argument value of 1 activates the named filters, 0 deactivates it." << std::endl; + return; + } + + std::string filterName = args[0].getString(); + + if (_availableFilters.find(filterName) == _availableFilters.end()) + { + rError() << "Unknown filter: " << filterName << std::endl; + return; + } + + setFilterState(args[0].getString(), args[1].getInt() != 0); +} + void BasicFilterSystem::selectObjectsByFilterCmd(const cmd::ArgumentList& args) { if (args.size() != 1) @@ -132,6 +152,11 @@ void BasicFilterSystem::initialiseModule(const ApplicationContext& ctx) GlobalCommandSystem().addCommand("SetAllFilterStates", std::bind(&BasicFilterSystem::setAllFilterStatesCmd, this, std::placeholders::_1), { cmd::ARGTYPE_INT }); + // Command to activate/deactivate a named filter + GlobalCommandSystem().addCommand("SetFilterState", + std::bind(&BasicFilterSystem::setFilterStateCmd, this, std::placeholders::_1), + { cmd::ARGTYPE_STRING, cmd::ARGTYPE_INT }); + // Register two shortcuts GlobalCommandSystem().addStatement("ActivateAllFilters", "SetAllFilterStates 1", false); GlobalCommandSystem().addStatement("DeactivateAllFilters", "SetAllFilterStates 0", false); diff --git a/radiant/filters/BasicFilterSystem.h b/radiant/filters/BasicFilterSystem.h index 9525c490a3..17de0379a6 100644 --- a/radiant/filters/BasicFilterSystem.h +++ b/radiant/filters/BasicFilterSystem.h @@ -56,6 +56,7 @@ class BasicFilterSystem : XmlFilterEventAdapter::Ptr ensureEventAdapter(XMLFilter& filter); + void setFilterStateCmd(const cmd::ArgumentList& args); void setAllFilterStatesCmd(const cmd::ArgumentList& args); void selectObjectsByFilterCmd(const cmd::ArgumentList& args);