]> SALOME platform Git repositories - modules/geom.git/blobdiff - src/GroupGUI/GroupGUI_GroupDlg.cxx
Salome HOME
NPAL17269: Merge from 3.2.X.
[modules/geom.git] / src / GroupGUI / GroupGUI_GroupDlg.cxx
index 548bfc8eec5565bef07b820351ec9867ee901b55..8ea7ae8296d49e491481b6fb99ac480bb4d1030a 100644 (file)
@@ -313,14 +313,16 @@ void GroupGUI_GroupDlg::SelectionIntoArgument()
 
     TColStd_IndexedMapOfInteger aMapIndex;
 
-    if ( IObjectCount() == 1 ) {
-      Standard_Boolean aResult = Standard_False;
-      GEOM::GEOM_Object_var anObj =
-        GEOMBase::ConvertIOinGEOMObject( firstIObject(), aResult );
-
-      if ( aResult && !anObj->_is_nil() )
-        ((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->
-          selectionMgr()->GetIndexes( firstIObject(), aMapIndex );
+    SALOME_ListIO aSelIOs;
+    SalomeApp_Application* app = myGeomGUI->getApp();
+    if (app) {
+      LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
+      if (aSelMgr) {
+        QMap<QString, TColStd_IndexedMapOfInteger> aMap;
+        aSelMgr->selectedSubOwners(aMap);
+        if (aMap.size() == 1)
+          aMapIndex = aMap.begin().data();
+      }
     }
 
     // try to find out and process the object browser selection
@@ -438,14 +440,16 @@ void GroupGUI_GroupDlg::add()
 
   TColStd_IndexedMapOfInteger aMapIndex;
 
-  if ( IObjectCount() == 1 ) {
-    Standard_Boolean aResult = Standard_False;
-    GEOM::GEOM_Object_var anObj =
-      GEOMBase::ConvertIOinGEOMObject( firstIObject(), aResult );
-
-    if ( aResult && !anObj->_is_nil() )
-      ((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->
-        selectionMgr()->GetIndexes( firstIObject(), aMapIndex );
+  SALOME_ListIO aSelIOs;
+  SalomeApp_Application* app = myGeomGUI->getApp();
+  if (app) {
+    LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
+    if (aSelMgr) {
+      QMap<QString, TColStd_IndexedMapOfInteger> aMap;
+      aSelMgr->selectedSubOwners(aMap);
+      if (aMap.size() == 1)
+        aMapIndex = aMap.begin().data();
+    }
   }
 
   // try to find out and process the object browser selection
@@ -510,11 +514,17 @@ void GroupGUI_GroupDlg::add()
 //=================================================================================
 void GroupGUI_GroupDlg::remove()
 {
+  bool isBlocked = myIdList->signalsBlocked();
+  myIdList->blockSignals( true );
+
   for ( int i = myIdList->count() - 1; i >= 0; i-- ) {
     if ( myIdList->isSelected( i ) )
       myIdList->removeItem( i );
   }
-  updateState();
+
+  myIdList->blockSignals( isBlocked );
+
+  highlightSubShapes();
 }
 
 
@@ -589,16 +599,10 @@ void GroupGUI_GroupDlg::updateState()
   if (app) {
     LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
     if (aSelMgr) {
-      aSelMgr->selectedObjects(aSelIOs);
-
-      if ( aSelIOs.Extent() == 1 ) {
-        Standard_Boolean aResult = Standard_False;
-        GEOM::GEOM_Object_var anObj =
-          GEOMBase::ConvertIOinGEOMObject( aSelIOs.First(), aResult );
-
-        if ( aResult && !anObj->_is_nil() )
-          aSelMgr->GetIndexes( aSelIOs.First(), aMapIndex );
-      }
+      QMap<QString, TColStd_IndexedMapOfInteger> aMap;
+      aSelMgr->selectedSubOwners(aMap);
+      if (aMap.size() == 1)
+        aMapIndex = aMap.begin().data();
     }
   }
 
@@ -698,18 +702,27 @@ void GroupGUI_GroupDlg::highlightSubShapes()
 
   myBusy = true;
 
-  for ( int ii = 0, nn = myIdList->count(); ii < nn; ii++ )
+  int ii = 0, nn = myIdList->count();
+  for ( ; ii < nn; ii++ )
     if ( myIdList->isSelected( ii ) )
       anIds.Add( myIdList->item( ii )->text().toInt() );
 
-  LightApp_SelectionMgr* aSelMgr =
-    ((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr();
+  SalomeApp_Application* app = myGeomGUI->getApp();
+  LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
   aSelMgr->clearSelected();
-  aSelMgr->AddOrRemoveIndex( aSh->getIO(), anIds, false );
+  //if (nn < 3000) aSelMgr->AddOrRemoveIndex(aSh->getIO(), anIds, false);
+  aSelMgr->AddOrRemoveIndex(aSh->getIO(), anIds, false);
 
   myBusy = false;
 
-  updateState();
+  //updateState();
+  if (nn < 3000) {
+    updateState();
+  }
+  else {
+    myAddBtn->setEnabled( true );
+    myRemBtn->setEnabled( true );
+  }
 }
 
 //=================================================================================