|
|
@ -118,8 +118,10 @@ void UILoader::populateContainer(const UIContainerPtr& parent, const YAML::Node&
|
|
|
|
// check if it's and element id
|
|
|
|
// check if it's and element id
|
|
|
|
if(id.find("#") != std::string::npos) {
|
|
|
|
if(id.find("#") != std::string::npos) {
|
|
|
|
UIElementPtr element = createElementFromId(id);
|
|
|
|
UIElementPtr element = createElementFromId(id);
|
|
|
|
if(!element)
|
|
|
|
if(!element) {
|
|
|
|
throw YAML::Exception(it.first().GetMark(), "invalid element type");
|
|
|
|
logError(YAML::Exception(it.first().GetMark(), "invalid element type").what());
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
parent->addChild(element);
|
|
|
|
parent->addChild(element);
|
|
|
|
|
|
|
|
|
|
|
|
// also populate this element if it's a parent
|
|
|
|
// also populate this element if it's a parent
|
|
|
@ -218,7 +220,7 @@ void UILoader::loadElement(const UIElementPtr& element, const YAML::Node& node)
|
|
|
|
g_lua.pushFunction(funcRef);
|
|
|
|
g_lua.pushFunction(funcRef);
|
|
|
|
g_lua.lua_UIElement_setOnLoad();
|
|
|
|
g_lua.lua_UIElement_setOnLoad();
|
|
|
|
} else
|
|
|
|
} else
|
|
|
|
throw YAML::Exception(cnode.GetMark(), "failed to parse lua script");
|
|
|
|
logError(YAML::Exception(cnode.GetMark(), "failed to parse inline lua script").what());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(node.FindValue("onDestroy")) {
|
|
|
|
if(node.FindValue("onDestroy")) {
|
|
|
@ -229,7 +231,7 @@ void UILoader::loadElement(const UIElementPtr& element, const YAML::Node& node)
|
|
|
|
g_lua.pushFunction(funcRef);
|
|
|
|
g_lua.pushFunction(funcRef);
|
|
|
|
g_lua.lua_UIElement_setOnDestroy();
|
|
|
|
g_lua.lua_UIElement_setOnDestroy();
|
|
|
|
} else
|
|
|
|
} else
|
|
|
|
throw YAML::Exception(cnode.GetMark(), "failed to parse lua script");
|
|
|
|
logError(YAML::Exception(cnode.GetMark(), "failed to parse inline lua script").what());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// load specific element type
|
|
|
|
// load specific element type
|
|
|
@ -260,8 +262,10 @@ void UILoader::loadElementAnchor(const UIElementPtr& element, EAnchorType type,
|
|
|
|
|
|
|
|
|
|
|
|
std::vector<std::string> split;
|
|
|
|
std::vector<std::string> split;
|
|
|
|
boost::split(split, anchorDescription, boost::is_any_of(std::string(".")));
|
|
|
|
boost::split(split, anchorDescription, boost::is_any_of(std::string(".")));
|
|
|
|
if(split.size() != 2)
|
|
|
|
if(split.size() != 2) {
|
|
|
|
throw YAML::Exception(node.GetMark(), "invalid anchors description");
|
|
|
|
logError(YAML::Exception(node.GetMark(), "invalid anchor").what());
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
std::string relativeElementId = split[0];
|
|
|
|
std::string relativeElementId = split[0];
|
|
|
|
std::string relativeAnchorTypeId = split[1];
|
|
|
|
std::string relativeAnchorTypeId = split[1];
|
|
|
@ -279,8 +283,10 @@ void UILoader::loadElementAnchor(const UIElementPtr& element, EAnchorType type,
|
|
|
|
relativeAnchorType = ANCHOR_HORIZONTAL_CENTER;
|
|
|
|
relativeAnchorType = ANCHOR_HORIZONTAL_CENTER;
|
|
|
|
else if(relativeAnchorTypeId == "verticalCenter")
|
|
|
|
else if(relativeAnchorTypeId == "verticalCenter")
|
|
|
|
relativeAnchorType = ANCHOR_VERTICAL_CENTER;
|
|
|
|
relativeAnchorType = ANCHOR_VERTICAL_CENTER;
|
|
|
|
else
|
|
|
|
else {
|
|
|
|
throw YAML::Exception(node.GetMark(), "invalid anchors description");
|
|
|
|
logError(YAML::Exception(node.GetMark(), "invalid anchor type").what());
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
UILayoutPtr relativeElement;
|
|
|
|
UILayoutPtr relativeElement;
|
|
|
|
if(relativeElementId == "parent" && element->getParent()) {
|
|
|
|
if(relativeElementId == "parent" && element->getParent()) {
|
|
|
@ -295,9 +301,9 @@ void UILoader::loadElementAnchor(const UIElementPtr& element, EAnchorType type,
|
|
|
|
|
|
|
|
|
|
|
|
if(relativeElement) {
|
|
|
|
if(relativeElement) {
|
|
|
|
if(!element->addAnchor(type, AnchorLine(relativeElement, relativeAnchorType)))
|
|
|
|
if(!element->addAnchor(type, AnchorLine(relativeElement, relativeAnchorType)))
|
|
|
|
throw YAML::Exception(node.GetMark(), "error while processing anchors");
|
|
|
|
logError(YAML::Exception(node.GetMark(), "anchoring failed").what());
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
throw YAML::Exception(node.GetMark(), "anchoring failed, does the relative element really exists?");
|
|
|
|
logError(YAML::Exception(node.GetMark(), "anchoring failed, does the relative element really exists?").what());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -313,7 +319,7 @@ void UILoader::loadButton(const UIButtonPtr& button, const YAML::Node& node)
|
|
|
|
g_lua.pushFunction(funcRef);
|
|
|
|
g_lua.pushFunction(funcRef);
|
|
|
|
g_lua.lua_UIButton_setOnClick();
|
|
|
|
g_lua.lua_UIButton_setOnClick();
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
throw YAML::Exception(node["onClick"].GetMark(), "failed to parse lua script");
|
|
|
|
logError(YAML::Exception(node["onClick"].GetMark(), "failed to parse inline lua script").what());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|