X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_DeleteOp.cxx;h=da2cd3739a300c4b2c0dc1001bc9544ca57c5c91;hb=a1431f03eac1d1aed4203d0568d987c41ce939b3;hp=1e9b8008e62fab87a4309244c7e2650145dd9e7c;hpb=8c87cbf681f35c575bf15818e2afc226c272404d;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_DeleteOp.cxx b/src/HYDROGUI/HYDROGUI_DeleteOp.cxx index 1e9b8008..da2cd373 100644 --- a/src/HYDROGUI/HYDROGUI_DeleteOp.cxx +++ b/src/HYDROGUI/HYDROGUI_DeleteOp.cxx @@ -47,58 +47,77 @@ void HYDROGUI_DeleteOp::startOperation() { HYDROGUI_Operation::startOperation(); - HYDROData_SequenceOfObjects aFullSeq; // selected objects with their back-references - QStringList aFullNames; - HYDROData_SequenceOfObjects aSeq = HYDROGUI_Tool::GetSelectedObjects( module() ); - if( !aSeq.IsEmpty() ) + if( aSeq.IsEmpty() ) { - for( Standard_Integer anIndex = 1, aLength = aSeq.Length(); anIndex <= aLength; anIndex++ ) - { - Handle(HYDROData_Object) anObject = aSeq.Value( anIndex ); - if( !anObject.IsNull() ) - { - aFullSeq.Append( anObject ); - aFullNames.append( anObject->GetName() ); - - // collect the back-references - ObjectKind aKind = anObject->GetKind(); - if( aKind == KIND_IMAGE || aKind == KIND_POLYLINE ) - { - HYDROData_SequenceOfObjects anObjects; - QStringList aNames; - HYDROGUI_Tool::GetObjectBackReferences( module(), anObject, anObjects, aNames ); - aFullSeq.Append( anObjects ); - aFullNames.append( aNames ); - } - } - } + abort(); + return; + } + + bool anIsCanRemove = true; - aFullNames.removeDuplicates(); - aFullNames.sort(); + QStringList anObjNames; + for( Standard_Integer anIndex = 1, aLength = aSeq.Length(); anIndex <= aLength; anIndex++ ) + { + Handle(HYDROData_Entity) anObject = aSeq.Value( anIndex ); + if( anObject.IsNull() ) + continue; - QString aList = aFullNames.join( "\n" ); - int anAnswer = SUIT_MessageBox::question( module()->getApp()->desktop(), - tr( "DELETE_OBJECTS" ), - tr( "CONFIRM_DELETION" ).arg( aList ), - QMessageBox::Yes | QMessageBox::No, - QMessageBox::No ); - if( anAnswer == QMessageBox::No ) + if ( !anObject->CanRemove() ) { - abort(); - return; + anIsCanRemove = false; + break; } + + anObjNames.append( anObject->GetName() ); + } + + if ( !anIsCanRemove ) + { + SUIT_MessageBox::critical( module()->getApp()->desktop(), + tr( "DELETE_OBJECTS" ), tr( "DELETE_OBJECTS_IMPOSIBLE" ) ); + abort(); + return; + } + + anObjNames.removeDuplicates(); + anObjNames.sort(); + + // check the back-references + QMap aBackObjects = + HYDROGUI_Tool::GetObjectsBackReferences( module(), anObjNames ); + + if ( !aBackObjects.isEmpty() ) + { + SUIT_MessageBox::critical( module()->getApp()->desktop(), + tr( "DELETE_OBJECTS" ), tr( "DELETED_OBJECTS_HAS_BACKREFERENCES" ) ); + abort(); + return; + } + + QString aNamesList = anObjNames.join( "\n" ); + int anAnswer = SUIT_MessageBox::question( module()->getApp()->desktop(), + tr( "DELETE_OBJECTS" ), + tr( "CONFIRM_DELETION" ).arg( aNamesList ), + QMessageBox::Yes | QMessageBox::No, + QMessageBox::No ); + if( anAnswer == QMessageBox::No ) + { + abort(); + return; } startDocOperation(); - for( Standard_Integer anIndex = 1, aLength = aFullSeq.Length(); anIndex <= aLength; anIndex++ ) + + for( Standard_Integer anIndex = 1, aLength = aSeq.Length(); anIndex <= aLength; anIndex++ ) { - Handle(HYDROData_Object) anObject = aFullSeq.Value( anIndex ); - if( !anObject.IsNull() && !anObject->IsRemoved() ) + Handle(HYDROData_Entity) anObject = aSeq.Value( anIndex ); + if ( !anObject.IsNull() && !anObject->IsRemoved() ) anObject->Remove(); } + commitDocOperation(); - module()->update( UF_Model | UF_Viewer ); + module()->update( UF_Model | UF_Viewer | UF_OCCViewer | UF_VTKViewer ); commit(); }