X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FConfig%2FConfig_XMLReader.cpp;h=856e663becd7511c6a01bd1fa9a6a4685a6ff5c0;hb=4e3694cf9d56e97e314b393290044f64ff115236;hp=8d618b102f0731f9e5d424808d8e67f0aab52719;hpb=036ba4eb4c2df048fd651a54f68882a01769eb08;p=modules%2Fshaper.git diff --git a/src/Config/Config_XMLReader.cpp b/src/Config/Config_XMLReader.cpp index 8d618b102..856e663be 100644 --- a/src/Config/Config_XMLReader.cpp +++ b/src/Config/Config_XMLReader.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D + /* * Config_XMLReader.cpp * @@ -9,17 +11,19 @@ #include #include #include +#include +#include #include +#include #include #include -/* +#include + #ifdef WIN32 -//For GetModuleFileNameW -#include +#pragma warning(disable : 4996) // for getenv #endif -*/ #ifdef _DEBUG #include @@ -28,19 +32,31 @@ Config_XMLReader::Config_XMLReader(const std::string& theXmlFileName) : myXmlDoc(NULL) { - std::string prefix = ""; + std::string prefix = ""; + Config_Prop* aProp = Config_PropManager::findProp("Plugins", "default_path"); + if (aProp) + prefix = aProp->value(); /* * Get path to *.xml files (typically ./bin/../plugins/) * the problem: application may be launched using python executable, * to use environment variable (at least for the current moment) */ - char* anEnv = getenv("NEW_GEOM_CONFIG_FILE"); - if (anEnv) { - prefix = std::string(anEnv) + "/"; + if (prefix.empty()) { + char* anEnv = getenv("NEW_GEOM_CONFIG_FILE"); + if (anEnv) { + prefix = std::string(anEnv); + } } - +#ifdef WIN32 + prefix += "\\"; +#else + prefix += "/"; +#endif myDocumentPath = prefix + theXmlFileName; + std::ifstream aTestFile(myDocumentPath); + if (!aTestFile) Events_Error::send("Unable to open " + myDocumentPath); + aTestFile.close(); } Config_XMLReader::~Config_XMLReader() @@ -70,11 +86,13 @@ void Config_XMLReader::processNode(xmlNodePtr theNode) std::string aSourceFile = getProperty(theNode, SOURCE_FILE); Config_XMLReader aSourceReader = Config_XMLReader(aSourceFile); readRecursively(aSourceReader.findRoot()); - #ifdef _DEBUG +#ifdef _DEBUG std::cout << "Config_XMLReader::sourced node: " << aSourceFile << std::endl; - #endif +#endif } else if (isNode(theNode, NODE_VALIDATOR, NULL)) { processValidator(theNode); + } else if (isNode(theNode, NODE_SELFILTER, NULL)) { + processSelectionFilter(theNode); } } @@ -121,9 +139,9 @@ void Config_XMLReader::readRecursively(xmlNodePtr theParent) if (!theParent) return; xmlNodePtr aNode = theParent->xmlChildrenNode; - for(; aNode; aNode = aNode->next) { + for (; aNode; aNode = aNode->next) { //Still no text processing in features... - if(!isElementNode(aNode)) { + if (!isElementNode(aNode)) { continue; } processNode(aNode); @@ -141,13 +159,10 @@ xmlNodePtr Config_XMLReader::node(void* theNode) return static_cast(theNode); } -/* - * Returns named property for a given node as std::string. - */ -std::string Config_XMLReader::getProperty(xmlNodePtr theNode, const char* theName) +std::string Config_XMLReader::getNodeName(xmlNodePtr theNode) { std::string result = ""; - char* aPropChars = (char*) xmlGetProp(theNode, BAD_CAST theName); + char* aPropChars = (char*) theNode->name; if (!aPropChars || aPropChars[0] == 0) return result; result = std::string(aPropChars); @@ -158,18 +173,41 @@ void Config_XMLReader::processValidator(xmlNodePtr theNode) { Events_ID aValidatoEvent = Events_Loop::eventByName(EVENT_VALIDATOR_LOADED); Events_Loop* aEvLoop = Events_Loop::loop(); - Config_ValidatorMessage aMessage(aValidatoEvent, this); + std::shared_ptr + aMessage(new Config_ValidatorMessage(aValidatoEvent, this)); std::string aValidatorId; - std::list aValidatorParameters; - getValidatorInfo(theNode, aValidatorId, aValidatorParameters); - aMessage.setValidatorId(aValidatorId); - aMessage.setValidatorParameters(aValidatorParameters); + std::list aParameters; + getParametersInfo(theNode, aValidatorId, aParameters); + aMessage->setValidatorId(aValidatorId); + aMessage->setValidatorParameters(aParameters); + xmlNodePtr aFeatureOrWdgNode = theNode->parent; + if (isNode(aFeatureOrWdgNode, NODE_FEATURE, NULL)) { + aMessage->setFeatureId(getProperty(aFeatureOrWdgNode, _ID)); + } else { + aMessage->setAttributeId(getProperty(aFeatureOrWdgNode, _ID)); + aMessage->setFeatureId(myCurrentFeature); + } + aEvLoop->send(aMessage); +} + +void Config_XMLReader::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::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)); + if (isNode(aFeatureOrWdgNode, NODE_FEATURE, NULL)) { + aMessage->setFeatureId(getProperty(aFeatureOrWdgNode, _ID)); } else { - aMessage.setAttributeId(getProperty(aFeatureOrWdgNode, _ID)); - aMessage.setFeatureId(myCurrentFeature); + aMessage->setAttributeId(getProperty(aFeatureOrWdgNode, _ID)); + aMessage->setFeatureId(myCurrentFeature); } aEvLoop->send(aMessage); }