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"
32 #include "SALOME_ListIO.hxx"
34 #include "utilities.h"
37 #include <qapplication.h>
38 #include <qbuttongroup.h>
39 #include <qgroupbox.h>
41 #include <qlineedit.h>
42 #include <qpushbutton.h>
43 #include <qradiobutton.h>
47 //=================================================================================
48 // class : SMESHGUI_EditMeshDlg()
50 //=================================================================================
51 SMESHGUI_EditMeshDlg::SMESHGUI_EditMeshDlg (SMESHGUI* theModule,
52 const char* title, const char* icon,
54 : QDialog(SMESH::GetDesktop(theModule), "SMESHGUI_EditMeshDlg", false, WStyle_Customize |
55 WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose),
56 mySMESHGUI(theModule),
57 mySelectionMgr(SMESH::GetSelectionMgr(theModule)),
61 setCaption(tr(title));
63 SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
64 QPixmap image0 (aResMgr->loadPixmap("SMESH", tr(icon)));
65 QPixmap image1 (aResMgr->loadPixmap("SMESH", tr("ICON_SELECT")));
67 setSizeGripEnabled(TRUE);
68 DlgLayout = new QGridLayout (this);
69 DlgLayout->setSpacing(6);
70 DlgLayout->setMargin(11);
72 /***************************************************************/
73 GroupConstructors = new QButtonGroup (this, "GroupConstructors");
74 GroupConstructors->setExclusive(TRUE);
75 GroupConstructors->setColumnLayout(0, Qt::Vertical);
76 GroupConstructors->layout()->setSpacing(0);
77 GroupConstructors->layout()->setMargin(0);
78 GroupConstructorsLayout = new QGridLayout (GroupConstructors->layout());
79 GroupConstructorsLayout->setAlignment(Qt::AlignTop);
80 GroupConstructorsLayout->setSpacing(6);
81 GroupConstructorsLayout->setMargin(11);
82 Constructor1 = new QRadioButton (GroupConstructors, "Constructor1");
83 Constructor1->setText(tr(""));
84 Constructor1->setPixmap(image0);
85 Constructor1->setChecked(TRUE);
86 Constructor1->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)1,
87 (QSizePolicy::SizeType)0,
88 Constructor1->sizePolicy().hasHeightForWidth()));
89 Constructor1->setMinimumSize(QSize(50, 0));
90 GroupConstructorsLayout->addWidget(Constructor1, 0, 0);
91 QSpacerItem* spacer = new QSpacerItem (20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
92 GroupConstructorsLayout->addItem(spacer, 0, 1);
93 DlgLayout->addWidget(GroupConstructors, 0, 0);
95 /***************************************************************/
96 GroupButtons = new QGroupBox (this, "GroupButtons");
97 GroupButtons->setGeometry(QRect(10, 10, 281, 48));
98 GroupButtons->setTitle(tr("" ));
99 GroupButtons->setColumnLayout(0, Qt::Vertical);
100 GroupButtons->layout()->setSpacing(0);
101 GroupButtons->layout()->setMargin(0);
102 GroupButtonsLayout = new QGridLayout (GroupButtons->layout());
103 GroupButtonsLayout->setAlignment(Qt::AlignTop);
104 GroupButtonsLayout->setSpacing(6);
105 GroupButtonsLayout->setMargin(11);
106 buttonCancel = new QPushButton (GroupButtons, "buttonCancel");
107 buttonCancel->setText(tr("SMESH_BUT_CLOSE" ));
108 buttonCancel->setAutoDefault(TRUE);
109 GroupButtonsLayout->addWidget(buttonCancel, 0, 3);
110 buttonApply = new QPushButton (GroupButtons, "buttonApply");
111 buttonApply->setText(tr("SMESH_BUT_APPLY" ));
112 buttonApply->setAutoDefault(TRUE);
113 GroupButtonsLayout->addWidget(buttonApply, 0, 1);
114 QSpacerItem* spacer_9 = new QSpacerItem (20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
115 GroupButtonsLayout->addItem(spacer_9, 0, 2);
116 buttonOk = new QPushButton (GroupButtons, "buttonOk");
117 buttonOk->setText(tr("SMESH_BUT_OK" ));
118 buttonOk->setAutoDefault(TRUE);
119 buttonOk->setDefault(TRUE);
120 GroupButtonsLayout->addWidget(buttonOk, 0, 0);
121 DlgLayout->addWidget(GroupButtons, 2, 0);
123 /***************************************************************/
124 GroupMesh = new QGroupBox (this, "GroupMesh");
125 GroupMesh->setTitle(tr("SMESH_MESH" ));
126 GroupMesh->setMinimumSize(QSize(0, 0));
127 GroupMesh->setFrameShape(QGroupBox::Box);
128 GroupMesh->setFrameShadow(QGroupBox::Sunken);
129 GroupMesh->setColumnLayout(0, Qt::Vertical);
130 GroupMesh->layout()->setSpacing(0);
131 GroupMesh->layout()->setMargin(0);
132 GroupMeshLayout = new QGridLayout (GroupMesh->layout());
133 GroupMeshLayout->setAlignment(Qt::AlignTop);
134 GroupMeshLayout->setSpacing(6);
135 GroupMeshLayout->setMargin(11);
136 TextLabelMesh = new QLabel (GroupMesh, "TextLabelMesh");
137 TextLabelMesh->setText(tr("SMESH_MESH"));
138 TextLabelMesh->setMinimumSize(QSize(50, 0));
139 TextLabelMesh->setFrameShape(QLabel::NoFrame);
140 TextLabelMesh->setFrameShadow(QLabel::Plain);
141 GroupMeshLayout->addWidget(TextLabelMesh, 0, 0);
142 SelectButton = new QPushButton (GroupMesh, "SelectButton");
143 SelectButton->setText(tr(""));
144 SelectButton->setPixmap(image1);
145 SelectButton->setToggleButton(FALSE);
146 GroupMeshLayout->addWidget(SelectButton, 0, 1);
147 LineEditMesh = new QLineEdit (GroupMesh, "LineEditMesh");
148 LineEditMesh->setReadOnly(true);
149 GroupMeshLayout->addWidget(LineEditMesh, 0, 2);
150 DlgLayout->addWidget(GroupMesh, 1, 0);
152 Init(); // Initialisations
155 //=================================================================================
156 // function : ~SMESHGUI_EditMeshDlg()
157 // purpose : Destroys the object and frees any allocated resources
158 //=================================================================================
159 SMESHGUI_EditMeshDlg::~SMESHGUI_EditMeshDlg()
161 // no need to delete child widgets, Qt does it all for us
164 //=================================================================================
167 //=================================================================================
168 void SMESHGUI_EditMeshDlg::Init()
171 mySMESHGUI->SetActiveDialogBox((QDialog*)this);
173 myMesh = SMESH::SMESH_Mesh::_nil();
175 myMeshFilter = new SMESH_TypeFilter (MESH);
177 // signals and slots connections
178 connect(buttonOk , SIGNAL(clicked()), this, SLOT(ClickOnOk()));
179 connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
180 connect(buttonApply , SIGNAL(clicked()), this, SLOT(ClickOnApply()));
182 connect(SelectButton, SIGNAL(clicked()), this, SLOT(SelectionIntoArgument()));
184 connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
186 connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
187 connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()) , this, SLOT(ClickOnCancel()));
189 // Move widget on the bottom right corner of main widget
191 mySMESHGUI->DefineDlgPosition(this, x, y);
193 this->show(); // displays Dialog
195 LineEditMesh->setFocus();
196 mySelectionMgr->clearFilters();
197 mySelectionMgr->installFilter(myMeshFilter);
199 SelectionIntoArgument();
202 //=================================================================================
203 // function : ClickOnApply()
205 //=================================================================================
206 void SMESHGUI_EditMeshDlg::ClickOnApply()
208 if (!myMesh->_is_nil()) {
210 QApplication::setOverrideCursor(Qt::waitCursor);
213 SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
214 aMeshEditor->MergeEqualElements();
217 QApplication::restoreOverrideCursor();
221 //mySelectionMgr->clearSelected();
226 //=================================================================================
227 // function : ClickOnOk()
229 //=================================================================================
230 void SMESHGUI_EditMeshDlg::ClickOnOk()
236 //=================================================================================
237 // function : ClickOnCancel()
239 //=================================================================================
240 void SMESHGUI_EditMeshDlg::ClickOnCancel()
242 //mySelectionMgr->clearSelected();
243 mySelectionMgr->clearFilters();
244 disconnect(mySelectionMgr, 0, this, 0);
245 mySMESHGUI->ResetState();
249 //=================================================================================
250 // function : SelectionIntoArgument()
251 // purpose : Called when selection as changed or other case
252 //=================================================================================
253 void SMESHGUI_EditMeshDlg::SelectionIntoArgument()
255 if (!GroupButtons->isEnabled()) // inactive
258 QString aString = "";
261 mySelectionMgr->selectedObjects(aList);
262 int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
266 myMesh = SMESH::SMESH_Mesh::_nil();
269 Handle(SALOME_InteractiveObject) IO = aList.First();
270 myMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO);
271 if (myMesh->_is_nil())
275 LineEditMesh->setText(aString);
277 bool isEnabled = (!myMesh->_is_nil());
278 buttonOk->setEnabled(isEnabled);
279 buttonApply->setEnabled(isEnabled);
282 //=================================================================================
283 // function : DeactivateActiveDialog()
285 //=================================================================================
286 void SMESHGUI_EditMeshDlg::DeactivateActiveDialog()
288 if (GroupConstructors->isEnabled()) {
289 GroupConstructors->setEnabled(false);
290 GroupMesh->setEnabled(false);
291 GroupButtons->setEnabled(false);
292 mySMESHGUI->ResetState();
293 mySMESHGUI->SetActiveDialogBox(0);
297 //=================================================================================
298 // function : ActivateThisDialog()
300 //=================================================================================
301 void SMESHGUI_EditMeshDlg::ActivateThisDialog()
303 /* Emit a signal to deactivate the active dialog */
304 mySMESHGUI->EmitSignalDeactivateDialog();
305 GroupConstructors->setEnabled(true);
306 GroupMesh->setEnabled(true);
307 GroupButtons->setEnabled(true);
309 mySMESHGUI->SetActiveDialogBox((QDialog*)this);
310 SelectionIntoArgument();
313 //=================================================================================
314 // function : enterEvent()
316 //=================================================================================
317 void SMESHGUI_EditMeshDlg::enterEvent(QEvent* e)
319 if (GroupConstructors->isEnabled())
321 ActivateThisDialog();
324 //=================================================================================
325 // function : closeEvent()
327 //=================================================================================
328 void SMESHGUI_EditMeshDlg::closeEvent(QCloseEvent* e)
330 /* same than click on cancel button */
331 this->ClickOnCancel();
334 //=======================================================================
335 //function : hideEvent
336 //purpose : caused by ESC key
337 //=======================================================================
338 void SMESHGUI_EditMeshDlg::hideEvent (QHideEvent * e)