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); }