19 : settingInfo (commandController.getOpenMSXInfoCommand())
20 , setCompleter (commandController)
21 , incrCompleter (commandController, *this,
"incr")
22 , unsetCompleter(commandController, *this,
"unset")
28 assert(settings.empty());
33 assert(!settings.contains(
setting.getFullNameObj()));
34 settings.emplace_noDuplicateCheck(&
setting);
39 const auto& name =
setting.getFullNameObj();
40 assert(settings.contains(name));
46 if (
auto it = settings.find(name); it !=
end(settings)) {
49 if (name.starts_with(
"::")) {
51 if (
auto it = settings.find(name.substr(2)); it !=
end(settings)) {
56 if (
auto it = settings.find(
tmpStrCat(
"::", name)); it !=
end(settings)) {
65 auto size = prefix.size() + baseName.size();
74BaseSetting& SettingsManager::getByName(std::string_view cmd, std::string_view name)
const
79 throw CommandException(cmd,
": ", name,
": no such setting");
82std::vector<string> SettingsManager::getTabSettingNames()
const
84 std::vector<string> result;
85 result.reserve(settings.size() * 2);
86 for (
auto* s : settings) {
87 std::string_view name = s->getFullName();
88 result.emplace_back(name);
89 if (name.starts_with(
"::")) {
90 result.emplace_back(name.substr(2));
92 result.push_back(
strCat(
"::", name));
101 for (
auto* s : settings) {
102 if (!s->needLoadSave())
continue;
104 s->setValue(s->getRestoreValue());
119SettingsManager::SettingInfo::SettingInfo(
InfoCommand& openMSXInfoCommand)
120 :
InfoTopic(openMSXInfoCommand,
"setting")
124void SettingsManager::SettingInfo::execute(
125 std::span<const TclObject> tokens, TclObject& result)
const
127 auto& manager =
OUTER(SettingsManager, settingInfo);
128 switch (tokens.size()) {
132 [](
auto* p) { return p->getFullNameObj(); }));
135 const auto& settingName = tokens[2].getString();
136 auto*
setting = manager.findSetting(settingName);
138 throw CommandException(
"No such setting: ", settingName);
142 }
catch (MSXException&
e) {
143 throw CommandException(
e.getMessage());
149 throw CommandException(
"Too many parameters.");
153string SettingsManager::SettingInfo::help(std::span<const TclObject> )
const
155 return "openmsx_info setting : "
156 "returns list of all settings\n"
157 "openmsx_info setting <name> : "
158 "returns info on a specific setting\n";
161void SettingsManager::SettingInfo::tabCompletion(std::vector<string>& tokens)
const
163 if (tokens.size() == 3) {
165 auto& manager =
OUTER(SettingsManager, settingInfo);
166 completeString(tokens, manager.getTabSettingNames());
173SettingsManager::SetCompleter::SetCompleter(
174 CommandController& commandController_)
175 : CommandCompleter(commandController_,
"set")
179string SettingsManager::SetCompleter::help(std::span<const TclObject> tokens)
const
181 if (tokens.size() == 2) {
182 auto& manager =
OUTER(SettingsManager, setCompleter);
183 return string(manager.getByName(
"set", tokens[1].getString()).getDescription());
185 return "Set or query the value of a openMSX setting or Tcl variable\n"
186 " set <setting> shows current value\n"
187 " set <setting> <value> set a new value\n"
188 "Use 'help set <setting>' to get more info on a specific\n"
189 "openMSX setting.\n";
192void SettingsManager::SetCompleter::tabCompletion(std::vector<string>& tokens)
const
194 auto& manager =
OUTER(SettingsManager, setCompleter);
195 switch (tokens.size()) {
198 completeString(tokens, manager.getTabSettingNames(),
false);
203 if (
auto*
setting = manager.findSetting(tokens[1])) {
213SettingsManager::SettingCompleter::SettingCompleter(
214 CommandController& commandController_, SettingsManager& manager_,
216 : CommandCompleter(commandController_, name_)
221string SettingsManager::SettingCompleter::help(std::span<const TclObject> )
const
226void SettingsManager::SettingCompleter::tabCompletion(std::vector<string>& tokens)
const
228 if (tokens.size() == 2) {
230 completeString(tokens, manager.getTabSettingNames());
void info(TclObject &result) const
For SettingInfo.
virtual void tabCompletion(std::vector< std::string > &tokens) const =0
Complete a partly typed value.
const std::string * getValueForSetting(std::string_view setting) const
BaseSetting * findSetting(std::string_view name) const
Find the setting with given name.
SettingsManager(const SettingsManager &)=delete
void unregisterSetting(BaseSetting &setting)
void loadSettings(const SettingsConfig &config)
void registerSetting(BaseSetting &setting)
This file implemented 3 utility functions:
auto copy(InputRange &&range, OutputIter out)
size_t size(std::string_view utf8)
constexpr auto transform(Range &&range, UnaryOp op)
#define OUTER(type, member)
TemporaryString tmpStrCat(Ts &&... ts)
std::string strCat(Ts &&...ts)
#define VLA(TYPE, NAME, LENGTH)
constexpr auto end(const zstring_view &x)