]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
NPAL17269: Merge from 3.2.X.
authorjfa <jfa@opencascade.com>
Wed, 24 Oct 2007 08:28:52 +0000 (08:28 +0000)
committerjfa <jfa@opencascade.com>
Wed, 24 Oct 2007 08:28:52 +0000 (08:28 +0000)
src/GEOMGUI/GEOMGUI_OCCSelector.cxx
src/GroupGUI/GroupGUI_GroupDlg.cxx

index 26c475ec3b0d53aa12cafe900fcfcd3f440642f4..0452e97bae8391b02ba2b239f5e519dd7162ffc3 100644 (file)
@@ -314,7 +314,10 @@ void GEOMGUI_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList )
   vw->unHighlightAll( false );
 
   // DO the selection
-  for  ( int i = 1, n = ownersmap.Extent(); i <= n; i++ )
+  int i = 1, n = ownersmap.Extent();
+  bool isAutoHilight = ic->AutomaticHilight();
+  ic->SetAutomaticHilight(Standard_False); //Bug 17269: for better performance
+  for  (; i <= n; i++)
   {
     Handle(SelectMgr_EntityOwner) owner = ownersmap( i );
     if ( owner->State() )
@@ -325,8 +328,11 @@ void GEOMGUI_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList )
     else
       ic->AddOrRemoveSelected( Handle(AIS_InteractiveObject)::DownCast(owner->Selectable()), false );
   }
-
-  vw->update();
+  ic->SetAutomaticHilight(isAutoHilight); //Bug 17269: restore mode
+  if (n < 3000)
+    ic->HilightSelected(/*updateviewer*/Standard_True);
+  else
+    vw->update();
 
   // fill extra selected
   mySelectedExternals.clear();
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 );
+  }
 }
 
 //=================================================================================