mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2024-12-24 08:20:35 +05:00
Implementation of 0021757: EDF 1829 : Activate bring to front action on simple selection of an object
This commit is contained in:
parent
dde31f0675
commit
e688f2b77f
Binary file not shown.
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 94 KiB |
@ -44,6 +44,8 @@ predefined materials.</li>
|
||||
<li><b>Isolines width</b> - allows to define default width of the isolines.</li>
|
||||
<li><b>Preview edges width</b> - allows to define width of the edges for preview.</li>
|
||||
<li><b>Measures line width</b> - allows to define lines width of measurements tools.</li>
|
||||
<li><b>Automatic bring to front</b> - when option is ON: the objects selected by the user will be automatically
|
||||
made "top-level".</li>
|
||||
|
||||
</ul>
|
||||
</ul>
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include <SUIT_Desktop.h>
|
||||
#include <SUIT_ViewWindow.h>
|
||||
#include <SUIT_ViewManager.h>
|
||||
#include <SUIT_ResourceMgr.h>
|
||||
|
||||
#include <SALOME_Prs.h>
|
||||
#include <SALOME_InteractiveObject.hxx>
|
||||
@ -159,6 +160,8 @@ QVariant GEOMGUI_Selection::parameter( const int idx, const QString& p ) const
|
||||
v = isVectorsMode( idx );
|
||||
else if ( p == "topLevel" )
|
||||
v = topLevel( idx );
|
||||
else if ( p == "autoBringToFront" )
|
||||
v = autoBringToFront( idx );
|
||||
else if ( p == "hasChildren" )
|
||||
v = hasChildren( idx );
|
||||
else if ( p == "nbChildren" )
|
||||
@ -352,6 +355,11 @@ QString GEOMGUI_Selection::displayMode( const int index ) const
|
||||
return res;
|
||||
}
|
||||
|
||||
bool GEOMGUI_Selection::autoBringToFront( const int /*index*/ ) const
|
||||
{
|
||||
return SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" );
|
||||
}
|
||||
|
||||
bool GEOMGUI_Selection::isVectorsMode( const int index ) const
|
||||
{
|
||||
#ifdef USE_VISUAL_PROP_MAP
|
||||
|
@ -73,6 +73,7 @@ private:
|
||||
bool hasDisclosedChildren( const int ) const;
|
||||
bool compoundOfVertices( const int ) const;
|
||||
bool topLevel( const int ) const;
|
||||
bool autoBringToFront( const int ) const;
|
||||
bool isPhysicalMaterial( const int ) const;
|
||||
|
||||
bool isComponent( const int ) const;
|
||||
|
@ -3236,6 +3236,10 @@ Please, select face, shell or solid and try again</translation>
|
||||
<source>PREF_MEASURES_LINE_WIDTH</source>
|
||||
<translation>Measures lines width</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>PREF_AUTO_BRING_TO_FRONT</source>
|
||||
<translation>Automatic bring to front</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>PREF_ISOS</source>
|
||||
<translation>Number of isolines</translation>
|
||||
|
@ -3242,6 +3242,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
|
||||
<source>PREF_MEASURES_LINE_WIDTH</source>
|
||||
<translation>Epaisseur des traits de mesure</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>PREF_AUTO_BRING_TO_FRONT</source>
|
||||
<translation>Afficher au premier plan automatiquement</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>PREF_ISOS</source>
|
||||
<translation>Nombre d'isolignes</translation>
|
||||
|
@ -1292,10 +1292,10 @@ void GeometryGUI::initialize( CAM_Application* app )
|
||||
//QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
|
||||
QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
|
||||
mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
|
||||
mgr->setRule(action(GEOMOp::OpBringToFront), bringRule, QtxPopupMgr::VisibleRule );
|
||||
mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
|
||||
mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
|
||||
mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
|
||||
mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC, QtxPopupMgr::VisibleRule );
|
||||
mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
|
||||
#endif
|
||||
mgr->insert( separator(), -1, -1 ); // -----------
|
||||
dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
|
||||
@ -1474,6 +1474,8 @@ bool GeometryGUI::activateModule( SUIT_Study* study )
|
||||
LightApp_SelectionMgr* sm = getApp()->selectionMgr();
|
||||
|
||||
connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
|
||||
connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
|
||||
|
||||
if ( !myCreationInfoWdg )
|
||||
myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
|
||||
getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
|
||||
@ -1755,6 +1757,54 @@ void GeometryGUI::updateCreationInfo()
|
||||
}
|
||||
}
|
||||
|
||||
void GeometryGUI::onAutoBringToFront()
|
||||
{
|
||||
bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" );
|
||||
if( !isAutoBringToFront )
|
||||
return;
|
||||
|
||||
SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
|
||||
if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
|
||||
return;
|
||||
|
||||
SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
|
||||
if (!appStudy) return;
|
||||
|
||||
GEOM_Displayer displayer( appStudy );
|
||||
|
||||
SALOME_View* window = displayer.GetActiveView();
|
||||
if ( !window ) return;
|
||||
|
||||
int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
|
||||
|
||||
SALOME_ListIO selected;
|
||||
getApp()->selectionMgr()->selectedObjects( selected );
|
||||
SALOME_ListIO allObjects;
|
||||
window->GetVisible( allObjects );
|
||||
|
||||
for ( SALOME_ListIteratorOfListIO It( allObjects ); It.More(); It.Next() ) {
|
||||
Handle( SALOME_InteractiveObject ) io = It.Value();
|
||||
bool isSelected = false;
|
||||
for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
|
||||
Handle( SALOME_InteractiveObject ) ioSelected = It.Value();
|
||||
if( io->isSame( ioSelected ) )
|
||||
isSelected = true;
|
||||
}
|
||||
QVariant v = appStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), QVariant() );
|
||||
bool isTopLevel = v.isValid() ? v.toBool() : false;
|
||||
if( isSelected && !isTopLevel ) {
|
||||
appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
|
||||
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 );
|
||||
}
|
||||
}
|
||||
displayer.UpdateViewer();
|
||||
GeometryGUI::Modified();
|
||||
}
|
||||
|
||||
QString GeometryGUI::engineIOR() const
|
||||
{
|
||||
if ( !CORBA::is_nil( GetGeomGen() ) )
|
||||
@ -1960,6 +2010,9 @@ void GeometryGUI::createPreferences()
|
||||
setPreferenceProperty( wd[i], "min", 1 );
|
||||
setPreferenceProperty( wd[i], "max", 5 );
|
||||
}
|
||||
|
||||
addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
|
||||
LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
|
||||
|
||||
int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
|
||||
setPreferenceProperty( isoGroup, "columns", 2 );
|
||||
|
@ -168,6 +168,7 @@ private slots:
|
||||
void OnSetMaterial( const QString& );
|
||||
void updateMaterials();
|
||||
void updateCreationInfo();
|
||||
void onAutoBringToFront();
|
||||
|
||||
signals :
|
||||
void SignalDeactivateActiveDialog();
|
||||
|
Loading…
Reference in New Issue
Block a user