Salome HOME
Join modifications from branch OCC_development_for_3_2_0a2
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_MeshInfosDlg.cxx
1 //  SMESH SMESHGUI : GUI for SMESH component
2 //
3 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
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.
10 //
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.
15 //
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
19 //
20 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
21 //
22 //
23 //
24 //  File   : SMESHGUI_MeshInfosDlg.cxx
25 //  Author : Nicolas BARBEROU
26 //  Module : SMESH
27 //  $Header$
28
29 #include "SMESHGUI_MeshInfosDlg.h"
30
31 #include "SMESHGUI.h"
32 #include "SMESHGUI_Utils.h"
33
34 #include "SUIT_Desktop.h"
35 #include "SUIT_ResourceMgr.h"
36 #include "SUIT_OverrideCursor.h"
37
38 #include "LightApp_SelectionMgr.h"
39 #include "SALOMEDSClient_Study.hxx"
40 #include "SALOME_ListIO.hxx"
41
42 #include "utilities.h"
43
44 // QT Includes
45 #include <qgroupbox.h>
46 #include <qlabel.h>
47 #include <qframe.h>
48 #include <qwidgetstack.h>
49 #include <qlayout.h>
50 #include <qmap.h>
51 #include <qpushbutton.h>
52
53 // IDL Headers
54 #include "SALOMEconfig.h"
55 #include CORBA_SERVER_HEADER(SMESH_Mesh)
56 #include CORBA_SERVER_HEADER(SMESH_Group)
57
58 using namespace std;
59
60 #define COLONIZE(str)   (QString(str).contains(":") > 0 ? QString(str) : QString(str) + " :" )
61
62 //=================================================================================
63 // function : SMESHGUI_MeshInfosDlg()
64 // purpose  : Constructor
65 //=================================================================================
66 SMESHGUI_MeshInfosDlg::SMESHGUI_MeshInfosDlg (SMESHGUI* theModule, 
67                                               const char* name, 
68                                               bool modal, 
69                                               WFlags fl): 
70   QDialog(SMESH::GetDesktop(theModule), 
71           name, 
72           modal, 
73           WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose),
74   mySelectionMgr(SMESH::GetSelectionMgr(theModule)),
75   mySMESHGUI(theModule)
76 {
77   if (!name)
78       setName("SMESHGUI_MeshInfosDlg");
79   setCaption(tr("SMESH_MESHINFO_TITLE"));
80   setSizeGripEnabled(TRUE);
81
82   myStartSelection = true;
83   myIsActiveWindow = true;
84
85   QVBoxLayout* aTopLayout = new QVBoxLayout(this);
86   aTopLayout->setSpacing(6);  aTopLayout->setMargin(11);
87
88   // select button & label
89   QPixmap image0(SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH",tr("ICON_SELECT")));
90   mySelectBtn = new QPushButton(this, "mySelectBtn");
91   mySelectBtn->setPixmap(image0);
92   mySelectBtn->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
93
94   mySelectLab = new QLabel(this, "mySelectLab");
95   mySelectLab->setAlignment(AlignCenter);
96   QFont fnt = mySelectLab->font(); fnt.setBold(true);
97   mySelectLab->setFont(fnt);
98
99   QHBoxLayout* aSelectLayout = new QHBoxLayout;
100   aSelectLayout->setMargin(0); aSelectLayout->setSpacing(0);
101   aSelectLayout->addWidget(mySelectBtn);
102   aSelectLayout->addWidget(mySelectLab);
103
104   // top widget stack
105   myWGStack = new QWidgetStack(this);
106
107   // no valid selection
108   QWidget* myBadWidget = new QWidget(myWGStack);
109   QVBoxLayout* aBadLayout = new QVBoxLayout(myBadWidget);
110   QLabel* myBadLab = new QLabel(tr("SMESH_BAD_SELECTION"), myBadWidget, "myBadLab");
111   myBadLab->setAlignment(Qt::AlignCenter);
112   myBadLab->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
113   aBadLayout->addWidget(myBadLab);
114   myWGStack->addWidget(myBadWidget, 0);
115
116   // mesh
117   myMeshWidget = new QWidget(myWGStack);
118   QGridLayout* aMeshLayout = new QGridLayout(myMeshWidget);
119   aMeshLayout->setSpacing(6);  aMeshLayout->setMargin(0);
120   myWGStack->addWidget(myMeshWidget);
121
122   // --> name
123   QLabel* myMeshNameLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_NAME")), myMeshWidget, "myMeshNameLab");
124   myMeshName    = new QLabel(myMeshWidget, "myMeshName");
125   myMeshName->setMinimumWidth(100);
126   QFrame* line1 = new QFrame(myMeshWidget);
127   line1->setFrameStyle(QFrame::HLine | QFrame::Sunken);
128
129   // --> nodes
130   QLabel* myMeshNbNodesLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_NODES")), myMeshWidget, "myMeshNbNodesLab");
131   myMeshNbNodes    = new QLabel(myMeshWidget, "myMeshNbNodes");
132   myMeshNbNodes->setMinimumWidth(100);
133
134   // --> edges
135   QLabel* myMeshNbEdgesLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_EDGES")), myMeshWidget, "myMeshNbEdgesLab");
136   myMeshNbEdges    = new QLabel(myMeshWidget, "myMeshNbEdges");
137   myMeshNbEdges->setMinimumWidth(100);
138
139   // --> faces
140   myMeshFacesGroup = new QGroupBox(tr("SMESH_MESHINFO_FACES"), myMeshWidget, "myMeshFacesGroup");
141   myMeshFacesGroup->setColumnLayout(0, Qt::Vertical);
142   myMeshFacesGroup->layout()->setSpacing(0);  myMeshFacesGroup->layout()->setMargin(0);
143   QGridLayout* myMeshFacesGroupLayout = new QGridLayout(myMeshFacesGroup->layout());
144   myMeshFacesGroupLayout->setAlignment(Qt::AlignTop);
145   myMeshFacesGroupLayout->setSpacing(6);  myMeshFacesGroupLayout->setMargin(11);
146
147   // --> faces --> total
148   QLabel* myMeshNbFacesLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_TOTAL")), myMeshFacesGroup, "myMeshNbFacesLab");
149   myMeshNbFacesLab->setFont(fnt);
150   myMeshNbFaces    = new QLabel(myMeshFacesGroup, "myMeshNbFaces");
151   myMeshNbFaces->setMinimumWidth(100);
152   myMeshNbFaces->setFont(fnt);
153
154   // --> faces --> triangles
155   QLabel* myMeshNbTrianglesLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_TRIANGLES")), myMeshFacesGroup, "myMeshNbTrianglesLab");
156   myMeshNbTriangles    = new QLabel(myMeshFacesGroup, "myMeshNbTriangles");
157   myMeshNbTriangles->setMinimumWidth(100);
158
159   // --> faces --> quadrangles
160   QLabel* myMeshNbQuadranglesLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_QUADRANGLES")), myMeshFacesGroup, "myMeshNbQuadranglesLab");
161   myMeshNbQuadrangles    = new QLabel(myMeshFacesGroup, "myMeshNbQuadrangles");
162   myMeshNbQuadrangles->setMinimumWidth(100);
163
164   // --> faces --> polygons
165   QLabel* myMeshNbPolygonesLab = new QLabel( COLONIZE( tr( "SMESH_MESHINFO_POLYGONES" ) ), myMeshFacesGroup, "myMeshNbPolygonesLab" );
166   myMeshNbPolygones      = new QLabel( myMeshFacesGroup, "myMeshNbPolygones" );
167   myMeshNbPolygones->setMinimumWidth( 100 );
168
169   myMeshFacesGroupLayout->addWidget(myMeshNbFacesLab,       0, 0);
170   myMeshFacesGroupLayout->addWidget(myMeshNbFaces,          0, 1);
171   myMeshFacesGroupLayout->addWidget(myMeshNbTrianglesLab,   1, 0);
172   myMeshFacesGroupLayout->addWidget(myMeshNbTriangles,      1, 1);
173   myMeshFacesGroupLayout->addWidget(myMeshNbQuadranglesLab, 2, 0);
174   myMeshFacesGroupLayout->addWidget(myMeshNbQuadrangles,    2, 1);
175   myMeshFacesGroupLayout->addWidget( myMeshNbPolygonesLab,   3, 0 );
176   myMeshFacesGroupLayout->addWidget( myMeshNbPolygones,      3, 1 );
177   
178   // --> volumes
179   myMeshVolumesGroup = new QGroupBox(tr("SMESH_MESHINFO_VOLUMES"), myMeshWidget, "myMeshVolumesGroup");
180   myMeshVolumesGroup->setColumnLayout(0, Qt::Vertical);
181   myMeshVolumesGroup->layout()->setSpacing(0);  myMeshVolumesGroup->layout()->setMargin(0);
182   QGridLayout* myMeshVolumesGroupLayout = new QGridLayout(myMeshVolumesGroup->layout());
183   myMeshVolumesGroupLayout->setAlignment(Qt::AlignTop);
184   myMeshVolumesGroupLayout->setSpacing(6);  myMeshVolumesGroupLayout->setMargin(11);
185
186   // --> volumes --> total
187   QLabel* myMeshNbVolumesLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_TOTAL")), myMeshVolumesGroup, "myMeshNbVolumesLab");
188   myMeshNbVolumesLab->setFont(fnt);
189   myMeshNbVolumes    = new QLabel(myMeshVolumesGroup, "myMeshNbVolumes");
190   myMeshNbVolumes->setMinimumWidth(100);
191   myMeshNbVolumes->setFont(fnt);
192
193   // --> volumes --> tetrahedrons
194   QLabel* myMeshNbTetraLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_TETRAS")), myMeshVolumesGroup, "myMeshNbTetraLab");
195   myMeshNbTetra    = new QLabel(myMeshVolumesGroup, "myMeshNbTetra");
196   myMeshNbTetra->setMinimumWidth(100);
197
198   // --> volumes --> hexahedrons
199   QLabel* myMeshNbHexaLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_HEXAS")), myMeshVolumesGroup, "myMeshNbHexaLab");
200   myMeshNbHexa    = new QLabel(myMeshVolumesGroup, "myMeshNbHexa");
201   myMeshNbHexaLab->setMinimumWidth(100);
202
203   // --> volumes --> prisms
204   QLabel* myMeshNbPrismLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_PRISMS")), myMeshVolumesGroup, "myMeshNbPrismLab");
205   myMeshNbPrism    = new QLabel(myMeshVolumesGroup, "myMeshNbPrism");
206   myMeshNbPrism->setMinimumWidth(100);
207
208   // --> volumes --> pyramids
209   QLabel* myMeshNbPyraLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_PYRAS")), myMeshVolumesGroup, "myMeshNbPyraLab");
210   myMeshNbPyra    = new QLabel(myMeshVolumesGroup, "myMeshNbPyra");
211   myMeshNbPyra->setMinimumWidth(100);
212
213   // --> volumes --> polyherones
214   QLabel* myMeshNbPolyhedronesLab = new QLabel( COLONIZE( tr( "SMESH_MESHINFO_POLYEDRES" ) ), myMeshVolumesGroup, "myMeshNbPolyhedronLab" );
215   myMeshNbPolyhedrones = new QLabel( myMeshVolumesGroup, "myMeshNbPolyhedrones" );
216   myMeshNbPolyhedrones->setMinimumWidth( 100 );
217
218   myMeshVolumesGroupLayout->addWidget(myMeshNbVolumesLab, 0, 0);
219   myMeshVolumesGroupLayout->addWidget(myMeshNbVolumes,    0, 1);
220   myMeshVolumesGroupLayout->addWidget(myMeshNbTetraLab,   1, 0);
221   myMeshVolumesGroupLayout->addWidget(myMeshNbTetra,      1, 1);
222   myMeshVolumesGroupLayout->addWidget(myMeshNbHexaLab,    2, 0);
223   myMeshVolumesGroupLayout->addWidget(myMeshNbHexa,       2, 1);
224   myMeshVolumesGroupLayout->addWidget(myMeshNbPrismLab,   3, 0);
225   myMeshVolumesGroupLayout->addWidget(myMeshNbPrism,      3, 1);
226   myMeshVolumesGroupLayout->addWidget(myMeshNbPyraLab,    4, 0);
227   myMeshVolumesGroupLayout->addWidget(myMeshNbPyra,       4, 1);
228   myMeshVolumesGroupLayout->addWidget( myMeshNbPolyhedronesLab,    5, 0 );
229   myMeshVolumesGroupLayout->addWidget( myMeshNbPolyhedrones,       5, 1 );
230
231   aMeshLayout->addWidget(myMeshNameLab,          0, 0);
232   aMeshLayout->addWidget(myMeshName,             0, 1);
233   aMeshLayout->addMultiCellWidget(line1,   1, 1, 0, 1);
234   aMeshLayout->addWidget(myMeshNbNodesLab,       2, 0);
235   aMeshLayout->addWidget(myMeshNbNodes,          2, 1);
236   aMeshLayout->addWidget(myMeshNbEdgesLab,       3, 0);
237   aMeshLayout->addWidget(myMeshNbEdges,          3, 1);
238   aMeshLayout->addMultiCellWidget(myMeshFacesGroup,   4, 4, 0, 1);
239   aMeshLayout->addMultiCellWidget(myMeshVolumesGroup, 5, 5, 0, 1);
240   aMeshLayout->addItem(new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Expanding), 6, 0);
241
242   // submesh
243   mySubMeshWidget = new QWidget(myWGStack);
244   QGridLayout* aSubMeshLayout = new QGridLayout(mySubMeshWidget);
245   aSubMeshLayout->setSpacing(6);  aSubMeshLayout->setMargin(0);
246   myWGStack->addWidget(mySubMeshWidget);
247
248   // --> name
249   QLabel* mySubMeshNameLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_NAME")), mySubMeshWidget, "mySubMeshNameLab");
250   mySubMeshName    = new QLabel(mySubMeshWidget, "mySubMeshName");
251   mySubMeshName->setMinimumWidth(100);
252   QFrame* line2 = new QFrame(mySubMeshWidget);
253   line2->setFrameStyle(QFrame::HLine | QFrame::Sunken);
254
255   // --> nodes
256   QLabel* mySubMeshNbNodesLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_NODES")), mySubMeshWidget, "mySubMeshNbNodesLab");
257   mySubMeshNbNodes    = new QLabel(mySubMeshWidget, "mySubMeshNbNodes");
258   mySubMeshNbNodes->setMinimumWidth(100);
259
260   // --> elements
261   mySubMeshElementsGroup = new QGroupBox(tr("SMESH_MESHINFO_ELEMENTS"), mySubMeshWidget, "mySubMeshElementsGroup");
262   mySubMeshElementsGroup->setColumnLayout(0, Qt::Vertical);
263   mySubMeshElementsGroup->layout()->setSpacing(0);  mySubMeshElementsGroup->layout()->setMargin(0);
264   QGridLayout* mySubMeshElementsGroupLayout = new QGridLayout(mySubMeshElementsGroup->layout());
265   mySubMeshElementsGroupLayout->setAlignment(Qt::AlignTop);
266   mySubMeshElementsGroupLayout->setSpacing(6);  mySubMeshElementsGroupLayout->setMargin(11);
267
268   // --> elements --> total
269   QLabel* mySubMeshNbElementsLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_TOTAL")), mySubMeshElementsGroup, "mySubMeshNbElementsLab");
270   mySubMeshNbElementsLab->setFont(fnt);
271   mySubMeshNbElements    = new QLabel(mySubMeshElementsGroup, "mySubMeshNbElements");
272   mySubMeshNbElements->setMinimumWidth(100);
273   mySubMeshNbElements->setFont(fnt);
274
275   // --> elements --> edges
276   QLabel* mySubMeshNbEdgesLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_EDGES")), mySubMeshElementsGroup, "mySubMeshNbEdgesLab");
277   mySubMeshNbEdges    = new QLabel(mySubMeshElementsGroup, "mySubMeshNbEdges");
278   mySubMeshNbEdges->setMinimumWidth(100);
279
280   // --> elements --> faces
281   QLabel* mySubMeshNbFacesLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_FACES")), mySubMeshElementsGroup, "mySubMeshNbFacesLab");
282   mySubMeshNbFaces    = new QLabel(mySubMeshElementsGroup, "mySubMeshNbFaces");
283   mySubMeshNbFaces->setMinimumWidth(100);
284
285   // --> elements --> volumes
286   QLabel* mySubMeshNbVolumesLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_VOLUMES")), mySubMeshElementsGroup, "mySubMeshNbVolumesLab");
287   mySubMeshNbVolumes    = new QLabel(mySubMeshElementsGroup, "mySubMeshNbVolumes");
288   mySubMeshNbVolumes->setMinimumWidth(100);
289
290   mySubMeshElementsGroupLayout->addWidget(mySubMeshNbElementsLab, 0, 0);
291   mySubMeshElementsGroupLayout->addWidget(mySubMeshNbElements,    0, 1);
292   mySubMeshElementsGroupLayout->addWidget(mySubMeshNbEdgesLab,    1, 0);
293   mySubMeshElementsGroupLayout->addWidget(mySubMeshNbEdges,       1, 1);
294   mySubMeshElementsGroupLayout->addWidget(mySubMeshNbFacesLab,    2, 0);
295   mySubMeshElementsGroupLayout->addWidget(mySubMeshNbFaces,       2, 1);
296   mySubMeshElementsGroupLayout->addWidget(mySubMeshNbVolumesLab,  3, 0);
297   mySubMeshElementsGroupLayout->addWidget(mySubMeshNbVolumes,     3, 1);
298
299   aSubMeshLayout->addWidget(mySubMeshNameLab,          0, 0);
300   aSubMeshLayout->addWidget(mySubMeshName,             0, 1);
301   aSubMeshLayout->addMultiCellWidget(line2,      1, 1, 0, 1);
302   aSubMeshLayout->addWidget(mySubMeshNbNodesLab,       2, 0);
303   aSubMeshLayout->addWidget(mySubMeshNbNodes,          2, 1);
304   aSubMeshLayout->addMultiCellWidget(mySubMeshElementsGroup, 3, 3, 0, 1);
305   aSubMeshLayout->addItem(new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Expanding), 4, 0);
306
307   // group
308   myGroupWidget = new QWidget(myWGStack);
309   QGridLayout* myGroupWidgetLayout = new QGridLayout(myGroupWidget);
310   myGroupWidgetLayout->setSpacing(6);  myGroupWidgetLayout->setMargin(0);
311   myWGStack->addWidget(myGroupWidget);
312
313   // --> name
314   QLabel* myGroupNameLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_NAME")), myGroupWidget, "myGroupNameLab");
315   myGroupName = new QLabel(myGroupWidget, "myGroupName");
316   myGroupName->setMinimumWidth(100);
317   QFrame* line3 = new QFrame(myGroupWidget);
318   line3->setFrameStyle(QFrame::HLine | QFrame::Sunken);
319
320   // --> type
321   QLabel* myGroupTypeLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_TYPE")), myGroupWidget, "myGroupTypeLab");
322   myGroupType = new QLabel(myGroupWidget, "myGroupType");
323   myGroupType->setMinimumWidth(100);
324
325   // --> number of entities
326   QLabel* myGroupNbLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_ENTITIES")), myGroupWidget, "myGroupNbLab");
327   myGroupNb = new QLabel(myGroupWidget, "myGroupNb");
328   myGroupNb->setMinimumWidth(100);
329
330   myGroupWidgetLayout->addWidget(myGroupNameLab,       0, 0);
331   myGroupWidgetLayout->addWidget(myGroupName,          0, 1);
332   myGroupWidgetLayout->addMultiCellWidget(line3, 1, 1, 0, 1);
333   myGroupWidgetLayout->addWidget(myGroupTypeLab,       2, 0);
334   myGroupWidgetLayout->addWidget(myGroupType,          2, 1);
335   myGroupWidgetLayout->addWidget(myGroupNbLab,         3, 0);
336   myGroupWidgetLayout->addWidget(myGroupNb,            3, 1);
337   myGroupWidgetLayout->addItem(new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Expanding), 4, 0);
338
339   // buttons
340   myButtonsGroup = new QGroupBox(this, "myButtonsGroup");
341   myButtonsGroup->setColumnLayout(0, Qt::Vertical);
342   myButtonsGroup->layout()->setSpacing(0);  myButtonsGroup->layout()->setMargin(0);
343   QHBoxLayout* myButtonsGroupLayout = new QHBoxLayout(myButtonsGroup->layout());
344   myButtonsGroupLayout->setAlignment(Qt::AlignTop);
345   myButtonsGroupLayout->setSpacing(6); myButtonsGroupLayout->setMargin(11);
346
347   // buttons --> OK button
348   myOkBtn = new QPushButton(tr("SMESH_BUT_OK" ), myButtonsGroup, "myOkBtn");
349   myOkBtn->setAutoDefault(TRUE); myOkBtn->setDefault(TRUE);
350   myButtonsGroupLayout->addStretch();
351   myButtonsGroupLayout->addWidget(myOkBtn);
352   myButtonsGroupLayout->addStretch();
353
354   aTopLayout->addLayout(aSelectLayout);
355   aTopLayout->addWidget(myWGStack);
356   aTopLayout->addWidget(myButtonsGroup);
357
358   mySMESHGUI->SetActiveDialogBox(this);
359
360   // connect signals
361   connect(myOkBtn,                 SIGNAL(clicked()),                      this, SLOT(close()));
362   connect(mySelectBtn,             SIGNAL(clicked()),                      this, SLOT(onStartSelection()));
363   connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()),        this, SLOT(close()));
364   connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
365   connect(mySelectionMgr,          SIGNAL(currentSelectionChanged()),      this, SLOT(onSelectionChanged()));
366
367   this->show();
368
369   // init dialog with current selection
370   onSelectionChanged();
371 }
372
373 //=================================================================================
374 // function : ~SMESHGUI_MeshInfosDlg()
375 // purpose  : Destructor
376 //=================================================================================
377 SMESHGUI_MeshInfosDlg::~SMESHGUI_MeshInfosDlg()
378 {
379 }
380
381 //=================================================================================
382 // function : DumpMeshInfos()
383 // purpose  : 
384 //=================================================================================
385 void SMESHGUI_MeshInfosDlg::DumpMeshInfos()
386 {
387   SUIT_OverrideCursor wc;
388
389   SALOME_ListIO aList;
390   mySelectionMgr->selectedObjects(aList);
391
392   int nbSel = aList.Extent();
393   if (nbSel == 1) {
394     myStartSelection = false;
395     mySelectLab->setText("");
396     Handle(SALOME_InteractiveObject) IObject = aList.First();
397     _PTR(SObject) aSO = SMESH::GetActiveStudyDocument()->FindObjectID(IObject->getEntry());
398     if (aSO) {
399       //CORBA::Object_var anObject = aSO->GetObject();
400       CORBA::Object_var anObject = SMESH::SObjectToObject(aSO);
401       if (!CORBA::is_nil(anObject)) {
402         SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow(anObject);
403         if (!aMesh->_is_nil()) {
404           myWGStack->raiseWidget(myMeshWidget);
405           setCaption(tr("SMESH_MESHINFO_TITLE") + " [" + tr("SMESH_OBJECT_MESH") + "]");
406           myMeshName->setText(aSO->GetName().c_str());
407           myMeshNbNodes->setNum((int)aMesh->NbNodes());
408           myMeshNbEdges->setNum((int)aMesh->NbEdges());
409           myMeshNbFaces->setNum((int)aMesh->NbFaces());
410           myMeshNbTriangles->setNum((int)aMesh->NbTriangles());
411           myMeshNbQuadrangles->setNum((int)aMesh->NbQuadrangles());
412           myMeshNbPolygones->setNum( (int)aMesh->NbPolygons() );
413           myMeshNbVolumes->setNum((int)aMesh->NbVolumes());
414           myMeshNbTetra->setNum((int)aMesh->NbTetras());
415           myMeshNbHexa->setNum((int)aMesh->NbHexas());
416           myMeshNbPrism->setNum((int)aMesh->NbPrisms());
417           myMeshNbPyra->setNum((int)aMesh->NbPyramids());
418           myMeshNbPolyhedrones->setNum( (int)aMesh->NbPolyhedrons() );
419           return;
420         }
421         SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow(anObject);
422         if (!aSubMesh->_is_nil()) {
423           myWGStack->raiseWidget(mySubMeshWidget);
424           setCaption(tr("SMESH_MESHINFO_TITLE") + " [" + tr("SMESH_SUBMESH") + "]");
425           mySubMeshName->setText(aSO->GetName().c_str());
426           mySubMeshNbNodes->setNum((int)aSubMesh->GetNumberOfNodes(true));
427           mySubMeshNbElements->setNum((int)aSubMesh->GetNumberOfElements());
428           mySubMeshNbEdges->setNum((int)(aSubMesh->GetElementsByType(SMESH::EDGE)->length()));
429           mySubMeshNbFaces->setNum((int)(aSubMesh->GetElementsByType(SMESH::FACE)->length()));
430           mySubMeshNbVolumes->setNum((int)(aSubMesh->GetElementsByType(SMESH::VOLUME)->length()));
431           return;
432         }
433         SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow(anObject);
434         if (!aGroup->_is_nil()) {
435           myWGStack->raiseWidget(myGroupWidget);
436           setCaption(tr("SMESH_MESHINFO_TITLE") + " [" + tr("SMESH_GROUP") + "]");
437           myGroupName->setText(aSO->GetName().c_str());
438           int aType = aGroup->GetType();
439           QString strType;
440           switch (aType) {
441           case SMESH::NODE:
442             strType = "SMESH_MESHINFO_NODES"; break;
443           case SMESH::EDGE:
444             strType = "SMESH_MESHINFO_EDGES"; break;
445           case SMESH::FACE:
446             strType = "SMESH_MESHINFO_FACES"; break;
447           case SMESH::VOLUME:
448             strType = "SMESH_MESHINFO_VOLUMES"; break;
449           default:
450             strType = "SMESH_MESHINFO_ALL_TYPES"; break;
451           }
452
453           myGroupType->setText(tr(strType));
454           myGroupNb->setNum((int)aGroup->Size());
455           return;
456         }
457       }
458     }
459   }
460   myWGStack->raiseWidget(0);
461   setCaption(tr("SMESH_MESHINFO_TITLE"));
462 }
463
464 //=================================================================================
465 // function : SelectionIntoArgument()
466 // purpose  : Called when selection has changed
467 //=================================================================================
468 void SMESHGUI_MeshInfosDlg::onSelectionChanged()
469 {
470   if (myStartSelection)
471     DumpMeshInfos();
472 }
473
474 //=================================================================================
475 // function : closeEvent()
476 // purpose  :
477 //=================================================================================
478 void SMESHGUI_MeshInfosDlg::closeEvent (QCloseEvent* e)
479 {
480   mySMESHGUI->ResetState();
481   QDialog::closeEvent(e);
482 }
483
484 //=================================================================================
485 // function : windowActivationChange()
486 // purpose  : called when window is activated/deactivated
487 //=================================================================================
488 void SMESHGUI_MeshInfosDlg::windowActivationChange (bool oldActive)
489 {
490   QDialog::windowActivationChange(oldActive);
491   if (isActiveWindow() && myIsActiveWindow != isActiveWindow())
492     ActivateThisDialog();
493   myIsActiveWindow = isActiveWindow();
494 }
495
496 //=================================================================================
497 // function : DeactivateActiveDialog()
498 // purpose  :
499 //=================================================================================
500 void SMESHGUI_MeshInfosDlg::DeactivateActiveDialog()
501 {
502   disconnect(mySelectionMgr, 0, this, 0);
503 }
504
505 //=================================================================================
506 // function : ActivateThisDialog()
507 // purpose  :
508 //=================================================================================
509 void SMESHGUI_MeshInfosDlg::ActivateThisDialog()
510 {
511   /* Emit a signal to deactivate any active dialog */
512   mySMESHGUI->EmitSignalDeactivateDialog();
513   connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(onSelectionChanged()));
514 }
515
516 //=================================================================================
517 // function : onStartSelection()
518 // purpose  : starts selection
519 //=================================================================================
520 void SMESHGUI_MeshInfosDlg::onStartSelection()
521 {
522   myStartSelection = true;
523   onSelectionChanged();
524   myStartSelection = true;
525   mySelectLab->setText(tr("INF_SELECT_OBJECT"));
526 }