Salome HOME
Merge branch 'BR_ADVANCED_CURRENT_FEATURE_MANAGEMENT' of salome:modules/shaper into...
authorvsv <vitaly.smetannikov@opencascade.com>
Fri, 9 Oct 2015 08:39:37 +0000 (11:39 +0300)
committervsv <vitaly.smetannikov@opencascade.com>
Fri, 9 Oct 2015 08:39:37 +0000 (11:39 +0300)
Conflicts:
src/ModuleBase/ModuleBase_OperationFeature.cpp

1  2 
src/ModuleBase/ModuleBase_OperationFeature.cpp

index 93c5b60293076dffead97511a7699b16dfa76a70,647455f46bed1265f2010644957ae102a3ee6a4e..97388529154b9daeb80fc0da22bc1e3d7e1b9b62
@@@ -79,9 -79,6 +79,9 @@@ void ModuleBase_OperationFeature::start
    if (!aFeature.get() || !isEditOperation())
      return;
  
 +  if (aFeature.get() && isEditOperation())
 +    aFeature->setStable(false);
 +
    myVisualizedObjects.clear();
    // store hidden result features
    std::list<ResultPtr> aResults = aFeature->results();
@@@ -118,20 -115,11 +118,10 @@@ void ModuleBase_OperationFeature::stopO
    if (myVisualizedObjects.find(aFeature) != myVisualizedObjects.end()) {
      aFeature->setDisplayed(false);
    }
 -  aFeature->setStable(true);
    if (myVisualizedObjects.size() > 0)
      Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_TO_REDISPLAY));
  }
  
- void ModuleBase_OperationFeature::resumeOperation()
- {
-   ModuleBase_Operation::resumeOperation();
-   //if (!myIsEditing)
-     setCurrentFeature(feature());
-   //SessionPtr aMgr = ModelAPI_Session::get();
-   //DocumentPtr aDoc = aMgr->activeDocument();
-   //aDoc->setCurrentFeature(feature(), false);
- }
  FeaturePtr ModuleBase_OperationFeature::createFeature(const bool theFlushMessage)
  {
    if (myParentFeature.get()) {
  void ModuleBase_OperationFeature::setFeature(FeaturePtr theFeature)
  {
    myFeature = theFeature;
 -  myFeature->setStable(false);
    myIsEditing = true;
  }
  
@@@ -193,6 -182,7 +183,7 @@@ void ModuleBase_OperationFeature::start
    }
    ModelAPI_Session::get()->startOperation(anId.toStdString());
  
+   emit beforeStarted();
    startOperation();
  
    if (!myIsEditing) {
        return;
      }
    }
-   /// Set current feature and remeber old current feature
-   if (myIsEditing) {
-     SessionPtr aMgr = ModelAPI_Session::get();
-     DocumentPtr aDoc = aMgr->activeDocument();
-     // the parameter of current feature should be false, we should use all feature, not only visible
-     // in order to correctly save the previous feature of the nested operation, where the
-     // features can be not visible in the tree. The problem case is Edit sketch entitity(line)
-     // in the Sketch, created in ExtrusionCut operation. The entity disappears by commit.
-     // When sketch entity operation started, the sketch should be cashed here as the current.
-     // Otherwise(the flag is true), the ExtrusionCut is cashed, when commit happens, the sketch
-     // is disabled, sketch entity is disabled as extrusion cut is created earliest then sketch.
-     // As a result the sketch disappears from the viewer. However after commit it is displayed back.
-     myPreviousCurrentFeature = aDoc->currentFeature(false);
-     aDoc->setCurrentFeature(feature(), false);
-   }
 -  startOperation();
 +  //Already called startOperation();
    emit started();
  
  }
  
  void ModuleBase_OperationFeature::abort()
  {
+   emit beforeAborted();
    // the viewer update should be blocked in order to avoid the features blinking before they are
    // hidden
    std::shared_ptr<Events_Message> aMsg = std::shared_ptr<Events_Message>(
    if (aPropertyPanel)
      aPropertyPanel->cleanContent();
  
-   SessionPtr aMgr = ModelAPI_Session::get();
-   if (myIsEditing) {
-     DocumentPtr aDoc = aMgr->activeDocument();
-     bool aIsOp = aMgr->isOperation();
-     if (!aIsOp)
-       aMgr->startOperation();
-     aDoc->setCurrentFeature(myPreviousCurrentFeature, false);//true);
-     if (!aIsOp)
-       aMgr->finishOperation();
-     myPreviousCurrentFeature = FeaturePtr();
-   }
 +  myFeature->setStable(true);
 +
    abortOperation();
    stopOperation();
  
+   SessionPtr aMgr = ModelAPI_Session::get();
    aMgr->abortOperation();
    emit stopped();
    // the viewer update should be unblocked in order to avoid the features blinking before they are
@@@ -284,30 -247,11 +250,13 @@@ bool ModuleBase_OperationFeature::commi
      ModuleBase_IPropertyPanel* aPropertyPanel = propertyPanel();
      if (aPropertyPanel)
        aPropertyPanel->cleanContent();
 +    
 +    myFeature->setStable(true);
  
      SessionPtr aMgr = ModelAPI_Session::get();
      /// Set current feature and remeber old current feature
  
-     if (myIsEditing) {
-       setCurrentFeature(myPreviousCurrentFeature);
-       /*DocumentPtr aDoc = aMgr->activeDocument();
-       bool aIsOp = aMgr->isOperation();
-       if (!aIsOp)
-         aMgr->startOperation();
-       aDoc->setCurrentFeature(myPreviousCurrentFeature, true);
-       if (!aIsOp)
-         aMgr->finishOperation();*/
-       myPreviousCurrentFeature = FeaturePtr();
-     }
-     else {
-       /*CompositeFeaturePtr aCompositeFeature = ModelAPI_Tools::compositeOwner(feature());
-       if (aCompositeFeature.get())
-         setCurrentFeature(aCompositeFeature);//myPreviousCurrentFeature);
-       //else
-       //  setCurrentFeature(feature());*/
-     }
+     emit beforeCommitted();
      commitOperation();
      aMgr->finishOperation();
  
    return false;
  }
  
- void ModuleBase_OperationFeature::setCurrentFeature(const FeaturePtr& theFeature)
- {
-   SessionPtr aMgr = ModelAPI_Session::get();
-   DocumentPtr aDoc = aMgr->activeDocument();
-   bool aIsOp = aMgr->isOperation();
-   if (!aIsOp)
-     aMgr->startOperation();
-   aDoc->setCurrentFeature(theFeature, false);//true);
-   if (!aIsOp)
-     aMgr->finishOperation();
- }
  void ModuleBase_OperationFeature::activateByPreselection()
  {
    if (myPreSelection.empty())
@@@ -389,6 -321,16 +326,16 @@@ CompositeFeaturePtr ModuleBase_Operatio
    return myParentFeature;
  }
  
+ void ModuleBase_OperationFeature::setPreviousCurrentFeature(const FeaturePtr& theFeature)
+ {
+   myPreviousCurrentFeature = theFeature;
+ }
+ FeaturePtr ModuleBase_OperationFeature::previousCurrentFeature()
+ {
+   return myPreviousCurrentFeature;
+ }
  void ModuleBase_OperationFeature::initSelection(ModuleBase_ISelection* theSelection,
                                           ModuleBase_IViewer* theViewer)
  {