Salome HOME
0052451: "Assign a set of hypotheses" is disabled by mistake
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_MergeDlg.cxx
index 877d6b6d42f7869a2ad1bdfd71fedf115319c790..046bd063c7f71b280a438b4cfed5e9801ae9771e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2014  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
@@ -6,7 +6,7 @@
 // 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.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 #include <vtkIntArray.h>
 #include <vtkProperty2D.h>
 #include <vtkPointData.h>
-#include <vtkConfigure.h>
-#if !defined(VTK_XVERSION)
-#define VTK_XVERSION (VTK_MAJOR_VERSION<<16)+(VTK_MINOR_VERSION<<8)+(VTK_BUILD_VERSION)
-#endif
 
 // Qt includes
 #include <QApplication>
@@ -124,7 +120,7 @@ namespace SMESH
 
       // Create and display actor
       vtkDataSetMapper* aMapper = vtkDataSetMapper::New();
-      aMapper->SetInput( myIdGrid );
+      aMapper->SetInputData( myIdGrid );
 
       myIdActor = SALOME_Actor::New();
       myIdActor->SetInfinitive(true);
@@ -140,19 +136,16 @@ namespace SMESH
       myPointsNumDataSet = vtkUnstructuredGrid::New();
 
       myPtsMaskPoints = vtkMaskPoints::New();
-      myPtsMaskPoints->SetInput(myPointsNumDataSet);
+      myPtsMaskPoints->SetInputData(myPointsNumDataSet);
       myPtsMaskPoints->SetOnRatio(1);
 
       myPtsSelectVisiblePoints = vtkSelectVisiblePoints::New();
-      myPtsSelectVisiblePoints->SetInput(myPtsMaskPoints->GetOutput());
+      myPtsSelectVisiblePoints->SetInputConnection(myPtsMaskPoints->GetOutputPort());
       myPtsSelectVisiblePoints->SelectInvisibleOff();
       myPtsSelectVisiblePoints->SetTolerance(0.1);
     
       myPtsLabeledDataMapper = vtkLabeledDataMapper::New();
-      myPtsLabeledDataMapper->SetInput(myPtsSelectVisiblePoints->GetOutput());
-#if (VTK_XVERSION < 0x050200)
-      myPtsLabeledDataMapper->SetLabelFormat("%g");
-#endif
+      myPtsLabeledDataMapper->SetInputConnection(myPtsSelectVisiblePoints->GetOutputPort());
       myPtsLabeledDataMapper->SetLabelModeToLabelScalars();
     
       vtkTextProperty* aPtsTextProp = vtkTextProperty::New();
@@ -250,7 +243,7 @@ namespace SMESH
           anArray->SetValue( i, myIDs[i] );
         aDataSet->GetPointData()->SetScalars( anArray );
         anArray->Delete();
-        myPtsMaskPoints->SetInput( aDataSet );
+        myPtsMaskPoints->SetInputData( aDataSet );
         myPointLabels->SetVisibility( theIsActorVisible );
       }
       else {
@@ -437,12 +430,14 @@ SMESHGUI_MergeDlg::SMESHGUI_MergeDlg (SMESHGUI* theModule, int theAction)
   RemoveGroupButton = new QPushButton(tr("SMESH_BUT_REMOVE"), GroupCoincidentWidget);
 
   SelectAllCB = new QCheckBox(tr("SELECT_ALL"), GroupCoincidentWidget);
+  ShowIDs = new QCheckBox(myAction == 1 ? tr("SHOW_ELEMS_IDS") : tr("SHOW_NODES_IDS"), GroupCoincidentWidget);
 
   GroupCoincidentLayout->addWidget(ListCoincident,    0,   0, 4, 2);
   GroupCoincidentLayout->addWidget(DetectButton,      0,   2);
   GroupCoincidentLayout->addWidget(AddGroupButton,    2, 2);
   GroupCoincidentLayout->addWidget(RemoveGroupButton, 3, 2);
-  GroupCoincidentLayout->addWidget(SelectAllCB,       4, 0, 1, 3);
+  GroupCoincidentLayout->addWidget(SelectAllCB,       4, 0);
+  GroupCoincidentLayout->addWidget(ShowIDs,           4, 1);
   GroupCoincidentLayout->setRowMinimumHeight(1, 10);
   GroupCoincidentLayout->setRowStretch(1, 5);
 
@@ -513,6 +508,8 @@ SMESHGUI_MergeDlg::SMESHGUI_MergeDlg (SMESHGUI* theModule, int theAction)
 
   this->resize(10,10);
 
+  ShowIDs->setChecked( true );
+
   Init(); // Initialisations
 }
 
@@ -552,7 +549,7 @@ void SMESHGUI_MergeDlg::Init()
   
   /* signals and slots connections */
   connect(buttonOk,     SIGNAL(clicked()), this, SLOT(ClickOnOk()));
-  connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
+  connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject()));
   connect(buttonApply,  SIGNAL(clicked()), this, SLOT(ClickOnApply()));
   connect(buttonHelp,   SIGNAL(clicked()), this, SLOT(ClickOnHelp()));
 
@@ -562,6 +559,7 @@ void SMESHGUI_MergeDlg::Init()
   connect(AddGroupButton, SIGNAL (clicked()), this, SLOT(onAddGroup()));
   connect(RemoveGroupButton, SIGNAL (clicked()), this, SLOT(onRemoveGroup()));
   connect(SelectAllCB, SIGNAL(toggled(bool)), this, SLOT(onSelectAll(bool)));
+  connect(ShowIDs, SIGNAL(toggled(bool)), this, SLOT(onSelectGroup()));
   connect(ListEdit, SIGNAL (itemSelectionChanged()), this, SLOT(onSelectElementFromGroup()));
   connect(AddElemButton, SIGNAL (clicked()), this, SLOT(onAddElement()));
   connect(RemoveElemButton, SIGNAL (clicked()), this, SLOT(onRemoveElement()));
@@ -571,7 +569,7 @@ void SMESHGUI_MergeDlg::Init()
   connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
   connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
   /* to close dialog if study change */
-  connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
+  connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(reject()));
 
   // Init Mesh field from selection
   SelectionIntoArgument();
@@ -670,7 +668,7 @@ bool SMESHGUI_MergeDlg::ClickOnApply()
       aMeshEditor->MergeElements (aGroupsOfElements.inout());
 
     if ( myTypeId == 0 ) {
-      if (myAction ==0)
+      if (myAction == 0 )
         SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_INFORMATION"),
                                      tr("SMESH_MERGED_NODES").arg(QString::number(ListCoincident->count()).toLatin1().data()));
       else
@@ -684,6 +682,8 @@ bool SMESHGUI_MergeDlg::ClickOnApply()
   
   ListCoincident->clear();
   
+  myEditCurrentArgument = (QWidget*)LineEditMesh;
+
   SMESH::UpdateView();
   SMESHGUI::Modified();
   
@@ -697,14 +697,14 @@ bool SMESHGUI_MergeDlg::ClickOnApply()
 void SMESHGUI_MergeDlg::ClickOnOk()
 {
   if (ClickOnApply())
-    ClickOnCancel();
+    reject();
 }
 
 //=================================================================================
-// function : ClickOnCancel()
+// function : reject()
 // purpose  :
 //=================================================================================
-void SMESHGUI_MergeDlg::ClickOnCancel()
+void SMESHGUI_MergeDlg::reject()
 {
   myIdPreview->SetPointsLabeled(false);
   SMESH::SetPointRepresentation(false);
@@ -718,7 +718,7 @@ void SMESHGUI_MergeDlg::ClickOnCancel()
   if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
     aViewWindow->SetSelectionMode(ActorSelection);
 
-  reject();
+  QDialog::reject();
 }
 
 //=================================================================================
@@ -835,6 +835,7 @@ void SMESHGUI_MergeDlg::onDetect()
 
   ListCoincident->selectAll();
   updateControls();
+  SMESH::UpdateView();
 }
 
 //=================================================================================
@@ -845,8 +846,13 @@ void SMESHGUI_MergeDlg::onSelectGroup()
 {
   if (myIsBusy || !myActor)
     return;
+
+  if( ListCoincident->count() != ListCoincident->selectedItems().count() )
+    SelectAllCB->setChecked( false );
+
   myEditCurrentArgument = (QWidget*)ListCoincident;
 
+  myIsBusy = true;
   ListEdit->clear();
   
   TColStd_MapOfInteger anIndices;
@@ -872,18 +878,22 @@ void SMESHGUI_MergeDlg::onSelectGroup()
   aList.Append(myActor->getIO());
   mySelectionMgr->setSelectedObjects(aList,false);
   
-  if (myAction == 0) {
-    myIdPreview->SetPointsData(myActor->GetObject()->GetMesh(), anIndices);
-    myIdPreview->SetPointsLabeled(!anIndices.IsEmpty(), myActor->GetVisibility());
-  }
-  else {
-    std::list< gp_XYZ > aGrCentersXYZ;
-    FindGravityCenter(anIndices, aGrCentersXYZ);
-    myIdPreview->SetElemsData( anIndices, aGrCentersXYZ);
-    myIdPreview->SetPointsLabeled(!anIndices.IsEmpty(), myActor->GetVisibility());
-  }
+  if (ShowIDs->isChecked()) 
+    if (myAction == 0) {
+      myIdPreview->SetPointsData(myActor->GetObject()->GetMesh(), anIndices);
+      myIdPreview->SetPointsLabeled(!anIndices.IsEmpty(), myActor->GetVisibility());
+    }
+    else {
+      std::list< gp_XYZ > aGrCentersXYZ;
+      FindGravityCenter(anIndices, aGrCentersXYZ);
+      myIdPreview->SetElemsData( anIndices, aGrCentersXYZ);
+      myIdPreview->SetPointsLabeled(!anIndices.IsEmpty(), myActor->GetVisibility());
+    }
+  else
+    myIdPreview->SetPointsLabeled(false);
 
   updateControls();
+  myIsBusy = false;
 }
 
 //=================================================================================
@@ -920,17 +930,20 @@ void SMESHGUI_MergeDlg::onSelectElementFromGroup()
   SALOME_ListIO aList;
   aList.Append(myActor->getIO());
   mySelectionMgr->setSelectedObjects(aList);
-
-  if (myAction == 0) {
-    myIdPreview->SetPointsData(myActor->GetObject()->GetMesh(), anIndices);
-    myIdPreview->SetPointsLabeled(!anIndices.IsEmpty(), myActor->GetVisibility());
-  }
-  else {
-    std::list< gp_XYZ > aGrCentersXYZ;
-    FindGravityCenter(anIndices, aGrCentersXYZ);
-    myIdPreview->SetElemsData(anIndices, aGrCentersXYZ);
-    myIdPreview->SetPointsLabeled(!anIndices.IsEmpty(), myActor->GetVisibility());
-  }
+  
+  if (ShowIDs->isChecked())
+    if (myAction == 0) {
+      myIdPreview->SetPointsData(myActor->GetObject()->GetMesh(), anIndices);
+      myIdPreview->SetPointsLabeled(!anIndices.IsEmpty(), myActor->GetVisibility());
+    }
+    else {
+      std::list< gp_XYZ > aGrCentersXYZ;
+      FindGravityCenter(anIndices, aGrCentersXYZ);
+      myIdPreview->SetElemsData(anIndices, aGrCentersXYZ);
+      myIdPreview->SetPointsLabeled(!anIndices.IsEmpty(), myActor->GetVisibility());
+    }
+  else 
+    myIdPreview->SetPointsLabeled(false);
 }
 
 //=================================================================================
@@ -982,9 +995,15 @@ void SMESHGUI_MergeDlg::onRemoveGroup()
     delete anItem;
 
   ListEdit->clear();
+  myIdPreview->SetPointsLabeled(false);
   updateControls();
-
+  SMESH::UpdateView();
   myIsBusy = false;
+
+  if( ListCoincident->count() == 0 ) {
+    myEditCurrentArgument = (QWidget*)LineEditMesh;
+    SelectAllCB->setChecked( false );
+  }
 }
 
 //=================================================================================
@@ -1041,6 +1060,11 @@ void SMESHGUI_MergeDlg::onRemoveElement()
   
   myIsBusy = false;
   onEditGroup();
+
+  if( ListCoincident->count() == 0 ) {
+    myEditCurrentArgument = (QWidget*)LineEditMesh;
+    SelectAllCB->setChecked( false );
+  }
 }
 
 //=================================================================================
@@ -1132,7 +1156,7 @@ void SMESHGUI_MergeDlg::SelectionIntoArgument()
     if (!myActor)
       myActor = SMESH::FindActorByObject(myMesh);
     
-    if ( myActor && myTypeId ==1 ) {
+    if ( myActor && myTypeId == 1 && mySelector->IsSelectionEnabled() ) {
       mySubMeshOrGroup = SMESH::SMESH_IDSource::_nil();
       mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter);
       
@@ -1226,26 +1250,6 @@ void SMESHGUI_MergeDlg::enterEvent(QEvent*)
     ActivateThisDialog();
 }
 
-//=================================================================================
-// function : closeEvent()
-// purpose  :
-//=================================================================================
-void SMESHGUI_MergeDlg::closeEvent(QCloseEvent*)
-{
-  /* same than click on cancel button */
-  ClickOnCancel();
-}
-
-//=======================================================================
-//function : hideEvent
-//purpose  : caused by ESC key
-//=======================================================================
-void SMESHGUI_MergeDlg::hideEvent (QHideEvent *)
-{
-  if (!isMinimized())
-    ClickOnCancel();
-}
-
 //=================================================================================
 // function : keyPressEvent()
 // purpose  :
@@ -1305,12 +1309,14 @@ void SMESHGUI_MergeDlg::onTypeChanged (int id)
       GroupCoincidentWidget->show();
       SMESH::SetPointRepresentation(true);
       if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
-        aViewWindow->SetSelectionMode(NodeSelection);
+        if( mySelector->IsSelectionEnabled() )
+          aViewWindow->SetSelectionMode(NodeSelection);
     }
     else {
       GroupCoincident->show();
       if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
-        aViewWindow->SetSelectionMode(CellSelection);
+        if( mySelector->IsSelectionEnabled() )
+          aViewWindow->SetSelectionMode(CellSelection);
     }
     GroupEdit->show();
     break;