]> SALOME platform Git repositories - modules/smesh.git/commitdiff
Salome HOME
Imp for Mesh Info dialog box: double click on "connectivity" item switch dialog box...
authorvsr <vsr@opencascade.com>
Tue, 18 Dec 2012 08:06:25 +0000 (08:06 +0000)
committervsr <vsr@opencascade.com>
Tue, 18 Dec 2012 08:06:25 +0000 (08:06 +0000)
src/SMESHGUI/SMESHGUI_MeshInfo.cxx
src/SMESHGUI/SMESHGUI_MeshInfo.h

index 3b90ce6d6f63c2368028d79a10d06011fbed40bf..42796cbb1a9c33bb26fba356d9811f3763fdc9d7 100644 (file)
@@ -45,6 +45,7 @@
 
 #include <QApplication>
 #include <QButtonGroup>
+#include <QContextMenuEvent>
 #include <QGridLayout>
 #include <QHBoxLayout>
 #include <QHeaderView>
@@ -52,6 +53,7 @@
 #include <QKeyEvent>
 #include <QLabel>
 #include <QLineEdit>
+#include <QMenu>
 #include <QPushButton>
 #include <QRadioButton>
 #include <QTabWidget>
@@ -69,6 +71,16 @@ const int MAXITEMS     = 10;
 const int GROUPS_ID    = 100;
 const int SUBMESHES_ID = 200;
 
+enum InfoRole {
+  TypeRole = Qt::UserRole + 10,
+  IdRole,
+};
+
+enum InfoType {
+  NodeConnectivity = 100,
+  ElemConnectivity,
+};
+
 /*!
   \class ExtraWidget
   \internal
@@ -1194,6 +1206,7 @@ SMESHGUI_TreeElemInfo::SMESHGUI_TreeElemInfo( QWidget* parent )
   QVBoxLayout* l = new QVBoxLayout( frame() );
   l->setMargin( 0 );
   l->addWidget( myInfo );
+  connect( myInfo, SIGNAL( itemDoubleClicked( QTreeWidgetItem*, int ) ), this, SLOT( itemDoubleClicked( QTreeWidgetItem*, int ) ) );
 }
 
 /*!
@@ -1250,24 +1263,28 @@ void SMESHGUI_TreeElemInfo::information( const QList<long>& ids )
             QTreeWidgetItem* i = createItem( conItem );
             i->setText( 0, tr( "BALL_ELEMENTS" ) );
             i->setText( 1, con );
+           i->setData( 1, TypeRole, NodeConnectivity );
           }
           con = formatConnectivity( connectivity, SMDSAbs_Edge );
           if ( !con.isEmpty() ) {
             QTreeWidgetItem* i = createItem( conItem );
             i->setText( 0, tr( "EDGES" ) );
             i->setText( 1, con );
+           i->setData( 1, TypeRole, NodeConnectivity );
           }
           con = formatConnectivity( connectivity, SMDSAbs_Face );
           if ( !con.isEmpty() ) {
             QTreeWidgetItem* i = createItem( conItem );
             i->setText( 0, tr( "FACES" ) );
             i->setText( 1, con );
+           i->setData( 1, TypeRole, NodeConnectivity );
           }
           con = formatConnectivity( connectivity, SMDSAbs_Volume );
           if ( !con.isEmpty() ) {
             QTreeWidgetItem* i = createItem( conItem );
             i->setText( 0, tr( "VOLUMES" ) );
             i->setText( 1, con );
+           i->setData( 1, TypeRole, NodeConnectivity );
           }
         }
         else {
@@ -1410,6 +1427,8 @@ void SMESHGUI_TreeElemInfo::information( const QList<long>& ids )
           QTreeWidgetItem* nodeItem = createItem( conItem, Bold );
           nodeItem->setText( 0, QString( "%1 %2 / %3" ).arg( tr( "NODE" ) ).arg( idx ).arg( e->NbNodes() ) );
           nodeItem->setText( 1, QString( "#%1" ).arg( node->GetID() ) );
+         nodeItem->setData( 1, TypeRole, ElemConnectivity );
+         nodeItem->setData( 1, IdRole, node->GetID() );
           nodeItem->setExpanded( false );
           // node coordinates
           QTreeWidgetItem* coordItem = createItem( nodeItem );
@@ -1439,24 +1458,28 @@ void SMESHGUI_TreeElemInfo::information( const QList<long>& ids )
               QTreeWidgetItem* i = createItem( nconItem );
               i->setText( 0, tr( "EDGES" ) );
               i->setText( 1, con );
+             i->setData( 1, TypeRole, NodeConnectivity );
             }
             con = formatConnectivity( connectivity, SMDSAbs_Ball );
             if ( !con.isEmpty() ) {
               QTreeWidgetItem* i = createItem( nconItem );
               i->setText( 0, tr( "BALL_ELEMENTS" ) );
               i->setText( 1, con );
+             i->setData( 1, TypeRole, NodeConnectivity );
             }
             con = formatConnectivity( connectivity, SMDSAbs_Face );
             if ( !con.isEmpty() ) {
               QTreeWidgetItem* i = createItem( nconItem );
               i->setText( 0, tr( "FACES" ) );
               i->setText( 1, con );
+             i->setData( 1, TypeRole, NodeConnectivity );
             }
             con = formatConnectivity( connectivity, SMDSAbs_Volume );
             if ( !con.isEmpty() ) {
               QTreeWidgetItem* i = createItem( nconItem );
               i->setText( 0, tr( "VOLUMES" ) );
               i->setText( 1, con );
+             i->setData( 1, TypeRole, NodeConnectivity );
             }
           }
         }
@@ -1600,6 +1623,33 @@ QTreeWidgetItem* SMESHGUI_TreeElemInfo::createItem( QTreeWidgetItem* parent, int
   return item;
 }
 
+void SMESHGUI_TreeElemInfo::contextMenuEvent( QContextMenuEvent* e )
+{
+  QList< QTreeWidgetItem* > widgets = myInfo->selectedItems();
+  if ( widgets.isEmpty() ) return;
+  QTreeWidgetItem* aTreeItem = widgets.first();
+  int type = aTreeItem->data( 1, TypeRole ).toInt();
+  int id   = aTreeItem->data( 1, IdRole ).toInt();
+  QMenu menu;
+  QAction* a = menu.addAction( tr( "SHOW_ITEM_INFO" ) );
+  if ( type == ElemConnectivity && id > 0 && menu.exec( e->globalPos() ) == a )
+    emit( itemInfo( id ) );
+  else if ( type == NodeConnectivity && menu.exec( e->globalPos() ) == a )
+    emit( itemInfo( aTreeItem->text( 1 ) ) );
+}
+
+void  SMESHGUI_TreeElemInfo::itemDoubleClicked( QTreeWidgetItem* theItem, int theColumn )
+{
+  if ( theItem ) {
+    int type = theItem->data( 1, TypeRole ).toInt();
+    int id   = theItem->data( 1, IdRole ).toInt();
+    if ( type == ElemConnectivity && id > 0 )
+      emit( itemInfo( id ) );
+    else if ( type == NodeConnectivity )
+      emit( itemInfo( theItem->text( 1 ) ) );
+  }
+}
+
 /*!
   \class GrpComputor
   \brief Mesh information computer
@@ -2147,9 +2197,11 @@ SMESHGUI_MeshInfoDlg::SMESHGUI_MeshInfoDlg( QWidget* parent, int page )
   connect( helpBtn,     SIGNAL( clicked() ),              this, SLOT( help() ) );
   connect( myTabWidget, SIGNAL( currentChanged( int  ) ), this, SLOT( updateSelection() ) );
   connect( myMode,      SIGNAL( buttonClicked( int  ) ),  this, SLOT( modeChanged() ) );
-  connect( myID,        SIGNAL( textEdited( QString  ) ), this, SLOT( idChanged() ) );
+  connect( myID,        SIGNAL( textChanged( QString ) ), this, SLOT( idChanged() ) );
   connect( SMESHGUI::GetSMESHGUI(),  SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( deactivate() ) );
   connect( SMESHGUI::GetSMESHGUI(),  SIGNAL( SignalCloseAllDialogs() ),        this, SLOT( reject() ) );
+  connect( myElemInfo,  SIGNAL( itemInfo( int ) ),     this, SLOT( showItemInfo( int ) ) );
+  connect( myElemInfo,  SIGNAL( itemInfo( QString ) ), this, SLOT( showItemInfo( QString ) ) );
 
   updateSelection();
 }
@@ -2354,8 +2406,26 @@ void SMESHGUI_MeshInfoDlg::idChanged()
       }
     }
     selector->AddOrRemoveIndex( IO, ID, false );
-    if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow() )
+    if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow() ) {
       aViewWindow->highlight( IO, true, true );
+      aViewWindow->Repaint();
+    }
     myElemInfo->showInfo( ids, myMode->checkedId() == ElemMode );
   }
 }
+
+void SMESHGUI_MeshInfoDlg::showItemInfo( int id )
+{
+  if ( id > 0 &&  myActor->GetObject()->GetMesh()->FindNode( id ) ) {
+    myMode->button( NodeMode )->click();
+    myID->setText( QString::number( id ) );
+  }
+}
+
+void SMESHGUI_MeshInfoDlg::showItemInfo( const QString& theStr )
+{
+  if ( !theStr.isEmpty() ) {
+    myMode->button( ElemMode )->click();
+    myID->setText( theStr );
+  }
+}
index a2fa39930e6deb2dc6b12f5d505dee906d3d1ce3..3b44baedd20fed1bff2dcb7372109b447181ff63 100644 (file)
@@ -41,6 +41,7 @@
 #include CORBA_SERVER_HEADER(SMESH_Group)
 
 class QButtonGroup;
+class QContextMenuEvent;
 class QLabel;
 class QLineEdit;
 class QPushButton;
@@ -161,6 +162,10 @@ protected:
   QString      formatConnectivity( Connectivity, int );
   XYZ          gravityCenter( const SMDS_MeshElement* );
 
+signals:
+  void         itemInfo( int );
+  void         itemInfo( const QString& );
+
 private slots:
   void         showPrevious();
   void         showNext();
@@ -177,6 +182,8 @@ private:
 
 class SMESHGUI_EXPORT SMESHGUI_SimpleElemInfo : public SMESHGUI_ElemInfo
 {
+  Q_OBJECT
+
 public:
   SMESHGUI_SimpleElemInfo( QWidget* = 0 );
 
@@ -190,6 +197,8 @@ private:
 
 class SMESHGUI_EXPORT SMESHGUI_TreeElemInfo : public SMESHGUI_ElemInfo
 {
+  Q_OBJECT;
+
   class ItemDelegate;
 
   enum { Bold = 0x01, All = 0x80 };
@@ -198,9 +207,13 @@ public:
   SMESHGUI_TreeElemInfo( QWidget* = 0 );
 
 protected:
+  void             contextMenuEvent( QContextMenuEvent* e );
   void             information( const QList<long>& );
   void             clearInternal();
 
+private slots:
+  void             itemDoubleClicked( QTreeWidgetItem*, int );
+  
 private:
   QTreeWidgetItem* createItem( QTreeWidgetItem* = 0, int = 0 );
   
@@ -291,6 +304,8 @@ private slots:
   void deactivate();
   void modeChanged();
   void idChanged();
+  void showItemInfo( int );
+  void showItemInfo( const QString& );
 
 private:
   QTabWidget*        myTabWidget;