Salome HOME
Fix bug 17655: 'Show' and 'Display only' don't work on Mesh root object.
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_SymmetryDlg.cxx
index 357eb8f41384485bb14ad9f7637b3e5428122f4f..1896683090ae04ac464f4d014ec47dc918ce0cd9 100644 (file)
@@ -277,6 +277,10 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam
   CheckBoxCopy->setText(tr("SMESH_CREATE_COPY"));
   GroupArgumentsLayout->addMultiCellWidget(CheckBoxCopy, 3, 3, 0, 2);
 
+  // CheckBox for groups generation
+  MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments);
+  MakeGroupsCheck->setChecked(false);
+  GroupArgumentsLayout->addMultiCellWidget(MakeGroupsCheck, 4, 4, 0, 2);
 
   SMESHGUI_SymmetryDlgLayout->addWidget(GroupArguments, 1, 0);
 
@@ -306,7 +310,7 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam
   myMeshOrSubMeshOrGroupFilter =
     new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
 
-  myHelpFileName = "/files/symmetry.htm";
+  myHelpFileName = "symmetry_page.html";
 
   Init();
 
@@ -331,6 +335,7 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam
   connect(mySMESHGUI,       SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
   connect(LineEditElements, SIGNAL(textChanged(const QString&)),   SLOT(onTextChange(const QString&)));
   connect(CheckBoxMesh,     SIGNAL(toggled(bool)),                 SLOT(onSelectMesh(bool)));
+  connect(CheckBoxCopy,     SIGNAL(toggled(bool)),                 SLOT(onCopyChecked(bool)));
 
   this->show(); /* displays Dialog */
 
@@ -377,6 +382,8 @@ void SMESHGUI_SymmetryDlg::Init (bool ResetControls)
 
     CheckBoxCopy->setChecked(false);
     CheckBoxMesh->setChecked(false);
+    MakeGroupsCheck->setChecked(false);
+    MakeGroupsCheck->setEnabled(false);
     onSelectMesh(false);
   }
 }
@@ -492,12 +499,18 @@ void SMESHGUI_SymmetryDlg::ClickOnApply()
     try {
       SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
       QApplication::setOverrideCursor(Qt::waitCursor);
-      aMeshEditor->Mirror(anElementsId, aMirror, aMirrorType, toCreateCopy);
+      if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() )
+        SMESH::ListOfGroups_var groups = 
+          aMeshEditor->MirrorMakeGroups(anElementsId, aMirror, aMirrorType);
+      else
+        aMeshEditor->Mirror(anElementsId, aMirror, aMirrorType, toCreateCopy);
       QApplication::restoreOverrideCursor();
     } catch (...) {
     }
 
     SMESH::UpdateView();
+    if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() )
+      mySMESHGUI->updateObjBrowser(true); // new groups may appear
     Init(false);
     ConstructorsClicked(GetConstructorId());
     SelectionIntoArgument();
@@ -654,6 +667,14 @@ void SMESHGUI_SymmetryDlg::SelectionIntoArgument()
   if (myEditCurrentArgument == (QWidget*)LineEditElements) {
     myElementsId = "";
 
+    // MakeGroups is available if there are groups and "Copy"
+    if ( myMesh->NbGroups() == 0 ) {
+      MakeGroupsCheck->setChecked(false);
+      MakeGroupsCheck->setEnabled(false);
+    }
+    else if (CheckBoxCopy->isChecked() ) {
+      MakeGroupsCheck->setEnabled(true);
+    }
     if (CheckBoxMesh->isChecked()) {
       SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
 
@@ -927,6 +948,19 @@ void SMESHGUI_SymmetryDlg::onVectorChanged()
   }
 }
 
+//=======================================================================
+//function : onCopyChecked
+//purpose  : slot called when Copy checkBox is checked
+//=======================================================================
+
+void SMESHGUI_SymmetryDlg::onCopyChecked(bool isOn)
+{
+  // enable "MakeGroupsCheck"
+  if ( !myMesh->_is_nil() && myMesh->NbGroups() == 0)
+    isOn = false;
+  MakeGroupsCheck->setEnabled(isOn);
+}
+
 //=================================================================================
 // function : keyPressEvent()
 // purpose  :