X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=21602a0fa0dca12b97adb6b5b5c04d34cb918b03;hp=6f22f89613b8334cd2e9aabe7fe9c3b9165c2a9b;hb=b4b3d5777655f6a96d72fc12a41e025bbec2c250;hpb=4b23a029f34136417496ba7e1f62c03b09ff9eba diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 6f22f8961..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) ); @@ -2829,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 @@ -3016,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 ) @@ -3024,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 ) @@ -3051,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; } @@ -3078,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 ); +}