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/ or email : webmaster.salome@opencascade.com
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"
39 #include CORBA_SERVER_HEADER(SMESH_MeshEditor)
42 #include <qapplication.h>
43 #include <qbuttongroup.h>
44 #include <qgroupbox.h>
46 #include <qlineedit.h>
47 #include <qpushbutton.h>
48 #include <qradiobutton.h>
52 //=================================================================================
53 // class : SMESHGUI_EditMeshDlg()
55 //=================================================================================
56 SMESHGUI_EditMeshDlg::SMESHGUI_EditMeshDlg (SMESHGUI* theModule,
57 const char* title, const char* icon,
59 : QDialog(SMESH::GetDesktop(theModule), "SMESHGUI_EditMeshDlg", false, WStyle_Customize |
60 WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose),
61 mySMESHGUI(theModule),
62 mySelectionMgr(SMESH::GetSelectionMgr(theModule)),
66 setCaption(tr(title));
68 SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
69 QPixmap image0 (aResMgr->loadPixmap("SMESH", tr(icon)));
70 QPixmap image1 (aResMgr->loadPixmap("SMESH", tr("ICON_SELECT")));
72 setSizeGripEnabled(TRUE);
73 DlgLayout = new QGridLayout (this);
74 DlgLayout->setSpacing(6);
75 DlgLayout->setMargin(11);
77 /***************************************************************/
78 GroupConstructors = new QButtonGroup (this, "GroupConstructors");
79 GroupConstructors->setExclusive(TRUE);
80 GroupConstructors->setColumnLayout(0, Qt::Vertical);
81 GroupConstructors->layout()->setSpacing(0);
82 GroupConstructors->layout()->setMargin(0);
83 GroupConstructorsLayout = new QGridLayout (GroupConstructors->layout());
84 GroupConstructorsLayout->setAlignment(Qt::AlignTop);
85 GroupConstructorsLayout->setSpacing(6);
86 GroupConstructorsLayout->setMargin(11);
87 Constructor1 = new QRadioButton (GroupConstructors, "Constructor1");
88 Constructor1->setText(tr(""));
89 Constructor1->setPixmap(image0);
90 Constructor1->setChecked(TRUE);
91 Constructor1->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)1,
92 (QSizePolicy::SizeType)0,
93 Constructor1->sizePolicy().hasHeightForWidth()));
94 Constructor1->setMinimumSize(QSize(50, 0));
95 GroupConstructorsLayout->addWidget(Constructor1, 0, 0);
96 QSpacerItem* spacer = new QSpacerItem (20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
97 GroupConstructorsLayout->addItem(spacer, 0, 1);
98 DlgLayout->addWidget(GroupConstructors, 0, 0);
100 /***************************************************************/
101 GroupButtons = new QGroupBox (this, "GroupButtons");
102 GroupButtons->setGeometry(QRect(10, 10, 281, 48));
103 GroupButtons->setTitle(tr("" ));
104 GroupButtons->setColumnLayout(0, Qt::Vertical);
105 GroupButtons->layout()->setSpacing(0);
106 GroupButtons->layout()->setMargin(0);
107 GroupButtonsLayout = new QGridLayout (GroupButtons->layout());
108 GroupButtonsLayout->setAlignment(Qt::AlignTop);
109 GroupButtonsLayout->setSpacing(6);
110 GroupButtonsLayout->setMargin(11);
111 buttonHelp = new QPushButton(GroupButtons, "buttonHelp");
112 buttonHelp->setText(tr("SMESH_BUT_HELP" ));
113 buttonHelp->setAutoDefault(TRUE);
114 GroupButtonsLayout->addWidget(buttonHelp, 0, 4);
115 buttonCancel = new QPushButton (GroupButtons, "buttonCancel");
116 buttonCancel->setText(tr("SMESH_BUT_CLOSE" ));
117 buttonCancel->setAutoDefault(TRUE);
118 GroupButtonsLayout->addWidget(buttonCancel, 0, 3);
119 buttonApply = new QPushButton (GroupButtons, "buttonApply");
120 buttonApply->setText(tr("SMESH_BUT_APPLY" ));
121 buttonApply->setAutoDefault(TRUE);
122 GroupButtonsLayout->addWidget(buttonApply, 0, 1);
123 QSpacerItem* spacer_9 = new QSpacerItem (20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
124 GroupButtonsLayout->addItem(spacer_9, 0, 2);
125 buttonOk = new QPushButton (GroupButtons, "buttonOk");
126 buttonOk->setText(tr("SMESH_BUT_OK" ));
127 buttonOk->setAutoDefault(TRUE);
128 buttonOk->setDefault(TRUE);
129 GroupButtonsLayout->addWidget(buttonOk, 0, 0);
130 DlgLayout->addWidget(GroupButtons, 2, 0);
132 /***************************************************************/
133 GroupMesh = new QGroupBox (this, "GroupMesh");
134 GroupMesh->setTitle(tr("SMESH_MESH" ));
135 GroupMesh->setMinimumSize(QSize(0, 0));
136 GroupMesh->setFrameShape(QGroupBox::Box);
137 GroupMesh->setFrameShadow(QGroupBox::Sunken);
138 GroupMesh->setColumnLayout(0, Qt::Vertical);
139 GroupMesh->layout()->setSpacing(0);
140 GroupMesh->layout()->setMargin(0);
141 GroupMeshLayout = new QGridLayout (GroupMesh->layout());
142 GroupMeshLayout->setAlignment(Qt::AlignTop);
143 GroupMeshLayout->setSpacing(6);
144 GroupMeshLayout->setMargin(11);
145 TextLabelMesh = new QLabel (GroupMesh, "TextLabelMesh");
146 TextLabelMesh->setText(tr("SMESH_MESH"));
147 TextLabelMesh->setMinimumSize(QSize(50, 0));
148 TextLabelMesh->setFrameShape(QLabel::NoFrame);
149 TextLabelMesh->setFrameShadow(QLabel::Plain);
150 GroupMeshLayout->addWidget(TextLabelMesh, 0, 0);
151 SelectButton = new QPushButton (GroupMesh, "SelectButton");
152 SelectButton->setText(tr(""));
153 SelectButton->setPixmap(image1);
154 SelectButton->setToggleButton(FALSE);
155 GroupMeshLayout->addWidget(SelectButton, 0, 1);
156 LineEditMesh = new QLineEdit (GroupMesh, "LineEditMesh");
157 LineEditMesh->setReadOnly(true);
158 GroupMeshLayout->addWidget(LineEditMesh, 0, 2);
159 DlgLayout->addWidget(GroupMesh, 1, 0);
161 myHelpFileName = "merge_elements.htm";
163 Init(); // Initialisations
166 //=================================================================================
167 // function : ~SMESHGUI_EditMeshDlg()
168 // purpose : Destroys the object and frees any allocated resources
169 //=================================================================================
170 SMESHGUI_EditMeshDlg::~SMESHGUI_EditMeshDlg()
172 // no need to delete child widgets, Qt does it all for us
175 //=================================================================================
178 //=================================================================================
179 void SMESHGUI_EditMeshDlg::Init()
182 mySMESHGUI->SetActiveDialogBox((QDialog*)this);
184 myMesh = SMESH::SMESH_Mesh::_nil();
186 myMeshFilter = new SMESH_TypeFilter (MESH);
188 // signals and slots connections
189 connect(buttonOk , SIGNAL(clicked()), this, SLOT(ClickOnOk()));
190 connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
191 connect(buttonApply , SIGNAL(clicked()), this, SLOT(ClickOnApply()));
192 connect(buttonHelp, SIGNAL(clicked()), this, SLOT(ClickOnHelp()));
194 connect(SelectButton, SIGNAL(clicked()), this, SLOT(SelectionIntoArgument()));
196 connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
198 connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
199 connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()) , this, SLOT(ClickOnCancel()));
201 this->show(); // displays Dialog
203 LineEditMesh->setFocus();
204 mySelectionMgr->clearFilters();
205 mySelectionMgr->installFilter(myMeshFilter);
207 SelectionIntoArgument();
210 //=================================================================================
211 // function : ClickOnApply()
213 //=================================================================================
214 void SMESHGUI_EditMeshDlg::ClickOnApply()
216 if (!myMesh->_is_nil()) {
218 QApplication::setOverrideCursor(Qt::waitCursor);
221 SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
222 aMeshEditor->MergeEqualElements();
225 QApplication::restoreOverrideCursor();
229 //mySelectionMgr->clearSelected();
234 //=================================================================================
235 // function : ClickOnOk()
237 //=================================================================================
238 void SMESHGUI_EditMeshDlg::ClickOnOk()
244 //=================================================================================
245 // function : ClickOnCancel()
247 //=================================================================================
248 void SMESHGUI_EditMeshDlg::ClickOnCancel()
250 //mySelectionMgr->clearSelected();
251 mySelectionMgr->clearFilters();
252 disconnect(mySelectionMgr, 0, this, 0);
253 mySMESHGUI->ResetState();
257 //=================================================================================
258 // function : ClickOnHelp()
260 //=================================================================================
261 void SMESHGUI_EditMeshDlg::ClickOnHelp()
263 LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
265 app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
267 SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
268 QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
269 arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
270 QObject::tr("BUT_OK"));
274 //=================================================================================
275 // function : SelectionIntoArgument()
276 // purpose : Called when selection as changed or other case
277 //=================================================================================
278 void SMESHGUI_EditMeshDlg::SelectionIntoArgument()
280 if (!GroupButtons->isEnabled()) // inactive
283 QString aString = "";
286 mySelectionMgr->selectedObjects(aList);
287 int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
291 myMesh = SMESH::SMESH_Mesh::_nil();
294 Handle(SALOME_InteractiveObject) IO = aList.First();
295 myMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO);
296 if (myMesh->_is_nil())
300 LineEditMesh->setText(aString);
302 bool isEnabled = (!myMesh->_is_nil());
303 buttonOk->setEnabled(isEnabled);
304 buttonApply->setEnabled(isEnabled);
307 //=================================================================================
308 // function : DeactivateActiveDialog()
310 //=================================================================================
311 void SMESHGUI_EditMeshDlg::DeactivateActiveDialog()
313 if (GroupConstructors->isEnabled()) {
314 GroupConstructors->setEnabled(false);
315 GroupMesh->setEnabled(false);
316 GroupButtons->setEnabled(false);
317 mySMESHGUI->ResetState();
318 mySMESHGUI->SetActiveDialogBox(0);
322 //=================================================================================
323 // function : ActivateThisDialog()
325 //=================================================================================
326 void SMESHGUI_EditMeshDlg::ActivateThisDialog()
328 /* Emit a signal to deactivate the active dialog */
329 mySMESHGUI->EmitSignalDeactivateDialog();
330 GroupConstructors->setEnabled(true);
331 GroupMesh->setEnabled(true);
332 GroupButtons->setEnabled(true);
334 mySMESHGUI->SetActiveDialogBox((QDialog*)this);
335 SelectionIntoArgument();
338 //=================================================================================
339 // function : enterEvent()
341 //=================================================================================
342 void SMESHGUI_EditMeshDlg::enterEvent(QEvent* e)
344 if (GroupConstructors->isEnabled())
346 ActivateThisDialog();
349 //=================================================================================
350 // function : closeEvent()
352 //=================================================================================
353 void SMESHGUI_EditMeshDlg::closeEvent(QCloseEvent* e)
355 /* same than click on cancel button */
356 this->ClickOnCancel();
359 //=======================================================================
360 //function : hideEvent
361 //purpose : caused by ESC key
362 //=======================================================================
363 void SMESHGUI_EditMeshDlg::hideEvent (QHideEvent * e)
370 //=================================================================================
371 // function : keyPressEvent()
373 //=================================================================================
374 void SMESHGUI_EditMeshDlg::keyPressEvent( QKeyEvent* e )
376 QDialog::keyPressEvent( e );
377 if ( e->isAccepted() )
380 if ( e->key() == Key_F1 )