NPAL17269: Merge from 3.2.X.

This commit is contained in:
jfa 2007-10-24 08:28:52 +00:00
parent ecab0565f5
commit 1284fb70d1
2 changed files with 54 additions and 35 deletions

View 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();

View 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 );
}
}
//=================================================================================