]> SALOME platform Git repositories - modules/smesh.git/commitdiff
Salome HOME
INT PAL 0052872: 'Make 0D Elements on Element Nodes' dialog does not restore local...
authorimn <imn@opencascade.com>
Fri, 19 Feb 2016 13:35:12 +0000 (16:35 +0300)
committerimn <imn@opencascade.com>
Fri, 19 Feb 2016 13:35:12 +0000 (16:35 +0300)
src/SMESHGUI/SMESHGUI_Add0DElemsOnAllNodesDlg.cxx
src/SMESHGUI/SMESHGUI_Add0DElemsOnAllNodesDlg.h
src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx
src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.h

index 8578dbf34df7ba4d870a17963d2d73c5b16e3354..ffd1be740f463effadc106563553f317c895232e 100644 (file)
@@ -78,13 +78,13 @@ SMESHGUI_Add0DElemsOnAllNodesDlg::SMESHGUI_Add0DElemsOnAllNodesDlg()
 
   // Seletction type radio buttons
 
-  QGroupBox* selTypeGrBox = new QGroupBox( mainFrame() );
+  mySelTypeGrBox = new QGroupBox( mainFrame() );
   //
-  QRadioButton*    objBtn = new QRadioButton( tr( "SMESH_SUBMESH_GROUP"),selTypeGrBox );
-  QRadioButton*   elemBtn = new QRadioButton( tr( "SMESH_ELEMENTS" ),selTypeGrBox );
-  QRadioButton*   nodeBtn = new QRadioButton( tr( "SMESH_NODES" ),selTypeGrBox );
+  QRadioButton*    objBtn = new QRadioButton( tr( "SMESH_SUBMESH_GROUP"),mySelTypeGrBox );
+  QRadioButton*   elemBtn = new QRadioButton( tr( "SMESH_ELEMENTS" ),mySelTypeGrBox );
+  QRadioButton*   nodeBtn = new QRadioButton( tr( "SMESH_NODES" ),mySelTypeGrBox );
   //
-  QHBoxLayout* selTypeLay = new QHBoxLayout( selTypeGrBox );
+  QHBoxLayout* selTypeLay = new QHBoxLayout( mySelTypeGrBox );
   selTypeLay->setMargin(MARGIN);
   selTypeLay->setSpacing(SPACING);
   selTypeLay->addWidget( objBtn  );
@@ -126,7 +126,7 @@ SMESHGUI_Add0DElemsOnAllNodesDlg::SMESHGUI_Add0DElemsOnAllNodesDlg()
   aLay->setMargin(MARGIN);
   aLay->setSpacing(SPACING);
   //
-  aLay->addWidget( selTypeGrBox,          0, 0, 1, 5  );
+  aLay->addWidget( mySelTypeGrBox,        0, 0, 1, 5  );
   //
   aLay->addWidget( objectWg( 0, Label  ), 1, 0 );
   aLay->addWidget( objectWg( 0, Btn    ), 1, 1 );
@@ -137,9 +137,10 @@ SMESHGUI_Add0DElemsOnAllNodesDlg::SMESHGUI_Add0DElemsOnAllNodesDlg()
 
   // Signals
 
-  connect( myGroupBox,      SIGNAL( toggled( bool )),     SLOT( onGroupChecked() ));
+  connect( myGroupBox,      SIGNAL( toggled( bool )),     SLOT( onGroupChecked( bool ) ));
   connect( mySelTypeBtnGrp, SIGNAL( buttonClicked(int) ), SLOT( onSelTypeChange(int)));
-
+  connect( SMESHGUI::GetSMESHGUI(), SIGNAL( SignalDeactivateActiveDialog() ),
+           this,                    SLOT( DeactivateActiveDialog() ) );
   onSelTypeChange( SEL_OBJECT );
 }
 
@@ -193,6 +194,67 @@ int SMESHGUI_Add0DElemsOnAllNodesDlg::getSelectionType() const
   return mySelTypeBtnGrp->checkedId();
 }
 
+//=================================================================================
+/*!
+  \brief Reactivate dialog box, when mouse pointer goes into it.
+*/
+//=================================================================================
+void SMESHGUI_Add0DElemsOnAllNodesDlg::enterEvent( QEvent* event)
+{
+  ActivateThisDialog();
+}
+
+//=================================================================================
+/*!
+ * \brief SLOT to deactivate dialog
+ */
+//=================================================================================
+
+void SMESHGUI_Add0DElemsOnAllNodesDlg::DeactivateActiveDialog()
+{
+  if (myGroupBox->isEnabled()) {
+    mySelTypeGrBox->setEnabled(false);
+    myGroupBox->setEnabled(false);
+    myGroupLabel->setEnabled(false);
+    myGroupListCmBox->setEnabled(false);
+    myFilterBtn->setEnabled(false);
+    objectWg( 0, Label )->setEnabled(false);
+    objectWg( 0, Btn )->setEnabled(false);
+    objectWg( 0, Control )->setEnabled(false);
+    button( QtxDialog::OK )->setEnabled(false);
+    button( QtxDialog::Apply )->setEnabled(false);
+    button( QtxDialog::Close )->setEnabled(false);
+    button( QtxDialog::Help )->setEnabled(false);
+    setObjectText( 0, "" );
+    SMESHGUI::GetSMESHGUI()->ResetState();
+    SMESHGUI::GetSMESHGUI()->SetActiveDialogBox(0);
+  }
+}
+//=================================================================================
+/*!
+ * \brief SLOT to activate dialog
+ */
+//=================================================================================
+
+void SMESHGUI_Add0DElemsOnAllNodesDlg::ActivateThisDialog()
+{
+  if (!myGroupBox->isEnabled()) {
+    SMESHGUI::GetSMESHGUI()->SetActiveDialogBox( this );
+    mySelTypeGrBox->setEnabled(true);
+    myGroupBox->setEnabled(true);
+    myGroupLabel->setEnabled(true);
+    myGroupListCmBox->setEnabled(true);
+    myFilterBtn->setEnabled(true);
+    objectWg( 0, Label )->setEnabled(true);
+    objectWg( 0, Btn )->setEnabled(true);
+    objectWg( 0, Control )->setEnabled(true);
+    button( QtxDialog::OK )->setEnabled(true);
+    button( QtxDialog::Apply )->setEnabled(true);
+    button( QtxDialog::Close )->setEnabled(true);
+    button( QtxDialog::Help )->setEnabled(true);
+  }
+  emit selTypeChanged( getSelectionType() );
+}
 //================================================================================
 /*!
  * \brief Checks consistency of data
@@ -270,15 +332,16 @@ void SMESHGUI_Add0DElemsOnAllNodesOp::selectionDone()
   if (!myDlg->myGroupBox->isEnabled())         return; // inactive
 
   myIO.Nullify();
-  myDlg->setObjectText( 0, "");
   updateButtons();
 
   SALOME_ListIO aList;
   selectionMgr()->selectedObjects( aList );
   if ( aList.Extent() == 1 )
     myIO = aList.First();
-  else
+  else {
+    myDlg->setObjectText( 0, "" );
     return;
+  }
 
   QString ids;
   switch ( myDlg->getSelectionType() ) {
index 805b9316ba90962bcb24809958b96e0a28c641b7..6d03042e446db75ae0bb238484f8a54ab6ac77f7 100644 (file)
@@ -57,18 +57,25 @@ signals:
 
   void                           selTypeChanged( int selType );
 
+ protected:
+
+  virtual void enterEvent( QEvent* );
 
  private slots:
 
   void                           onGroupChecked ( bool on );
   void                           onSelTypeChange( int selType );
 
+  void                           ActivateThisDialog();
+  void                           DeactivateActiveDialog();
+
  private:
 
   friend class SMESHGUI_Add0DElemsOnAllNodesOp;
 
   QButtonGroup* mySelTypeBtnGrp;
   QPushButton*  myFilterBtn;
+  QGroupBox*    mySelTypeGrBox;
   QGroupBox*    myGroupBox;
   QLabel*       myGroupLabel;
   QComboBox*    myGroupListCmBox;
index f578c1c2f504ded1d79b6efeaab9f82d2c9c0031..26eb64fb3cdf0e7176e150d758638b9ad008b467 100644 (file)
@@ -122,15 +122,15 @@ QWidget* SMESHGUI_MakeNodeAtPointDlg::createMainFrame (QWidget* theParent)
   QPixmap iconSelect          (rm->loadPixmap("SMESH", tr("ICON_SELECT")));
 
   // constructor
-  QGroupBox* aPixGrp = new QGroupBox(tr("MOVE_NODE"), this);
-  aPixGrp->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
+  myGroupBox = new QGroupBox(tr("MOVE_NODE"), this);
+  myGroupBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
   myButtonGroup = new QButtonGroup(this);
-  QHBoxLayout* aPixGrpLayout = new QHBoxLayout(aPixGrp);
+  QHBoxLayout* aPixGrpLayout = new QHBoxLayout(myGroupBox);
   aPixGrpLayout->setMargin(MARGIN);
   aPixGrpLayout->setSpacing(SPACING);
 
-  myRButNodeToMove = new QRadioButton(aPixGrp);
-  myRButMoveWithoutNode = new QRadioButton(aPixGrp);
+  myRButNodeToMove = new QRadioButton(myGroupBox);
+  myRButMoveWithoutNode = new QRadioButton(myGroupBox);
   myRButNodeToMove->setIcon(iconMoveNode);
   myRButMoveWithoutNode->setIcon(iconMoveWithoutNode);
   myRButNodeToMove->setChecked(true);
@@ -260,14 +260,16 @@ QWidget* SMESHGUI_MakeNodeAtPointDlg::createMainFrame (QWidget* theParent)
   myPreviewChkBox = new QCheckBox( tr("PREVIEW"), aFrame);
 
   QVBoxLayout* aLay = new QVBoxLayout(aFrame);
-  aLay->addWidget(aPixGrp);
+  aLay->addWidget(myGroupBox);
   aLay->addWidget(myNodeToMoveGrp);
   aLay->addWidget(myDestinationGrp);
   aLay->addWidget(myPreviewChkBox);
 
-  connect(myDestBtn,          SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool)));
-  connect(myIdBtn,            SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool)));
-  connect(myButtonGroup,      SIGNAL (buttonClicked(int)),  SLOT(ConstructorsClicked(int)));
+  connect(myDestBtn,               SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool)));
+  connect(myIdBtn,                 SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool)));
+  connect(myButtonGroup,           SIGNAL (buttonClicked(int)),  SLOT(ConstructorsClicked(int)));
+  connect(SMESHGUI::GetSMESHGUI(), SIGNAL (SignalDeactivateActiveDialog()),
+          this,                    SLOT(DeactivateActiveDialog()));
 
   myIdBtn->setChecked(true);
 
@@ -343,6 +345,59 @@ void SMESHGUI_MakeNodeAtPointDlg::ConstructorsClicked (int constructorId)
   resize(minimumSizeHint());
 }
 
+//=================================================================================
+/*!
+  \brief Reactivate dialog box, when mouse pointer goes into it.
+*/
+//=================================================================================
+void SMESHGUI_MakeNodeAtPointDlg::enterEvent( QEvent* event)
+{
+  ActivateThisDialog();
+}
+
+//=================================================================================
+/*!
+ * \brief SLOT to deactivate dialog
+ */
+//=================================================================================
+
+void SMESHGUI_MakeNodeAtPointDlg::DeactivateActiveDialog()
+{
+  if (myGroupBox->isEnabled()) {
+    myGroupBox->setEnabled(false);
+    myNodeToMoveGrp->setEnabled(false);
+    myDestinationGrp->setEnabled(false);
+    myPreviewChkBox->setEnabled(false);
+    button( QtxDialog::OK )->setEnabled(false);
+    button( QtxDialog::Apply )->setEnabled(false);
+    button( QtxDialog::Close )->setEnabled(false);
+    button( QtxDialog::Help )->setEnabled(false);
+    SMESHGUI::GetSMESHGUI()->ResetState();
+    SMESHGUI::GetSMESHGUI()->SetActiveDialogBox(0);
+    emit deactivatedDialog();
+  }
+}
+//=================================================================================
+/*!
+ * \brief SLOT to activate dialog
+ */
+//=================================================================================
+
+void SMESHGUI_MakeNodeAtPointDlg::ActivateThisDialog()
+{
+  if (!myGroupBox->isEnabled()) {
+    myGroupBox->setEnabled(true);
+    myNodeToMoveGrp->setEnabled(true);
+    myDestinationGrp->setEnabled(true);
+    myPreviewChkBox->setEnabled(true);
+    button( QtxDialog::OK )->setEnabled(true);
+    button( QtxDialog::Apply )->setEnabled(true);
+    button( QtxDialog::Close )->setEnabled(true);
+    button( QtxDialog::Help )->setEnabled(true);
+    emit activatedDialog();
+  }
+}
+
 //================================================================================
 /*!
  * \brief Constructor
@@ -376,6 +431,8 @@ SMESHGUI_MakeNodeAtPointOp::SMESHGUI_MakeNodeAtPointOp()
   // note: this slot seems to be lost together with removed obsolete SMESHGUI_MoveNodesDlg class
   connect(myDlg->myId,SIGNAL (textChanged(const QString&)),SLOT(onTextChange(const QString&)));
   connect(myDlg->myUpdateBtn, SIGNAL (clicked()), this, SLOT(onUpdateDestination()));
+  connect(myDlg, SIGNAL (activatedDialog()), this, SLOT(onActivatedDialog()));
+  connect(myDlg, SIGNAL (deactivatedDialog()), this, SLOT(onDeactivatedDialog()));
 }
 
 void SMESHGUI_MakeNodeAtPointOp::onUpdateDestination()
@@ -605,7 +662,6 @@ void SMESHGUI_MakeNodeAtPointOp::onSelectionDone()
 {
   if ( !myDlg->isVisible() || !myDlg->isEnabled() )
     return;
-
   myNoPreview = true;
   try {
     SALOME_ListIO aList;
@@ -699,7 +755,7 @@ void SMESHGUI_MakeNodeAtPointOp::redisplayPreview()
   bool moveShown = false;
   if ( myMeshActor)
   {
-    const bool  isPreview = myDlg->myPreviewChkBox->isChecked();
+    const bool  isPreview = myDlg->myPreviewChkBox->isChecked() && myDlg->myPreviewChkBox->isEnabled();
     const bool isMoveNode = myDlg->myRButMoveWithoutNode->isChecked();
     QString msg;
     if ( isValid( msg ) )
@@ -850,6 +906,46 @@ void SMESHGUI_MakeNodeAtPointOp::onCloseView()
   mySimulation = 0;
 }
 
+//=================================================================================
+/*!
+ * \brief SLOT called when the activated dialog
+ */
+//=================================================================================
+void SMESHGUI_MakeNodeAtPointOp::onActivatedDialog()
+{
+  mySimulation = new SMESHGUI_MeshEditPreview(SMESH::GetViewWindow( getSMESHGUI() ) );
+  vtkProperty* aProp = vtkProperty::New();
+  aProp->SetRepresentationToWireframe();
+  aProp->SetColor(250, 0, 250);
+  aProp->SetPointSize(5);
+  aProp->SetLineWidth( SMESH::GetFloat("SMESH:element_width",1) + 1);
+  mySimulation->GetActor()->SetProperty(aProp);
+  aProp->Delete();
+  SMESHGUI_SelectionOp::startOperation();
+  SMESH::SetPointRepresentation( true );
+  onSelectionDone();
+}
+
+//=================================================================================
+/*!
+ * \brief SLOT called when the deactivated dialog
+ */
+//=================================================================================
+void SMESHGUI_MakeNodeAtPointOp::onDeactivatedDialog()
+{
+  if ( mySimulation )
+  {
+    mySimulation->SetVisibility(false);
+    delete mySimulation;
+    mySimulation = 0;
+  }
+  if ( myMeshActor ) {
+    myMeshActor = 0;
+  }
+  SMESH::SetPointRepresentation( false );
+  SMESHGUI_SelectionOp::stopOperation();
+}
+
 //================================================================================
 /*!
  * \brief SLOT called when the node id is manually changed
index 805f9505ec3a43e5e9a79dc75c853c74bcd34d22..ecbe6fe87dda25d16717542e1aad100d67000292 100644 (file)
@@ -75,6 +75,8 @@ private slots:
   void                           onDestCoordChanged();
   void                           onOpenView();
   void                           onCloseView();
+  void                           onActivatedDialog();
+  void                           onDeactivatedDialog();
 
 private:
   int                           GetConstructorId();
@@ -107,6 +109,7 @@ private:
 
   QWidget*                      myMainFrame;
 
+  QGroupBox*                    myGroupBox;
   QButtonGroup*                 myButtonGroup;
   QRadioButton*                 myRButNodeToMove;
   QRadioButton*                 myRButMoveWithoutNode;
@@ -134,9 +137,18 @@ private:
 
   friend class SMESHGUI_MakeNodeAtPointOp;
 
+protected:
+  virtual void                  enterEvent( QEvent* );
+
+signals:
+  void                          activatedDialog();
+  void                          deactivatedDialog();
+
 private slots:
   void                          ButtonToggled( bool );
   void                          ConstructorsClicked( int );
+  void                          ActivateThisDialog();
+  void                          DeactivateActiveDialog();
 };
 
 #endif // SMESHGUI_MAKENODEATPOINTDLG_H