]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Update Config after merging with master
authorsbh <sergey.belash@opencascade.com>
Thu, 26 Mar 2015 16:05:31 +0000 (19:05 +0300)
committersbh <sergey.belash@opencascade.com>
Thu, 26 Mar 2015 16:05:31 +0000 (19:05 +0300)
src/Config/Config_Common.cpp
src/Config/Config_Common.h
src/Config/Config_Keywords.h
src/Config/Config_ValidatorReader.cpp
src/Config/Config_ValidatorReader.h

index 8ffc9e126b6938135b3cde07239281aae9969115..8c8cde4270d7a27265c77d29be1c0f0e68fbdaf0 100644 (file)
@@ -69,7 +69,7 @@ bool isWidgetNode(xmlNodePtr theNode)
 {\r
   if(!isElementNode(theNode))\r
     return false;\r
-  // it's parent is "feature" or "source"\r
+  // it's parent is "feature" or "source" or a page ("box", "case")\r
   if(!hasParent(theNode, NODE_FEATURE, NODE_SOURCE, \r
                          WDG_TOOLBOX_BOX, WDG_SWITCH_CASE, NULL))\r
     return false;\r
index 52fc1e1726fa0adbfedd95f72a7f3a930995c362..1850f8a7bd642373ed74ebdc4d262b443403410a 100644 (file)
@@ -43,6 +43,8 @@ CONFIG_EXPORT bool isElementNode(xmlNodePtr theNode);
  */
 CONFIG_EXPORT bool isNode(xmlNodePtr theNode, const char* theNodeName, ...);
 
+//#define isNode(p) _isNode(p, NULL)
+
 /*!
  * Checks if the given node is attribute node.
  * Attribute node represents a widget, that is able to store/restore
index afb80188ba9ec666a6163136b8c751095a2f8149..bc115a764f1ee1e1f5603126505031e3be70452f 100644 (file)
@@ -19,6 +19,7 @@ const static char* NODE_FEATURE = "feature";
 const static char* NODE_SOURCE = "source";
 const static char* NODE_VALIDATOR = "validator";
 const static char* NODE_SELFILTER = "selection_filter";
+const static char* NODE_XMLPARENT = "libxml_parent";
 
 // Widgets
 const static char* WDG_INFO = "label";
index d03dff58d7d6784c5bc572fd25639a5dad93c1bc..ef969cd55c06483042d92b18588ae955ac454025 100644 (file)
@@ -42,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;
@@ -63,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);
 }
@@ -86,13 +99,12 @@ void Config_ValidatorReader::processSelectionFilter(xmlNodePtr theNode)
   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);
 }
index f2ac6293d20adbe1fe86fd23c3a84554d525231f..59f6acffb0fc9d63dc6ed0bc672166c3d22b96f5 100644 (file)
@@ -45,6 +45,11 @@ class Config_ValidatorReader : public Config_XMLReader
    */
   virtual bool processChildren(xmlNodePtr aNode);
 
+  /*!
+   * Cleans the cached information about parent feature or attribute (widget)
+   */
+  virtual void cleanup(xmlNodePtr theNode);
+
   /*!
    * \brief Retrieves all the necessary info from the validator node.
    * Sends ValidatorLoaded event
@@ -55,6 +60,9 @@ class Config_ValidatorReader : public Config_XMLReader
    * Sends SelectionFilterLoaded event
    */
   void processSelectionFilter(xmlNodePtr theNode);
+
+ private:
+  std::string myCurrentWidget;
 };
 
 #endif /* CONFIG_VALIDATORREADER_H_ */