2 #include "SMESHGUI_EditMeshDlg.h"
5 #include "SMESHGUI_Utils.h"
6 #include "SMESHGUI_VTKUtils.h"
8 #include "SMESH_TypeFilter.hxx"
10 #include "SUIT_Desktop.h"
11 #include "SUIT_Session.h"
13 #include "SALOME_ListIO.hxx"
15 #include "utilities.h"
18 #include <qapplication.h>
19 #include <qbuttongroup.h>
20 #include <qgroupbox.h>
22 #include <qlineedit.h>
23 #include <qpushbutton.h>
24 #include <qradiobutton.h>
28 //=================================================================================
29 // class : SMESHGUI_EditMeshDlg()
31 //=================================================================================
32 SMESHGUI_EditMeshDlg::SMESHGUI_EditMeshDlg (SMESHGUI* theModule,
33 const char* title, const char* icon,
35 : QDialog(SMESH::GetDesktop(theModule), "SMESHGUI_EditMeshDlg", false, WStyle_Customize |
36 WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose),
37 mySMESHGUI(theModule),
38 mySelectionMgr(SMESH::GetSelectionMgr(theModule)),
42 setCaption(tr(title));
44 SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
45 QPixmap image0 (aResMgr->loadPixmap("SMESH", tr(icon)));
46 QPixmap image1 (aResMgr->loadPixmap("SMESH", tr("ICON_SELECT")));
48 setSizeGripEnabled(TRUE);
49 DlgLayout = new QGridLayout (this);
50 DlgLayout->setSpacing(6);
51 DlgLayout->setMargin(11);
53 /***************************************************************/
54 GroupConstructors = new QButtonGroup (this, "GroupConstructors");
55 GroupConstructors->setExclusive(TRUE);
56 GroupConstructors->setColumnLayout(0, Qt::Vertical);
57 GroupConstructors->layout()->setSpacing(0);
58 GroupConstructors->layout()->setMargin(0);
59 GroupConstructorsLayout = new QGridLayout (GroupConstructors->layout());
60 GroupConstructorsLayout->setAlignment(Qt::AlignTop);
61 GroupConstructorsLayout->setSpacing(6);
62 GroupConstructorsLayout->setMargin(11);
63 Constructor1 = new QRadioButton (GroupConstructors, "Constructor1");
64 Constructor1->setText(tr(""));
65 Constructor1->setPixmap(image0);
66 Constructor1->setChecked(TRUE);
67 Constructor1->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)1,
68 (QSizePolicy::SizeType)0,
69 Constructor1->sizePolicy().hasHeightForWidth()));
70 Constructor1->setMinimumSize(QSize(50, 0));
71 GroupConstructorsLayout->addWidget(Constructor1, 0, 0);
72 QSpacerItem* spacer = new QSpacerItem (20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
73 GroupConstructorsLayout->addItem(spacer, 0, 1);
74 DlgLayout->addWidget(GroupConstructors, 0, 0);
76 /***************************************************************/
77 GroupButtons = new QGroupBox (this, "GroupButtons");
78 GroupButtons->setGeometry(QRect(10, 10, 281, 48));
79 GroupButtons->setTitle(tr("" ));
80 GroupButtons->setColumnLayout(0, Qt::Vertical);
81 GroupButtons->layout()->setSpacing(0);
82 GroupButtons->layout()->setMargin(0);
83 GroupButtonsLayout = new QGridLayout (GroupButtons->layout());
84 GroupButtonsLayout->setAlignment(Qt::AlignTop);
85 GroupButtonsLayout->setSpacing(6);
86 GroupButtonsLayout->setMargin(11);
87 buttonCancel = new QPushButton (GroupButtons, "buttonCancel");
88 buttonCancel->setText(tr("SMESH_BUT_CLOSE" ));
89 buttonCancel->setAutoDefault(TRUE);
90 GroupButtonsLayout->addWidget(buttonCancel, 0, 3);
91 buttonApply = new QPushButton (GroupButtons, "buttonApply");
92 buttonApply->setText(tr("SMESH_BUT_APPLY" ));
93 buttonApply->setAutoDefault(TRUE);
94 GroupButtonsLayout->addWidget(buttonApply, 0, 1);
95 QSpacerItem* spacer_9 = new QSpacerItem (20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
96 GroupButtonsLayout->addItem(spacer_9, 0, 2);
97 buttonOk = new QPushButton (GroupButtons, "buttonOk");
98 buttonOk->setText(tr("SMESH_BUT_OK" ));
99 buttonOk->setAutoDefault(TRUE);
100 buttonOk->setDefault(TRUE);
101 GroupButtonsLayout->addWidget(buttonOk, 0, 0);
102 DlgLayout->addWidget(GroupButtons, 2, 0);
104 /***************************************************************/
105 GroupMesh = new QGroupBox (this, "GroupMesh");
106 GroupMesh->setTitle(tr("SMESH_MESH" ));
107 GroupMesh->setMinimumSize(QSize(0, 0));
108 GroupMesh->setFrameShape(QGroupBox::Box);
109 GroupMesh->setFrameShadow(QGroupBox::Sunken);
110 GroupMesh->setColumnLayout(0, Qt::Vertical);
111 GroupMesh->layout()->setSpacing(0);
112 GroupMesh->layout()->setMargin(0);
113 GroupMeshLayout = new QGridLayout (GroupMesh->layout());
114 GroupMeshLayout->setAlignment(Qt::AlignTop);
115 GroupMeshLayout->setSpacing(6);
116 GroupMeshLayout->setMargin(11);
117 TextLabelMesh = new QLabel (GroupMesh, "TextLabelMesh");
118 TextLabelMesh->setText(tr("SMESH_MESH"));
119 TextLabelMesh->setMinimumSize(QSize(50, 0));
120 TextLabelMesh->setFrameShape(QLabel::NoFrame);
121 TextLabelMesh->setFrameShadow(QLabel::Plain);
122 GroupMeshLayout->addWidget(TextLabelMesh, 0, 0);
123 SelectButton = new QPushButton (GroupMesh, "SelectButton");
124 SelectButton->setText(tr(""));
125 SelectButton->setPixmap(image1);
126 SelectButton->setToggleButton(FALSE);
127 GroupMeshLayout->addWidget(SelectButton, 0, 1);
128 LineEditMesh = new QLineEdit (GroupMesh, "LineEditMesh");
129 LineEditMesh->setReadOnly(true);
130 GroupMeshLayout->addWidget(LineEditMesh, 0, 2);
131 DlgLayout->addWidget(GroupMesh, 1, 0);
133 Init(); // Initialisations
136 //=================================================================================
137 // function : ~SMESHGUI_EditMeshDlg()
138 // purpose : Destroys the object and frees any allocated resources
139 //=================================================================================
140 SMESHGUI_EditMeshDlg::~SMESHGUI_EditMeshDlg()
142 // no need to delete child widgets, Qt does it all for us
145 //=================================================================================
148 //=================================================================================
149 void SMESHGUI_EditMeshDlg::Init()
152 mySMESHGUI->SetActiveDialogBox((QDialog*)this);
154 myMesh = SMESH::SMESH_Mesh::_nil();
156 myMeshFilter = new SMESH_TypeFilter (MESH);
158 // signals and slots connections
159 connect(buttonOk , SIGNAL(clicked()), this, SLOT(ClickOnOk()));
160 connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
161 connect(buttonApply , SIGNAL(clicked()), this, SLOT(ClickOnApply()));
163 connect(SelectButton, SIGNAL(clicked()), this, SLOT(SelectionIntoArgument()));
165 connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
167 connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
168 connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()) , this, SLOT(ClickOnCancel()));
170 // Move widget on the bottom right corner of main widget
172 mySMESHGUI->DefineDlgPosition(this, x, y);
174 this->show(); // displays Dialog
176 LineEditMesh->setFocus();
177 mySelectionMgr->clearFilters();
178 mySelectionMgr->installFilter(myMeshFilter);
180 SelectionIntoArgument();
183 //=================================================================================
184 // function : ClickOnApply()
186 //=================================================================================
187 void SMESHGUI_EditMeshDlg::ClickOnApply()
189 if (!myMesh->_is_nil()) {
191 QApplication::setOverrideCursor(Qt::waitCursor);
194 SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
195 aMeshEditor->MergeEqualElements();
198 QApplication::restoreOverrideCursor();
202 mySelectionMgr->clearSelected();
207 //=================================================================================
208 // function : ClickOnOk()
210 //=================================================================================
211 void SMESHGUI_EditMeshDlg::ClickOnOk()
217 //=================================================================================
218 // function : ClickOnCancel()
220 //=================================================================================
221 void SMESHGUI_EditMeshDlg::ClickOnCancel()
223 mySelectionMgr->clearSelected();
224 mySelectionMgr->clearFilters();
225 disconnect(mySelectionMgr, 0, this, 0);
226 mySMESHGUI->ResetState();
230 //=================================================================================
231 // function : SelectionIntoArgument()
232 // purpose : Called when selection as changed or other case
233 //=================================================================================
234 void SMESHGUI_EditMeshDlg::SelectionIntoArgument()
236 if (!GroupButtons->isEnabled()) // inactive
239 QString aString = "";
242 mySelectionMgr->selectedObjects(aList);
243 int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
247 myMesh = SMESH::SMESH_Mesh::_nil();
250 Handle(SALOME_InteractiveObject) IO = aList.First();
251 myMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO);
252 if (myMesh->_is_nil())
256 LineEditMesh->setText(aString);
258 bool isEnabled = (!myMesh->_is_nil());
259 buttonOk->setEnabled(isEnabled);
260 buttonApply->setEnabled(isEnabled);
263 //=================================================================================
264 // function : DeactivateActiveDialog()
266 //=================================================================================
267 void SMESHGUI_EditMeshDlg::DeactivateActiveDialog()
269 if (GroupConstructors->isEnabled()) {
270 GroupConstructors->setEnabled(false);
271 GroupMesh->setEnabled(false);
272 GroupButtons->setEnabled(false);
273 mySMESHGUI->ResetState();
274 mySMESHGUI->SetActiveDialogBox(0);
278 //=================================================================================
279 // function : ActivateThisDialog()
281 //=================================================================================
282 void SMESHGUI_EditMeshDlg::ActivateThisDialog()
284 /* Emit a signal to deactivate the active dialog */
285 mySMESHGUI->EmitSignalDeactivateDialog();
286 GroupConstructors->setEnabled(true);
287 GroupMesh->setEnabled(true);
288 GroupButtons->setEnabled(true);
290 mySMESHGUI->SetActiveDialogBox((QDialog*)this);
291 SelectionIntoArgument();
294 //=================================================================================
295 // function : enterEvent()
297 //=================================================================================
298 void SMESHGUI_EditMeshDlg::enterEvent(QEvent* e)
300 if (GroupConstructors->isEnabled())
302 ActivateThisDialog();
305 //=================================================================================
306 // function : closeEvent()
308 //=================================================================================
309 void SMESHGUI_EditMeshDlg::closeEvent(QCloseEvent* e)
311 /* same than click on cancel button */
312 this->ClickOnCancel();
315 //=======================================================================
316 //function : hideEvent
317 //purpose : caused by ESC key
318 //=======================================================================
319 void SMESHGUI_EditMeshDlg::hideEvent (QHideEvent * e)