1 // SMESH SMESHGUI : GUI for SMESH component
3 // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : SMESHGUI_ExtrusionDlg.cxx
23 // Author : Michael ZORIN, Open CASCADE S.A.S.
27 #include "SMESHGUI_ExtrusionDlg.h"
30 #include "SMESHGUI_Utils.h"
31 #include "SMESHGUI_VTKUtils.h"
32 #include "SMESHGUI_MeshUtils.h"
33 #include "SMESHGUI_SpinBox.h"
34 #include "SMESHGUI_IdValidator.h"
36 #include <SMESH_Actor.h>
37 #include <SMESH_TypeFilter.hxx>
38 #include <SMESH_LogicalFilter.hxx>
40 #include <SMDS_Mesh.hxx>
42 // SALOME GUI includes
43 #include <SUIT_ResourceMgr.h>
44 #include <SUIT_Desktop.h>
45 #include <SUIT_MessageBox.h>
46 #include <SUIT_Session.h>
47 #include <SUIT_OverrideCursor.h>
49 #include <LightApp_Application.h>
50 #include <LightApp_SelectionMgr.h>
52 #include <SVTK_ViewModel.h>
53 #include <SVTK_ViewWindow.h>
55 #include <SalomeApp_IntSpinBox.h>
58 #include <TColStd_MapOfInteger.hxx>
59 #include <TColStd_IndexedMapOfInteger.hxx>
62 #include <QApplication>
63 #include <QButtonGroup>
67 #include <QPushButton>
68 #include <QRadioButton>
70 #include <QHBoxLayout>
71 #include <QVBoxLayout>
72 #include <QGridLayout>
76 #include <SALOMEconfig.h>
77 #include CORBA_SERVER_HEADER(SMESH_Group)
78 #include CORBA_SERVER_HEADER(SMESH_MeshEditor)
83 //=================================================================================
84 // function : SMESHGUI_ExtrusionDlg()
85 // purpose : constructor
86 //=================================================================================
87 SMESHGUI_ExtrusionDlg::SMESHGUI_ExtrusionDlg (SMESHGUI* theModule)
88 : QDialog( SMESH::GetDesktop( theModule ) ),
89 mySMESHGUI( theModule ),
90 mySelectionMgr( SMESH::GetSelectionMgr( theModule ) )
92 QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_DLG_EDGE")));
93 QPixmap image1 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_DLG_TRIANGLE")));
94 QPixmap image2 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT")));
97 setAttribute( Qt::WA_DeleteOnClose, true );
98 setWindowTitle(tr("EXTRUSION_ALONG_LINE"));
99 setSizeGripEnabled(true);
101 QVBoxLayout* SMESHGUI_ExtrusionDlgLayout = new QVBoxLayout(this);
102 SMESHGUI_ExtrusionDlgLayout->setSpacing(SPACING);
103 SMESHGUI_ExtrusionDlgLayout->setMargin(MARGIN);
105 /***************************************************************/
106 ConstructorsBox = new QGroupBox(tr("SMESH_EXTRUSION"), this);
107 GroupConstructors = new QButtonGroup(this);
108 QHBoxLayout* ConstructorsBoxLayout = new QHBoxLayout(ConstructorsBox);
109 ConstructorsBoxLayout->setSpacing(SPACING);
110 ConstructorsBoxLayout->setMargin(MARGIN);
112 RadioButton1= new QRadioButton(ConstructorsBox);
113 RadioButton1->setIcon(image0);
114 RadioButton2= new QRadioButton(ConstructorsBox);
115 RadioButton2->setIcon(image1);
117 ConstructorsBoxLayout->addWidget(RadioButton1);
118 ConstructorsBoxLayout->addWidget(RadioButton2);
120 GroupConstructors->addButton(RadioButton1, 0);
121 GroupConstructors->addButton(RadioButton2, 1);
123 /***************************************************************/
124 GroupButtons = new QGroupBox(this);
125 QHBoxLayout* GroupButtonsLayout = new QHBoxLayout(GroupButtons);
126 GroupButtonsLayout->setSpacing(SPACING);
127 GroupButtonsLayout->setMargin(MARGIN);
129 buttonOk = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), GroupButtons);
130 buttonOk->setAutoDefault(true);
131 buttonOk->setDefault(true);
132 buttonApply = new QPushButton(tr("SMESH_BUT_APPLY"), GroupButtons);
133 buttonApply->setAutoDefault(true);
134 buttonCancel = new QPushButton(tr("SMESH_BUT_CLOSE"), GroupButtons);
135 buttonCancel->setAutoDefault(true);
136 buttonHelp = new QPushButton(tr("SMESH_BUT_HELP"), GroupButtons);
137 buttonHelp->setAutoDefault(true);
139 GroupButtonsLayout->addWidget(buttonOk);
140 GroupButtonsLayout->addSpacing(10);
141 GroupButtonsLayout->addWidget(buttonApply);
142 GroupButtonsLayout->addSpacing(10);
143 GroupButtonsLayout->addStretch();
144 GroupButtonsLayout->addWidget(buttonCancel);
145 GroupButtonsLayout->addWidget(buttonHelp);
147 /***************************************************************/
148 GroupArguments = new QGroupBox(tr("EXTRUSION_1D"), this);
149 QGridLayout* GroupArgumentsLayout = new QGridLayout(GroupArguments);
150 GroupArgumentsLayout->setSpacing(SPACING);
151 GroupArgumentsLayout->setMargin(MARGIN);
153 myIdValidator = new SMESHGUI_IdValidator(this);
155 // Controls for elements selection
156 TextLabelElements = new QLabel(tr("SMESH_ID_ELEMENTS"), GroupArguments);
158 SelectElementsButton = new QPushButton(GroupArguments);
159 SelectElementsButton->setIcon(image2);
161 LineEditElements = new QLineEdit(GroupArguments);
162 LineEditElements->setValidator(myIdValidator);
164 // Control for the whole mesh selection
165 CheckBoxMesh = new QCheckBox(tr("SMESH_SELECT_WHOLE_MESH"), GroupArguments);
167 // Controls for vector selection
168 TextLabelVector = new QLabel(tr("SMESH_VECTOR"), GroupArguments);
170 TextLabelDx = new QLabel(tr("SMESH_DX"), GroupArguments);
171 SpinBox_Dx = new SMESHGUI_SpinBox(GroupArguments);
173 TextLabelDy = new QLabel(tr("SMESH_DY"), GroupArguments);
174 SpinBox_Dy = new SMESHGUI_SpinBox(GroupArguments);
176 TextLabelDz = new QLabel(tr("SMESH_DZ"), GroupArguments);
177 SpinBox_Dz = new SMESHGUI_SpinBox(GroupArguments);
179 // Controls for nb. steps defining
180 TextLabelNbSteps = new QLabel(tr("SMESH_NUMBEROFSTEPS"), GroupArguments);
181 SpinBox_NbSteps = new SalomeApp_IntSpinBox(GroupArguments);
183 // CheckBox for groups generation
184 MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments);
186 GroupArgumentsLayout->addWidget(TextLabelElements, 0, 0);
187 GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1);
188 GroupArgumentsLayout->addWidget(LineEditElements, 0, 2, 1, 6);
189 GroupArgumentsLayout->addWidget(CheckBoxMesh, 1, 0, 1, 8);
190 GroupArgumentsLayout->addWidget(TextLabelVector, 2, 0);
191 GroupArgumentsLayout->addWidget(TextLabelDx, 2, 2);
192 GroupArgumentsLayout->addWidget(SpinBox_Dx, 2, 3);
193 GroupArgumentsLayout->addWidget(TextLabelDy, 2, 4);
194 GroupArgumentsLayout->addWidget(SpinBox_Dy, 2, 5);
195 GroupArgumentsLayout->addWidget(TextLabelDz, 2, 6);
196 GroupArgumentsLayout->addWidget(SpinBox_Dz, 2, 7);
197 GroupArgumentsLayout->addWidget(TextLabelNbSteps, 3, 0);
198 GroupArgumentsLayout->addWidget(SpinBox_NbSteps, 3, 2, 1, 6);
199 GroupArgumentsLayout->addWidget(MakeGroupsCheck, 4, 0, 1, 8);
201 /***************************************************************/
202 SMESHGUI_ExtrusionDlgLayout->addWidget(ConstructorsBox);
203 SMESHGUI_ExtrusionDlgLayout->addWidget(GroupArguments);
204 SMESHGUI_ExtrusionDlgLayout->addWidget(GroupButtons);
206 /* Initialisations */
207 SpinBox_Dx->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
208 SpinBox_Dy->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
209 SpinBox_Dz->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
211 SpinBox_NbSteps->setRange(1, 999999);
213 RadioButton1->setChecked(true);
214 MakeGroupsCheck->setChecked(true);
216 mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
218 mySMESHGUI->SetActiveDialogBox(this);
220 // Costruction of the logical filter for the elements: mesh/sub-mesh/group
221 SMESH_TypeFilter* aMeshOrSubMeshFilter = new SMESH_TypeFilter (MESHorSUBMESH);
222 SMESH_TypeFilter* aSmeshGroupFilter = new SMESH_TypeFilter (GROUP);
224 QList<SUIT_SelectionFilter*> aListOfFilters;
225 if (aMeshOrSubMeshFilter) aListOfFilters.append(aMeshOrSubMeshFilter);
226 if (aSmeshGroupFilter) aListOfFilters.append(aSmeshGroupFilter);
228 myMeshOrSubMeshOrGroupFilter =
229 new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
231 myHelpFileName = "extrusion_page.html";
235 /***************************************************************/
236 // signals and slots connections
237 connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
238 connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
239 connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply()));
240 connect(buttonHelp, SIGNAL(clicked()), this, SLOT(ClickOnHelp()));
242 // to update state of the Ok & Apply buttons
243 connect(SpinBox_Dx, SIGNAL(valueChanged(double)), SLOT(CheckIsEnable()));
244 connect(SpinBox_Dy, SIGNAL(valueChanged(double)), SLOT(CheckIsEnable()));
245 connect(SpinBox_Dz, SIGNAL(valueChanged(double)), SLOT(CheckIsEnable()));
247 connect(GroupConstructors, SIGNAL(buttonClicked(int)), SLOT(ConstructorsClicked(int)));
248 connect(SelectElementsButton, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
249 connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
250 connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
251 /* to close dialog if study change */
252 connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
253 connect(LineEditElements, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&)));
254 connect(CheckBoxMesh, SIGNAL(toggled(bool)), SLOT(onSelectMesh(bool)));
256 /***************************************************************/
258 ConstructorsClicked(0);
259 SelectionIntoArgument();
262 //=================================================================================
263 // function : ~SMESHGUI_ExtrusionDlg()
264 // purpose : destructor
265 //=================================================================================
266 SMESHGUI_ExtrusionDlg::~SMESHGUI_ExtrusionDlg()
270 //=================================================================================
272 // purpose : initialization
273 //=================================================================================
274 void SMESHGUI_ExtrusionDlg::Init (bool ResetControls)
278 LineEditElements->clear();
282 myMesh = SMESH::SMESH_Mesh::_nil();
285 SpinBox_NbSteps->setValue(1);
286 SpinBox_Dx->SetValue(0);
287 SpinBox_Dy->SetValue(0);
288 SpinBox_Dz->SetValue(0);
290 CheckBoxMesh->setChecked(false);
297 //=================================================================================
298 // function : CheckIsEnable()
299 // purpose : Check whether the Ok and Apply buttons should be enabled or not
300 //=================================================================================
301 void SMESHGUI_ExtrusionDlg::CheckIsEnable()
303 double aX = SpinBox_Dx->GetValue();
304 double aY = SpinBox_Dy->GetValue();
305 double aZ = SpinBox_Dz->GetValue();
306 double aModule = sqrt(aX*aX + aY*aY + aZ*aZ);
308 bool anIsEnable = myNbOkElements > 0 && aModule > 1.0E-38;
310 buttonOk->setEnabled(anIsEnable);
311 buttonApply->setEnabled(anIsEnable);
314 //=================================================================================
315 // function : ConstructorsClicked()
316 // purpose : Radio button management
317 //=================================================================================
318 void SMESHGUI_ExtrusionDlg::ConstructorsClicked (int constructorId)
320 disconnect(mySelectionMgr, 0, this, 0);
322 switch (constructorId) {
325 GroupArguments->setTitle(tr("EXTRUSION_1D"));
326 if (!CheckBoxMesh->isChecked())
328 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
329 aViewWindow->SetSelectionMode(EdgeSelection);
335 GroupArguments->setTitle(tr("EXTRUSION_2D"));
336 if (!CheckBoxMesh->isChecked())
338 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
339 aViewWindow->SetSelectionMode(FaceSelection);
345 myEditCurrentArgument = LineEditElements;
346 LineEditElements->setFocus();
348 if (CheckBoxMesh->isChecked())
351 connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
354 //=================================================================================
355 // function : ClickOnApply()
356 // purpose : Called when user presses <Apply> button
357 //=================================================================================
358 bool SMESHGUI_ExtrusionDlg::ClickOnApply()
360 if (mySMESHGUI->isActiveStudyLocked())
366 if (myNbOkElements) {
368 SMESH::DirStruct aVector;
369 aVector.PS.x = SpinBox_Dx->GetValue();
370 aVector.PS.y = SpinBox_Dy->GetValue();
371 aVector.PS.z = SpinBox_Dz->GetValue();
373 long aNbSteps = (long)SpinBox_NbSteps->value();
375 QStringList aParameters;
376 aParameters << SpinBox_Dx->text();
377 aParameters << SpinBox_Dy->text();
378 aParameters << SpinBox_Dz->text();
379 aParameters << SpinBox_NbSteps->text();
382 SUIT_OverrideCursor aWaitCursor;
383 SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
385 if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() )
386 SMESH::ListOfGroups_var groups =
387 aMeshEditor->ExtrusionSweepMakeGroups(myElementsId.inout(), aVector, aNbSteps);
389 aMeshEditor->ExtrusionSweep(myElementsId.inout(), aVector, aNbSteps);
391 myMesh->SetParameters( SMESHGUI::JoinObjectParameters(aParameters) );
397 if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() )
398 mySMESHGUI->updateObjBrowser(true); // new groups may appear
400 ConstructorsClicked(GetConstructorId());
401 SelectionIntoArgument();
406 //=================================================================================
407 // function : ClickOnOk()
408 // purpose : Called when user presses <OK> button
409 //=================================================================================
410 void SMESHGUI_ExtrusionDlg::ClickOnOk()
416 //=================================================================================
417 // function : ClickOnCancel()
418 // purpose : Called when dialog box is closed
419 //=================================================================================
420 void SMESHGUI_ExtrusionDlg::ClickOnCancel()
422 disconnect(mySelectionMgr, 0, this, 0);
423 mySelectionMgr->clearFilters();
424 //mySelectionMgr->clearSelected();
425 SMESH::SetPickable(); // ???
426 SMESH::SetPointRepresentation(false);
427 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
428 aViewWindow->SetSelectionMode(ActorSelection);
429 mySMESHGUI->ResetState();
433 //=================================================================================
434 // function : ClickOnHelp()
436 //=================================================================================
437 void SMESHGUI_ExtrusionDlg::ClickOnHelp()
439 LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
441 app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
445 platform = "winapplication";
447 platform = "application";
449 SUIT_MessageBox::warning(this, tr("WRN_WARNING"),
450 tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
451 arg(app->resourceMgr()->stringValue("ExternalBrowser",
453 arg(myHelpFileName));
457 //=================================================================================
458 // function : onTextChange()
460 //=================================================================================
461 void SMESHGUI_ExtrusionDlg::onTextChange (const QString& theNewText)
463 QLineEdit* send = (QLineEdit*)sender();
471 if (send == LineEditElements)
474 // hilight entered elements/nodes
476 if (!myIO.IsNull()) {
477 QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts);
479 if (send == LineEditElements)
481 SMDS_Mesh* aMesh = myActor ? myActor->GetObject()->GetMesh() : 0;
482 SMESH::ElementType SMESHType = GetConstructorId() ? SMESH::FACE : SMESH::EDGE;
483 SMDSAbs_ElementType SMDSType = GetConstructorId() ? SMDSAbs_Face: SMDSAbs_Edge;
485 myElementsId = new SMESH::long_array;
486 myElementsId->length( aListId.count() );
487 TColStd_MapOfInteger newIndices;
488 for (int i = 0; i < aListId.count(); i++) {
489 int id = aListId[ i ].toInt();
490 bool validId = false;
493 const SMDS_MeshElement * e = aMesh->FindElement( id );
494 validId = ( e && e->GetType() == SMDSType );
496 validId = ( myMesh->GetElementType( id, true ) == SMESHType );
499 if ( validId && newIndices.Add( id ))
500 myElementsId[ newIndices.Extent()-1 ] = id;
502 myElementsId->length( myNbOkElements = newIndices.Extent() );
503 mySelector->AddOrRemoveIndex(myIO, newIndices, false);
504 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
505 aViewWindow->highlight( myIO, true, true );
514 //=================================================================================
515 // function : SelectionIntoArgument()
516 // purpose : Called when selection as changed or other case
517 //=================================================================================
518 void SMESHGUI_ExtrusionDlg::SelectionIntoArgument()
522 // return if dialog box is inactive
523 if (!GroupButtons->isEnabled())
529 QString aString = "";
534 myEditCurrentArgument->setText(aString);
540 mySelectionMgr->selectedObjects(aList, SVTK_Viewer::Type());
541 int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
545 Handle(SALOME_InteractiveObject) IO = aList.First();
546 myMesh = SMESH::GetMeshByIO(IO);
547 if (myMesh->_is_nil())
550 myActor = SMESH::FindActorByObject(myMesh);
552 if (myEditCurrentArgument == LineEditElements) {
555 // MakeGroups is available if there are groups
556 if ( myMesh->NbGroups() == 0 ) {
557 MakeGroupsCheck->setChecked(false);
558 MakeGroupsCheck->setEnabled(false);
560 MakeGroupsCheck->setEnabled(true);
563 if (CheckBoxMesh->isChecked()) {
564 SMESH::ElementType neededType = GetConstructorId() ? SMESH::FACE : SMESH::EDGE;
566 SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
568 SMESH::SMESH_Mesh_var mesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO);
570 if (!mesh->_is_nil()) { //MESH
571 // get elements from mesh
572 myElementsId = mesh->GetElementsByType(neededType);
573 aNbElements = myElementsId->length();
575 SMESH::SMESH_subMesh_var aSubMesh =
576 SMESH::IObjectToInterface<SMESH::SMESH_subMesh>(IO);
578 if (!aSubMesh->_is_nil()) { //SUBMESH
579 // get IDs from submesh
580 myElementsId = aSubMesh->GetElementsByType(neededType);
581 aNbElements = myElementsId->length();
583 SMESH::SMESH_GroupBase_var aGroup =
584 SMESH::IObjectToInterface<SMESH::SMESH_GroupBase>(IO);
586 if (!aGroup->_is_nil() && aGroup->GetType() == neededType) { // GROUP
587 // get IDs from smesh group
588 myElementsId = aGroup->GetListOfID();
589 aNbElements = myElementsId->length();
594 // get indices of selcted elements
595 TColStd_IndexedMapOfInteger aMapIndex;
596 mySelector->GetIndex(IO,aMapIndex);
597 aNbElements = aMapIndex.Extent();
599 myElementsId = new SMESH::long_array;
600 myElementsId->length( aNbElements );
602 for ( int i = 0; i < aNbElements; ++i )
603 aString += QString(" %1").arg( myElementsId[ i ] = aMapIndex( i+1 ) );
609 myNbOkElements = true;
613 myEditCurrentArgument->setText(aString);
620 //=================================================================================
621 // function : SetEditCurrentArgument()
623 //=================================================================================
624 void SMESHGUI_ExtrusionDlg::SetEditCurrentArgument()
626 QPushButton* send = (QPushButton*)sender();
628 disconnect(mySelectionMgr, 0, this, 0);
629 mySelectionMgr->clearSelected();
630 mySelectionMgr->clearFilters();
632 if (send == SelectElementsButton) {
633 myEditCurrentArgument = LineEditElements;
634 if (CheckBoxMesh->isChecked()) {
635 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
636 aViewWindow->SetSelectionMode(ActorSelection);
637 mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter);
639 int aConstructorId = GetConstructorId();
640 if (aConstructorId == 0)
642 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
643 aViewWindow->SetSelectionMode(EdgeSelection);
645 else if (aConstructorId == 1)
647 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
648 aViewWindow->SetSelectionMode(FaceSelection);
653 myEditCurrentArgument->setFocus();
654 connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
655 SelectionIntoArgument();
658 //=================================================================================
659 // function : DeactivateActiveDialog()
660 // purpose : Deactivates this dialog
661 //=================================================================================
662 void SMESHGUI_ExtrusionDlg::DeactivateActiveDialog()
664 if (ConstructorsBox->isEnabled()) {
665 ConstructorsBox->setEnabled(false);
666 GroupArguments->setEnabled(false);
667 GroupButtons->setEnabled(false);
668 mySMESHGUI->ResetState();
669 mySMESHGUI->SetActiveDialogBox(0);
673 //=================================================================================
674 // function : ActivateThisDialog()
675 // purpose : Activates this dialog
676 //=================================================================================
677 void SMESHGUI_ExtrusionDlg::ActivateThisDialog()
679 // Emit a signal to deactivate the active dialog
680 mySMESHGUI->EmitSignalDeactivateDialog();
681 ConstructorsBox->setEnabled(true);
682 GroupArguments->setEnabled(true);
683 GroupButtons->setEnabled(true);
685 mySMESHGUI->SetActiveDialogBox(this);
687 ConstructorsClicked(GetConstructorId());
688 SelectionIntoArgument();
691 //=================================================================================
692 // function : enterEvent()
693 // purpose : Mouse enter event
694 //=================================================================================
695 void SMESHGUI_ExtrusionDlg::enterEvent (QEvent*)
697 if (!ConstructorsBox->isEnabled())
698 ActivateThisDialog();
701 //=================================================================================
702 // function : onSelectMesh()
704 //=================================================================================
705 void SMESHGUI_ExtrusionDlg::onSelectMesh (bool toSelectMesh)
708 TextLabelElements->setText(tr("SMESH_NAME"));
710 TextLabelElements->setText(tr("SMESH_ID_ELEMENTS"));
712 if (myEditCurrentArgument != LineEditElements) {
713 LineEditElements->clear();
717 mySelectionMgr->clearFilters();
720 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
721 aViewWindow->SetSelectionMode(ActorSelection);
722 mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter);
723 LineEditElements->setReadOnly(true);
724 LineEditElements->setValidator(0);
726 int aConstructorId = GetConstructorId();
727 if (aConstructorId == 0)
729 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
730 aViewWindow->SetSelectionMode(EdgeSelection);
732 else if (aConstructorId == 0)
734 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
735 aViewWindow->SetSelectionMode(FaceSelection);
738 LineEditElements->setReadOnly(false);
739 LineEditElements->setValidator(myIdValidator);
740 onTextChange(LineEditElements->text());
743 SelectionIntoArgument();
746 //=================================================================================
747 // function : GetConstructorId()
749 //=================================================================================
750 int SMESHGUI_ExtrusionDlg::GetConstructorId()
752 return GroupConstructors->checkedId();
755 //=================================================================================
756 // function : keyPressEvent()
758 //=================================================================================
759 void SMESHGUI_ExtrusionDlg::keyPressEvent( QKeyEvent* e )
761 QDialog::keyPressEvent( e );
762 if ( e->isAccepted() )
765 if ( e->key() == Qt::Key_F1 ) {
771 //=================================================================================
772 // function : isValid
774 //=================================================================================
775 bool SMESHGUI_ExtrusionDlg::isValid()
779 ok = SpinBox_Dx->isValid( msg, true ) && ok;
780 ok = SpinBox_Dy->isValid( msg, true ) && ok;
781 ok = SpinBox_Dz->isValid( msg, true ) && ok;
782 ok = SpinBox_NbSteps->isValid( msg, true ) && ok;
785 QString str( tr( "SMESH_INCORRECT_INPUT" ) );
786 if ( !msg.isEmpty() )
788 SUIT_MessageBox::critical( this, tr( "SMESH_ERROR" ), str );