| 174 | } |
| 175 | |
| 176 | void setEventCallbacks(WidgetExtension* ext, const sol::object& eventsObj) |
| 177 | { |
| 178 | ext->clearCallbacks(); |
| 179 | if (eventsObj == sol::nil) |
| 180 | return; |
| 181 | if (!eventsObj.is<sol::table>()) |
| 182 | throw std::logic_error("The \"events\" layout field must be a table of callbacks"); |
| 183 | auto events = eventsObj.as<sol::table>(); |
| 184 | events.for_each([ext](const sol::object& name, const sol::object& callback) { |
| 185 | if (name.is<std::string>() && LuaUtil::Callback::isLuaCallback(callback)) |
| 186 | ext->setCallback(name.as<std::string>(), LuaUtil::Callback::fromLua(callback)); |
| 187 | else if (!name.is<std::string>()) |
| 188 | Log(Debug::Warning) << "UI event key must be a string"; |
| 189 | else |
| 190 | Log(Debug::Warning) << "UI event handler for key \"" << name.as<std::string>() |
| 191 | << "\" must be an openmw.async.callback"; |
| 192 | }); |
| 193 | } |
| 194 | |
| 195 | WidgetExtension* createWidget(const sol::table& layout, bool isRoot, uint64_t depth) |
| 196 | { |
no test coverage detected