+
+//=================================================================================
+// function : onDetect
+// purpose :
+//=================================================================================
+void RepairGUI_GlueDlg::onDetect()
+{
+ clearTemporary();
+ QString msg;
+ if (!isValid(msg)) {
+ showError(msg);
+ return;
+ }
+
+ buttonOk()->setEnabled(false);
+ buttonApply()->setEnabled(false);
+ globalSelection(GEOM_ALLSHAPES);
+
+ GEOM::ListOfGO_var objList = new GEOM::ListOfGO;
+ objList->length( myObjects.count() );
+ for ( int i = 0; i < myObjects.count(); ++i )
+ objList[i] = myObjects[i].copy();
+
+ GEOM::GEOM_IShapesOperations_var anOper = GEOM::GEOM_IShapesOperations::_narrow(getOperation());
+ GEOM::ListOfGO_var aList;
+ if (myGlueMode == TopAbs_FACE)
+ aList = anOper->GetGlueFaces( objList, myTolEdt2->value());
+ else if (myGlueMode == TopAbs_EDGE)
+ aList = anOper->GetGlueEdges( objList, myTolEdt2->value());
+
+ for (int i = 0, n = aList->length(); i < n; i++)
+ myTmpObjs << GEOM::GeomObjPtr(aList[i].in());
+
+ if (!myTmpObjs.isEmpty()) {
+ if (myGlueMode == TopAbs_FACE)
+ msg = tr("FACES_FOR_GLUING_ARE_DETECTED").arg(myTmpObjs.count());
+ else if (myGlueMode == TopAbs_EDGE)
+ msg = tr("EDGES_FOR_GLUING_ARE_DETECTED").arg(myTmpObjs.count());
+ mySubShapesChk->setChecked(true);
+ }
+ else {
+ if (myGlueMode == TopAbs_FACE)
+ msg = tr("THERE_ARE_NO_FACES_FOR_GLUING");
+ else if (myGlueMode == TopAbs_EDGE)
+ msg = tr("THERE_ARE_NO_EDGES_FOR_GLUING");
+ }
+
+ connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
+ this, SLOT(SelectionIntoArgument())) ;
+ if ( myGlueMode == TopAbs_FACE )
+ SUIT_MessageBox::information(this, tr("GEOM_GLUE_FACES_DETECT_TITLE"), msg, tr("Close"));
+ else
+ SUIT_MessageBox::information(this, tr("GEOM_GLUE_EDGES_DETECT_TITLE"), msg, tr("Close"));
+ updateButtonState();
+ activateSelection();
+}
+
+//=================================================================================
+// function : activateSelection
+// purpose : Redisplay preview and Activate selection
+//=================================================================================
+void RepairGUI_GlueDlg::activateSelection()
+{
+ erasePreview(false);
+
+ int anId = getConstructorId();
+ if (anId == 0) {
+ // Case of whole gluing
+ disconnect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
+ this, SLOT(SelectionIntoArgument()));
+
+ globalSelection(GEOM_ALLSHAPES);
+ if ( myObjects.isEmpty() )
+ SelectionIntoArgument();
+
+ connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
+ this, SLOT(SelectionIntoArgument()));
+ }
+ else {
+ // Second case of gluing
+ if (!mySubShapesChk->isChecked())
+ globalSelection(GEOM_ALLSHAPES);
+ else {
+ displayPreview(true, true, false, false, 2/*line width*/, 1/*display mode*/, Quantity_NOC_RED);
+ disconnect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
+ this, SLOT(SelectionIntoArgument())) ;
+ globalSelection(GEOM_PREVIEW);
+ connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
+ this, SLOT(SelectionIntoArgument())) ;
+ }
+ }
+ updateViewer();
+}
+
+//=================================================================================
+// function : updateButtonState
+// purpose : Update button state
+//=================================================================================
+void RepairGUI_GlueDlg::updateButtonState()
+{
+ int anId = getConstructorId();
+ bool hasMainObj = !myObjects.isEmpty();
+ if (anId == 0) {
+ buttonOk()->setEnabled(hasMainObj);
+ buttonApply()->setEnabled(hasMainObj);
+ }
+ else
+ {
+ LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
+ SALOME_ListIO aSelList;
+ aSelMgr->selectedObjects(aSelList);
+
+ SALOME_ListIteratorOfListIO it (aSelList);
+ bool wasSelected = it.More() > 0;
+ bool wasDetected = !myTmpObjs.isEmpty();
+ buttonOk()->setEnabled(hasMainObj && wasDetected && wasSelected);
+ buttonApply()->setEnabled(hasMainObj && wasDetected && wasSelected);
+ mySubShapesChk->setEnabled(hasMainObj && wasDetected);
+ myDetectBtn->setEnabled(hasMainObj);
+ if (!hasMainObj || !wasDetected)
+ mySubShapesChk->setChecked(false);
+ }
+}
+
+//=================================================================================
+// function : clearTemporary
+// purpose : Remove temporary objects from engine
+//=================================================================================
+void RepairGUI_GlueDlg::clearTemporary()
+{
+ myTmpObjs.clear();
+}
+
+//=================================================================================
+// function : onTolerChanged
+// purpose : Remove temporary objects from engine
+//=================================================================================
+void RepairGUI_GlueDlg::onTolerChanged(double /*theVal*/)
+{
+ clearTemporary();
+ activateSelection();
+ updateButtonState();
+}
+
+//=================================================================================
+// function : onSubShapesChk
+// purpose : Update selection mode
+//=================================================================================
+void RepairGUI_GlueDlg::onSubShapesChk()
+{
+ if (!mySubShapesChk->isChecked())
+ clearTemporary();
+ activateSelection();
+ updateButtonState();
+}
+
+//=================================================================================
+// function : ClickOnCancel
+// purpose : Remove temporary objects from engine and call method of base class
+//=================================================================================
+void RepairGUI_GlueDlg::ClickOnCancel()
+{
+ clearTemporary();
+ GEOMBase_Skeleton::ClickOnCancel();
+}