X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FConfig%2FConfig_ValidatorReader.cpp;h=dfeb81cc70cfdf13891910749fbc77285de94d82;hb=3f1a42a51c7de1911c75453ff7134593d7d2c6b1;hp=4fd9f6d79ffec8a6c85f86571014db1cbd43defc;hpb=1d92b37c3a412e565c82b8dce640a035d9f554c2;p=modules%2Fshaper.git diff --git a/src/Config/Config_ValidatorReader.cpp b/src/Config/Config_ValidatorReader.cpp index 4fd9f6d79..dfeb81cc7 100644 --- a/src/Config/Config_ValidatorReader.cpp +++ b/src/Config/Config_ValidatorReader.cpp @@ -28,7 +28,6 @@ Config_ValidatorReader::Config_ValidatorReader(const std::string& theXmlFileName) : Config_XMLReader(theXmlFileName) { - std::cout << "Config_ValidatorReader created for: " << theXmlFileName << std::endl; } Config_ValidatorReader::~Config_ValidatorReader() @@ -43,11 +42,26 @@ void Config_ValidatorReader::processNode(xmlNodePtr theNode) processSelectionFilter(theNode); } else if (isNode(theNode, NODE_FEATURE, NULL)) { storeAttribute(theNode, _ID); + } else if (isWidgetNode(theNode)) { + storeAttribute(theNode, _ID); + // Store widget name to restore it's id on validator/selector processing + myCurrentWidget = getNodeName(theNode); } //Process SOURCE nodes. Config_XMLReader::processNode(theNode); } +void Config_ValidatorReader::cleanup(xmlNodePtr theNode) +{ + if (isNode(theNode, NODE_FEATURE, NULL)) { + cleanupAttribute(theNode, _ID); + } else if (isWidgetNode(theNode)) { + cleanupAttribute(NODE_XMLPARENT, _ID); + // Cleanup widget name when leave the widget node. + myCurrentWidget = ""; + } +} + bool Config_ValidatorReader::processChildren(xmlNodePtr aNode) { return true; @@ -64,14 +78,12 @@ void Config_ValidatorReader::processValidator(xmlNodePtr theNode) getParametersInfo(theNode, aValidatorId, aParameters); aMessage->setValidatorId(aValidatorId); aMessage->setValidatorParameters(aParameters); - //TODO(sbh): update feature/attribute id restoring - // when "cleanup" technique will be available (v. >= 1.1.0) - xmlNodePtr aFeatureOrWdgNode = theNode->parent; - if (isNode(aFeatureOrWdgNode, NODE_FEATURE, NULL)) { - aMessage->setFeatureId(getProperty(aFeatureOrWdgNode, _ID)); - } else { - aMessage->setAttributeId(getProperty(aFeatureOrWdgNode, _ID)); - aMessage->setFeatureId(restoreAttribute(NODE_FEATURE, _ID)); + std::string aFeatureId = restoreAttribute(NODE_FEATURE, _ID); + aMessage->setFeatureId(aFeatureId); + // parent is attribute (widget) + if (!myCurrentWidget.empty()) { + std::string aParentId = restoreAttribute(myCurrentWidget.c_str(), _ID); + aMessage->setAttributeId(aParentId); } aEvLoop->send(aMessage); } @@ -80,20 +92,19 @@ void Config_ValidatorReader::processSelectionFilter(xmlNodePtr theNode) { Events_ID aFilterEvent = Events_Loop::eventByName(EVENT_SELFILTER_LOADED); Events_Loop* aEvLoop = Events_Loop::loop(); - std::shared_ptr aMessage = - std::make_shared(aFilterEvent, this); + std::shared_ptr aMessage( + new Config_SelectionFilterMessage(aFilterEvent, this)); std::string aSelectionFilterId; std::list aParameters; getParametersInfo(theNode, aSelectionFilterId, aParameters); aMessage->setSelectionFilterId(aSelectionFilterId); aMessage->setFilterParameters(aParameters); - - xmlNodePtr aFeatureOrWdgNode = theNode->parent; - if (isNode(aFeatureOrWdgNode, NODE_FEATURE, NULL)) { - aMessage->setFeatureId(getProperty(aFeatureOrWdgNode, _ID)); - } else { - aMessage->setAttributeId(getProperty(aFeatureOrWdgNode, _ID)); - aMessage->setFeatureId(restoreAttribute(NODE_FEATURE, _ID)); + std::string aFeatureId = restoreAttribute(NODE_FEATURE, _ID); + aMessage->setFeatureId(aFeatureId); + // parent is attribute (widget) + if (!myCurrentWidget.empty()) { + std::string aParentId = restoreAttribute(myCurrentWidget.c_str(), _ID); + aMessage->setAttributeId(aParentId); } aEvLoop->send(aMessage); }