Salome HOME
ID 0019887: EDF 757 SMESH: It is possible to delete a referenced GEOM object from...
authordmv <dmv@opencascade.com>
Thu, 19 Jun 2008 07:15:20 +0000 (07:15 +0000)
committerdmv <dmv@opencascade.com>
Thu, 19 Jun 2008 07:15:20 +0000 (07:15 +0000)
src/SMESHGUI/SMESHGUI.cxx

index 6e590fca03d75b740b43fe0768333fc40bd1c6e8..6eb028cace811c78628afa7b15e9335129e9b10e 100644 (file)
@@ -883,9 +883,23 @@ using namespace std;
     LightApp_SelectionMgr* aSel = SMESHGUI::selectionMgr();
     SALOME_ListIO selected; aSel->selectedObjects( selected, QString::null, false );
 
+    _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+    _PTR(StudyBuilder) aStudyBuilder = aStudy->NewBuilder();
+    _PTR(GenericAttribute) anAttr;
+    _PTR(AttributeIOR) anIOR;
+
+    int objectCount = 0;
     QString aParentComponent = QString::null;
     for( SALOME_ListIteratorOfListIO anIt( selected ); anIt.More(); anIt.Next() )
     {
+      _PTR(SObject) aSO = aStudy->FindObjectID(anIt.Value()->getEntry());
+      if (aSO) {
+       // check if object is not reference
+       _PTR(SObject) refobj;
+       if ( !aSO->ReferencedObject( refobj ) )
+         objectCount++;
+      }
+
       QString cur = anIt.Value()->getComponentDataType();
       if( aParentComponent.isNull() )
         aParentComponent = cur;
@@ -893,6 +907,9 @@ using namespace std;
         aParentComponent = "";
     }
 
+    if ( objectCount == 0 )
+      return; // No Valid Objects Selected
+
     if ( aParentComponent != SMESHGUI::GetSMESHGUI()->name() )  {
       SUIT_MessageBox::warn1 ( SMESHGUI::desktop(),
                              QObject::tr("ERR_ERROR"),
@@ -912,11 +929,6 @@ using namespace std;
     SUIT_ViewManager* vm = anApp->activeViewManager();
     int nbSf = vm->getViewsCount();
 
-    _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
-    _PTR(StudyBuilder) aStudyBuilder = aStudy->NewBuilder();
-    _PTR(GenericAttribute) anAttr;
-    _PTR(AttributeIOR) anIOR;
-
     SALOME_ListIteratorOfListIO It(selected);
 
     aStudyBuilder->NewCommand();  // There is a transaction
@@ -932,6 +944,10 @@ using namespace std;
            continue;
        }
 
+       _PTR(SObject) refobj;
+       if ( aSO && aSO->ReferencedObject( refobj ) )
+         continue; // skip references 
+
         // put the whole hierarchy of sub-objects of the selected SO into a list and
         // then treat them all starting from the deepest objects (at list back)