Salome HOME
0021347: [CEA 497] Visualisation into SMESH and VISU of hexagonal prism cells (MED_OC...
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_MeshInfo.h
index ae22e5ac0eb3947e95722d16d34c611d9550e74d..ad25be9bb62c38ad0191cbfe52fde9b25e05bebb 100644 (file)
@@ -1,23 +1,23 @@
-//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2011  CEA/DEN, EDF R&D, OPEN CASCADE
 //
-//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //
-//  This library is free software; you can redistribute it and/or
-//  modify it under the terms of the GNU Lesser General Public
-//  License as published by the Free Software Foundation; either
-//  version 2.1 of the License.
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
 //
-//  This library is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-//  Lesser General Public License for more details.
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
 //
-//  You should have received a copy of the GNU Lesser General Public
-//  License along with this library; if not, write to the Free Software
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //  File   : SMESHGUI_MeshInfo.h
 //  Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
 #include <QDialog>
 #include <QList>
 #include <QMap>
+#include <QSet>
+#include <QTreeWidget>
 #include <QVector>
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
+#include CORBA_SERVER_HEADER(SMESH_Group)
 
 class QButtonGroup;
 class QLabel;
 class QLineEdit;
+class QPushButton;
 class QTabWidget;
 class QTextBrowser;
-class QTreeWidget;
-class QTreeWidgetItem;
 class SMESH_Actor;
 class SMDS_MeshNode;
 class SMDS_MeshElement;
@@ -78,6 +80,7 @@ class SMESHGUI_EXPORT SMESHGUI_MeshInfo : public QFrame
     i3DHexahedrons,
     i3DPyramids,
     i3DPrisms,
+    i3DHexaPrisms,
     i3DPolyhedrons,
     i3DEnd,
     iElementsEnd   = i3DEnd
@@ -121,8 +124,9 @@ public:
   ~SMESHGUI_ElemInfo();
 
   void         setSource( SMESH_Actor* );
-  virtual void showInfo( long, bool );
-  virtual void clear() = 0;
+  void         showInfo( long, bool );
+  void         showInfo( QSet<long>, bool );
+  void         clear();
 
 protected:
   struct XYZ
@@ -137,14 +141,32 @@ protected:
   };
   typedef QMap< int, QList<int> > Connectivity;
 
+  QWidget*     frame() const;
+  SMESH_Actor* actor() const;
+  bool         isElements() const;
+
+  virtual void information( const QList<long>& ) = 0;
+  virtual void clearInternal();
+
   Connectivity nodeConnectivity( const SMDS_MeshNode* );
   QString      formatConnectivity( Connectivity, int );
   XYZ          gravityCenter( const SMDS_MeshElement* );
 
-protected:
-  SMESH_Actor* myActor;
-  long         myID;
-  int          myIsElement;
+private slots:
+  void         showPrevious();
+  void         showNext();
+  void         updateControls();
+
+private:
+  SMESH_Actor*     myActor;
+  QList<long>      myIDs;
+  int              myIsElement;
+  QWidget*         myFrame;
+  QWidget*         myExtra;
+  QLabel*          myCurrent;
+  QPushButton*     myPrev;
+  QPushButton*     myNext;
+  int              myIndex;
 };
 
 class SMESHGUI_EXPORT SMESHGUI_SimpleElemInfo : public SMESHGUI_ElemInfo
@@ -152,8 +174,9 @@ class SMESHGUI_EXPORT SMESHGUI_SimpleElemInfo : public SMESHGUI_ElemInfo
 public:
   SMESHGUI_SimpleElemInfo( QWidget* = 0 );
 
-  void          showInfo( long, bool );
-  void          clear();
+protected:
+  void          information( const QList<long>& );
+  void          clearInternal();
 
 private:
   QTextBrowser* myInfo;
@@ -163,19 +186,60 @@ class SMESHGUI_EXPORT SMESHGUI_TreeElemInfo : public SMESHGUI_ElemInfo
 {
   class ItemDelegate;
 
+  enum { Bold = 0x01, All = 0x80 };
+
 public:
   SMESHGUI_TreeElemInfo( QWidget* = 0 );
 
-  void             showInfo( long, bool );
-  void             clear();
+protected:
+  void             information( const QList<long>& );
+  void             clearInternal();
 
 private:
-  QTreeWidgetItem* createItem( QTreeWidgetItem* = 0, int = 100 );
+  QTreeWidgetItem* createItem( QTreeWidgetItem* = 0, int = 0 );
   
 private:
   QTreeWidget*     myInfo;
 };
 
+class GrpComputor: public QObject
+{
+  Q_OBJECT;
+
+public:
+  GrpComputor( SMESH::SMESH_GroupBase_ptr, QTreeWidgetItem*, QObject* );
+
+public slots:
+  void compute();
+
+private:
+  SMESH::SMESH_GroupBase_var myGroup;
+  QTreeWidgetItem*           myItem;
+};
+
+class SMESHGUI_EXPORT SMESHGUI_AddInfo : public QTreeWidget
+{
+  Q_OBJECT;
+
+  enum { Bold = 0x01, All = 0x80 };
+
+public:
+  SMESHGUI_AddInfo( QWidget* = 0 );
+  ~SMESHGUI_AddInfo();
+
+  void             showInfo( SMESH::SMESH_IDSource_ptr );
+  //  void             clear();
+
+private:
+  QTreeWidgetItem* createItem( QTreeWidgetItem* = 0, int = 0 );
+  void             meshInfo( SMESH::SMESH_Mesh_ptr, QTreeWidgetItem* );
+  void             subMeshInfo( SMESH::SMESH_subMesh_ptr, QTreeWidgetItem* );
+  void             groupInfo( SMESH::SMESH_GroupBase_ptr, QTreeWidgetItem* );
+
+private:
+  QList<GrpComputor*> myComputors;
+};
+
 class SMESHGUI_EXPORT SMESHGUI_MeshInfoDlg : public QDialog
 { 
   Q_OBJECT;
@@ -186,7 +250,8 @@ public:
   //! Information type
   enum { 
     BaseInfo,  //!< base mesh information
-    ElemInfo   //!< mesh element information
+    ElemInfo,  //!< mesh element information
+    AddInfo    //!< additional information
   };
 
   SMESHGUI_MeshInfoDlg( QWidget* = 0, int = BaseInfo );
@@ -214,6 +279,7 @@ private:
   QButtonGroup*      myMode;
   QLineEdit*         myID;
   SMESHGUI_ElemInfo* myElemInfo;   
+  SMESHGUI_AddInfo*  myAddInfo;
   SMESH_Actor*       myActor;
 };