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