X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=21602a0fa0dca12b97adb6b5b5c04d34cb918b03;hp=fa1a16923bf5a45a6f4e5eb2351980b7a852ed0a;hb=b4b3d5777655f6a96d72fc12a41e025bbec2c250;hpb=4a83ca23925e29988f3900394805faabef4b1629 diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index fa1a16923..21602a0fa 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -103,6 +103,8 @@ #include #include +#include + #include "SMESHGUI_Utils.h" #include "SMESHGUI_GEOMGenUtils.h" #include "SMESHGUI_MeshUtils.h" @@ -238,6 +240,8 @@ namespace{ QObject::tr("SMESH_BUT_OK")); wc.resume(); } + + SMESHGUI::GetSMESHGUI()->updateObjBrowser(); } catch (const SALOME::SALOME_Exception& S_ex){ wc.suspend(); @@ -800,46 +804,10 @@ namespace{ } } -//============================================================================= -/*! - * - */ -//============================================================================= -class CustomItem : public QCustomMenuItem -{ -public: - CustomItem(const QString& s, const QFont& f) : myString(s), myFont(f) {} - ~CustomItem() {} - - void paint(QPainter* p, const QColorGroup& cg, bool act, bool /*enabled*/, int x, int y, int w, int h) - { - p->save(); - p->fillRect( x, y, w, h, act ? cg.highlight() : cg.mid() ); - p->setPen( act ? cg.highlightedText() : cg.buttonText() ); - p->setFont( myFont ); - p->drawText( x, y, w, h, AlignHCenter | AlignVCenter | ShowPrefix | DontClip | SingleLine, myString ); - p->restore(); - } - - QSize sizeHint() - { - return QFontMetrics( myFont ).size( AlignHCenter | AlignVCenter | ShowPrefix | DontClip | SingleLine, myString ); - } - - bool fullSpan() const - { - return true; - } - -private: - QString myString; - QFont myFont; -}; - extern "C" { Standard_EXPORT CAM_Module* createModule() { - return SMESHGUI::GetSMESHGUI(); + return new SMESHGUI(); } } @@ -851,7 +819,7 @@ SMESH::SMESH_Gen_var SMESHGUI::myComponentSMESH = SMESH::SMESH_Gen::_nil(); */ //============================================================================= SMESHGUI::SMESHGUI() : - SalomeApp_Module( "SMESH" ) +SalomeApp_Module( "SMESH" ) { if ( CORBA::is_nil( myComponentSMESH ) ) { @@ -860,6 +828,7 @@ SMESHGUI::SMESHGUI() : myComponentSMESH = SMESH::SMESH_Gen::_narrow( comp ); } + myAutomaticUpdate = false; myActiveDialogBox = 0 ; myState = -1 ; @@ -911,24 +880,32 @@ SUIT_ResourceMgr* SMESHGUI::resourceMgr() //============================================================================= SMESHGUI* SMESHGUI::GetSMESHGUI() { - static SMESHGUI* aSMESHGUI = NULL; - if( !aSMESHGUI ) - aSMESHGUI = new SMESHGUI(); - - if(_PTR(Study) aStudy = SMESH::GetActiveStudyDocument()) - GetSMESHGen()->SetCurrentStudy( _CAST(Study,aStudy)->GetStudy() ); + SMESHGUI* smeshMod = 0; + SalomeApp_Application* app = dynamic_cast(SUIT_Session::session()->activeApplication()); + if ( app ) + { + CAM_Module* module = app->module( "Mesh" ); + smeshMod = dynamic_cast( module ); + } - SUIT_ResourceMgr* mgr = resourceMgr(); - if( mgr ) - /* Automatic Update flag */ - aSMESHGUI->myAutomaticUpdate = ( mgr->stringValue( "SMESH", "AutomaticUpdate" ).compare( "true" ) == 0 ); + if ( smeshMod && smeshMod->application() && smeshMod->application()->activeStudy() ) + { + SalomeApp_Study* study = dynamic_cast( smeshMod->application()->activeStudy() ); + if ( study ) + { + _PTR(Study) aStudy = study->studyDS(); + if ( aStudy ) + GetSMESHGen()->SetCurrentStudy( _CAST(Study,aStudy)->GetStudy() ); + } + } - return aSMESHGUI; + return smeshMod; } extern "C" { - Standard_EXPORT SMESHGUI* GetComponentGUI() { + Standard_EXPORT SMESHGUI* GetComponentGUI() + { return SMESHGUI::GetSMESHGUI(); } } @@ -1095,11 +1072,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if( !mgr ) return false; - SUIT_ViewManager* vm = application()->activeViewManager(); - if( !vm ) - return false; - - SUIT_ViewWindow* view =vm->getActiveView(); + SUIT_ViewWindow* view = application()->desktop()->activeWindow(); SVTK_ViewWindow* vtkwnd = dynamic_cast( view ); QAction* act = action( theCommandID ); @@ -1177,6 +1150,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(checkLock(aStudy)) break; SMESH::UpdateView(); + + SALOME_ListIO l; + SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + aSel->setSelectedObjects( l ); break; } @@ -1350,6 +1327,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) tr("SMESH_WRN_VIEWER_VTK"), tr("SMESH_BUT_OK")); } + updateObjBrowser(); break; } @@ -1530,6 +1508,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case 801: // CREATE GROUP { + if ( !vtkwnd ) + { + SUIT_MessageBox::warn1( desktop(), tr( "SMESH_WRN_WARNING" ), + tr( "NOT_A_VTK_VIEWER" ),tr( "SMESH_BUT_OK" ) ); + break; + } + if(checkLock(aStudy)) break; EmitSignalDeactivateDialog(); SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_nil(); @@ -1551,6 +1536,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case 802: // CONSTRUCT GROUP { + if ( !vtkwnd ) + { + SUIT_MessageBox::warn1( desktop(), tr( "SMESH_WRN_WARNING" ), + tr( "NOT_A_VTK_VIEWER" ),tr( "SMESH_BUT_OK" ) ); + break; + } + if(checkLock(aStudy)) break; EmitSignalDeactivateDialog(); @@ -1812,7 +1804,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) mgr->setValue( "SMESH", "SettingsElementsSelectTol", aTolItems ); // update current study settings - SMESH::UpdateSelectionProp(); + SMESH::UpdateSelectionProp( this ); if( vtkwnd ) { // update VTK viewer properties @@ -1878,6 +1870,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } } } + updateObjBrowser( true ); break; } @@ -2263,7 +2256,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } - updateObjBrowser(); + //updateObjBrowser(); return true; } @@ -2304,7 +2297,6 @@ bool SMESHGUI::OnKeyPress( QKeyEvent * pe, SUIT_ViewWindow * wnd ) //============================================================================= bool SMESHGUI::SetSettings(SUIT_Desktop* parent) { - MESSAGE("SMESHGUI::SetSettings."); SMESHGUI::GetSMESHGUI(); SUIT_ResourceMgr* mgr = resourceMgr(); @@ -2343,6 +2335,7 @@ bool SMESHGUI::SetSettings(SUIT_Desktop* parent) action( 10001 )->setOn( false ); action( 10003 )->setOn( true ); } + action( 10003 )->setOn( Shrink ); // Automatic Update @@ -2361,10 +2354,12 @@ bool SMESHGUI::SetSettings(SUIT_Desktop* parent) action( 10071 )->setOn( false ); // Selection - SMESH::UpdateSelectionProp(); + SMESH::UpdateSelectionProp( this ); // menus disable - //action( 111 )->setEnabled( false ); // IMPORT DAT + action( 111 )->setEnabled( false ); // IMPORT DAT + + //action( 112 )->setEnabled( false ); //parent->menuBar()->setItemEnabled(112, false); // IMPORT UNV return true; @@ -2448,6 +2443,11 @@ void SMESHGUI::initialize( CAM_Application* app ) { SalomeApp_Module::initialize( app ); + SUIT_ResourceMgr* mgr = app->resourceMgr(); + if ( mgr ) + /* Automatic Update flag */ + myAutomaticUpdate = mgr->booleanValue( "SMESH", "AutomaticUpdate", myAutomaticUpdate ); + // ----- create actions -------------- createSMESHAction( 111, "DAT", "", (CTRL+Key_B) ); @@ -2489,7 +2489,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( 6012, "TAPER", "ICON_TAPER" , 0, true ); createSMESHAction( 6013, "ASPECT", "ICON_ASPECT" , 0, true ); createSMESHAction( 6014, "MIN_ANG", "ICON_ANGLE" , 0, true ); - createSMESHAction( 6015, "WRAP", "ICON_WRAP" , 0, true ); + createSMESHAction( 6015, "WARP", "ICON_WARP" , 0, true ); createSMESHAction( 6016, "SKEW", "ICON_SKEW", 0, true ); createSMESHAction( 6017, "ASPECT_3D", "ICON_ASPECT_3D", 0, true ); createSMESHAction( 6018, "LENGTH_2D", "ICON_LENGTH_2D", 0, true ); @@ -2498,12 +2498,13 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( 401, "EDGE", "ICON_DLG_EDGE" ); createSMESHAction( 4021, "TRIANGLE", "ICON_DLG_TRIANGLE" ); createSMESHAction( 4022, "QUAD", "ICON_DLG_QUADRANGLE" ); + createSMESHAction( 4023, "POLYGON", "ICON_DLG_POLYGON" ); createSMESHAction( 4031, "TETRA", "ICON_DLG_TETRAS" ); createSMESHAction( 4032, "HEXA", "ICON_DLG_HEXAS" ); - createSMESHAction( 4041, "NODES", "ICON_DLG_REM_NODE" ); - createSMESHAction( 4042, "ELEMENTS", "ICON_DLG_REM_ELEMENT" ); - createSMESHAction( 4051, "NODES", "ICON_DLG_RENUMBERING_NODES" ); - createSMESHAction( 4052, "ELEMENTS", "ICON_DLG_RENUMBERING_ELEMENTS" ); + createSMESHAction( 4041, "REMOVE_NODES", "ICON_DLG_REM_NODE" ); + createSMESHAction( 4042, "REMOVE_ELEMENTS", "ICON_DLG_REM_ELEMENT" ); + createSMESHAction( 4051, "RENUM_NODES", "ICON_DLG_RENUMBERING_NODES" ); + createSMESHAction( 4052, "RENUM_ELEMENTS", "ICON_DLG_RENUMBERING_ELEMENTS" ); createSMESHAction( 4061, "TRANS", "ICON_SMESH_TRANSLATION_VECTOR" ); createSMESHAction( 4062, "ROT", "ICON_DLG_ROTATION" ); createSMESHAction( 4063, "SYM", "ICON_SMESH_SYMMETRY_PLANE" ); @@ -2641,6 +2642,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( 401, addId, -1 ); createMenu( 4021, addId, -1 ); createMenu( 4022, addId, -1 ); + createMenu( 4023, addId, -1 ); createMenu( 4031, addId, -1 ); createMenu( 4032, addId, -1 ); createMenu( 4033, addId, -1 ); @@ -2736,6 +2738,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( 401, addRemTb ); createTool( 4021, addRemTb ); createTool( 4022, addRemTb ); + createTool( 4023, addRemTb ); createTool( 4031, addRemTb ); createTool( 4032, addRemTb ); createTool( 4033, addRemTb ); @@ -2826,17 +2829,18 @@ void SMESHGUI::initialize( CAM_Application* app ) isNotEmpty("numberOfNodes <> 0"), // has nodes, edges, etc in VISIBLE! actor - hasNodes("(numberOfNodes > 0 && isVisible)"), - hasElems("count( elemTypes ) > 0"), - hasDifferentElems("count( elemTypes ) > 1"), - hasEdges("{'Edge'} in elemTypes"), - hasFaces("{'Face'} in elemTypes"), - hasVolumes("{'Volume'} in elemTypes"); + hasNodes("(numberOfNodes > 0 )"),//&& isVisible)"), + hasElems("(count( elemTypes ) > 0)"), + hasDifferentElems("(count( elemTypes ) > 1)"), + hasEdges("({'Edge'} in elemTypes)"), + hasFaces("({'Face'} in elemTypes)"), + hasVolumes("({'Volume'} in elemTypes)"); QString aSelCount = QString( "%1 = 1" ).arg( QtxPopupMgr::Selection::defSelCountParam() ); - QString aClient = QString( "%1client in {%2}" ).arg( QtxPopupMgr::Selection::defEquality() ).arg( View ); + QString lc = QtxPopupMgr::Selection::defEquality(); + QString aClient = QString( "%1client in {%2}" ).arg( lc ).arg( "'VTKViewer'" ); QString aType = QString( "%1type in {%2}" ).arg( QtxPopupMgr::Selection::defEquality() ).arg( mesh_group ); - QString aMeshInVTK = aClient + "&&" + aType + "&&" + aSelCount; + QString aMeshInVTK = aClient + "&&" + aType;// + "&&" + aSelCount; //------------------------------------------------- // Numbering @@ -2977,7 +2981,7 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->setRule( action( 6014 ), aMeshInVtkHasFaces, true ); popupMgr()->setRule( action( 6014 ), "controlMode = 'eMinimumAngle'", false ); - popupMgr()->insert( action( 6015 ), anId, -1 ); // WRAP + popupMgr()->insert( action( 6015 ), anId, -1 ); // WARP popupMgr()->setRule( action( 6015 ), aMeshInVtkHasFaces, true ); popupMgr()->setRule( action( 6015 ), "controlMode = 'eWarping'", false ); @@ -3013,6 +3017,9 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->setRule( action( 302 ), aRule + "&&" + isNotEmpty, true ); popupMgr()->insert( separator(), -1, -1 ); + + connect( application(), SIGNAL( viewManagerAdded( SUIT_ViewManager* ) ), + this, SLOT( onViewManagerAdded( SUIT_ViewManager* ) ) ); } bool SMESHGUI::activateModule( SUIT_Study* study ) @@ -3021,9 +3028,9 @@ bool SMESHGUI::activateModule( SUIT_Study* study ) setMenuShown( true ); setToolShown( true ); + SetSettings( desktop() ); return res; - //SetSettings( desktop() ); } bool SMESHGUI::deactivateModule( SUIT_Study* study ) @@ -3048,6 +3055,11 @@ void SMESHGUI::OnGUIEvent() SMESH::SMESH_Gen_var SMESHGUI::GetSMESHGen() { + if ( CORBA::is_nil( myComponentSMESH ) ) + { + SMESHGUI aGUI; //SRN BugID: IPAL9186: Create an instance of SMESHGUI to initialize myComponentSMESH + return aGUI.myComponentSMESH; + } return myComponentSMESH; } @@ -3075,3 +3087,9 @@ void SMESHGUI::viewManagers( QStringList& list ) const { list.append( SVTK_Viewer::Type() ); } + +void SMESHGUI::onViewManagerAdded( SUIT_ViewManager* mgr ) +{ + if( dynamic_cast( mgr ) ) + SMESH::UpdateSelectionProp( this ); +}