X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_TranslationDlg.cxx;h=be53d01e411b6af819f752acae39abb5693a8b4d;hp=bd5db98e7b3d7d4e30e993464663efab27d5d0a8;hb=7a7d7e6e48067265c3c05f5063ffb934d9056b74;hpb=5c19bc1e1684ec6a466423361949ed7b60556968 diff --git a/src/SMESHGUI/SMESHGUI_TranslationDlg.cxx b/src/SMESHGUI/SMESHGUI_TranslationDlg.cxx index bd5db98e7..be53d01e4 100644 --- a/src/SMESHGUI/SMESHGUI_TranslationDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_TranslationDlg.cxx @@ -362,14 +362,25 @@ void SMESHGUI_TranslationDlg::Init (bool ResetControls) myObjectsNames.clear(); myMeshes.clear(); - myEditCurrentArgument = 0; - LineEditElements->clear(); + myEditCurrentArgument = LineEditElements; + LineEditElements->setFocus(); myElementsId = ""; myNbOkElements = 0; buttonOk->setEnabled(false); buttonApply->setEnabled(false); + if ( !ResetControls && !isApplyAndClose() && // make highlight move upon [Apply] (IPAL20729) + myActor && !myActor->getIO().IsNull() && + ActionGroup->button( MOVE_ELEMS_BUTTON )->isChecked() && + !CheckBoxMesh->isChecked() ) // move selected elements + { + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + { + aViewWindow->highlight( myActor->getIO(), false, false ); + aViewWindow->highlight( myActor->getIO(), true, true ); + } + } myActor = 0; if (ResetControls) { @@ -382,12 +393,10 @@ void SMESHGUI_TranslationDlg::Init (bool ResetControls) ActionGroup->button( MOVE_ELEMS_BUTTON )->setChecked(true); CheckBoxMesh->setChecked(false); -// MakeGroupsCheck->setChecked(false); -// MakeGroupsCheck->setEnabled(false); myPreviewCheckBox->setChecked(false); onDisplaySimulation(false); - onSelectMesh(false); } + onSelectMesh(CheckBoxMesh->isChecked()); } //================================================================================= @@ -593,7 +602,6 @@ bool SMESHGUI_TranslationDlg::ClickOnApply() Init(false); ConstructorsClicked(GetConstructorId()); - SelectionIntoArgument(); SMESHGUI::Modified(); } @@ -737,6 +745,8 @@ void SMESHGUI_TranslationDlg::onTextChange (const QString& theNewText) void SMESHGUI_TranslationDlg::SelectionIntoArgument() { if (myBusy) return; + if (myFilterDlg && myFilterDlg->isVisible()) return; // filter dlg active + BusyLocker lock( myBusy ); // clear myActor = 0; @@ -762,13 +772,15 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument() return; int aNbUnits = 0; - if (myEditCurrentArgument == (QWidget*)LineEditElements) { + if (myEditCurrentArgument == (QWidget*)LineEditElements) + { myElementsId = ""; myObjects.clear(); myObjectsNames.clear(); myMeshes.clear(); - for ( SALOME_ListIteratorOfListIO it( aList ); it.More(); it.Next() ) { + for ( SALOME_ListIteratorOfListIO it( aList ); it.More(); it.Next() ) + { Handle(SALOME_InteractiveObject) IO = it.Value(); SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO( IO ); if ( aMesh->_is_nil() ) @@ -778,25 +790,24 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument() if ( !anActor ) anActor = SMESH::FindActorByEntry( IO->getEntry() ); - if ( !anActor && !CheckBoxMesh->isChecked() ) - return; - - if ( !SMESH::IObjectToInterface( IO )->_is_nil() ) { - if ( _PTR(Study) aStudy = SMESH::GetActiveStudyDocument() ) { - _PTR(SObject) obj = aStudy->FindObjectID( qPrintable( QString( IO->getEntry() ) ) ); - _PTR(GenericAttribute) anAttr; - if ( obj && obj->FindAttribute( anAttr, "AttributeName" ) ) { - _PTR(AttributeName) aNameAttr( anAttr ); - myObjects << SMESH::IObjectToInterface( IO ); - myObjectsNames << aNameAttr->Value().c_str(); - myMeshes << aMesh; - } + // if ( !anActor && !CheckBoxMesh->isChecked() ) -- elems can be selected by Filter + // return; + + SMESH::SMESH_IDSource_var idSrc = SMESH::IObjectToInterface( IO ); + if ( _PTR(SObject) obj = SMESH::FindSObject( idSrc )) + { + std::string name = obj->GetName(); + if ( !name.empty() ) + { + myObjects << idSrc; + myObjectsNames << name.c_str(); + myMeshes << aMesh; } } - - myActor = anActor; + if ( anActor ) + myActor = anActor; } - + // MakeGroups is available if there are groups and "Copy" int aNbGroups = 0; for ( int i = 0; i < myMeshes.count(); i++ ) @@ -811,10 +822,11 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument() } if (CheckBoxMesh->isChecked()) { - SMESH::GetNameOfSelectedIObjects( mySelectionMgr, aString ); if (myMeshes.isEmpty()) return; - } else { + SMESH::GetNameOfSelectedIObjects( mySelectionMgr, aString ); + } + else { aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, aList.First(), aString); myElementsId = aString; if (aNbUnits < 1) @@ -822,16 +834,15 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument() } myNbOkElements = true; - } else { + } + else // set coordinates by a picked node + { Handle(SALOME_InteractiveObject) IO = aList.First(); - if ((SMESH::GetMeshByIO(IO))->_is_nil()) - return; - SMESH_Actor* anActor = SMESH::FindActorByObject(SMESH::GetMeshByIO(IO)); + SMESH_Actor* anActor = SMESH::FindActorByEntry( IO->getEntry() ); if (!anActor) - anActor = SMESH::FindActorByEntry(IO->getEntry()); - if (!anActor && !CheckBoxMesh->isChecked()) return; + aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString); if (aNbUnits != 1) return; @@ -999,7 +1010,6 @@ void SMESHGUI_TranslationDlg::onSelectMesh (bool toSelectMesh) aViewWindow->SetSelectionMode( CellSelection ); LineEditElements->setReadOnly(false); LineEditElements->setValidator(myIdValidator); - onTextChange(LineEditElements->text()); hidePreview(); } @@ -1090,15 +1100,24 @@ void SMESHGUI_TranslationDlg::keyPressEvent( QKeyEvent* e ) //================================================================================= void SMESHGUI_TranslationDlg::setFilters() { - if(myMeshes.isEmpty()) { - SUIT_MessageBox::critical(this, - tr("SMESH_ERROR"), - tr("NO_MESH_SELECTED")); - return; + if ( myMeshes.isEmpty() ) { + SUIT_MessageBox::critical(this, tr("SMESH_ERROR"), tr("NO_MESH_SELECTED")); + return; } - if ( !myFilterDlg ) + if ( !myFilterDlg ) { myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, SMESH::ALL ); + connect(myFilterDlg, SIGNAL(Accepted()), SLOT(onFilterAccepted())); + } + QList types; + if ( myMeshes[0]->NbEdges() ) types << SMESH::EDGE; + if ( myMeshes[0]->NbFaces() ) types << SMESH::FACE; + if ( myMeshes[0]->NbVolumes() ) types << SMESH::VOLUME; + if ( myMeshes[0]->NbBalls() ) types << SMESH::BALL; + if ( myMeshes[0]->Nb0DElements()) types << SMESH::ELEM0D; + if ( types.count() > 1 ) types << SMESH::ALL; + + myFilterDlg->Init( types ); myFilterDlg->SetSelection(); myFilterDlg->SetMesh( myMeshes[0] ); myFilterDlg->SetSourceWg( LineEditElements ); @@ -1106,6 +1125,23 @@ void SMESHGUI_TranslationDlg::setFilters() myFilterDlg->show(); } +//======================================================================= +// name : onFilterAccepted() +// Purpose : SLOT. Called when Filter dlg closed with OK button. +// Activate [Apply] if no Actor is available +//======================================================================= +void SMESHGUI_TranslationDlg::onFilterAccepted() +{ + if ( myMeshes.length() > 0 && !buttonOk->isEnabled() ) + { + myElementsId = LineEditElements->text(); + QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts); + myNbOkElements = aListElementsId.count(); + buttonOk->setEnabled( myNbOkElements ); + buttonApply->setEnabled( myNbOkElements ); + } +} + //================================================================================= // function : isValid // purpose : @@ -1138,12 +1174,14 @@ bool SMESHGUI_TranslationDlg::isValid() // function : onDisplaySimulation // purpose : Show/Hide preview //================================================================================= -void SMESHGUI_TranslationDlg::onDisplaySimulation( bool toDisplayPreview ) { - if (myPreviewCheckBox->isChecked() && toDisplayPreview) { - - if (isValid() && myNbOkElements) { +void SMESHGUI_TranslationDlg::onDisplaySimulation( bool toDisplayPreview ) +{ + if (myPreviewCheckBox->isChecked() && toDisplayPreview) + { + if (isValid() && myNbOkElements) + { QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts); - + SMESH::long_array_var anElementsId = new SMESH::long_array; anElementsId->length(aListElementsId.count()); @@ -1179,7 +1217,7 @@ void SMESHGUI_TranslationDlg::onDisplaySimulation( bool toDisplayPreview ) { } setSimulationPreview( aMeshPreviewStruct ); } catch (...) { - + } } else {