1 // Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either
7 // version 2.1 of the License.
9 // This library is distributed in the hope that it will be useful
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // Lesser General Public License for more details.
14 // You should have received a copy of the GNU Lesser General Public
15 // License along with this library; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 // See http://www.salome-platform.org/
21 #include "SMESHGUI_EditMeshDlg.h"
24 #include "SMESHGUI_Utils.h"
25 #include "SMESHGUI_VTKUtils.h"
27 #include "SMESH_TypeFilter.hxx"
29 #include "SUIT_Desktop.h"
30 #include "SUIT_Session.h"
31 #include "SUIT_MessageBox.h"
33 #include "LightApp_Application.h"
35 #include "SALOME_ListIO.hxx"
37 #include "utilities.h"
40 #include <qapplication.h>
41 #include <qbuttongroup.h>
42 #include <qgroupbox.h>
44 #include <qlineedit.h>
45 #include <qpushbutton.h>
46 #include <qradiobutton.h>
50 //=================================================================================
51 // class : SMESHGUI_EditMeshDlg()
53 //=================================================================================
54 SMESHGUI_EditMeshDlg::SMESHGUI_EditMeshDlg (SMESHGUI* theModule,
55 const char* title, const char* icon,
57 : QDialog(SMESH::GetDesktop(theModule), "SMESHGUI_EditMeshDlg", false, WStyle_Customize |
58 WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose),
59 mySMESHGUI(theModule),
60 mySelectionMgr(SMESH::GetSelectionMgr(theModule)),
64 setCaption(tr(title));
66 SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
67 QPixmap image0 (aResMgr->loadPixmap("SMESH", tr(icon)));
68 QPixmap image1 (aResMgr->loadPixmap("SMESH", tr("ICON_SELECT")));
70 setSizeGripEnabled(TRUE);
71 DlgLayout = new QGridLayout (this);
72 DlgLayout->setSpacing(6);
73 DlgLayout->setMargin(11);
75 /***************************************************************/
76 GroupConstructors = new QButtonGroup (this, "GroupConstructors");
77 GroupConstructors->setExclusive(TRUE);
78 GroupConstructors->setColumnLayout(0, Qt::Vertical);
79 GroupConstructors->layout()->setSpacing(0);
80 GroupConstructors->layout()->setMargin(0);
81 GroupConstructorsLayout = new QGridLayout (GroupConstructors->layout());
82 GroupConstructorsLayout->setAlignment(Qt::AlignTop);
83 GroupConstructorsLayout->setSpacing(6);
84 GroupConstructorsLayout->setMargin(11);
85 Constructor1 = new QRadioButton (GroupConstructors, "Constructor1");
86 Constructor1->setText(tr(""));
87 Constructor1->setPixmap(image0);
88 Constructor1->setChecked(TRUE);
89 Constructor1->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)1,
90 (QSizePolicy::SizeType)0,
91 Constructor1->sizePolicy().hasHeightForWidth()));
92 Constructor1->setMinimumSize(QSize(50, 0));
93 GroupConstructorsLayout->addWidget(Constructor1, 0, 0);
94 QSpacerItem* spacer = new QSpacerItem (20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
95 GroupConstructorsLayout->addItem(spacer, 0, 1);
96 DlgLayout->addWidget(GroupConstructors, 0, 0);
98 /***************************************************************/
99 GroupButtons = new QGroupBox (this, "GroupButtons");
100 GroupButtons->setGeometry(QRect(10, 10, 281, 48));
101 GroupButtons->setTitle(tr("" ));
102 GroupButtons->setColumnLayout(0, Qt::Vertical);
103 GroupButtons->layout()->setSpacing(0);
104 GroupButtons->layout()->setMargin(0);
105 GroupButtonsLayout = new QGridLayout (GroupButtons->layout());
106 GroupButtonsLayout->setAlignment(Qt::AlignTop);
107 GroupButtonsLayout->setSpacing(6);
108 GroupButtonsLayout->setMargin(11);
109 buttonHelp = new QPushButton(GroupButtons, "buttonHelp");
110 buttonHelp->setText(tr("SMESH_BUT_HELP" ));
111 buttonHelp->setAutoDefault(TRUE);
112 GroupButtonsLayout->addWidget(buttonHelp, 0, 4);
113 buttonCancel = new QPushButton (GroupButtons, "buttonCancel");
114 buttonCancel->setText(tr("SMESH_BUT_CLOSE" ));
115 buttonCancel->setAutoDefault(TRUE);
116 GroupButtonsLayout->addWidget(buttonCancel, 0, 3);
117 buttonApply = new QPushButton (GroupButtons, "buttonApply");
118 buttonApply->setText(tr("SMESH_BUT_APPLY" ));
119 buttonApply->setAutoDefault(TRUE);
120 GroupButtonsLayout->addWidget(buttonApply, 0, 1);
121 QSpacerItem* spacer_9 = new QSpacerItem (20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
122 GroupButtonsLayout->addItem(spacer_9, 0, 2);
123 buttonOk = new QPushButton (GroupButtons, "buttonOk");
124 buttonOk->setText(tr("SMESH_BUT_OK" ));
125 buttonOk->setAutoDefault(TRUE);
126 buttonOk->setDefault(TRUE);
127 GroupButtonsLayout->addWidget(buttonOk, 0, 0);
128 DlgLayout->addWidget(GroupButtons, 2, 0);
130 /***************************************************************/
131 GroupMesh = new QGroupBox (this, "GroupMesh");
132 GroupMesh->setTitle(tr("SMESH_MESH" ));
133 GroupMesh->setMinimumSize(QSize(0, 0));
134 GroupMesh->setFrameShape(QGroupBox::Box);
135 GroupMesh->setFrameShadow(QGroupBox::Sunken);
136 GroupMesh->setColumnLayout(0, Qt::Vertical);
137 GroupMesh->layout()->setSpacing(0);
138 GroupMesh->layout()->setMargin(0);
139 GroupMeshLayout = new QGridLayout (GroupMesh->layout());
140 GroupMeshLayout->setAlignment(Qt::AlignTop);
141 GroupMeshLayout->setSpacing(6);
142 GroupMeshLayout->setMargin(11);
143 TextLabelMesh = new QLabel (GroupMesh, "TextLabelMesh");
144 TextLabelMesh->setText(tr("SMESH_MESH"));
145 TextLabelMesh->setMinimumSize(QSize(50, 0));
146 TextLabelMesh->setFrameShape(QLabel::NoFrame);
147 TextLabelMesh->setFrameShadow(QLabel::Plain);
148 GroupMeshLayout->addWidget(TextLabelMesh, 0, 0);
149 SelectButton = new QPushButton (GroupMesh, "SelectButton");
150 SelectButton->setText(tr(""));
151 SelectButton->setPixmap(image1);
152 SelectButton->setToggleButton(FALSE);
153 GroupMeshLayout->addWidget(SelectButton, 0, 1);
154 LineEditMesh = new QLineEdit (GroupMesh, "LineEditMesh");
155 LineEditMesh->setReadOnly(true);
156 GroupMeshLayout->addWidget(LineEditMesh, 0, 2);
157 DlgLayout->addWidget(GroupMesh, 1, 0);
159 myHelpFileName = "/files/merging_nodes.htm";// merging_elements.htm
161 Init(); // Initialisations
164 //=================================================================================
165 // function : ~SMESHGUI_EditMeshDlg()
166 // purpose : Destroys the object and frees any allocated resources
167 //=================================================================================
168 SMESHGUI_EditMeshDlg::~SMESHGUI_EditMeshDlg()
170 // no need to delete child widgets, Qt does it all for us
173 //=================================================================================
176 //=================================================================================
177 void SMESHGUI_EditMeshDlg::Init()
180 mySMESHGUI->SetActiveDialogBox((QDialog*)this);
182 myMesh = SMESH::SMESH_Mesh::_nil();
184 myMeshFilter = new SMESH_TypeFilter (MESH);
186 // signals and slots connections
187 connect(buttonOk , SIGNAL(clicked()), this, SLOT(ClickOnOk()));
188 connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
189 connect(buttonApply , SIGNAL(clicked()), this, SLOT(ClickOnApply()));
190 connect(buttonHelp, SIGNAL(clicked()), this, SLOT(ClickOnHelp()));
192 connect(SelectButton, SIGNAL(clicked()), this, SLOT(SelectionIntoArgument()));
194 connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
196 connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
197 connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()) , this, SLOT(ClickOnCancel()));
199 this->show(); // displays Dialog
201 LineEditMesh->setFocus();
202 mySelectionMgr->clearFilters();
203 mySelectionMgr->installFilter(myMeshFilter);
205 SelectionIntoArgument();
208 //=================================================================================
209 // function : ClickOnApply()
211 //=================================================================================
212 void SMESHGUI_EditMeshDlg::ClickOnApply()
214 if (!myMesh->_is_nil()) {
216 QApplication::setOverrideCursor(Qt::waitCursor);
219 SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
220 aMeshEditor->MergeEqualElements();
223 QApplication::restoreOverrideCursor();
227 //mySelectionMgr->clearSelected();
232 //=================================================================================
233 // function : ClickOnOk()
235 //=================================================================================
236 void SMESHGUI_EditMeshDlg::ClickOnOk()
242 //=================================================================================
243 // function : ClickOnCancel()
245 //=================================================================================
246 void SMESHGUI_EditMeshDlg::ClickOnCancel()
248 //mySelectionMgr->clearSelected();
249 mySelectionMgr->clearFilters();
250 disconnect(mySelectionMgr, 0, this, 0);
251 mySMESHGUI->ResetState();
255 //=================================================================================
256 // function : ClickOnHelp()
258 //=================================================================================
259 void SMESHGUI_EditMeshDlg::ClickOnHelp()
261 LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
263 app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
265 SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
266 QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
267 arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
268 QObject::tr("BUT_OK"));
272 //=================================================================================
273 // function : SelectionIntoArgument()
274 // purpose : Called when selection as changed or other case
275 //=================================================================================
276 void SMESHGUI_EditMeshDlg::SelectionIntoArgument()
278 if (!GroupButtons->isEnabled()) // inactive
281 QString aString = "";
284 mySelectionMgr->selectedObjects(aList);
285 int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
289 myMesh = SMESH::SMESH_Mesh::_nil();
292 Handle(SALOME_InteractiveObject) IO = aList.First();
293 myMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO);
294 if (myMesh->_is_nil())
298 LineEditMesh->setText(aString);
300 bool isEnabled = (!myMesh->_is_nil());
301 buttonOk->setEnabled(isEnabled);
302 buttonApply->setEnabled(isEnabled);
305 //=================================================================================
306 // function : DeactivateActiveDialog()
308 //=================================================================================
309 void SMESHGUI_EditMeshDlg::DeactivateActiveDialog()
311 if (GroupConstructors->isEnabled()) {
312 GroupConstructors->setEnabled(false);
313 GroupMesh->setEnabled(false);
314 GroupButtons->setEnabled(false);
315 mySMESHGUI->ResetState();
316 mySMESHGUI->SetActiveDialogBox(0);
320 //=================================================================================
321 // function : ActivateThisDialog()
323 //=================================================================================
324 void SMESHGUI_EditMeshDlg::ActivateThisDialog()
326 /* Emit a signal to deactivate the active dialog */
327 mySMESHGUI->EmitSignalDeactivateDialog();
328 GroupConstructors->setEnabled(true);
329 GroupMesh->setEnabled(true);
330 GroupButtons->setEnabled(true);
332 mySMESHGUI->SetActiveDialogBox((QDialog*)this);
333 SelectionIntoArgument();
336 //=================================================================================
337 // function : enterEvent()
339 //=================================================================================
340 void SMESHGUI_EditMeshDlg::enterEvent(QEvent* e)
342 if (GroupConstructors->isEnabled())
344 ActivateThisDialog();
347 //=================================================================================
348 // function : closeEvent()
350 //=================================================================================
351 void SMESHGUI_EditMeshDlg::closeEvent(QCloseEvent* e)
353 /* same than click on cancel button */
354 this->ClickOnCancel();
357 //=======================================================================
358 //function : hideEvent
359 //purpose : caused by ESC key
360 //=======================================================================
361 void SMESHGUI_EditMeshDlg::hideEvent (QHideEvent * e)