Salome HOME
Transfer BreakLink from Object to Gen
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_Selection.cxx
index c7933455469e33d5890a6c6f92524354a85de287..ab4a1ca8ec4d3d1f80aab645f8770fd9e97e2493 100644 (file)
@@ -43,6 +43,8 @@
 #include <SalomeApp_Application.h>
 #include <LightApp_VTKSelector.h>
 #include <SVTK_ViewWindow.h>
+#include <LightApp_SelectionMgr.h>
+#include <LightApp_DataOwner.h>
 
 // IDL includes
 #include <SALOMEconfig.h>
@@ -77,6 +79,8 @@ void SMESHGUI_Selection::init( const QString& client, LightApp_SelectionMgr* mgr
 
   if( mgr )
   {
+    myOwners.clear();
+    mgr->selected(myOwners, client);
     for( int i=0, n=count(); i<n; i++ ) {
       myTypes.append( typeName( type( entry( i ) ) ) );
       myControls.append( controlMode( i ) );
@@ -614,10 +618,21 @@ bool SMESHGUI_Selection::hasGeomReference( int ind ) const
 bool SMESHGUI_Selection::canBreakLink( int ind ) const
 {
   if ( ind >= 0 && ind < myTypes.count()) {
-    _PTR(SObject) aSObject = SMESH::getStudy()->FindObjectID( entry( ind ).toUtf8().data() );
-    GEOM::GEOM_Object_var aObject = SMESH::SObjectToInterface<GEOM::GEOM_Object>(aSObject);
-    if (!aObject->_is_nil())
-      return aObject->IsParametrical();
+    if (isReference(ind)) {
+      SUIT_DataOwner* aOwn = myOwners.at(ind);
+      LightApp_DataOwner* sowner = dynamic_cast<LightApp_DataOwner*>(aOwn);
+      QString aEntry = sowner->entry();
+      _PTR(SObject) aSObject = SMESH::getStudy()->FindObjectID(aEntry.toStdString());
+      _PTR(SObject) aFatherObj = aSObject->GetFather();
+      _PTR(SComponent) aComponent = aFatherObj->GetFatherComponent();
+      if (aComponent->ComponentDataType() == "SMESH") {
+        QString aObjEntry = entry(ind);
+        _PTR(SObject) aGeomSObject = SMESH::getStudy()->FindObjectID(aObjEntry.toStdString());
+        GEOM::GEOM_Object_var aObject = SMESH::SObjectToInterface<GEOM::GEOM_Object>(aGeomSObject);
+        if (!aObject->_is_nil())
+          return aObject->IsParametrical();
+      }
+    }
   }
   return false;
 }