1 // Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 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 // SMESH SMESHGUI : GUI for SMESH component
23 // File : SMESHGUI_RenumberingDlg.cxx
24 // Author : Nicolas REJNERI
28 #include "SMESHGUI_RenumberingDlg.h"
31 #include "SMESHGUI_Utils.h"
32 #include "SMESHGUI_VTKUtils.h"
34 #include "SMESH_Actor.h"
35 #include "SMESH_TypeFilter.hxx"
36 #include "SMDS_Mesh.hxx"
38 #include "SUIT_Desktop.h"
39 #include "SUIT_Session.h"
40 #include "SUIT_MessageBox.h"
42 #include "LightApp_Application.h"
44 #include "SALOME_ListIO.hxx"
46 #include "utilities.h"
49 #include <qapplication.h>
50 #include <qbuttongroup.h>
51 #include <qgroupbox.h>
53 #include <qlineedit.h>
54 #include <qpushbutton.h>
55 #include <qradiobutton.h>
61 #include CORBA_SERVER_HEADER(SMESH_MeshEditor)
63 //=================================================================================
64 // class : SMESHGUI_RenumberingDlg()
66 //=================================================================================
67 SMESHGUI_RenumberingDlg::SMESHGUI_RenumberingDlg( SMESHGUI* theModule, const char* name,
68 const int unit, bool modal, WFlags fl)
69 : QDialog( SMESH::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder |
70 WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose),
71 mySMESHGUI( theModule ),
72 mySelectionMgr( SMESH::GetSelectionMgr( theModule ) )
77 setName("SMESHGUI_RenumberingDlg");
81 QPixmap image1(SUIT_Session::session()->resourceMgr()->loadPixmap("SMESH",tr("ICON_SELECT")));
84 image0 = QPixmap(SUIT_Session::session()->resourceMgr()->loadPixmap("SMESH",tr("ICON_DLG_RENUMBERING_NODES")));
85 setCaption(tr("SMESH_RENUMBERING_NODES_TITLE" ));
88 image0 = QPixmap(SUIT_Session::session()->resourceMgr()->loadPixmap("SMESH",tr("ICON_DLG_RENUMBERING_ELEMENTS")));
89 setCaption(tr("SMESH_RENUMBERING_ELEMENTS_TITLE" ));
92 setSizeGripEnabled(TRUE);
93 SMESHGUI_RenumberingDlgLayout = new QGridLayout(this);
94 SMESHGUI_RenumberingDlgLayout->setSpacing(6);
95 SMESHGUI_RenumberingDlgLayout->setMargin(11);
97 /***************************************************************/
98 GroupConstructors = new QButtonGroup(this, "GroupConstructors");
100 GroupConstructors->setTitle(tr("SMESH_NODES" ));
101 myHelpFileName = "renumbering_nodes_and_elements_page.html#renumbering_nodes_anchor";
103 else if (unit == 1) {
104 GroupConstructors->setTitle(tr("SMESH_ELEMENTS" ));
105 myHelpFileName = "renumbering_nodes_and_elements_page.html#renumbering_elements_anchor";
107 GroupConstructors->setExclusive(TRUE);
108 GroupConstructors->setColumnLayout(0, Qt::Vertical);
109 GroupConstructors->layout()->setSpacing(0);
110 GroupConstructors->layout()->setMargin(0);
111 GroupConstructorsLayout = new QGridLayout(GroupConstructors->layout());
112 GroupConstructorsLayout->setAlignment(Qt::AlignTop);
113 GroupConstructorsLayout->setSpacing(6);
114 GroupConstructorsLayout->setMargin(11);
115 Constructor1 = new QRadioButton(GroupConstructors, "Constructor1");
116 Constructor1->setText(tr("" ));
117 Constructor1->setPixmap(image0);
118 Constructor1->setChecked(TRUE);
119 Constructor1->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)1, (QSizePolicy::SizeType)0, Constructor1->sizePolicy().hasHeightForWidth()));
120 Constructor1->setMinimumSize(QSize(50, 0));
121 GroupConstructorsLayout->addWidget(Constructor1, 0, 0);
122 QSpacerItem* spacer = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
123 GroupConstructorsLayout->addItem(spacer, 0, 1);
124 SMESHGUI_RenumberingDlgLayout->addWidget(GroupConstructors, 0, 0);
126 /***************************************************************/
127 GroupButtons = new QGroupBox(this, "GroupButtons");
128 GroupButtons->setGeometry(QRect(10, 10, 281, 48));
129 GroupButtons->setTitle(tr("" ));
130 GroupButtons->setColumnLayout(0, Qt::Vertical);
131 GroupButtons->layout()->setSpacing(0);
132 GroupButtons->layout()->setMargin(0);
133 GroupButtonsLayout = new QGridLayout(GroupButtons->layout());
134 GroupButtonsLayout->setAlignment(Qt::AlignTop);
135 GroupButtonsLayout->setSpacing(6);
136 GroupButtonsLayout->setMargin(11);
137 buttonHelp = new QPushButton(GroupButtons, "buttonHelp");
138 buttonHelp->setText(tr("SMESH_BUT_HELP" ));
139 buttonHelp->setAutoDefault(TRUE);
140 GroupButtonsLayout->addWidget(buttonHelp, 0, 4);
141 buttonCancel = new QPushButton(GroupButtons, "buttonCancel");
142 buttonCancel->setText(tr("SMESH_BUT_CLOSE" ));
143 buttonCancel->setAutoDefault(TRUE);
144 GroupButtonsLayout->addWidget(buttonCancel, 0, 3);
145 buttonApply = new QPushButton(GroupButtons, "buttonApply");
146 buttonApply->setText(tr("SMESH_BUT_APPLY" ));
147 buttonApply->setAutoDefault(TRUE);
148 GroupButtonsLayout->addWidget(buttonApply, 0, 1);
149 QSpacerItem* spacer_9 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
150 GroupButtonsLayout->addItem(spacer_9, 0, 2);
151 buttonOk = new QPushButton(GroupButtons, "buttonOk");
152 buttonOk->setText(tr("SMESH_BUT_APPLY_AND_CLOSE" ));
153 buttonOk->setAutoDefault(TRUE);
154 buttonOk->setDefault(TRUE);
155 GroupButtonsLayout->addWidget(buttonOk, 0, 0);
156 SMESHGUI_RenumberingDlgLayout->addWidget(GroupButtons, 2, 0);
158 /***************************************************************/
159 GroupMesh = new QGroupBox(this, "GroupMesh");
160 GroupMesh->setTitle(tr("SMESH_RENUMBERING" ));
161 GroupMesh->setMinimumSize(QSize(0, 0));
162 GroupMesh->setFrameShape(QGroupBox::Box);
163 GroupMesh->setFrameShadow(QGroupBox::Sunken);
164 GroupMesh->setColumnLayout(0, Qt::Vertical);
165 GroupMesh->layout()->setSpacing(0);
166 GroupMesh->layout()->setMargin(0);
167 GroupMeshLayout = new QGridLayout(GroupMesh->layout());
168 GroupMeshLayout->setAlignment(Qt::AlignTop);
169 GroupMeshLayout->setSpacing(6);
170 GroupMeshLayout->setMargin(11);
171 TextLabelMesh = new QLabel(GroupMesh, "TextLabelMesh");
172 TextLabelMesh->setText(tr("SMESH_MESH"));
173 TextLabelMesh->setMinimumSize(QSize(50, 0));
174 TextLabelMesh->setFrameShape(QLabel::NoFrame);
175 TextLabelMesh->setFrameShadow(QLabel::Plain);
176 GroupMeshLayout->addWidget(TextLabelMesh, 0, 0);
177 SelectButton = new QPushButton(GroupMesh, "SelectButton");
178 SelectButton->setText(tr("" ));
179 SelectButton->setPixmap(image1);
180 SelectButton->setToggleButton(FALSE);
181 GroupMeshLayout->addWidget(SelectButton, 0, 1);
182 LineEditMesh = new QLineEdit(GroupMesh, "LineEditMesh");
183 LineEditMesh->setReadOnly(true);
184 GroupMeshLayout->addWidget(LineEditMesh, 0, 2);
185 SMESHGUI_RenumberingDlgLayout->addWidget(GroupMesh, 1, 0);
187 Init(); /* Initialisations */
190 //=================================================================================
191 // function : ~SMESHGUI_RenumberingDlg()
192 // purpose : Destroys the object and frees any allocated resources
193 //=================================================================================
194 SMESHGUI_RenumberingDlg::~SMESHGUI_RenumberingDlg()
196 // no need to delete child widgets, Qt does it all for us
199 //=================================================================================
202 //=================================================================================
203 void SMESHGUI_RenumberingDlg::Init()
207 Constructor1->setChecked(TRUE);
208 mySMESHGUI->SetActiveDialogBox((QDialog*)this);
210 myMesh = SMESH::SMESH_Mesh::_nil();
212 myMeshFilter = new SMESH_TypeFilter (MESH);
214 /* signals and slots connections */
215 connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
216 connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
217 connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply()));
218 connect(buttonHelp, SIGNAL(clicked()), this, SLOT(ClickOnHelp()));
219 connect(GroupConstructors, SIGNAL(clicked(int)), SLOT(ConstructorsClicked(int)));
221 connect(SelectButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument()));
222 connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
223 connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
224 /* to close dialog if study change */
225 connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
227 this->show(); /* displays Dialog */
229 myEditCurrentArgument = LineEditMesh;
230 LineEditMesh->setFocus();
231 mySelectionMgr->clearFilters();
232 mySelectionMgr->installFilter(myMeshFilter);
234 SelectionIntoArgument();
237 //=================================================================================
238 // function : ConstructorsClicked()
239 // purpose : Radio button management
240 //=================================================================================
241 void SMESHGUI_RenumberingDlg::ConstructorsClicked (int)
245 //=================================================================================
246 // function : ClickOnApply()
248 //=================================================================================
249 void SMESHGUI_RenumberingDlg::ClickOnApply()
251 if (mySMESHGUI->isActiveStudyLocked())
254 if (!myMesh->_is_nil())
258 SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
259 SMESH_Actor* anActor = SMESH::FindActorByObject(myMesh);
260 bool isUnitsLabeled = false;
262 if (myUnit == 0 && anActor) {
263 isUnitsLabeled = anActor->GetPointsLabeled();
264 if (isUnitsLabeled) anActor->SetPointsLabeled(false);
266 else if (myUnit == 1 && anActor) {
267 isUnitsLabeled = anActor->GetCellsLabeled();
268 if (isUnitsLabeled) anActor->SetCellsLabeled(false);
271 QApplication::setOverrideCursor(Qt::waitCursor);
273 aMeshEditor->RenumberNodes();
274 if (isUnitsLabeled && anActor) anActor->SetPointsLabeled(true);
276 else if (myUnit == 1) {
277 aMeshEditor->RenumberElements();
278 if (isUnitsLabeled && anActor) anActor->SetCellsLabeled(true);
280 QApplication::restoreOverrideCursor();
286 //mySelectionMgr->clearSelected();
291 //=================================================================================
292 // function : ClickOnOk()
294 //=================================================================================
295 void SMESHGUI_RenumberingDlg::ClickOnOk()
301 //=================================================================================
302 // function : ClickOnCancel()
304 //=================================================================================
305 void SMESHGUI_RenumberingDlg::ClickOnCancel()
307 //mySelectionMgr->clearSelected();
308 mySelectionMgr->clearFilters();
309 disconnect(mySelectionMgr, 0, this, 0);
310 mySMESHGUI->ResetState();
314 //=================================================================================
315 // function : ClickOnHelp()
317 //=================================================================================
318 void SMESHGUI_RenumberingDlg::ClickOnHelp()
320 LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
322 app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
326 platform = "winapplication";
328 platform = "application";
330 SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
331 QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
332 arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
333 QObject::tr("BUT_OK"));
337 //=================================================================================
338 // function : SelectionIntoArgument()
339 // purpose : Called when selection as changed or other case
340 //=================================================================================
341 void SMESHGUI_RenumberingDlg::SelectionIntoArgument()
343 if (!GroupButtons->isEnabled()) // inactive
346 QString aString = "";
349 mySelectionMgr->selectedObjects(aList);
350 int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
352 if (myEditCurrentArgument == LineEditMesh) {
355 myMesh = SMESH::SMESH_Mesh::_nil();
358 Handle(SALOME_InteractiveObject) IO = aList.First();
359 myMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO);
360 if (myMesh->_is_nil())
365 myEditCurrentArgument->setText(aString);
367 bool isEnabled = (!myMesh->_is_nil());
368 buttonOk->setEnabled(isEnabled);
369 buttonApply->setEnabled(isEnabled);
372 //=================================================================================
373 // function : SetEditCurrentArgument()
375 //=================================================================================
376 void SMESHGUI_RenumberingDlg::SetEditCurrentArgument()
378 QPushButton* send = (QPushButton*)sender();
379 switch (myConstructorId)
381 case 0: /* default constructor */
383 if(send == SelectButton) {
384 LineEditMesh->setFocus();
385 myEditCurrentArgument = LineEditMesh;
387 SelectionIntoArgument();
393 //=================================================================================
394 // function : DeactivateActiveDialog()
396 //=================================================================================
397 void SMESHGUI_RenumberingDlg::DeactivateActiveDialog()
399 if (GroupConstructors->isEnabled()) {
400 GroupConstructors->setEnabled(false);
401 GroupMesh->setEnabled(false);
402 GroupButtons->setEnabled(false);
403 mySMESHGUI->ResetState();
404 mySMESHGUI->SetActiveDialogBox(0);
408 //=================================================================================
409 // function : ActivateThisDialog()
411 //=================================================================================
412 void SMESHGUI_RenumberingDlg::ActivateThisDialog()
414 /* Emit a signal to deactivate the active dialog */
415 mySMESHGUI->EmitSignalDeactivateDialog();
416 GroupConstructors->setEnabled(true);
417 GroupMesh->setEnabled(true);
418 GroupButtons->setEnabled(true);
420 mySMESHGUI->SetActiveDialogBox((QDialog*)this);
421 SelectionIntoArgument();
424 //=================================================================================
425 // function : enterEvent()
427 //=================================================================================
428 void SMESHGUI_RenumberingDlg::enterEvent(QEvent* e)
430 if (GroupConstructors->isEnabled())
432 ActivateThisDialog();
435 //=================================================================================
436 // function : closeEvent()
438 //=================================================================================
439 void SMESHGUI_RenumberingDlg::closeEvent(QCloseEvent* e)
441 /* same than click on cancel button */
442 this->ClickOnCancel();
445 //=======================================================================
446 //function : hideEvent
447 //purpose : caused by ESC key
448 //=======================================================================
449 void SMESHGUI_RenumberingDlg::hideEvent (QHideEvent * e)
455 //=================================================================================
456 // function : keyPressEvent()
458 //=================================================================================
459 void SMESHGUI_RenumberingDlg::keyPressEvent( QKeyEvent* e )
461 QDialog::keyPressEvent( e );
462 if ( e->isAccepted() )
465 if ( e->key() == Key_F1 )