X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMGUI%2FGeometryGUI.cxx;h=31c71174475343b627d009bb24a74cfffa91b199;hb=e180c20f73ffa96c2d039106f2a2a868c8bc0df1;hp=ec47ce98d01d53531c1ba62ffee752e5cc1f24ef;hpb=577ebb1ccd4c03217d5238dd588414ac47aaf0ea;p=modules%2Fgeom.git diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index ec47ce98d..31c711744 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -29,6 +29,7 @@ #include "GeometryGUI.h" #include "GEOMGUI_OCCSelector.h" #include "GEOMGUI_Selection.h" +#include "GEOM_Displayer.h" #include #include @@ -40,16 +41,17 @@ #include #include -#include +#include #include #include #include -#include +#include #include -#include -#include +#include +#include #include +#include #include #include @@ -66,13 +68,65 @@ #include #include + extern "C" { Standard_EXPORT CAM_Module* createModule() { return new GeometryGUI(); } } -GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil(); + + +GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil(); + +GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen() +{ + // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded + if (CORBA::is_nil(myComponentGeom)) + InitGeomGen(); + return GeometryGUI::myComponentGeom; +} + +bool GeometryGUI::InitGeomGen() +{ + GeometryGUI aGG; + if( CORBA::is_nil( myComponentGeom ) ) return false; + return true; +} + +//======================================================================= +// function : ClientSObjectToObject +// purpose : +//======================================================================= +CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject) +{ + _PTR(GenericAttribute) anAttr; + CORBA::Object_var anObj; + try { + std::string aValue = theSObject->GetIOR(); + if (strcmp(aValue.c_str(), "") != 0) { + CORBA::ORB_ptr anORB = SalomeApp_Application::orb(); + anObj = anORB->string_to_object(aValue.c_str()); + } + } catch(...) { + INFOS("ClientSObjectToObject - Unknown exception was occured!!!"); + } + return anObj._retn(); +} + +//======================================================================= +// function : ClientStudyToStudy +// purpose : +//======================================================================= +SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy) +{ + SALOME_NamingService *aNamingService = SalomeApp_Application::namingService(); + CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager"); + SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject); + int aStudyID = theStudy->StudyId(); + SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID); + return aDSStudy._retn(); +} //================================================================================= // class : CustomItem @@ -122,7 +176,7 @@ GeometryGUI::GeometryGUI() : Engines::Component_var comp = ls->FindOrLoad_Component( "FactoryServer", "GEOM" ); myComponentGeom = GEOM::GEOM_Gen::_narrow( comp ); } - + myState = -1; myActiveDialogBox = 0; myFatherior = ""; @@ -133,6 +187,8 @@ GeometryGUI::GeometryGUI() : myOCCSelectors.setAutoDelete( true ); myVTKSelectors.setAutoDelete( true ); + + myDisplayer = 0; } //======================================================================= @@ -153,8 +209,13 @@ GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName ) if ( !myGUIMap.contains( libraryName ) ) { // try to load library if it is not loaded yet QCString libs; +#ifndef WNT if( ( libs = getenv( "LD_LIBRARY_PATH" ) ) ) { - QStringList dirList = QStringList::split( ":", libs, false ); // skip empty entries + QStringList dirList = QStringList::split( ":", libs, false ); // skip empty entries +#else + if( ( libs = getenv( "PATH" ) ) ) { + QStringList dirList = QStringList::split( ";", libs, false ); // skip empty entries +#endif for( int i = dirList.count()-1; i >= 0; i-- ) { QString dir = dirList[ i ]; QFileInfo fi( Qtx::addSlash( dirList[ i ] ) + libraryName ); @@ -195,7 +256,7 @@ void GeometryGUI::ActiveWorkingPlane() SUIT_ViewWindow* window = application()->desktop()->activeWindow(); bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() ); - bool ViewVTK = ( window && window->getViewManager()->getType() == VTKViewer_Viewer::Type() ); + bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() ); if( ViewOCC ) { OCCViewer_ViewWindow* vw = dynamic_cast( window ); @@ -209,7 +270,7 @@ void GeometryGUI::ActiveWorkingPlane() } } else if( ViewVTK ) { - VTKViewer_ViewWindow* vw = dynamic_cast( window ); + SVTK_ViewWindow* vw = dynamic_cast( window ); if ( vw ) { vtkCamera* camera = vw->getRenderer()->GetActiveCamera(); @@ -280,12 +341,15 @@ void GeometryGUI::OnGUIEvent() void GeometryGUI::OnGUIEvent( int id ) { SUIT_Desktop* desk = application()->desktop(); - // check if current viewframe is of OCC type + + // check type of the active viewframe SUIT_ViewWindow* window = desk->activeWindow(); bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() ); - bool ViewVTK = ( window && window->getViewManager()->getType() == VTKViewer_Viewer::Type() ); + bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() ); // if current viewframe is not of OCC and not of VTK type - return immediately - if( !ViewOCC && !ViewVTK ) + // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example) + bool NotViewerDependentCommand = ( id == 901 || id == 216 || id == 213 ); + if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommand ) return; // fix for IPAL9103, point 2 @@ -316,7 +380,11 @@ void GeometryGUI::OnGUIEvent( int id ) id == 901 || // OBJECT BROWSER - RENAME id == 9024 ) { // OBJECT BROWSER - OPEN //cout << "id " << id << " received" << endl; - library = getLibrary( "libGEOMToolsGUI.so" ); +#ifndef WNT + library = getLibrary( "libGEOMToolsGUI.so" ); +#else + library = getLibrary( "GEOMToolsGUI.dll" ); +#endif } else if( id == 211 || // MENU VIEW - WIREFRAME/SHADING id == 212 || // MENU VIEW - DISPLAY ALL @@ -326,7 +394,11 @@ void GeometryGUI::OnGUIEvent( int id ) id == 216 || // MENU VIEW - DISPLAY id == 80311 || // POPUP VIEWER - WIREFRAME id == 80312 ) { // POPUP VIEWER - SHADING - library = getLibrary( "libDisplayGUI.so" ); +#ifndef WNT + library = getLibrary( "libDisplayGUI.so" ); +#else + library = getLibrary( "DisplayGUI.dll" ); +#endif } else if( id == 4011 || // MENU BASIC - POINT id == 4012 || // MENU BASIC - LINE @@ -338,24 +410,40 @@ void GeometryGUI::OnGUIEvent( int id ) id == 4018 || // MENU BASIC - WPLANE id == 4019 || // MENU BASIC - CURVE id == 4020 ) { // MENU BASIC - REPAIR - library = getLibrary( "libBasicGUI.so" ); +#ifndef WNT + library = getLibrary( "libBasicGUI.so" ); +#else + library = getLibrary( "BasicGUI.dll" ); +#endif } else if( id == 4021 || // MENU PRIMITIVE - BOX id == 4022 || // MENU PRIMITIVE - CYLINDER id == 4023 || // MENU PRIMITIVE - SPHERE id == 4024 || // MENU PRIMITIVE - TORUS id == 4025 ) { // MENU PRIMITIVE - CONE - library = getLibrary( "libPrimitiveGUI.so" ); +#ifndef WNT + library = getLibrary( "libPrimitiveGUI.so" ); +#else + library = getLibrary( "PrimitiveGUI.dll" ); +#endif } else if( id == 4031 || // MENU GENERATION - PRISM id == 4032 || // MENU GENERATION - REVOLUTION id == 4033 || // MENU GENERATION - FILLING id == 4034 ) { // MENU GENERATION - PIPE - library = getLibrary( "libGenerationGUI.so" ); +#ifndef WNT + library = getLibrary( "libGenerationGUI.so" ); +#else + library = getLibrary( "GenerationGUI.dll" ); +#endif } else if( id == 404 || // MENU ENTITY - SKETCHER id == 407 ) { // MENU ENTITY - EXPLODE - library = getLibrary( "libEntityGUI.so" ); +#ifndef WNT + library = getLibrary( "libEntityGUI.so" ); +#else + library = getLibrary( "EntityGUI.dll" ); +#endif } else if( id == 4081 || // MENU BUILD - EDGE id == 4082 || // MENU BUILD - WIRE @@ -363,13 +451,21 @@ void GeometryGUI::OnGUIEvent( int id ) id == 4084 || // MENU BUILD - SHELL id == 4085 || // MENU BUILD - SOLID id == 4086 ) { // MENU BUILD - COMPUND - library = getLibrary( "libBuildGUI.so" ); +#ifndef WNT + library = getLibrary( "libBuildGUI.so" ); +#else + library = getLibrary( "BuildGUI.dll" ); +#endif } else if( id == 5011 || // MENU BOOLEAN - FUSE id == 5012 || // MENU BOOLEAN - COMMON id == 5013 || // MENU BOOLEAN - CUT id == 5014 ) { // MENU BOOLEAN - SECTION - library = getLibrary( "libBooleanGUI.so" ); +#ifndef WNT + library = getLibrary( "libBooleanGUI.so" ); +#else + library = getLibrary( "BooleanGUI.dll" ); +#endif } else if( id == 5021 || // MENU TRANSFORMATION - TRANSLATION id == 5022 || // MENU TRANSFORMATION - ROTATION @@ -379,14 +475,22 @@ void GeometryGUI::OnGUIEvent( int id ) id == 5026 || // MENU TRANSFORMATION - OFFSET id == 5027 || // MENU TRANSFORMATION - MULTI-TRANSLATION id == 5028 ) { // MENU TRANSFORMATION - MULTI-ROTATION - library = getLibrary( "libTransformationGUI.so" ); +#ifndef WNT + library = getLibrary( "libTransformationGUI.so" ); +#else + library = getLibrary( "TransformationGUI.dll" ); +#endif } else if( id == 503 || // MENU OPERATION - PARTITION id == 504 || // MENU OPERATION - ARCHIMEDE id == 505 || // MENU OPERATION - FILLET id == 506 || // MENU OPERATION - CHAMFER id == 507 ) { // MENU OPERATION - CLIPPING RANGE - library = getLibrary( "libOperationGUI.so" ); +#ifndef WNT + library = getLibrary( "libOperationGUI.so" ); +#else + library = getLibrary( "OperationGUI.dll" ); +#endif } else if( id == 601 || // MENU REPAIR - SEWING id == 603 || // MENU REPAIR - SUPPRESS FACES @@ -398,7 +502,11 @@ void GeometryGUI::OnGUIEvent( int id ) id == 609 || // MENU REPAIR - FREE BOUNDARIES id == 610 || // MENU REPAIR - FREE FACES id == 602 ) { // MENU REPAIR - GLUE FACES - library = getLibrary( "libRepairGUI.so" ); +#ifndef WNT + library = getLibrary( "libRepairGUI.so" ); +#else + library = getLibrary( "RepairGUI.dll" ); +#endif } else if( id == 701 || // MENU MEASURE - PROPERTIES id == 702 || // MENU MEASURE - CDG @@ -410,19 +518,31 @@ void GeometryGUI::OnGUIEvent( int id ) id == 707 || // MENU MEASURE - CHECK id == 7072 || // MENU MEASURE - CHECK COMPOUND OF BLOCKS id == 708 ) { // MENU MEASURE - POINT COORDINATES - library = getLibrary( "libMeasureGUI.so" ); +#ifndef WNT + library = getLibrary( "libMeasureGUI.so" ); +#else + library = getLibrary( "MeasureGUI.dll" ); +#endif } else if( id == 800 || // MENU GROUP - CREATE id == 8001 || // POPUP MENU - CREATE GROUP id == 801 ) { // MENU GROUP - EDIT - library = getLibrary( "libGroupGUI.so" ); +#ifndef WNT + library = getLibrary( "libGroupGUI.so" ); +#else + library = getLibrary( "GroupGUI.dll" ); +#endif } else if( id == 9999 || // MENU BLOCKS - HEXAHEDRAL SOLID id == 9998 || // MENU BLOCKS - MULTI-TRANSFORMATION id == 9997 || // MENU BLOCKS - QUADRANGLE FACE id == 99991 || // MENU BLOCKS - PROPAGATE id == 9995 ) { // MENU BLOCKS - EXPLODE ON BLOCKS - library = getLibrary( "libBlocksGUI.so" ); +#ifndef WNT + library = getLibrary( "libBlocksGUI.so" ); +#else + library = getLibrary( "BlocksGUI.dll" ); +#endif } // call method of corresponding GUI library @@ -437,13 +557,13 @@ void GeometryGUI::OnGUIEvent( int id ) // function : GeometryGUI::OnKeyPress() // purpose : Called when any key is pressed by user [static] //================================================================================= -bool GeometryGUI::OnKeyPress( QKeyEvent* pe, SUIT_ViewWindow* win ) +void GeometryGUI::OnKeyPress( SUIT_ViewWindow* win, QKeyEvent* pe ) { GUIMap::Iterator it; bool bOk = true; for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it ) bOk = bOk && it.data()->OnKeyPress( pe, application()->desktop(), win ); - return bOk; +// return bOk; } @@ -451,13 +571,13 @@ bool GeometryGUI::OnKeyPress( QKeyEvent* pe, SUIT_ViewWindow* win ) // function : GeometryGUI::OnMouseMove() // purpose : Manages mouse move events [static] //================================================================================= -bool GeometryGUI::OnMouseMove( QMouseEvent* pe, SUIT_ViewWindow* win ) +void GeometryGUI::OnMouseMove( SUIT_ViewWindow* win, QMouseEvent* pe ) { GUIMap::Iterator it; bool bOk = true; for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it ) bOk = bOk && it.data()->OnMouseMove( pe, application()->desktop(), win ); - return bOk; +// return bOk; } @@ -465,7 +585,7 @@ bool GeometryGUI::OnMouseMove( QMouseEvent* pe, SUIT_ViewWindow* win ) // function : GeometryGUI::0nMousePress() // purpose : Manage mouse press events [static] //================================================================================= -bool GeometryGUI::OnMousePress( QMouseEvent* pe, SUIT_ViewWindow* win ) +void GeometryGUI::OnMousePress( SUIT_ViewWindow* win, QMouseEvent* pe ) { GUIMap::Iterator it; // OnMousePress() should return false if this event should be processed further @@ -473,7 +593,7 @@ bool GeometryGUI::OnMousePress( QMouseEvent* pe, SUIT_ViewWindow* win ) bool processed = false; for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it ) processed = processed || it.data()->OnMousePress( pe, application()->desktop(), win ); - return processed; +// return processed; } /* @@ -483,9 +603,9 @@ static void UpdateVtkSelection() SUIT_ViewWindow* win = 0; for ( win = winList.first(); win; win = winList.next() ) { if ( win->getViewManager()->getTypeView() == VIEW_VTK ) { - VTKViewer_ViewWindow* vw = dynamic_cast( window ); + SVTK_ViewWindow* vw = dynamic_cast( window ); if ( vw ) { - VTKViewer_RenderWindowInteractor* anInteractor = vw->getRWInteractor(); + SVTK_RenderWindowInteractor* anInteractor = vw->getRWInteractor(); anInteractor->SetSelectionProp(); anInteractor->SetSelectionTolerance(); SVTK_InteractorStyleSALOME* aStyle = anInteractor->GetInteractorStyleSALOME(); @@ -519,9 +639,9 @@ bool GeometryGUI::SetSettings() } } else if ( ViewVTK ) { - VTKViewer_ViewWindow* vw = dynamic_cast( window ); + SVTK_ViewWindow* vw = dynamic_cast( window ); if ( vw ) { - VTKViewer_RenderWindowInteractor* myRenderInter = vw->getRWInteractor(); + SVTK_RenderWindowInteractor* myRenderInter = vw->getRWInteractor(); DisplayMode = myRenderInter->GetDisplayMode(); } } @@ -598,7 +718,7 @@ void GeometryGUI::createGeomAction( const int id, const QString& po_id, const QS if ( icon_id.length() ) pix = resMgr->loadPixmap( "GEOM", tr( icon_id ) ); else - pix = resMgr->loadPixmap( "GEOM", tr( QString( "ICO_" )+po_id ) ); + pix = resMgr->loadPixmap( "GEOM", tr( QString( "ICO_" )+po_id ), false ); if ( !pix.isNull() ) icon = QIconSet( pix ); @@ -667,7 +787,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( 5011, "FUSE" ); createGeomAction( 5012, "COMMON" ); createGeomAction( 5013, "CUT" ); - createGeomAction( 50114, "SECTION" ); + createGeomAction( 5014, "SECTION" ); createGeomAction( 5021, "TRANSLATION" ); createGeomAction( 5022, "ROTATION" ); @@ -860,18 +980,17 @@ void GeometryGUI::initialize( CAM_Application* app ) createMenu( 707, measurId, -1 ); createMenu( 7072, measurId, -1 ); - int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 10 ); + int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 ); createMenu( separator(), toolsId, -1 ); createMenu( 5103, toolsId, -1 ); - int prefId = createMenu( tr( "MEN_PREFERENCES" ), -1, -1, 10 ); - createMenu( separator(), prefId, -1 ); - - int geomId = createMenu( tr( "MEN_PREFERENCES_GEOM" ), prefId, -1 ); - createMenu( 412, geomId, -1 ); - createMenu( 413, geomId, -1 ); - createMenu( 414, geomId, -1 ); - createMenu( separator(), prefId, -1 ); + //int prefId = createMenu( tr( "MEN_PREFERENCES" ), -1, -1, 50 ); + //createMenu( separator(), prefId, -1 ); + //int geomId = createMenu( tr( "MEN_PREFERENCES_GEOM" ), prefId, -1 ); + //createMenu( 412, geomId, -1 ); + //createMenu( 413, geomId, -1 ); + //createMenu( 414, geomId, -1 ); + //createMenu( separator(), prefId, -1 ); int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 ); createMenu( separator(), viewId, -1 ); @@ -883,9 +1002,16 @@ void GeometryGUI::initialize( CAM_Application* app ) createMenu( 212, viewId, -1 ); createMenu( 214, viewId, -1 ); createMenu( separator(), viewId, -1 ); + +/* + PAL9111: + because of these items are accessible through object browser and viewers + we have removed they from main menu + createMenu( 216, viewId, -1 ); createMenu( 213, viewId, -1 ); createMenu( 215, viewId, -1 ); +*/ // ---- create toolbars -------------------------- @@ -935,34 +1061,47 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->insert( action( 901 ), -1, -1 ); // rename mgr->setRule( action( 901 ), "$type in {'Shape' 'Group'} and selcount=1", true ); mgr->insert( action( 8001 ), -1, -1 ); // create group - mgr->setRule( action( 8001 ), "$client in {'ObjectBrowser'} and $type in {'Shape'} and selcount=1 and isOCC", true ); + mgr->setRule( action( 8001 ), "client='ObjectBrowser' and type='Shape' and selcount=1 and isOCC=true", true ); mgr->insert( action( 801 ), -1, -1 ); // edit group - mgr->setRule( action( 801 ), "$client in {'ObjectBrowser'} and $type in {'Group'} and selcount=1 and isOCC", true ); + mgr->setRule( action( 801 ), "client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true", true ); mgr->insert( separator(), -1, -1 ); // ----------- dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu mgr->insert( action( 80311 ), dispmodeId, -1 ); // wireframe - mgr->setRule( action( 80311 ), "$client in {'OCCViewer' 'VTKViewer'} and selcount>0", true ); - mgr->setRule( action( 80311 ), "$displaymode in {'Wireframe'}", false ); + mgr->setRule( action( 80311 ), "(client='OCCViewer' or client='VTKViewer') and selcount>0 and isVisible", true ); + mgr->setRule( action( 80311 ), "(client='OCCViewer' or client='VTKViewer') and displaymode='Wireframe'", false ); mgr->insert( action( 80312 ), dispmodeId, -1 ); // shading - mgr->setRule( action( 80312 ), "$client in {'OCCViewer' 'VTKViewer'} and selcount>0", true ); - mgr->setRule( action( 80312 ), "$displaymode in {'Shading'}", false ); + mgr->setRule( action( 80312 ), "(client='OCCViewer' or client='VTKViewer') and selcount>0 and isVisible", true ); + mgr->setRule( action( 80312 ), "(client='OCCViewer' or client='VTKViewer') and displaymode='Shading'", false ); mgr->insert( separator(), -1, -1 ); // ----------- mgr->insert( action( 8032 ), -1, -1 ); // color - mgr->setRule( action( 8032 ), "$client in {'OCCViewer' 'VTKViewer'} and selcount>0", true ); + mgr->setRule( action( 8032 ), "(client='OCCViewer' or client='VTKViewer') and selcount>0 and isVisible", true ); mgr->insert( action( 8033 ), -1, -1 ); // transparency - mgr->setRule( action( 8033 ), "$client in {'OCCViewer' 'VTKViewer'} and selcount>0", true ); + mgr->setRule( action( 8033 ), "(client='OCCViewer' or client='VTKViewer') and selcount>0 and isVisible", true ); mgr->insert( action( 8034 ), -1, -1 ); // isos - mgr->setRule( action( 8034 ), "$client in {'OCCViewer'} and selcount>0", true ); + mgr->setRule( action( 8034 ), "client='OCCViewer' and selcount>0 and isVisible", true ); mgr->insert( separator(), -1, -1 ); // ----------- + + + + QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ", + onlyComponent = "((type='Component') and selcount=1)", + rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")", + types = "'Shape' 'Group'"; + mgr->insert( action( 216 ), -1, -1 ); // display - mgr->setRule( action( 216 ), "selcount>0 and (($type in {'Shape' 'Group'} and ($isVisible in {false})) or $type in {'Component'})", true ); + mgr->setRule( action( 216 ), rule.arg( types ).arg( "not isVisible" ), true ); + mgr->insert( action( 215 ), -1, -1 ); // erase - mgr->setRule( action( 215 ), "selcount>0 and (($type in {'Shape' 'Group'} and $isVisible in {true}) or ($type in {'Component'} and selcount=1))", true ); + mgr->setRule( action( 215 ), rule.arg( types ).arg( "isVisible" ), true ); + mgr->insert( action( 214 ), -1, -1 ); // erase All - mgr->setRule( action( 214 ), "$client in {'OCCViewer' 'VTKViewer'}", true ); + mgr->setRule( action( 214 ), "client='OCCViewer' or client='VTKViewer'", true ); + mgr->insert( action( 213 ), -1, -1 ); // display only - mgr->setRule( action( 213 ), "selcount>0 and ($type in {'Shape' 'Group'} or ($type in {'Component'} and selcount=1))", true ); + mgr->setRule( action( 213 ), rule.arg( types ).arg( "true" ), true ); mgr->insert( separator(), -1, -1 ); + + mgr->hide( mgr->actionId( action( myEraseAll ) ) ); } //======================================================================= @@ -984,22 +1123,20 @@ bool GeometryGUI::activateModule( SUIT_Study* study ) connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ), this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) ); - connect( (STD_Application*)application(), SIGNAL( viewManagerAdded( SUIT_ViewManager* ) ), - this, SLOT( onViewManagerAdded( SUIT_ViewManager* ) ) ); GUIMap::Iterator it; for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it ) it.data()->activate( application()->desktop() ); - SalomeApp_SelectionMgr* sm = getApp()->selectionMgr(); + LightApp_SelectionMgr* sm = getApp()->selectionMgr(); SUIT_ViewManager* vm; ViewManagerList OCCViewManagers, VTKViewManagers; application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers ); for ( vm = OCCViewManagers.first(); vm; vm = OCCViewManagers.next() ) myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) ); - application()->viewManagers( VTKViewer_Viewer::Type(), VTKViewManagers ); + application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers ); for ( vm = VTKViewManagers.first(); vm; vm = VTKViewManagers.next() ) - myVTKSelectors.append( new SalomeApp_VTKSelector( (SVTK_Viewer*)vm->getViewModel(), sm ) ); + myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast( vm->getViewModel() ), sm ) ); // disable OCC selectors getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() ); @@ -1007,8 +1144,8 @@ bool GeometryGUI::activateModule( SUIT_Study* study ) sr->setEnabled(true); // disable VTK selectors - getApp()->selectionMgr()->setEnabled( false, VTKViewer_Viewer::Type() ); - for ( SalomeApp_VTKSelector* sr = myVTKSelectors.first(); sr; sr = myVTKSelectors.next() ) + getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() ); + for ( LightApp_VTKSelector* sr = myVTKSelectors.first(); sr; sr = myVTKSelectors.next() ) sr->setEnabled(true); return true; @@ -1026,8 +1163,6 @@ bool GeometryGUI::deactivateModule( SUIT_Study* study ) disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ), this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) ); - disconnect( (STD_Application*)application(), SIGNAL( viewManagerAdded( SUIT_ViewManager* ) ), - this, SLOT( onViewManagerAdded( SUIT_ViewManager* ) ) ); EmitSignalCloseAllDialogs(); @@ -1039,7 +1174,7 @@ bool GeometryGUI::deactivateModule( SUIT_Study* study ) getApp()->selectionMgr()->setEnabled( true, OCCViewer_Viewer::Type() ); myVTKSelectors.clear(); - getApp()->selectionMgr()->setEnabled( true, VTKViewer_Viewer::Type() ); + getApp()->selectionMgr()->setEnabled( true, SVTK_Viewer::Type() ); return SalomeApp_Module::deactivateModule( study ); } @@ -1114,7 +1249,7 @@ bool GeometryGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* popup, const QStr if ( aViewFrame->getTypeView() == VIEW_OCC ) aDisplayMode = ((OCCViewer_ViewFrame*)aViewFrame)->getViewer()->getAISContext()->DisplayMode(); else if ( aViewFrame->getTypeView() == VIEW_VTK ) - aDisplayMode = ((VTKViewer_ViewFrame*)aViewFrame)->getRWInteractor()->GetDisplayMode(); + aDisplayMode = (dynamic_cast( aViewFrame )->getRWInteractor()->GetDisplayMode(); int nbSel = Sel->IObjectCount(); @@ -1198,7 +1333,7 @@ bool GeometryGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* popup, const QStr else { ////// VTK viewer only popup->removeItem( 8034 ); // "Isos" - VTKViewer_Prs* vtkPrs = dynamic_cast( prs ); + SVTK_Prs* vtkPrs = dynamic_cast( prs ); if ( vtkPrs && !vtkPrs->IsNull() ) { vtkActorCollection* actorList = vtkPrs->GetObjects(); actorList->InitTraversal(); @@ -1365,7 +1500,7 @@ void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win ) return; const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() ); -// const bool ViewVTK = ( win->getViewManager()->getType() == VTKViewer_Viewer::Type() ); +// const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() ); // disable non-OCC viewframe menu commands // action( 404 )->setEnabled( ViewOCC ); // SKETCHER @@ -1387,7 +1522,6 @@ void GeometryGUI::windows( QMap& mappa ) const { mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::DockLeft ); mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::DockBottom ); - mappa.insert( SalomeApp_Application::WT_LogWindow, Qt::DockBottom ); } void GeometryGUI::viewManagers( QStringList& lst ) const @@ -1399,7 +1533,16 @@ void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm ) { if ( vm->getType() == OCCViewer_Viewer::Type() ) { - SalomeApp_SelectionMgr* sm = getApp()->selectionMgr(); + qDebug( "connect" ); + connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ), + this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) ); + connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ), + this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) ); + connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ), + this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) ); + + + LightApp_SelectionMgr* sm = getApp()->selectionMgr(); myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) ); // disable OCC selectors @@ -1407,14 +1550,14 @@ void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm ) for ( GEOMGUI_OCCSelector* sr = myOCCSelectors.first(); sr; sr = myOCCSelectors.next() ) sr->setEnabled(true); } - else if ( vm->getType() == VTKViewer_Viewer::Type() ) + else if ( vm->getType() == SVTK_Viewer::Type() ) { - SalomeApp_SelectionMgr* sm = getApp()->selectionMgr(); - myVTKSelectors.append( new SalomeApp_VTKSelector( (SVTK_Viewer*)vm->getViewModel(), sm ) ); - + LightApp_SelectionMgr* sm = getApp()->selectionMgr(); + myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast( vm->getViewModel() ), sm ) ); + // disable VTK selectors - getApp()->selectionMgr()->setEnabled( false, VTKViewer_Viewer::Type() ); - for ( SalomeApp_VTKSelector* sr = myVTKSelectors.first(); sr; sr = myVTKSelectors.next() ) + getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() ); + for ( LightApp_VTKSelector* sr = myVTKSelectors.first(); sr; sr = myVTKSelectors.next() ) sr->setEnabled(true); } } @@ -1431,9 +1574,9 @@ void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm ) break; } } - if ( vm->getType() == VTKViewer_Viewer::Type() ) + if ( vm->getType() == SVTK_Viewer::Type() ) { - for ( SalomeApp_VTKSelector* sr = myVTKSelectors.first(); sr; sr = myVTKSelectors.next() ) + for ( LightApp_VTKSelector* sr = myVTKSelectors.first(); sr; sr = myVTKSelectors.next() ) if ( sr->viewer() == viewer ) { myVTKSelectors.remove( sr ); @@ -1449,7 +1592,7 @@ QString GeometryGUI::engineIOR() const return QString( "" ); } -SalomeApp_Selection* GeometryGUI::createSelection() const +LightApp_Selection* GeometryGUI::createSelection() const { return new GEOMGUI_Selection(); } @@ -1468,3 +1611,45 @@ void GeometryGUI::contextMenuPopup( const QString& client, QPopupMenu* menu, QSt title = QString( obj->GetName().c_str() ); } } + +void GeometryGUI::createPreferences() +{ + int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) ); + + int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId ); + addPreference( tr( "PREF_SHADING_COLOR" ), genGroup, + LightApp_Preferences::Color, "Geometry", "shading_color" ); + int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup, + LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" ); + int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup, + LightApp_Preferences::Selector, "Geometry", "display_mode" ); + + setPreferenceProperty( genGroup, "columns", 1 ); + + setPreferenceProperty( step, "min", 0.001 ); + setPreferenceProperty( step, "max", 10000 ); + setPreferenceProperty( step, "precision", 3 ); + + // Set property for default display mode + QStringList aModesList; + aModesList.append( tr("MEN_WIREFRAME") ); + aModesList.append( tr("MEN_SHADING") ); + + QValueList anIndexesList; + anIndexesList.append(0); + anIndexesList.append(1); + + setPreferenceProperty( dispmode, "strings", aModesList ); + setPreferenceProperty( dispmode, "indexes", anIndexesList ); +} + +void GeometryGUI::preferencesChanged( const QString& section, const QString& param ) +{ +} + +LightApp_Displayer* GeometryGUI::displayer() +{ + if( !myDisplayer ) + myDisplayer = new GEOM_Displayer( dynamic_cast( getApp()->activeStudy() ) ); + return myDisplayer; +}