X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_NodesDlg.cxx;h=38869ceddb5f899eff69e34afbf1794f092d6fd9;hp=47e8f82c2a554187a58180597899e548b2f1fe96;hb=0635c9fc80f67d1e5dc0e94ec85f487286a92070;hpb=9a358116f4ee87b52d3d86752c4fb6b3f814a69f diff --git a/src/SMESHGUI/SMESHGUI_NodesDlg.cxx b/src/SMESHGUI/SMESHGUI_NodesDlg.cxx index 47e8f82c2..38869cedd 100644 --- a/src/SMESHGUI/SMESHGUI_NodesDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_NodesDlg.cxx @@ -1,6 +1,6 @@ -// SMESH SMESHGUI : GUI for SMESH component +// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE // -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // // This library is free software; you can redistribute it and/or @@ -17,15 +17,13 @@ // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// SMESH SMESHGUI : GUI for SMESH component +// File : SMESHGUI_NodesDlg.cxx +// Author : Nicolas REJNERI, Open CASCADE S.A.S. +// SMESH includes // -// -// File : SMESHGUI_NodesDlg.cxx -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - #include "SMESHGUI_NodesDlg.h" #include "SMESHGUI.h" @@ -34,130 +32,132 @@ #include "SMESHGUI_VTKUtils.h" #include "SMESHGUI_MeshUtils.h" -#include "SMESH_Actor.h" -#include "SMESH_ActorUtils.h" -#include "SMESH_ObjectDef.h" +#include +#include +#include -#include "SMDS_Mesh.hxx" -#include "SMDS_MeshNode.hxx" +#include +#include -#include "SUIT_Session.h" -#include "SUIT_OverrideCursor.h" -#include "SUIT_ViewWindow.h" -#include "SUIT_ViewManager.h" -#include "SUIT_MessageBox.h" -#include "SUIT_Desktop.h" +// SALOME GUI includes +#include +#include +#include +#include +#include -#include "SalomeApp_Study.h" -#include "SalomeApp_SelectionMgr.h" +#include +#include -#include "SVTK_Selector.h" -#include "SVTK_ViewWindow.h" +#include +#include -#include "SALOME_Actor.h" -#include "SALOME_ListIO.hxx" +// SALOME KERNEL includes +#include +#include -#include "utilities.h" +#include -// VTK Includes -#include +// VTK includes #include -#include #include #include #include #include -#include #include - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - - -namespace SMESH { - - void AddNode (SMESH::SMESH_Mesh_ptr theMesh, float x, float y, float z) +#include +#include + +// Qt includes +#include +#include +#include +#include +#include +#include +#include +#include + +// IDL includes +#include +#include CORBA_SERVER_HEADER(SMESH_MeshEditor) + +#define SPACING 6 +#define MARGIN 11 + +namespace SMESH +{ + void AddNode( SMESH::SMESH_Mesh_ptr theMesh, float x, float y, float z, const QStringList& theParameters ) { SUIT_OverrideCursor wc; try { - _PTR(SObject) aSobj = SMESH::FindSObject(theMesh); + _PTR(SObject) aSobj = SMESH::FindSObject( theMesh ); SMESH::SMESH_MeshEditor_var aMeshEditor = theMesh->GetMeshEditor(); - aMeshEditor->AddNode(x,y,z); + aMeshEditor->AddNode( x, y, z ); + theMesh->SetParameters( SMESHGUI::JoinObjectParameters(theParameters) ); _PTR(Study) aStudy = GetActiveStudyDocument(); CORBA::Long anId = aStudy->StudyId(); - if (TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId, aSobj->GetID().c_str())) { - aVisualObj->Update(true); + if (TVisualObjPtr aVisualObj = SMESH::GetVisualObj( anId, aSobj->GetID().c_str() ) ) { + aVisualObj->Update( true ); } - } catch (SALOME::SALOME_Exception& exc) { - INFOS("Follow exception was cought:\n\t" << exc.details.text); - } catch (const std::exception& exc) { - INFOS("Follow exception was cought:\n\t" << exc.what()); - } catch (...) { - INFOS("Unknown exception was cought !!!"); + } + catch ( SALOME::SALOME_Exception& exc ) { + INFOS( "Follow exception was cought:\n\t" << exc.details.text ); + } + catch ( const std::exception& exc ) { + INFOS( "Follow exception was cought:\n\t" << exc.what() ); + } + catch ( ... ) { + INFOS( "Unknown exception was cought !!!" ); } } - class TNodeSimulation { - SVTK_ViewWindow* myViewWindow; + class TNodeSimulation + { + SVTK_ViewWindow* myViewWindow; - SALOME_Actor *myPreviewActor; + SALOME_Actor* myPreviewActor; vtkDataSetMapper* myMapper; - vtkPoints* myPoints; + vtkPoints* myPoints; public: - TNodeSimulation(SVTK_ViewWindow* theViewWindow): - myViewWindow(theViewWindow) + TNodeSimulation( SVTK_ViewWindow* theViewWindow ): + myViewWindow( theViewWindow ) { vtkUnstructuredGrid* aGrid = vtkUnstructuredGrid::New(); // Create points myPoints = vtkPoints::New(); - myPoints->SetNumberOfPoints(1); - myPoints->SetPoint(0,0.0,0.0,0.0); + myPoints->SetNumberOfPoints( 1 ); + myPoints->SetPoint( 0, 0.0, 0.0, 0.0 ); // Create cells vtkIdList *anIdList = vtkIdList::New(); - anIdList->SetNumberOfIds(1); + anIdList->SetNumberOfIds( 1 ); vtkCellArray *aCells = vtkCellArray::New(); - aCells->Allocate(2, 0); + aCells->Allocate( 2, 0 ); vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New(); - aCellTypesArray->SetNumberOfComponents(1); - aCellTypesArray->Allocate(1); + aCellTypesArray->SetNumberOfComponents( 1 ); + aCellTypesArray->Allocate( 1 ); - anIdList->SetId(0, 0); - aCells->InsertNextCell(anIdList); - aCellTypesArray->InsertNextValue(VTK_VERTEX); + anIdList->SetId( 0, 0 ); + aCells->InsertNextCell( anIdList ); + aCellTypesArray->InsertNextValue( VTK_VERTEX ); - vtkIntArray* aCellLocationsArray = vtkIntArray::New(); - aCellLocationsArray->SetNumberOfComponents(1); - aCellLocationsArray->SetNumberOfTuples(1); + VTKViewer_CellLocationsArray* aCellLocationsArray = VTKViewer_CellLocationsArray::New(); + aCellLocationsArray->SetNumberOfComponents( 1 ); + aCellLocationsArray->SetNumberOfTuples( 1 ); aCells->InitTraversal(); - vtkIdType npts; - aCellLocationsArray->SetValue(0, aCells->GetTraversalLocation(npts)); + vtkIdType npts = 0; + aCellLocationsArray->SetValue( 0, aCells->GetTraversalLocation( npts ) ); - aGrid->SetCells(aCellTypesArray, aCellLocationsArray, aCells); + aGrid->SetCells( aCellTypesArray, aCellLocationsArray, aCells ); - aGrid->SetPoints(myPoints); - aGrid->SetCells(aCellTypesArray, aCellLocationsArray,aCells); + aGrid->SetPoints( myPoints ); + aGrid->SetCells( aCellTypesArray, aCellLocationsArray, aCells ); aCellLocationsArray->Delete(); aCellTypesArray->Delete(); aCells->Delete(); @@ -165,47 +165,47 @@ namespace SMESH { // Create and display actor myMapper = vtkDataSetMapper::New(); - myMapper->SetInput(aGrid); + myMapper->SetInput( aGrid ); aGrid->Delete(); myPreviewActor = SALOME_Actor::New(); - myPreviewActor->SetInfinitive(true); + myPreviewActor->SetInfinitive( true ); myPreviewActor->VisibilityOff(); myPreviewActor->PickableOff(); - myPreviewActor->SetMapper(myMapper); + myPreviewActor->SetMapper( myMapper ); vtkProperty* aProp = vtkProperty::New(); aProp->SetRepresentationToPoints(); - float anRGB[3]; + vtkFloatingPointType anRGB[3]; GetColor( "SMESH", "node_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 255, 0 ) ); aProp->SetColor( anRGB[0], anRGB[1], anRGB[2] ); - float aPointSize = GetFloat( "SMESH:node_size", 3 ); + vtkFloatingPointType aPointSize = GetFloat( "SMESH:node_size", 3 ); aProp->SetPointSize( aPointSize ); myPreviewActor->SetProperty( aProp ); aProp->Delete(); - myViewWindow->AddActor(myPreviewActor); + myViewWindow->AddActor( myPreviewActor ); } - void SetPosition (float x, float y, float z) + void SetPosition( float x, float y, float z ) { - myPoints->SetPoint(0,x,y,z); + myPoints->SetPoint( 0, x, y, z ); myPoints->Modified(); - SetVisibility(true); + SetVisibility( true ); } - void SetVisibility (bool theVisibility) + void SetVisibility( bool theVisibility ) { - myPreviewActor->SetVisibility(theVisibility); + myPreviewActor->SetVisibility( theVisibility ); RepaintCurrentView(); } ~TNodeSimulation() { - myViewWindow->RemoveActor(myPreviewActor); + myViewWindow->RemoveActor( myPreviewActor ); myPreviewActor->Delete(); myMapper->RemoveAllInputs(); @@ -220,110 +220,91 @@ namespace SMESH { // class : SMESHGUI_NodesDlg() // purpose : //================================================================================= -SMESHGUI_NodesDlg::SMESHGUI_NodesDlg (SMESHGUI* theModule, - const char* name, - bool modal, - WFlags fl): - QDialog(SMESH::GetDesktop(theModule), - name, - modal, - WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose), - mySelector(SMESH::GetViewWindow(theModule)->GetSelector()), - mySelectionMgr(SMESH::GetSelectionMgr(theModule)), - myViewWindow(SMESH::GetViewWindow(theModule)), - mySMESHGUI(theModule) +SMESHGUI_NodesDlg::SMESHGUI_NodesDlg( SMESHGUI* theModule ): + QDialog( SMESH::GetDesktop( theModule ) ), + mySelector( SMESH::GetViewWindow( theModule )->GetSelector() ), + mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ), + mySMESHGUI( theModule ) { - mySimulation = new SMESH::TNodeSimulation(myViewWindow); - - QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_DLG_NODE"))); - if (!name) - setName("SMESHGUI_NodesDlg"); - resize(303, 185); - setCaption(tr("MESH_NODE_TITLE")); - setSizeGripEnabled(TRUE); - SMESHGUI_NodesDlgLayout = new QGridLayout(this); - SMESHGUI_NodesDlgLayout->setSpacing(6); - SMESHGUI_NodesDlgLayout->setMargin(11); + setModal( false ); + setAttribute( Qt::WA_DeleteOnClose, true ); + setWindowTitle( tr("MESH_NODE_TITLE") ); + setSizeGripEnabled( true ); + + mySimulation = new SMESH::TNodeSimulation( SMESH::GetViewWindow( mySMESHGUI ) ); + + QPixmap image0( SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap( "SMESH", + tr( "ICON_DLG_NODE" ) ) ); + + QVBoxLayout* SMESHGUI_NodesDlgLayout = new QVBoxLayout( this ); + SMESHGUI_NodesDlgLayout->setSpacing( SPACING ); + SMESHGUI_NodesDlgLayout->setMargin( MARGIN ); /***************************************************************/ - GroupButtons = new QGroupBox(this, "GroupButtons"); - GroupButtons->setGeometry(QRect(10, 10, 281, 48)); - GroupButtons->setTitle(tr("" )); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - buttonCancel = new QPushButton(GroupButtons, "buttonCancel"); - buttonCancel->setText(tr("SMESH_BUT_CLOSE" )); - buttonCancel->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonCancel, 0, 3); - buttonApply = new QPushButton(GroupButtons, "buttonApply"); - buttonApply->setText(tr("SMESH_BUT_APPLY" )); - buttonApply->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonApply, 0, 1); - QSpacerItem* spacer_9 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupButtonsLayout->addItem(spacer_9, 0, 2); - buttonOk = new QPushButton(GroupButtons, "buttonOk"); - buttonOk->setText(tr("SMESH_BUT_OK" )); - buttonOk->setAutoDefault(TRUE); - buttonOk->setDefault(TRUE); - GroupButtonsLayout->addWidget(buttonOk, 0, 0); - SMESHGUI_NodesDlgLayout->addWidget(GroupButtons, 2, 0); + GroupConstructors = new QGroupBox( tr( "MESH_NODE" ), this ); + QButtonGroup* ButtonGroup = new QButtonGroup(this); + QHBoxLayout* GroupConstructorsLayout = new QHBoxLayout( GroupConstructors ); + GroupConstructorsLayout->setSpacing( SPACING ); + GroupConstructorsLayout->setMargin( MARGIN ); + + Constructor1 = new QRadioButton( GroupConstructors ); + Constructor1->setIcon( image0 ); + Constructor1->setChecked( true ); + + GroupConstructorsLayout->addWidget( Constructor1 ); + ButtonGroup->addButton( Constructor1, 0 ); + + /***************************************************************/ + GroupCoordinates = new QGroupBox( tr( "SMESH_COORDINATES" ), this ); + QHBoxLayout* GroupCoordinatesLayout = new QHBoxLayout(GroupCoordinates); + GroupCoordinatesLayout->setSpacing(SPACING); + GroupCoordinatesLayout->setMargin(MARGIN); + + TextLabel_X = new QLabel( tr( "SMESH_X" ), GroupCoordinates ); + SpinBox_X = new SMESHGUI_SpinBox( GroupCoordinates ); + + TextLabel_Y = new QLabel( tr( "SMESH_Y" ), GroupCoordinates ); + SpinBox_Y = new SMESHGUI_SpinBox( GroupCoordinates ); + + TextLabel_Z = new QLabel( tr( "SMESH_Z" ), GroupCoordinates ); + SpinBox_Z = new SMESHGUI_SpinBox( GroupCoordinates ); + + GroupCoordinatesLayout->addWidget( TextLabel_X ); + GroupCoordinatesLayout->addWidget( SpinBox_X ); + GroupCoordinatesLayout->addWidget( TextLabel_Y); + GroupCoordinatesLayout->addWidget( SpinBox_Y ); + GroupCoordinatesLayout->addWidget( TextLabel_Z ); + GroupCoordinatesLayout->addWidget( SpinBox_Z ); /***************************************************************/ - GroupConstructors = new QButtonGroup(this, "GroupConstructors"); - GroupConstructors->setTitle(tr("MESH_NODE" )); - GroupConstructors->setExclusive(TRUE); - GroupConstructors->setColumnLayout(0, Qt::Vertical); - GroupConstructors->layout()->setSpacing(0); - GroupConstructors->layout()->setMargin(0); - GroupConstructorsLayout = new QGridLayout(GroupConstructors->layout()); - GroupConstructorsLayout->setAlignment(Qt::AlignTop); - GroupConstructorsLayout->setSpacing(6); - GroupConstructorsLayout->setMargin(11); - Constructor1 = new QRadioButton(GroupConstructors, "Constructor1"); - Constructor1->setText(tr("" )); - Constructor1->setPixmap(image0); - Constructor1->setChecked(TRUE); - GroupConstructorsLayout->addWidget(Constructor1, 0, 0); - QSpacerItem* spacer_2 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupConstructorsLayout->addItem(spacer_2, 0, 1); - SMESHGUI_NodesDlgLayout->addWidget(GroupConstructors, 0, 0); + GroupButtons = new QGroupBox( this ); + QHBoxLayout* GroupButtonsLayout = new QHBoxLayout( GroupButtons ); + GroupButtonsLayout->setSpacing( SPACING ); + GroupButtonsLayout->setMargin( MARGIN ); + buttonOk = new QPushButton( tr( "SMESH_BUT_APPLY_AND_CLOSE" ), GroupButtons ); + buttonOk->setAutoDefault( true ); + buttonOk->setDefault( true ); + buttonApply = new QPushButton( tr( "SMESH_BUT_APPLY" ), GroupButtons ); + buttonApply->setAutoDefault( true ); + buttonCancel = new QPushButton( tr( "SMESH_BUT_CLOSE" ), GroupButtons ); + buttonCancel->setAutoDefault( true ); + buttonHelp = new QPushButton( tr( "SMESH_BUT_HELP" ), GroupButtons ); + buttonHelp->setAutoDefault( true ); + + GroupButtonsLayout->addWidget( buttonOk ); + GroupButtonsLayout->addSpacing( 10 ); + GroupButtonsLayout->addWidget( buttonApply ); + GroupButtonsLayout->addSpacing( 10 ); + GroupButtonsLayout->addStretch(); + GroupButtonsLayout->addWidget( buttonCancel ); + GroupButtonsLayout->addWidget( buttonHelp ); /***************************************************************/ - GroupCoordinates = new QGroupBox(this, "GroupCoordinates"); - GroupCoordinates->setTitle(tr("SMESH_COORDINATES" )); - GroupCoordinates->setColumnLayout(0, Qt::Vertical); - GroupCoordinates->layout()->setSpacing(0); - GroupCoordinates->layout()->setMargin(0); - GroupCoordinatesLayout = new QGridLayout(GroupCoordinates->layout()); - GroupCoordinatesLayout->setAlignment(Qt::AlignTop); - GroupCoordinatesLayout->setSpacing(6); - GroupCoordinatesLayout->setMargin(11); - TextLabel_X = new QLabel(GroupCoordinates, "TextLabel_X"); - TextLabel_X->setText(tr("SMESH_X" )); - GroupCoordinatesLayout->addWidget(TextLabel_X, 0, 0); - TextLabel_Y = new QLabel(GroupCoordinates, "TextLabel_Y"); - TextLabel_Y->setText(tr("SMESH_Y" )); - GroupCoordinatesLayout->addWidget(TextLabel_Y, 0, 2); - - TextLabel_Z = new QLabel(GroupCoordinates, "TextLabel_Z"); - TextLabel_Z->setText(tr("SMESH_Z" )); - GroupCoordinatesLayout->addWidget(TextLabel_Z, 0, 4); - - SpinBox_X = new SMESHGUI_SpinBox(GroupCoordinates, "SpinBox_X"); - GroupCoordinatesLayout->addWidget(SpinBox_X, 0, 1); - - SpinBox_Y = new SMESHGUI_SpinBox(GroupCoordinates, "SpinBox_Y"); - GroupCoordinatesLayout->addWidget(SpinBox_Y, 0, 3); - - SpinBox_Z = new SMESHGUI_SpinBox(GroupCoordinates, "SpinBox_Z"); - GroupCoordinatesLayout->addWidget(SpinBox_Z, 0, 5); - - SMESHGUI_NodesDlgLayout->addWidget(GroupCoordinates, 1, 0); + SMESHGUI_NodesDlgLayout->addWidget( GroupConstructors ); + SMESHGUI_NodesDlgLayout->addWidget( GroupCoordinates ); + SMESHGUI_NodesDlgLayout->addWidget( GroupButtons ); + + myHelpFileName = "adding_nodes_and_elements_page.html#adding_nodes_anchor"; /* Initialisation and display */ Init(); @@ -342,47 +323,40 @@ SMESHGUI_NodesDlg::~SMESHGUI_NodesDlg() // function : Init() // purpose : //================================================================================= -void SMESHGUI_NodesDlg::Init () +void SMESHGUI_NodesDlg::Init() { /* Get setting of step value from file configuration */ - double step; - // QString St = SUIT_CONFIG->getSetting("xxxxxxxxxxxxx"); TODO - // step = St.toDouble(); TODO - step = 25.0; + double step = 25.0; /* min, max, step and decimals for spin boxes */ - SpinBox_X->RangeStepAndValidator(-999.999, +999.999, step, 3); - SpinBox_Y->RangeStepAndValidator(-999.999, +999.999, step, 3); - SpinBox_Z->RangeStepAndValidator(-999.999, +999.999, step, 3); - SpinBox_X->SetValue(0.0); - SpinBox_Y->SetValue(0.0); - SpinBox_Z->SetValue(0.0); + SpinBox_X->RangeStepAndValidator( COORD_MIN, COORD_MAX, step, DBL_DIGITS_DISPLAY ); + SpinBox_Y->RangeStepAndValidator( COORD_MIN, COORD_MAX, step, DBL_DIGITS_DISPLAY ); + SpinBox_Z->RangeStepAndValidator( COORD_MIN, COORD_MAX, step, DBL_DIGITS_DISPLAY ); + SpinBox_X->SetValue( 0.0 ); + SpinBox_Y->SetValue( 0.0 ); + SpinBox_Z->SetValue( 0.0 ); - mySMESHGUI->SetActiveDialogBox((QDialog*)this); + mySMESHGUI->SetActiveDialogBox( this ); /* signals and slots connections */ - connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); - connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); + connect( buttonOk, SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); + connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( ClickOnCancel() ) ); + connect( buttonApply, SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) ); + connect( buttonHelp, SIGNAL( clicked() ), this, SLOT( ClickOnHelp() ) ); - connect(SpinBox_X, SIGNAL (valueChanged(double)), SLOT(ValueChangedInSpinBox(double))); - connect(SpinBox_Y, SIGNAL (valueChanged(double)), SLOT(ValueChangedInSpinBox(double))); - connect(SpinBox_Z, SIGNAL (valueChanged(double)), SLOT(ValueChangedInSpinBox(double))); + connect( SpinBox_X, SIGNAL( valueChanged( double ) ), SLOT( ValueChangedInSpinBox( double ) ) ); + connect( SpinBox_Y, SIGNAL( valueChanged( double ) ), SLOT( ValueChangedInSpinBox( double ) ) ); + connect( SpinBox_Z, SIGNAL( valueChanged( double ) ), SLOT( ValueChangedInSpinBox( double ) ) ); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(SelectionIntoArgument())); - connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), SLOT(DeactivateActiveDialog())); + connect( mySelectionMgr, SIGNAL( currentSelectionChanged() ), SLOT( SelectionIntoArgument() ) ); + connect( mySMESHGUI, SIGNAL( SignalDeactivateActiveDialog() ), SLOT( DeactivateActiveDialog() ) ); /* to close dialog if study frame change */ - connect(mySMESHGUI, SIGNAL (SignalStudyFrameChanged()), SLOT(ClickOnCancel())); - - /* Move widget on the botton right corner of main widget */ - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); + connect( mySMESHGUI, SIGNAL( SignalStudyFrameChanged() ), SLOT( ClickOnCancel() ) ); // set selection mode - SMESH::SetPointRepresentation(true); - myViewWindow->SetSelectionMode(NodeSelection); + SMESH::SetPointRepresentation( true ); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ) ) + aViewWindow->SetSelectionMode( NodeSelection ); SelectionIntoArgument(); } @@ -391,14 +365,14 @@ void SMESHGUI_NodesDlg::Init () // function : ValueChangedInSpinBox() // purpose : //================================================================================= -void SMESHGUI_NodesDlg::ValueChangedInSpinBox (double newValue) +void SMESHGUI_NodesDlg::ValueChangedInSpinBox( double newValue ) { - if (!myMesh->_is_nil()) { + if ( !myMesh->_is_nil() ) { double vx = SpinBox_X->GetValue(); double vy = SpinBox_Y->GetValue(); double vz = SpinBox_Z->GetValue(); - mySimulation->SetPosition(vx,vy,vz); + mySimulation->SetPosition( vx, vy, vz ); } } @@ -408,7 +382,7 @@ void SMESHGUI_NodesDlg::ValueChangedInSpinBox (double newValue) //================================================================================= void SMESHGUI_NodesDlg::ClickOnOk() { - if (ClickOnApply()) + if ( ClickOnApply() ) ClickOnCancel(); } @@ -418,38 +392,47 @@ void SMESHGUI_NodesDlg::ClickOnOk() //================================================================================= bool SMESHGUI_NodesDlg::ClickOnApply() { - if (mySMESHGUI->isActiveStudyLocked()) + if ( mySMESHGUI->isActiveStudyLocked() ) return false; - if (myMesh->_is_nil()) { - SUIT_MessageBox::warn1(SMESHGUI::desktop(), tr("SMESH_WRN_WARNING"), - tr("MESH_IS_NOT_SELECTED"), tr("SMESH_BUT_OK")); + if ( myMesh->_is_nil() ) { + SUIT_MessageBox::warning( this, tr( "SMESH_WRN_WARNING" ), + tr( "MESH_IS_NOT_SELECTED" ) ); return false; } + if( !isValid() ) + return false; + /* Recup args and call method */ double x = SpinBox_X->GetValue(); double y = SpinBox_Y->GetValue(); double z = SpinBox_Z->GetValue(); - mySimulation->SetVisibility(false); - SMESH::AddNode(myMesh,x,y,z); - SMESH::SetPointRepresentation(true); + + QStringList aParameters; + aParameters << SpinBox_X->text(); + aParameters << SpinBox_Y->text(); + aParameters << SpinBox_Z->text(); + + mySimulation->SetVisibility( false ); + SMESH::AddNode( myMesh, x, y, z, aParameters ); + SMESH::SetPointRepresentation( true ); // select myMesh SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList); - if (aList.Extent() != 1) { - if (SVTK_ViewWindow* aViewWindow = SMESH::GetCurrentVtkView()) { + mySelectionMgr->selectedObjects( aList ); + if ( aList.Extent() != 1 ) { + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetCurrentVtkView() ) { vtkActorCollection *aCollection = aViewWindow->getRenderer()->GetActors(); aCollection->InitTraversal(); - while (vtkActor *anAct = aCollection->GetNextActor()) { - if (SMESH_Actor *anActor = dynamic_cast(anAct)) { - if (anActor->hasIO()) { - if (SMESH_MeshObj *aMeshObj = dynamic_cast(anActor->GetObject().get())) { - if (myMesh->_is_equivalent(aMeshObj->GetMeshServer())) { + while ( vtkActor *anAct = aCollection->GetNextActor() ) { + if ( SMESH_Actor *anActor = dynamic_cast( anAct ) ) { + if ( anActor->hasIO() ) { + if ( SMESH_MeshObj *aMeshObj = dynamic_cast( anActor->GetObject().get() ) ) { + if ( myMesh->_is_equivalent( aMeshObj->GetMeshServer() ) ) { aList.Clear(); - aList.Append(anActor->getIO()); - mySelectionMgr->setSelectedObjects(aList, false); + aList.Append( anActor->getIO() ); + mySelectionMgr->setSelectedObjects( aList, false ); break; } } @@ -467,49 +450,75 @@ bool SMESHGUI_NodesDlg::ClickOnApply() //================================================================================= void SMESHGUI_NodesDlg::ClickOnCancel() { - disconnect(mySelectionMgr, 0, this, 0); - myViewWindow->SetSelectionMode(ActorSelection); + disconnect( mySelectionMgr, 0, this, 0 ); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ) ) + aViewWindow->SetSelectionMode( ActorSelection ); - mySimulation->SetVisibility(false); - SMESH::SetPointRepresentation(false); + mySimulation->SetVisibility( false ); + SMESH::SetPointRepresentation( false ); mySMESHGUI->ResetState(); reject(); } +//================================================================================= +// function : ClickOnHelp() +// purpose : +//================================================================================= +void SMESHGUI_NodesDlg::ClickOnHelp() +{ + LightApp_Application* app = (LightApp_Application*)( SUIT_Session::session()->activeApplication() ); + if ( app ) + app->onHelpContextModule( mySMESHGUI ? app->moduleName( mySMESHGUI->moduleName() ) : + QString( "" ), myHelpFileName ); + else { + QString platform; +#ifdef WIN32 + platform = "winapplication"; +#else + platform = "application"; +#endif + SUIT_MessageBox::warning( this, tr("WRN_WARNING"), + tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE"). + arg( app->resourceMgr()->stringValue( "ExternalBrowser", + platform ) ). + arg( myHelpFileName ) ); + } +} + //================================================================================= // function : SelectionIntoArgument() // purpose : Called when selection as changed or other case //================================================================================= void SMESHGUI_NodesDlg::SelectionIntoArgument() { - if (!GroupConstructors->isEnabled()) + if ( !GroupConstructors->isEnabled() ) return; - mySimulation->SetVisibility(false); - SMESH::SetPointRepresentation(true); + mySimulation->SetVisibility( false ); + SMESH::SetPointRepresentation( true ); const SALOME_ListIO& aList = mySelector->StoredIObjects(); - if (aList.Extent() == 1) { + if ( aList.Extent() == 1 ) { Handle(SALOME_InteractiveObject) anIO = aList.First(); - if (anIO->hasEntry()) { - myMesh = SMESH::GetMeshByIO(anIO); - if (myMesh->_is_nil()) return; + if ( anIO->hasEntry() ) { + myMesh = SMESH::GetMeshByIO( anIO ); + if ( myMesh->_is_nil() ) return; QString aText; - if (SMESH::GetNameOfSelectedNodes(mySelector,anIO,aText) == 1) { - if (SMESH_Actor* anActor = SMESH::FindActorByObject(myMesh.in())) { - if (SMDS_Mesh* aMesh = anActor->GetObject()->GetMesh()) { - if (const SMDS_MeshNode* aNode = aMesh->FindNode(aText.toInt())) { - SpinBox_X->SetValue(aNode->X()); - SpinBox_Y->SetValue(aNode->Y()); - SpinBox_Z->SetValue(aNode->Z()); + if ( SMESH::GetNameOfSelectedNodes( mySelector, anIO, aText ) == 1 ) { + if ( SMESH_Actor* anActor = SMESH::FindActorByObject( myMesh.in() ) ) { + if ( SMDS_Mesh* aMesh = anActor->GetObject()->GetMesh() ) { + if ( const SMDS_MeshNode* aNode = aMesh->FindNode( aText.toInt() ) ) { + SpinBox_X->SetValue( aNode->X() ); + SpinBox_Y->SetValue( aNode->Y() ); + SpinBox_Z->SetValue( aNode->Z() ); } } } } - mySimulation->SetPosition(SpinBox_X->GetValue(), - SpinBox_Y->GetValue(), - SpinBox_Z->GetValue()); + mySimulation->SetPosition( SpinBox_X->GetValue(), + SpinBox_Y->GetValue(), + SpinBox_Z->GetValue() ); } } } @@ -518,7 +527,7 @@ void SMESHGUI_NodesDlg::SelectionIntoArgument() // function : closeEvent() // purpose : //================================================================================= -void SMESHGUI_NodesDlg::closeEvent (QCloseEvent*) +void SMESHGUI_NodesDlg::closeEvent( QCloseEvent* ) { this->ClickOnCancel(); /* same than click on cancel button */ } @@ -527,9 +536,9 @@ void SMESHGUI_NodesDlg::closeEvent (QCloseEvent*) // function : hideEvent() // purpose : caused by ESC key //================================================================================= -void SMESHGUI_NodesDlg::hideEvent (QHideEvent*) +void SMESHGUI_NodesDlg::hideEvent( QHideEvent* ) { - if (!isMinimized()) + if ( !isMinimized() ) ClickOnCancel(); } @@ -537,9 +546,9 @@ void SMESHGUI_NodesDlg::hideEvent (QHideEvent*) // function : enterEvent() // purpose : to reactivate this dialog box when mouse enter onto the window //================================================================================= -void SMESHGUI_NodesDlg::enterEvent(QEvent*) +void SMESHGUI_NodesDlg::enterEvent( QEvent* ) { - if (!GroupConstructors->isEnabled()) + if ( !GroupConstructors->isEnabled() ) ActivateThisDialog(); } @@ -549,13 +558,13 @@ void SMESHGUI_NodesDlg::enterEvent(QEvent*) //================================================================================= void SMESHGUI_NodesDlg::DeactivateActiveDialog() { - if (GroupConstructors->isEnabled()) { - GroupConstructors->setEnabled(false); - GroupCoordinates->setEnabled(false); - GroupButtons->setEnabled(false); - mySimulation->SetVisibility(false); + if ( GroupConstructors->isEnabled() ) { + GroupConstructors->setEnabled( false ); + GroupCoordinates->setEnabled( false ); + GroupButtons->setEnabled( false ); + mySimulation->SetVisibility( false ); mySMESHGUI->ResetState(); - mySMESHGUI->SetActiveDialogBox(0); + mySMESHGUI->SetActiveDialogBox( 0 ); } } @@ -566,12 +575,51 @@ void SMESHGUI_NodesDlg::DeactivateActiveDialog() void SMESHGUI_NodesDlg::ActivateThisDialog() { mySMESHGUI->EmitSignalDeactivateDialog(); - GroupConstructors->setEnabled(true); - GroupCoordinates->setEnabled(true); - GroupButtons->setEnabled(true); + GroupConstructors->setEnabled( true ); + GroupCoordinates->setEnabled( true ); + GroupButtons->setEnabled( true ); - SMESH::SetPointRepresentation(true); - myViewWindow->SetSelectionMode(NodeSelection); + SMESH::SetPointRepresentation( true ); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ) ) + aViewWindow->SetSelectionMode( NodeSelection ); SelectionIntoArgument(); } + +//================================================================================= +// function : keyPressEvent() +// purpose : +//================================================================================= +void SMESHGUI_NodesDlg::keyPressEvent( QKeyEvent* e ) +{ + QDialog::keyPressEvent( e ); + if ( e->isAccepted() ) + return; + + if ( e->key() == Qt::Key_F1 ) { + e->accept(); + ClickOnHelp(); + } +} + +//================================================================================= +// function : isValid +// purpose : +//================================================================================= +bool SMESHGUI_NodesDlg::isValid() +{ + QString msg; + bool ok = true; + ok = SpinBox_X->isValid( msg, true ) && ok; + ok = SpinBox_Y->isValid( msg, true ) && ok; + ok = SpinBox_Z->isValid( msg, true ) && ok; + + if( !ok ) { + QString str( tr( "SMESH_INCORRECT_INPUT" ) ); + if ( !msg.isEmpty() ) + str += "\n" + msg; + SUIT_MessageBox::critical( this, tr( "SMESH_ERROR" ), str ); + return false; + } + return true; +}