OXYGENHUB
◆ main openmsx / src / settings / ProxySetting.cc
2.7 KiB · C++ · last changed chore(): initial commit 1 month ago source blame history raw
e8555c89 Andy McCall 1
#include "ProxySetting.hh"
2
3
#include "GlobalCommandController.hh"
4
#include "MSXCommandController.hh"
5
#include "MSXException.hh"
6
#include "MSXMotherBoard.hh"
7
#include "Reactor.hh"
8
9
namespace openmsx {
10
11
ProxySetting::ProxySetting(Reactor& reactor_, const TclObject& name)
12
	: BaseSetting(name)
13
	, reactor(reactor_)
14
{
15
}
16
17
BaseSetting* ProxySetting::getSetting()
18
{
19
	auto* motherBoard = reactor.getMotherBoard();
20
	if (!motherBoard) return nullptr;
21
	const auto& manager = reactor.getGlobalCommandController().getSettingsManager();
22
	const auto& controller = motherBoard->getMSXCommandController();
23
	return manager.findSetting(controller.getPrefix(), getFullName());
24
}
25
26
const BaseSetting* ProxySetting::getSetting() const
27
{
28
	return const_cast<ProxySetting*>(this)->getSetting();
29
}
30
31
void ProxySetting::setValue(const TclObject& value)
32
{
33
	if (auto* setting = getSetting()) {
34
		setting->setValue(value);
35
	}
36
}
37
38
std::string_view ProxySetting::getTypeString() const
39
{
40
	if (const auto* setting = getSetting()) {
41
		return setting->getTypeString();
42
	} else {
43
		throw MSXException("No setting '", getFullName(), "' on current machine.");
44
	}
45
}
46
47
std::string_view ProxySetting::getDescription() const
48
{
49
	if (const auto* setting = getSetting()) {
50
		return setting->getDescription();
51
	} else {
52
		return "proxy";
53
	}
54
}
55
56
const TclObject& ProxySetting::getValue() const
57
{
58
	if (const auto* setting = getSetting()) {
59
		return setting->getValue();
60
	} else {
61
		throw MSXException("No setting '", getFullName(), "' on current machine.");
62
	}
63
}
64
65
std::optional<TclObject> ProxySetting::getOptionalValue() const
66
{
67
	if (const auto* setting = getSetting()) {
68
		return setting->getOptionalValue();
69
	} else {
70
		return {};
71
	}
72
}
73
74
TclObject ProxySetting::getDefaultValue() const
75
{
76
	if (const auto* setting = getSetting()) {
77
		return setting->getDefaultValue();
78
	} else {
79
		return TclObject("proxy");
80
	}
81
}
82
83
void ProxySetting::setValueDirect(const TclObject& value)
84
{
85
	if (auto* setting = getSetting()) {
86
		// note: not setStringDirect()
87
		setting->setValue(value);
88
	} else {
89
		throw MSXException("No setting '", getFullName(), "' on current machine.");
90
	}
91
}
92
93
void ProxySetting::tabCompletion(std::vector<std::string>& tokens) const
94
{
95
	if (const auto* setting = getSetting()) {
96
		setting->tabCompletion(tokens);
97
	}
98
}
99
100
bool ProxySetting::needLoadSave() const
101
{
102
	if (const auto* setting = getSetting()) {
103
		return setting->needLoadSave();
104
	} else {
105
		return false;
106
	}
107
}
108
109
bool ProxySetting::needTransfer() const
110
{
111
	if (const auto* setting = getSetting()) {
112
		return setting->needTransfer();
113
	} else {
114
		return false;
115
	}
116
}
117
118
void ProxySetting::additionalInfo(TclObject& result) const
119
{
120
	if (const auto* setting = getSetting()) {
121
		setting->additionalInfo(result);
122
	}
123
}
124
125
} // namespace openmsx