X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_SymmetryDlg.cxx;h=1896683090ae04ac464f4d014ec47dc918ce0cd9;hb=4a314e77eb9ebaffb52468233f3695f2fbcbacdd;hp=a49f6cef94fd6af5b10ddc542e67333233795004;hpb=c38c10811a065cf5b13e8807ed71864d92ca7d80;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx b/src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx index a49f6cef9..189668309 100644 --- a/src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx @@ -17,7 +17,7 @@ // 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 // // // @@ -42,6 +42,10 @@ #include "SUIT_Desktop.h" #include "SUIT_ResourceMgr.h" +#include "SUIT_Session.h" +#include "SUIT_MessageBox.h" + +#include "LightApp_Application.h" #include "SVTK_ViewModel.h" #include "SVTK_ViewWindow.h" @@ -70,6 +74,7 @@ // IDL Headers #include "SALOMEconfig.h" #include CORBA_SERVER_HEADER(SMESH_Group) +#include CORBA_SERVER_HEADER(SMESH_MeshEditor) using namespace std; @@ -82,14 +87,12 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam : QDialog( SMESH::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose), mySMESHGUI( theModule ), - mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ), - myViewWindow( SMESH::GetViewWindow( theModule ) ), - mySelector( myViewWindow->GetSelector() ) + mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ) { - QPixmap image0 (SMESHGUI::resourceMgr()->loadPixmap("SMESH", tr("ICON_SMESH_SYMMETRY_POINT"))); - QPixmap image1 (SMESHGUI::resourceMgr()->loadPixmap("SMESH", tr("ICON_SMESH_SYMMETRY_AXIS"))); - QPixmap image2 (SMESHGUI::resourceMgr()->loadPixmap("SMESH", tr("ICON_SMESH_SYMMETRY_PLANE"))); - QPixmap image3 (SMESHGUI::resourceMgr()->loadPixmap("SMESH", tr("ICON_SELECT"))); + QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SMESH_SYMMETRY_POINT"))); + QPixmap image1 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SMESH_SYMMETRY_AXIS"))); + QPixmap image2 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SMESH_SYMMETRY_PLANE"))); + QPixmap image3 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT"))); if (!name) setName("SMESHGUI_SymmetryDlg"); @@ -144,6 +147,10 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam GroupButtonsLayout->setAlignment(Qt::AlignTop); GroupButtonsLayout->setSpacing(6); GroupButtonsLayout->setMargin(11); + buttonHelp = new QPushButton(GroupButtons, "buttonHelp"); + buttonHelp->setText(tr("SMESH_BUT_HELP" )); + buttonHelp->setAutoDefault(TRUE); + GroupButtonsLayout->addWidget(buttonHelp, 0, 4); buttonCancel = new QPushButton(GroupButtons, "buttonCancel"); buttonCancel->setText(tr("SMESH_BUT_CLOSE" )); buttonCancel->setAutoDefault(TRUE); @@ -212,6 +219,7 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam GroupMirrorLayout->addWidget(SelectPointButton, 0, 1); TextLabelX = new QLabel(GroupMirror, "TextLabelX"); + TextLabelX->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs ); TextLabelX->setText(tr("SMESH_X")); GroupMirrorLayout->addWidget(TextLabelX, 0, 2); @@ -219,6 +227,7 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam GroupMirrorLayout->addWidget(SpinBox_X, 0, 3); TextLabelY = new QLabel(GroupMirror, "TextLabelY"); + TextLabelY->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs ); TextLabelY->setText(tr("SMESH_Y")); GroupMirrorLayout->addWidget(TextLabelY, 0, 4); @@ -226,6 +235,7 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam GroupMirrorLayout->addWidget(SpinBox_Y, 0, 5); TextLabelZ = new QLabel(GroupMirror, "TextLabelZ"); + TextLabelZ->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs ); TextLabelZ->setText(tr("SMESH_Z")); GroupMirrorLayout->addWidget(TextLabelZ, 0, 6); @@ -267,20 +277,26 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam CheckBoxCopy->setText(tr("SMESH_CREATE_COPY")); GroupArgumentsLayout->addMultiCellWidget(CheckBoxCopy, 3, 3, 0, 2); + // CheckBox for groups generation + MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments); + MakeGroupsCheck->setChecked(false); + GroupArgumentsLayout->addMultiCellWidget(MakeGroupsCheck, 4, 4, 0, 2); SMESHGUI_SymmetryDlgLayout->addWidget(GroupArguments, 1, 0); /* Initialisations */ - SpinBox_X->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_Y->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_Z->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_DX->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_DY->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_DZ->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); + SpinBox_X->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3); + SpinBox_Y->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3); + SpinBox_Z->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3); + SpinBox_DX->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3); + SpinBox_DY->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3); + SpinBox_DZ->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3); GroupArguments->show(); RadioButton1->setChecked(TRUE); + mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector(); + mySMESHGUI->SetActiveDialogBox((QDialog*)this); // Costruction of the logical filter @@ -294,12 +310,15 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam myMeshOrSubMeshOrGroupFilter = new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR); + myHelpFileName = "symmetry_page.html"; + Init(); /* 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(buttonHelp, SIGNAL(clicked()), this, SLOT(ClickOnHelp())); connect(GroupConstructors, SIGNAL(clicked(int)), SLOT(ConstructorsClicked(int))); connect(SelectElementsButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); @@ -316,14 +335,12 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); connect(LineEditElements, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&))); connect(CheckBoxMesh, SIGNAL(toggled(bool)), SLOT(onSelectMesh(bool))); + connect(CheckBoxCopy, SIGNAL(toggled(bool)), SLOT(onCopyChecked(bool))); - /* Move widget on the botton right corner of main widget */ - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); this->show(); /* displays Dialog */ ConstructorsClicked(0); + SelectionIntoArgument(); resize(0,0); // ?? } @@ -365,6 +382,8 @@ void SMESHGUI_SymmetryDlg::Init (bool ResetControls) CheckBoxCopy->setChecked(false); CheckBoxMesh->setChecked(false); + MakeGroupsCheck->setChecked(false); + MakeGroupsCheck->setEnabled(false); onSelectMesh(false); } } @@ -420,7 +439,10 @@ void SMESHGUI_SymmetryDlg::ConstructorsClicked (int constructorId) if (myEditCurrentArgument != (QWidget*)LineEditElements) { SMESH::SetPointRepresentation(false); if (!CheckBoxMesh->isChecked()) - myViewWindow->SetSelectionMode(CellSelection); + { + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(CellSelection); + } } myEditCurrentArgument = (QWidget*)LineEditElements; @@ -477,15 +499,21 @@ void SMESHGUI_SymmetryDlg::ClickOnApply() try { SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); QApplication::setOverrideCursor(Qt::waitCursor); - aMeshEditor->Mirror(anElementsId, aMirror, aMirrorType, toCreateCopy); + if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ) + SMESH::ListOfGroups_var groups = + aMeshEditor->MirrorMakeGroups(anElementsId, aMirror, aMirrorType); + else + aMeshEditor->Mirror(anElementsId, aMirror, aMirrorType, toCreateCopy); QApplication::restoreOverrideCursor(); } catch (...) { } - mySelectionMgr->clearSelected(); SMESH::UpdateView(); + if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ) + mySMESHGUI->updateObjBrowser(true); // new groups may appear Init(false); ConstructorsClicked(GetConstructorId()); + SelectionIntoArgument(); } } @@ -507,13 +535,37 @@ void SMESHGUI_SymmetryDlg::ClickOnCancel() { disconnect(mySelectionMgr, 0, this, 0); mySelectionMgr->clearFilters(); - mySelectionMgr->clearSelected(); + //mySelectionMgr->clearSelected(); SMESH::SetPointRepresentation(false); - myViewWindow->SetSelectionMode(ActorSelection); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(ActorSelection); mySMESHGUI->ResetState(); reject(); } +//================================================================================= +// function : ClickOnHelp() +// purpose : +//================================================================================= +void SMESHGUI_SymmetryDlg::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::warn1(0, QObject::tr("WRN_WARNING"), + QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE"). + arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName), + QObject::tr("BUT_OK")); + } +} + //======================================================================= // function : onTextChange() // purpose : @@ -537,36 +589,24 @@ void SMESHGUI_SymmetryDlg::onTextChange (const QString& theNewText) aMesh = myActor->GetObject()->GetMesh(); if (aMesh) { - //mySelectionMgr->clearSelected(); - //mySelectionMgr->AddIObject(myActor->getIO()); - SALOME_ListIO aList; - aList.Append(myActor->getIO()); - mySelectionMgr->setSelectedObjects(aList, false); + Handle(SALOME_InteractiveObject) anIO = myActor->getIO(); - TColStd_IndexedMapOfInteger selectedIndices; TColStd_MapOfInteger newIndices; - mySelector->GetIndex(myActor->getIO(), selectedIndices); - + QStringList aListId = QStringList::split(" ", theNewText, false); if (send == LineEditElements) { for (int i = 0; i < aListId.count(); i++) { const SMDS_MeshElement * e = aMesh->FindElement(aListId[ i ].toInt()); - if (e) { - //if (!mySelectionMgr->IsIndexSelected(myActor->getIO(), e->GetID())) { - if (selectedIndices.Add(e->GetID())) { - //mySelectionMgr->AddOrRemoveIndex (myActor->getIO(), e->GetID(), true); - newIndices.Add(e->GetID()); - } - myNbOkElements++; - } - } - - if (newIndices.Extent() > 0){ - mySelector->AddOrRemoveIndex( myActor->getIO(), newIndices, true ); - myViewWindow->highlight( myActor->getIO(), true, true ); + if (e) + newIndices.Add(e->GetID()); + myNbOkElements++; } + mySelector->AddOrRemoveIndex( anIO, newIndices, false ); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->highlight( anIO, true, true ); + myElementsId = theNewText; } } @@ -627,6 +667,14 @@ void SMESHGUI_SymmetryDlg::SelectionIntoArgument() if (myEditCurrentArgument == (QWidget*)LineEditElements) { myElementsId = ""; + // MakeGroups is available if there are groups and "Copy" + if ( myMesh->NbGroups() == 0 ) { + MakeGroupsCheck->setChecked(false); + MakeGroupsCheck->setEnabled(false); + } + else if (CheckBoxCopy->isChecked() ) { + MakeGroupsCheck->setEnabled(true); + } if (CheckBoxMesh->isChecked()) { SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); @@ -670,7 +718,7 @@ void SMESHGUI_SymmetryDlg::SelectionIntoArgument() aNbUnits = anElementsIds->length(); } } else { - aNbUnits = SMESH::GetNameOfSelectedElements( mySelector, myActor->getIO(), aString); + aNbUnits = SMESH::GetNameOfSelectedElements( mySelector, IO, aString); myElementsId = aString; } @@ -679,7 +727,7 @@ void SMESHGUI_SymmetryDlg::SelectionIntoArgument() myNbOkElements = true; } else { - aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), aString); + aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString); if (aNbUnits != 1) return; @@ -734,20 +782,24 @@ void SMESHGUI_SymmetryDlg::SetEditCurrentArgument() myEditCurrentArgument = (QWidget*)LineEditElements; SMESH::SetPointRepresentation(false); if (CheckBoxMesh->isChecked()) { - myViewWindow->SetSelectionMode(ActorSelection); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(ActorSelection); mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); } else { - myViewWindow->SetSelectionMode(CellSelection); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(CellSelection); } } else if (send == SelectPointButton) { myEditCurrentArgument = (QWidget*)SpinBox_X; SMESH::SetPointRepresentation(true); - myViewWindow->SetSelectionMode(NodeSelection); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(NodeSelection); } else if (send == SelectVectorButton) { myEditCurrentArgument = (QWidget*)SpinBox_DX; SMESH::SetPointRepresentation(true); - myViewWindow->SetSelectionMode(NodeSelection); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(NodeSelection); } else { } @@ -785,7 +837,8 @@ void SMESHGUI_SymmetryDlg::ActivateThisDialog() mySMESHGUI->SetActiveDialogBox((QDialog*)this); - myViewWindow->SetSelectionMode(CellSelection); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(CellSelection); SelectionIntoArgument(); } @@ -839,11 +892,13 @@ void SMESHGUI_SymmetryDlg::onSelectMesh (bool toSelectMesh) SMESH::SetPointRepresentation(false); if (toSelectMesh) { - myViewWindow->SetSelectionMode(ActorSelection); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(ActorSelection); mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); LineEditElements->setReadOnly(true); } else { - myViewWindow->SetSelectionMode(CellSelection); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(CellSelection); LineEditElements->setReadOnly(false); onTextChange(LineEditElements->text()); } @@ -892,3 +947,33 @@ void SMESHGUI_SymmetryDlg::onVectorChanged() buttonApply->setEnabled(false); } } + +//======================================================================= +//function : onCopyChecked +//purpose : slot called when Copy checkBox is checked +//======================================================================= + +void SMESHGUI_SymmetryDlg::onCopyChecked(bool isOn) +{ + // enable "MakeGroupsCheck" + if ( !myMesh->_is_nil() && myMesh->NbGroups() == 0) + isOn = false; + MakeGroupsCheck->setEnabled(isOn); +} + +//================================================================================= +// function : keyPressEvent() +// purpose : +//================================================================================= +void SMESHGUI_SymmetryDlg::keyPressEvent( QKeyEvent* e ) +{ + QDialog::keyPressEvent( e ); + if ( e->isAccepted() ) + return; + + if ( e->key() == Key_F1 ) + { + e->accept(); + ClickOnHelp(); + } +}