//The m_last* variables always defined before fillFeature() call. XML is a tree.
} else if (isNode(theNode, NODE_WORKBENCH, NODE_GROUP, NULL)) {
storeAttribute(theNode, _ID);
- storeAttribute(theNode, WORKBENCH_DOC);
+ storeAttribute(theNode, WORKBENCH_DOC, true);
} else if (myIsProcessWidgets) {
// widgets, like shape_selector or containers, like toolbox
if (isAttributeNode(theNode)) {
aMessage->setObligatory(getBooleanAttribute(theNode, ATTR_OBLIGATORY, true));
aMessage->setConcealment(getBooleanAttribute(theNode, ATTR_CONCEALMENT, false));
// nested "paged" widgets are not allowed, this issue may be resolved here:
- if (hasParent(theNode, WDG_SWITCH_CASE, WDG_TOOLBOX_BOX, NULL)) {
- const char* kWdgCase = hasParent(theNode, WDG_SWITCH_CASE, NULL)
+ if (hasParentRecursive(theNode, WDG_SWITCH_CASE, WDG_TOOLBOX_BOX, NULL)) {
+ const char* kWdgCase = hasParentRecursive(theNode, WDG_SWITCH_CASE, NULL)
? WDG_SWITCH_CASE
: WDG_TOOLBOX_BOX;
+ const char* kWdgSwitch = hasParentRecursive(theNode, WDG_SWITCH_CASE, NULL)
+ ? WDG_SWITCH
+ : WDG_TOOLBOX;
aMessage->setCaseId(restoreAttribute(kWdgCase, _ID));
+ aMessage->setSwitchId(restoreAttribute(kWdgSwitch, _ID));
}
Events_Loop::loop()->send(aMessage);
}
// container pages, like "case" or "box"
- } else if (isCaseNode(theNode)) {
+ } else if (isNode(theNode, WDG_SWITCH, WDG_SWITCH_CASE, WDG_TOOLBOX, WDG_TOOLBOX_BOX, NULL)) {
storeAttribute(theNode, _ID); // save case:caseId (or box:boxId)
}
}
- //Process SOURCE, VALIDATOR nodes.
+ //Process SOURCE nodes.
Config_XMLReader::processNode(theNode);
}
void Config_FeatureReader::cleanup(xmlNodePtr theNode)
{
- if (isCaseNode(theNode)) {
+ if (isNode(theNode, WDG_SWITCH, WDG_SWITCH_CASE, WDG_TOOLBOX, WDG_TOOLBOX_BOX, NULL)) {
// cleanup id of cases when leave case node
cleanupAttribute(theNode, _ID);
}
bool result = isNode(theNode, NODE_WORKBENCH, NODE_GROUP, NULL);
if(!result && myIsProcessWidgets) {
result = isNode(theNode, NODE_FEATURE,
+ WDG_GROUP, WDG_CHECK_GROUP,
WDG_TOOLBOX, WDG_TOOLBOX_BOX,
WDG_SWITCH, WDG_SWITCH_CASE, NULL);
}
}
outFeatureMessage->setDocumentKind(aDocKind);
}
-
-void Config_FeatureReader::storeAttribute(xmlNodePtr theNode,
- const char* theNodeAttribute)
-{
- std::string aKey = getNodeName(theNode) + ":" + std::string(theNodeAttribute);
- std::string aValue = getProperty(theNode, theNodeAttribute);
- if(!aValue.empty()) {
- myParentAttributes[aKey] = aValue;
- }
-}
-
-std::string Config_FeatureReader::restoreAttribute(xmlNodePtr theNode,
- const char* theNodeAttribute)
-{
- return restoreAttribute(getNodeName(theNode).c_str(), theNodeAttribute);
-}
-std::string Config_FeatureReader::restoreAttribute(const char* theNodeName,
- const char* theNodeAttribute)
-{
- std::string aKey = std::string(theNodeName) + ":" + std::string(theNodeAttribute);
- std::string result = "";
- if(myParentAttributes.find(aKey) != myParentAttributes.end()) {
- result = myParentAttributes[aKey];
- }
- return result;
-}
-
-bool Config_FeatureReader::cleanupAttribute(xmlNodePtr theNode,
- const char* theNodeAttribute)
-{
- return cleanupAttribute(getNodeName(theNode).c_str(), theNodeAttribute);
-}
-
-bool Config_FeatureReader::cleanupAttribute(const char* theNodeName,
- const char* theNodeAttribute)
-{
- std::string aKey = std::string(theNodeName) + ":" + std::string(theNodeAttribute);
- bool result = false;
- std::map<std::string, std::string>::iterator anEntry = myParentAttributes.find(aKey);
- if( anEntry != myParentAttributes.end()) {
- myParentAttributes.erase(anEntry);
- result = true;
- }
- return result;
-}
-