X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=2c49e211ecc167a32529d775be8f98a6aa6614eb;hp=21faa6d72de5aa43773c36975af51dcd45defdb3;hb=82d43d0f5d4d4cd282dd9c55e56ae67aeba37845;hpb=c38c10811a065cf5b13e8807ed71864d92ca7d80 diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 21faa6d72..2c49e211e 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(); @@ -303,23 +307,27 @@ namespace{ SUIT_FileDlg* fd = new SUIT_FileDlg( SMESHGUI::desktop(), false, true, true ); fd->setCaption( aTitle ); fd->setFilters( filters ); - fd->exec(); - aFilename = fd->selectedFile(); - aFormat = aFilterMap[fd->selectedFilter()]; - delete fd; - if( !aFilename.isEmpty() - && (aMesh->NbPolygons()>0 or aMesh->NbPolyhedrons()>0) - && aFormat==SMESH::MED_V2_1){ - int aRet = SUIT_MessageBox::warn2(SMESHGUI::desktop(), - QObject::tr("SMESH_WRN_WARNING"), - QObject::tr("SMESH_EXPORT_MED_V2_1").arg(anIObject->getName()), - QObject::tr("SMESH_BUT_YES"), - QObject::tr("SMESH_BUT_NO"), - 0,1,0); - if(aRet){ - return; + bool is_ok = false; + while(!is_ok){ + fd->exec(); + aFilename = fd->selectedFile(); + aFormat = aFilterMap[fd->selectedFilter()]; + is_ok = true; + if( !aFilename.isEmpty() + && (aMesh->NbPolygons()>0 or aMesh->NbPolyhedrons()>0) + && aFormat==SMESH::MED_V2_1){ + int aRet = SUIT_MessageBox::warn2(SMESHGUI::desktop(), + QObject::tr("SMESH_WRN_WARNING"), + QObject::tr("SMESH_EXPORT_MED_V2_1").arg(anIObject->getName()), + QObject::tr("SMESH_BUT_YES"), + QObject::tr("SMESH_BUT_NO"), + 0,1,0); + if(aRet){ + is_ok = false; + } } } + delete fd; } if ( !aFilename.isEmpty() ) { // Check whether the file already exists and delete it if yes @@ -408,7 +416,7 @@ namespace{ } case 1133:{ SMESHGUI::GetSMESHGUI()->EmitSignalDeactivateDialog(); - new SMESHGUI_TransparencyDlg( SMESHGUI::desktop(), "", false ); + new SMESHGUI_TransparencyDlg( SMESHGUI::GetSMESHGUI(), "", false ); return; }} SALOME_ListIteratorOfListIO It( selected ); @@ -468,7 +476,7 @@ namespace{ float Shrink = anActor->GetShrinkFactor(); SMESHGUI_Preferences_ColorDlg *aDlg = - new SMESHGUI_Preferences_ColorDlg(SMESHGUI::desktop(),""); + new SMESHGUI_Preferences_ColorDlg( SMESHGUI::GetSMESHGUI(), "" ); aDlg->SetColor(1, c); aDlg->SetColor(2, e); aDlg->SetColor(3, n); @@ -524,7 +532,7 @@ namespace{ SMESHGUI::GetSMESHGUI()->EmitSignalDeactivateDialog(); SMESHGUI_Preferences_ColorDlg *aDlg = - new SMESHGUI_Preferences_ColorDlg(SMESHGUI::desktop(), ""); + new SMESHGUI_Preferences_ColorDlg( SMESHGUI::GetSMESHGUI(), "" ); QColor color = mgr->colorValue( "SMESH", "SettingsFillColor", QColor(0, 170, 255) ); aDlg->SetColor(1, color); @@ -806,53 +814,17 @@ namespace{ aStudyBuilder->CommitCommand(); /* Clear any previous selection */ - SALOME_ListIO selected1; - aSel->setSelectedObjects( selected1 ); + SALOME_ListIO l1; + aSel->setSelectedObjects( l1 ); SMESHGUI::GetSMESHGUI()->updateObjBrowser(); } } -//============================================================================= -/*! - * - */ -//============================================================================= -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(); } } @@ -864,7 +836,7 @@ SMESH::SMESH_Gen_var SMESHGUI::myComponentSMESH = SMESH::SMESH_Gen::_nil(); */ //============================================================================= SMESHGUI::SMESHGUI() : - SalomeApp_Module( "SMESH" ) +SalomeApp_Module( "SMESH" ) { if ( CORBA::is_nil( myComponentSMESH ) ) { @@ -873,6 +845,7 @@ SMESHGUI::SMESHGUI() : myComponentSMESH = SMESH::SMESH_Gen::_narrow( comp ); } + myAutomaticUpdate = false; myActiveDialogBox = 0 ; myState = -1 ; @@ -924,24 +897,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(); } } @@ -1108,11 +1089,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 ); @@ -1162,12 +1139,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case 201: { - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); - SALOME_ListIO selected; - if( aSel ) - aSel->selectedObjects( selected ); - - SMESHGUI_Preferences_ScalarBarDlg::ScalarBarProperties( desktop(), aSel ); + SMESHGUI_Preferences_ScalarBarDlg::ScalarBarProperties( this ); break; } @@ -1195,6 +1167,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(checkLock(aStudy)) break; SMESH::UpdateView(); + + SALOME_ListIO l; + SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + aSel->setSelectedObjects( l ); break; } @@ -1223,8 +1199,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } } } - SALOME_ListIO selected1; - aSel->setSelectedObjects( selected1 ); + SALOME_ListIO l1; + aSel->setSelectedObjects( l1 ); break; } @@ -1235,7 +1211,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if ( vtkwnd ) { EmitSignalDeactivateDialog(); - new SMESHGUI_NodesDlg( desktop(), "", SMESHGUI::selectionMgr() ); + new SMESHGUI_NodesDlg(this); } else { SUIT_MessageBox::warn1(desktop(), @@ -1368,6 +1344,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) tr("SMESH_WRN_VIEWER_VTK"), tr("SMESH_BUT_OK")); } + updateObjBrowser(); break; } @@ -1548,6 +1525,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(); @@ -1569,6 +1553,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(); @@ -1687,7 +1678,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) else if ( theCommandID == 811 ) aMode = SMESHGUI_GroupOpDlg::INTERSECT; else aMode = SMESHGUI_GroupOpDlg::CUT; - ( new SMESHGUI_GroupOpDlg( desktop(), SMESHGUI::selectionMgr(), aMode ) )->show(); + ( new SMESHGUI_GroupOpDlg( this, aMode ) )->show(); break; } @@ -1698,7 +1689,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) EmitSignalDeactivateDialog(); - new SMESHGUI_DeleteGroupDlg( desktop(), SMESHGUI::selectionMgr() ); + new SMESHGUI_DeleteGroupDlg( this ); break; } @@ -1741,13 +1732,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) IOs.Clear(); IOs.Append( It.Value() ); aSel->setSelectedObjects( IOs ); - new SMESHGUI_StandardMeshInfosDlg(desktop(), "", false); + new SMESHGUI_StandardMeshInfosDlg( this, "", false); } // restore selection aSel->setSelectedObjects( selected ); } else - new SMESHGUI_StandardMeshInfosDlg(desktop(), "", false); + new SMESHGUI_StandardMeshInfosDlg( this, "", false); break; } @@ -1772,13 +1763,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case 1005: { - SMESHGUI_Preferences_ScalarBarDlg::ScalarBarPreferences( desktop() ); + SMESHGUI_Preferences_ScalarBarDlg::ScalarBarPreferences( this ); break; } case 10070: { - ( new SMESHGUI_PrecisionDlg( desktop() ) )->exec(); + ( new SMESHGUI_PrecisionDlg( this ) )->exec(); break; } @@ -1795,7 +1786,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case 1006: { SMESHGUI_Preferences_SelectionDlg* aDlg = - new SMESHGUI_Preferences_SelectionDlg(desktop()); + new SMESHGUI_Preferences_SelectionDlg( this ); QColor aColor = mgr->colorValue( "SMESH", "SettingsPreSelectColor", Qt::cyan ); aDlg->SetColor(1, aColor); @@ -1830,7 +1821,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 @@ -1896,6 +1887,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } } } + updateObjBrowser( true ); break; } @@ -1957,8 +1949,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) Handle(SALOME_InteractiveObject) IObject = It.Value(); SMESH::RemoveHypothesisOrAlgorithmOnMesh(IObject); } - SALOME_ListIO selected1; - aSel->setSelectedObjects( selected1 ); + SALOME_ListIO l1; + aSel->setSelectedObjects( l1 ); updateObjBrowser(); break; } @@ -2047,7 +2039,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if(checkLock(aStudy)) break; if( vtkwnd ) { EmitSignalDeactivateDialog(); - new SMESHGUI_RenumberingDlg(desktop(), "", selectionMgr(), 0); + new SMESHGUI_RenumberingDlg( this, "", 0); } else { @@ -2062,7 +2054,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if(checkLock(aStudy)) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); - new SMESHGUI_RenumberingDlg(desktop(), "", selectionMgr(), 1); + new SMESHGUI_RenumberingDlg( this, "", 1); } else { @@ -2169,7 +2161,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) aTypes.append( SMESH::FACE ); aTypes.append( SMESH::VOLUME ); } - new SMESHGUI_FilterLibraryDlg( desktop(), aTypes, SMESHGUI_FilterLibraryDlg::EDIT ); + new SMESHGUI_FilterLibraryDlg( this, SMESH::GetDesktop( this ), aTypes, SMESHGUI_FilterLibraryDlg::EDIT ); } break; @@ -2281,7 +2273,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } - updateObjBrowser(); + //updateObjBrowser(); return true; } @@ -2322,7 +2314,6 @@ bool SMESHGUI::OnKeyPress( QKeyEvent * pe, SUIT_ViewWindow * wnd ) //============================================================================= bool SMESHGUI::SetSettings(SUIT_Desktop* parent) { - MESSAGE("SMESHGUI::SetSettings."); SMESHGUI::GetSMESHGUI(); SUIT_ResourceMgr* mgr = resourceMgr(); @@ -2361,6 +2352,7 @@ bool SMESHGUI::SetSettings(SUIT_Desktop* parent) action( 10001 )->setOn( false ); action( 10003 )->setOn( true ); } + action( 10003 )->setOn( Shrink ); // Automatic Update @@ -2379,10 +2371,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; @@ -2443,9 +2437,9 @@ void SMESHGUI::createPopupItem( const int id, if( !popupMgr()->contains( popupMgr()->actionId( action( id ) ) ) ) popupMgr()->insert( action( id ), parentId, 0 ); - QChar lc = popupMgr()->equality(); + QChar lc = QtxPopupMgr::Selection::defEquality(); QString rule = "(%1) and (%2) and (%3)"; - rule = rule.arg( QString( "%1>0" ).arg( popupMgr()->selCountParam() ) ); + rule = rule.arg( QString( "%1>0" ).arg( QtxPopupMgr::Selection::defSelCountParam() ) ); rule = rule.arg( QString( "%1client in {%2}" ).arg( lc ).arg( clients ) ); rule = rule.arg( QString( "%1type in {%2}" ).arg( lc ).arg( types ) ); rule += theRule; @@ -2466,6 +2460,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) ); @@ -2499,29 +2498,30 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( 813, "DEL_GROUP", "ICON_DEL_GROUP" ); createSMESHAction( 900, "ADV_INFO", "ICON_ADV_INFO" ); createSMESHAction( 902, "STD_INFO", "ICON_STD_INFO" ); - createSMESHAction( 6001, "LENGTH", "ICON_LENGTH" ); - createSMESHAction( 6002, "FREE_EDGE", "ICON_FREE_EDGE" ); - createSMESHAction( 6003, "FREE_BORDER", "ICON_FREE_EDGE_2D" ); - createSMESHAction( 6004, "CONNECTION", "ICON_CONNECTION" ); - createSMESHAction( 6011, "AREA", "ICON_AREA" ); - createSMESHAction( 6012, "TAPER", "ICON_TAPER" ); - createSMESHAction( 6013, "ASPECT", "ICON_ASPECT" ); - createSMESHAction( 6014, "MIN_ANG", "ICON_ANGLE" ); - createSMESHAction( 6015, "WRAP", "ICON_WRAP" ); - createSMESHAction( 6016, "SKEW", "ICON_SKEW" ); - createSMESHAction( 6017, "ASPECT_3D", "ICON_ASPECT_3D" ); - createSMESHAction( 6018, "LENGTH_2D", "ICON_LENGTH_2D" ); - createSMESHAction( 6019, "CONNECTION_2D", "ICON_CONNECTION_2D" ); + createSMESHAction( 6001, "LENGTH", "ICON_LENGTH" , 0, true ); + createSMESHAction( 6002, "FREE_EDGE", "ICON_FREE_EDGE" , 0, true ); + createSMESHAction( 6003, "FREE_BORDER", "ICON_FREE_EDGE_2D" , 0, true ); + createSMESHAction( 6004, "CONNECTION", "ICON_CONNECTION" , 0, true ); + createSMESHAction( 6011, "AREA", "ICON_AREA" , 0, true ); + createSMESHAction( 6012, "TAPER", "ICON_TAPER" , 0, true ); + createSMESHAction( 6013, "ASPECT", "ICON_ASPECT" , 0, true ); + createSMESHAction( 6014, "MIN_ANG", "ICON_ANGLE" , 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 ); + createSMESHAction( 6019, "CONNECTION_2D", "ICON_CONNECTION_2D", 0, true ); createSMESHAction( 400, "NODE", "ICON_DLG_NODE" ); 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" ); @@ -2550,18 +2550,19 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( 10071, "DISP_ENT", "", 0, true ); createSMESHAction( 200, "RESET" ); createSMESHAction( 201, "SCALAR_BAR_PROP" ); - createSMESHAction( 211, "WIRE", "ICON_WIRE" ); - createSMESHAction( 212, "SHADE", "ICON_SHADE" ); - createSMESHAction( 213, "SHRINK", "ICON_SHRINK" ); + createSMESHAction( 211, "WIRE", "ICON_WIRE", 0, true ); + createSMESHAction( 212, "SHADE", "ICON_SHADE", 0, true ); + createSMESHAction( 213, "SHRINK", "ICON_SHRINK", 0, true ); createSMESHAction( 214, "UPDATE", "ICON_UPDATE" ); - createSMESHAction( 215, "NODES", "ICON_POINTS" ); - createSMESHAction( 217, "EDGES", "ICON_DLG_EDGE" ); - createSMESHAction( 218, "FACES", "ICON_DLG_TRIANGLE" ); - createSMESHAction( 219, "VOLUMES", "ICON_DLG_TETRAS" ); + createSMESHAction( 215, "NODES", "ICON_POINTS", 0, true ); + createSMESHAction( 217, "EDGES", "ICON_DLG_EDGE", 0, true ); + createSMESHAction( 218, "FACES", "ICON_DLG_TRIANGLE", 0, true ); + createSMESHAction( 219, "VOLUMES", "ICON_DLG_TETRAS", 0, true ); createSMESHAction( 220, "ALL" ); + createSMESHAction( 1100, "EDIT_HYPO" ); createSMESHAction( 1101, "RENAME" ); - createSMESHAction( 9010, "NUM_NODES" ); - createSMESHAction( 9011, "NUM_ELEMENTS" ); + createSMESHAction( 9010, "NUM_NODES", "", 0, true ); + createSMESHAction( 9011, "NUM_ELEMENTS", "", 0, true ); createSMESHAction( 1131, "DISPMODE" ); createSMESHAction( 1132, "COLORS" ); createSMESHAction( 1133, "TRANSP" ); @@ -2572,6 +2573,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( 300, "ERASE" ); createSMESHAction( 301, "DISPLAY" ); createSMESHAction( 302, "DISPLAY_ONLY" ); + createSMESHAction( 4033, "POLYHEDRON", "ICON_DLG_POLYHEDRON" ); // ----- create menu -------------- int fileId = createMenu( tr( "MEN_FILE" ), -1, 1 ), @@ -2657,8 +2659,10 @@ 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 ); createMenu( 4041, removeId, -1 ); createMenu( 4042, removeId, -1 ); @@ -2751,8 +2755,10 @@ 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 ); createTool( separator(), addRemTb ); createTool( 4041, addRemTb ); createTool( 4042, addRemTb ); @@ -2840,17 +2846,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"); - - QString aSelCount = popupMgr()->selCountParam() + "= 1"; - QString aClient = QString( popupMgr()->equality() )+ "client in {" + View + "}"; - QString aType = QString( popupMgr()->equality() ) + "type in {" + mesh_group + "}"; - QString aMeshInVTK = aClient + "&&" + aType + "&&" + aSelCount; + 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 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; //------------------------------------------------- // Numbering @@ -2951,59 +2958,59 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->insert( action( 6003 ), anId, -1 ); // FREE_BORDER popupMgr()->setRule( action( 6003 ), aMeshInVtkHasEdges, true ); - popupMgr()->setRule( action( 6003 ), "&& controlMode = 'eFreeEdges'", true ); + popupMgr()->setRule( action( 6003 ), "controlMode = 'eFreeEdges'", false ); popupMgr()->insert( action( 6001 ), anId, -1 ); // LENGTH popupMgr()->setRule( action( 6001 ), aMeshInVtkHasEdges, true ); - popupMgr()->setRule( action( 6001 ), "&& controlMode = 'eLength'", true ); + popupMgr()->setRule( action( 6001 ), "controlMode = 'eLength'", false ); popupMgr()->insert( action( 6004 ), anId, -1 ); // CONNECTION popupMgr()->setRule( action( 6004 ), aMeshInVtkHasEdges, true ); - popupMgr()->setRule( action( 6004 ), "&& controlMode = 'eMultiConnection'", true ); + popupMgr()->setRule( action( 6004 ), "controlMode = 'eMultiConnection'", false ); popupMgr()->insert( separator(), anId, -1 ); popupMgr()->insert( action( 6002 ), anId, -1 ); // FREE_EDGE popupMgr()->setRule( action( 6002 ), aMeshInVtkHasFaces, true ); - popupMgr()->setRule( action( 6002 ), "&& controlMode = 'eFreeBorders'", true ); + popupMgr()->setRule( action( 6002 ), "controlMode = 'eFreeBorders'", false ); popupMgr()->insert( action( 6018 ), anId, -1 ); // LENGTH_2D popupMgr()->setRule( action( 6018 ), aMeshInVtkHasFaces, true ); - popupMgr()->setRule( action( 6018 ), "&& controlMode = 'eLength2D'", true ); + popupMgr()->setRule( action( 6018 ), "controlMode = 'eLength2D'", false ); popupMgr()->insert( action( 6019 ), anId, -1 ); // CONNECTION_2D popupMgr()->setRule( action( 6019 ), aMeshInVtkHasFaces, true ); - popupMgr()->setRule( action( 6019 ), "&& controlMode = 'eMultiConnection2D'", true ); + popupMgr()->setRule( action( 6019 ), "controlMode = 'eMultiConnection2D'", false ); popupMgr()->insert( action( 6011 ), anId, -1 ); // AREA popupMgr()->setRule( action( 6011 ), aMeshInVtkHasFaces, true ); - popupMgr()->setRule( action( 6011 ), "&& controlMode = 'eArea'", true ); + popupMgr()->setRule( action( 6011 ), "controlMode = 'eArea'", false ); popupMgr()->insert( action( 6012 ), anId, -1 ); // TAPER popupMgr()->setRule( action( 6012 ), aMeshInVtkHasFaces, true ); - popupMgr()->setRule( action( 6012 ), "&& controlMode = 'eTaper'", true ); + popupMgr()->setRule( action( 6012 ), "controlMode = 'eTaper'", false ); popupMgr()->insert( action( 6013 ), anId, -1 ); // ASPECT popupMgr()->setRule( action( 6013 ), aMeshInVtkHasFaces, true ); - popupMgr()->setRule( action( 6013 ), "&& controlMode = 'eAspectRatio'", true ); + popupMgr()->setRule( action( 6013 ), "controlMode = 'eAspectRatio'", false ); popupMgr()->insert( action( 6014 ), anId, -1 ); // MIN_ANG popupMgr()->setRule( action( 6014 ), aMeshInVtkHasFaces, true ); - popupMgr()->setRule( action( 6014 ), "&& controlMode = 'eMinimumAngle'", 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'", true ); + popupMgr()->setRule( action( 6015 ), "controlMode = 'eWarping'", false ); popupMgr()->insert( action( 6016 ), anId, -1 ); // SKEW popupMgr()->setRule( action( 6016 ), aMeshInVtkHasFaces, true ); - popupMgr()->setRule( action( 6016 ), "&& controlMode = 'eSkew'", true ); + popupMgr()->setRule( action( 6016 ), "controlMode = 'eSkew'", false ); popupMgr()->insert( separator(), anId, -1 ); popupMgr()->insert( action( 6017 ), anId, -1 ); // ASPECT_3D popupMgr()->setRule( action( 6017 ), aMeshInVtkHasVolumes, true ); - popupMgr()->setRule( action( 6017 ), "&& controlMode = 'eAspectRatio3D'", true ); + popupMgr()->setRule( action( 6017 ), "controlMode = 'eAspectRatio3D'", false ); popupMgr()->insert( separator(), anId, -1 ); @@ -3027,26 +3034,30 @@ 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* ) ) ); } -void SMESHGUI::activateModule( SUIT_Study* study ) +bool SMESHGUI::activateModule( SUIT_Study* study ) { - SalomeApp_Module::activateModule( study ); + bool res = SalomeApp_Module::activateModule( study ); setMenuShown( true ); setToolShown( true ); + SetSettings( desktop() ); - //SetSettings( desktop() ); + return res; } -void SMESHGUI::deactivateModule( SUIT_Study* study ) +bool SMESHGUI::deactivateModule( SUIT_Study* study ) { setMenuShown( false ); setToolShown( false ); EmitSignalCloseAllDialogs(); - SalomeApp_Module::deactivateModule( study ); + return SalomeApp_Module::deactivateModule( study ); } void SMESHGUI::OnGUIEvent() @@ -3061,6 +3072,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; } @@ -3073,7 +3089,8 @@ QString SMESHGUI::engineIOR() const void SMESHGUI::contextMenuPopup( const QString& client, QPopupMenu* menu, QString& /*title*/ ) { - SMESHGUI_Selection sel( client, selectionMgr() ); + SMESHGUI_Selection sel; + sel.init( client, selectionMgr() ); popupMgr()->updatePopup( menu, &sel ); } @@ -3087,3 +3104,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 ); +}