void                Button::setParam(
	std::string const &k, std::string const &v)
{
	using lambda = void (*)(Button*,std::string const&);
	using map = std::unordered_map<std::string, lambda>;

	static map      param_map
	{
		{"highlightLocked", [](Button *v, std::string const &str) {
				v->lockHighlight(str == "true");
		}},
		{"normalFillColor", [](Button *v, std::string const &str) {
				auto old = v->getNormalParams();
				old.fillColor = std::stoul(str, NULL, 16);
				v->setNormalParams(old);
		}},
		{"highlightFillColor", [](Button *v, std::string const &str) {
				auto old = v->getHighlightParams();
				old.fillColor = std::stoul(str, NULL, 16);
				v->setHighlightParams(old);
		}},
		{"normalStrokeColor", [](Button *v, std::string const &str) {
				auto old = v->getNormalParams();
				old.strokeColor = std::stoul(str, NULL, 16);
				v->setNormalParams(old);
		}},
		{"normalBorderWidth", [](Button *v, std::string const &str) {
				auto old = v->getNormalParams();
				old.lineWidth = std::stoi(str, NULL);
				v->setNormalParams(old);
		}},
		{"pushedFillColor", [](Button *v, std::string const &str) {
				auto old = v->getPushedParams();
				old.fillColor = std::stoul(str, NULL, 16);
				v->setPushedParams(old);
		}},
		{"pushedStrokeColor", [](Button *v, std::string const &str) {
				auto old = v->getPushedParams();
				old.strokeColor = std::stoul(str, NULL, 16);
				v->setPushedParams(old);
		}},
		{"pushedBorderWidth", [](Button *v, std::string const &str) {
				auto old = v->getPushedParams();
				old.lineWidth = std::stoi(str, NULL);
				v->setPushedParams(old);
		}},
	};
	auto const      &it = param_map.find(k);

	if (it != param_map.end())
		it->second(this, v);
	else
		AView::setParam(k, v);
}