Issue "0021757: EDF 1829 : Activate bring to front action on simple selection of an object": additional patch from Renaud NEDELEC.

This commit is contained in:
rnv 2013-11-21 10:38:52 +00:00
parent f5c8555cd0
commit 7cb2566ca6
2 changed files with 37 additions and 26 deletions

View File

@ -75,7 +75,7 @@
#include <LightApp_Preferences.h> #include <LightApp_Preferences.h>
#include <SALOME_LifeCycleCORBA.hxx> #include <SALOME_LifeCycleCORBA.hxx>
#include <SALOME_ListIO.hxx> // #include <SALOME_ListIO.hxx>
#include <SALOME_ListIteratorOfListIO.hxx> #include <SALOME_ListIteratorOfListIO.hxx>
#include <SALOMEDSClient_ClientFactory.hxx> #include <SALOMEDSClient_ClientFactory.hxx>
@ -200,7 +200,8 @@ void GeometryGUI::Modified (bool theIsUpdateActions)
// purpose : Constructor // purpose : Constructor
//======================================================================= //=======================================================================
GeometryGUI::GeometryGUI() : GeometryGUI::GeometryGUI() :
SalomeApp_Module( "GEOM" ) SalomeApp_Module( "GEOM" ),
myTopLevelIOList()
{ {
if ( CORBA::is_nil( myComponentGeom ) ) if ( CORBA::is_nil( myComponentGeom ) )
{ {
@ -2084,7 +2085,7 @@ void GeometryGUI::onAutoBringToFront()
bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" ); bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" );
if( !isAutoBringToFront ) if( !isAutoBringToFront )
return; return;
SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow(); SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() ) if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
return; return;
@ -2093,36 +2094,42 @@ void GeometryGUI::onAutoBringToFront()
if (!appStudy) return; if (!appStudy) return;
GEOM_Displayer displayer( appStudy ); GEOM_Displayer displayer( appStudy );
SALOME_View* window = displayer.GetActiveView(); SALOME_View* window = displayer.GetActiveView();
if ( !window ) return; if ( !window ) return;
int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId(); int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
SALOME_ListIO selected; SALOME_ListIO selected;
getApp()->selectionMgr()->selectedObjects( selected ); getApp()->selectionMgr()->selectedObjects( selected );
SALOME_ListIO allObjects; if (!myTopLevelIOList.IsEmpty())
window->GetVisible( allObjects ); {
for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
for ( SALOME_ListIteratorOfListIO It( allObjects ); It.More(); It.Next() ) { {
Handle( SALOME_InteractiveObject ) io = It.Value(); Handle( SALOME_InteractiveObject ) io = It.Value();
bool isSelected = false; bool isSelected = false;
for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
Handle( SALOME_InteractiveObject ) ioSelected = It.Value(); {
if( io->isSame( ioSelected ) ) Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
isSelected = true; if( io->isSame( sel_io ) )
} isSelected = true;
QVariant v = appStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), QVariant() ); }
bool isTopLevel = v.isValid() ? v.toBool() : false; if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
if( isSelected && !isTopLevel ) { {
appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true ); appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
if ( window->isVisible( io ) ) displayer.Redisplay( io, false ); if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
} }
else if( !isSelected ) {
appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
} }
} }
myTopLevelIOList.Assign(selected);
for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
{
Handle( SALOME_InteractiveObject ) io = It.Value();
appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
}
displayer.UpdateViewer(); displayer.UpdateViewer();
GeometryGUI::Modified(); GeometryGUI::Modified();
} }

View File

@ -57,6 +57,8 @@
#include "SALOMEconfig.h" #include "SALOMEconfig.h"
#include CORBA_CLIENT_HEADER(SALOMEDS) #include CORBA_CLIENT_HEADER(SALOMEDS)
#include <SALOME_ListIO.hxx>
class QDialog; class QDialog;
class QMenu; class QMenu;
class QAction; class QAction;
@ -231,6 +233,8 @@ private:
int myLocalSelectionMode; //Select Only int myLocalSelectionMode; //Select Only
GEOMGUI_CreationInfoWdg* myCreationInfoWdg; GEOMGUI_CreationInfoWdg* myCreationInfoWdg;
SALOME_ListIO myTopLevelIOList;
friend class DisplayGUI; friend class DisplayGUI;
}; };