]> SALOME platform Git repositories - modules/shaper.git/blobdiff - src/FiltersPlugin/FiltersPlugin_Selection.cpp
Salome HOME
Support of open/save and undo/redo for filters feature
[modules/shaper.git] / src / FiltersPlugin / FiltersPlugin_Selection.cpp
index 4b656d847d900f1bbeaa04a47881869ff4b94d92..e2dd91f01930ef2a488f482183f1f2fabf2fbbb1 100644 (file)
@@ -83,14 +83,6 @@ std::list<AttributePtr> FiltersPlugin_Selection::filterArgs(const std::string th
 
 void FiltersPlugin_Selection::setAttribute(const AttributePtr& theAttr)
 {
-  if (myBase != theAttr) { // clear all filters if the attribute is changed or defined a new
-    std::list<std::string> aFilters;
-    data()->allGroups(aFilters);
-    std::list<std::string>::iterator aFIter = aFilters.begin();
-    for(; aFIter != aFilters.end(); aFIter++) {
-      data()->removeAttributes(*aFIter);
-    }
-  }
   myBase = theAttr;
   if (myBase.get()) { // check that the type of sub-elements is supported by all existing filters
     std::shared_ptr<ModelAPI_AttributeSelectionList> aSelList =
@@ -116,3 +108,23 @@ const AttributePtr& FiltersPlugin_Selection::baseAttribute() const
 {
   return myBase;
 }
+
+void FiltersPlugin_Selection::initAttributes()
+{
+  ModelAPI_FiltersFactory* aFactory = ModelAPI_Session::get()->filters();
+  std::list<std::string> aFilters;
+  data()->allGroups(aFilters);
+  for(std::list<std::string>::iterator aFIt = aFilters.begin(); aFIt != aFilters.end(); aFIt++) {
+    FilterPtr aFilter = aFactory->filter(*aFIt);
+    if (aFilter.get()) {
+      std::shared_ptr<ModelAPI_AttributeBoolean> aBool =
+        std::dynamic_pointer_cast<ModelAPI_AttributeBoolean>(data()->addFloatingAttribute(
+          kReverseAttrID, ModelAPI_AttributeBoolean::typeId(), *aFIt));
+      aBool->setValue(false); // not reversed by default
+      ModelAPI_FiltersArgs anArgs;
+      anArgs.setFeature(std::dynamic_pointer_cast<ModelAPI_FiltersFeature>(data()->owner()));
+      anArgs.setFilter(*aFIt);
+      aFilter->initAttributes(anArgs);
+    }
+  }
+}