Salome HOME
Support of attributes located in the same switch in several cases
authormpv <mpv@opencascade.com>
Thu, 3 Sep 2015 06:26:28 +0000 (09:26 +0300)
committermpv <mpv@opencascade.com>
Thu, 3 Sep 2015 06:26:28 +0000 (09:26 +0300)
src/Model/Model_Update.cpp
src/Model/Model_Validator.cpp
src/Model/Model_Validator.h

index 097673efc2f67b9a6613383d69d7a2331db6bdd2..3ec27e47ff1144dc2c137822fbd77138f9dbe982 100644 (file)
@@ -33,7 +33,7 @@
 using namespace std;
 
 Model_Update MY_UPDATER_INSTANCE;  /// the only one instance initialized on load of the library
-#define DEB_UPDATE
+//#define DEB_UPDATE
 
 Model_Update::Model_Update()
 {
index 9f186a1a0d13db1248c4d1cc02c8778740599a25..4f2041c36bfd7d70837317c2d39b2a492a99f975 100644 (file)
@@ -314,28 +314,36 @@ bool Model_ValidatorsFactory::isConcealed(std::string theFeature, std::string th
 void Model_ValidatorsFactory::registerCase(std::string theFeature, std::string theAttribute,
     std::string theSwitchId, std::string theCaseId)
 {
-  std::map<std::string, std::map<std::string, std::pair<std::string, std::string> > >::iterator 
-    aFindFeature = myCases.find(theFeature);
+  std::map<std::string, std::map<std::string, std::pair<std::string, std::set<std::string> > > >
+    ::iterator aFindFeature = myCases.find(theFeature);
   if (aFindFeature == myCases.end()) {
-    myCases[theFeature] = std::map<std::string, std::pair<std::string, std::string> >();
+    myCases[theFeature] = std::map<std::string, std::pair<std::string, std::set<std::string> > >();
     aFindFeature = myCases.find(theFeature);
   }
-  (aFindFeature->second)[theAttribute] = std::pair<std::string, std::string>(theSwitchId, theCaseId);
+  std::map<std::string, std::pair<std::string, std::set<std::string> > >::iterator aFindAttrID =
+    aFindFeature->second.find(theAttribute);
+  if (aFindAttrID == aFindFeature->second.end()) {
+    aFindFeature->second[theAttribute] =
+      std::pair<std::string, std::set<std::string> >(theSwitchId, std::set<std::string>());
+    aFindAttrID = aFindFeature->second.find(theAttribute);
+  }
+  aFindAttrID->second.second.insert(theCaseId);
 }
 
-bool Model_ValidatorsFactory::isCase(
-  FeaturePtr theFeature, std::string theAttribute)
+bool Model_ValidatorsFactory::isCase(FeaturePtr theFeature, std::string theAttribute)
 {
-  std::map<std::string, std::map<std::string, std::pair<std::string, std::string> > >::iterator 
-    aFindFeature = myCases.find(theFeature->getKind());
+  std::map<std::string, std::map<std::string, std::pair<std::string, std::set<std::string> > > >
+    ::iterator aFindFeature = myCases.find(theFeature->getKind());
   if (aFindFeature != myCases.end()) {
-    std::map<std::string, std::pair<std::string, std::string> >::iterator
-      aFindAttr = aFindFeature->second.find(theAttribute);
-    if (aFindAttr != aFindFeature->second.end()) {
+    std::map<std::string, std::pair<std::string, std::set<std::string> > >::iterator
+      aFindAttrID = aFindFeature->second.find(theAttribute);
+    if (aFindAttrID != aFindFeature->second.end()) {
       // the the switch-attribute that contains the case value
-      AttributeStringPtr aSwitch = theFeature->string(aFindAttr->second.first);
+      AttributeStringPtr aSwitch = theFeature->string(aFindAttrID->second.first);
       if (aSwitch.get()) {
-        return aSwitch->value() == aFindAttr->second.second; // the second is the case identifier
+         // the second has the case identifier
+        return aFindAttrID->second.second.find(aSwitch->value()) != 
+               aFindAttrID->second.second.end();
       }
     }
   }
index 3156a17de624f1ab962569f3350292de00548efa..0040d8c2b2c2c0c11e363549fc804c100d6be135 100644 (file)
@@ -39,8 +39,9 @@ class Model_ValidatorsFactory : public ModelAPI_ValidatorsFactory
   std::map<std::string, std::set<std::string> > myConcealed;
   /// Stores the registered attributes must be checked only if the particular case is activated
   /// Map from feature kind to map of attribute IDs to pair 
-  // (switchId (ID of the attribute) and case Id (possible values of the switch attribute))
-  std::map<std::string, std::map<std::string, std::pair<std::string, std::string> > > myCases;
+  // (switchId (ID of the attribute) and case Ids (possible values of the switch attribute))
+  std::map<std::string, std::map<std::string,
+    std::pair<std::string, std::set<std::string> > > > myCases;
 
  public:
   /// Registers the instance of the validator by the ID