X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMBase%2FGEOMBase_Helper.cxx;h=a304693fb704133602f5dca81ced07b50176606a;hb=d617faae6bc5aeb91b63796618a20c7c13037b6c;hp=c183e3ec694ff244ab8d623963e47e5182dace34;hpb=1dc813d9b75088fe64e6e8d055438963caa2ad7f;p=modules%2Fgeom.git diff --git a/src/GEOMBase/GEOMBase_Helper.cxx b/src/GEOMBase/GEOMBase_Helper.cxx old mode 100755 new mode 100644 index c183e3ec6..a304693fb --- a/src/GEOMBase/GEOMBase_Helper.cxx +++ b/src/GEOMBase/GEOMBase_Helper.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2023 CEA, EDF, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -88,8 +88,8 @@ GEOM::GEOM_Gen_ptr GEOMBase_Helper::getGeomEngine() // Function : GEOMBase_Helper // Purpose : //================================================================ -GEOMBase_Helper::GEOMBase_Helper( SUIT_Desktop* desktop ) - : myDisplayer( 0 ), myCommand( 0 ), myViewWindow( 0 ), isPreview( false ), myDesktop( desktop ), +GEOMBase_Helper::GEOMBase_Helper( SUIT_Desktop* desktop, SUIT_ViewWindow* aVW ) + : myDisplayer( 0 ), myCommand( 0 ), myViewWindow( aVW ), isPreview( false ), myDesktop( desktop ), myIsApplyAndClose( false ), myIsOptimizedBrowsing( false ), myIsWaitCursorEnabled( true ), myIsDisableBrowsing(false), myIsDisplayResult(true) { @@ -145,10 +145,10 @@ void GEOMBase_Helper::display( GEOM::GEOM_Object_ptr object, const bool updateVi { // Unset color of shape ( this color may be set during preview displaying ) // Default color will be used -// getDisplayer()->UnsetColor(); + // getDisplayer()->UnsetColor(); getDisplayer()->UnsetWidth(); - - MESSAGE("GEOMBase_Helper::display myTexture = "<GetTexture()) + + MESSAGE("GEOMBase_Helper::display myTexture = "<GetTexture()); // Enable activisation of selection getDisplayer()->SetToActivate( true ); @@ -179,9 +179,11 @@ void GEOMBase_Helper::erase( GEOM::GEOM_Object_ptr object, const bool updateView { if ( !object->_is_nil() ) { QString entry = getEntry( object ); - getDisplayer()->Erase( new SALOME_InteractiveObject( - entry.toLatin1().constData(), - "GEOM", strdup( GEOMBase::GetName( object ).toLatin1().constData() ) ), true, updateView ); + QString name = GEOMBase::GetName( object ); + getDisplayer()->Erase ( new SALOME_InteractiveObject(entry.toUtf8().constData(), + "GEOM", + name.toUtf8().constData() ), + true, updateView ); } } @@ -219,8 +221,12 @@ void GEOMBase_Helper::redisplay( GEOM::GEOM_Object_ptr object, getDisplayer()->SetToActivate( true ); QString entry = getEntry( object ); - getDisplayer()->Redisplay(new SALOME_InteractiveObject - (entry.toLatin1().constData(), "GEOM", strdup(GEOMBase::GetName(object).toLatin1().constData())), false); + QString name = GEOMBase::GetName( object ); + getDisplayer()->Redisplay + (new SALOME_InteractiveObject (entry.toUtf8().constData(), + "GEOM", + name.toUtf8().constData()), + false); } if ( withChildren ) { @@ -237,8 +243,12 @@ void GEOMBase_Helper::redisplay( GEOM::GEOM_Object_ptr object, if ( !CORBA::is_nil( aChild ) ) { if ( !aChild->_is_nil() ) { QString entry = getEntry( aChild ); - getDisplayer()->Redisplay( new SALOME_InteractiveObject( - entry.toLatin1().constData(), "GEOM", strdup( GEOMBase::GetName( aChild ).toLatin1().constData() ) ), false ); + QString name = GEOMBase::GetName( aChild ); + getDisplayer()->Redisplay + ( new SALOME_InteractiveObject( entry.toUtf8().constData(), + "GEOM", + name.toUtf8().constData() ), + false ); } } } @@ -267,7 +277,7 @@ void GEOMBase_Helper::displayPreview( const bool display, erasePreview( update ); return; } - + isPreview = true; QString msg; if ( !isValid( msg ) ) @@ -283,20 +293,20 @@ void GEOMBase_Helper::displayPreview( const bool display, try { SUIT_OverrideCursor wc; ObjectList objects; - + if ( !isWaitCursorEnabled() ) wc.suspend(); - + if ( !execute( objects ) || !getOperation()->IsDone() ) { wc.suspend(); } else { for ( ObjectList::iterator it = objects.begin(); it != objects.end(); ++it ) { - GEOM::GEOM_Object_var obj=*it; + GEOM::GEOM_Object_var obj = *it; displayPreview( obj, true, activate, false, lineWidth, displayMode, color ); if ( toRemoveFromEngine ) - obj->UnRegister(); + obj->UnRegister(); } } } @@ -322,7 +332,7 @@ void GEOMBase_Helper::displayPreview( GEOM::GEOM_Object_ptr object, const int displayMode, const int color ) { - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); // Set color for preview shape getDisplayer()->SetColor( color == -1 ? Quantity_NOC_VIOLET : color ); @@ -344,7 +354,7 @@ void GEOMBase_Helper::displayPreview( GEOM::GEOM_Object_ptr object, SALOME_Prs* aPrs = getDisplayer()->BuildPrs( object ); if ( aPrs == 0 || aPrs->IsNull() ) return; - + // Make preview not clippable aPrs->SetClippable (false); @@ -375,17 +385,17 @@ void GEOMBase_Helper::displayPreview( const SALOME_Prs* prs, if ( myViewWindow == 0 ) return; - + // Display prs SUIT_ViewManager* aViewManager = myViewWindow->getViewManager(); if ( aViewManager->getType() == OCCViewer_Viewer::Type() || aViewManager->getType() == SVTK_Viewer::Type() ) - { - SUIT_ViewModel* aViewModel = aViewManager->getViewModel(); - SALOME_View* aView = dynamic_cast(aViewModel); - if (aView) - aView->Display( getDisplayer(), prs ); - } + { + SUIT_ViewModel* aViewModel = aViewManager->getViewModel(); + SALOME_View* aView = dynamic_cast(aViewModel); + if (aView) + aView->Display( getDisplayer(), prs ); + } // Add prs to the preview list myPreview.push_back( (SALOME_Prs*)prs ); @@ -478,8 +488,12 @@ void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const std::list continue; QString anEntry = getEntry( anObj ); if ( anEntry != "" ) - aListOfIO.Append( new SALOME_InteractiveObject( - anEntry.toLatin1().constData(), "GEOM", strdup( GEOMBase::GetName( anObj ).toLatin1().constData() ) ) ); + { + //MESSAGE("anEntry: "<< anEntry.toStdString().c_str()); + QString aName = GEOMBase::GetName( anObj ); + aListOfIO.Append( new SALOME_InteractiveObject( anEntry.toUtf8().constData(), + "GEOM", aName.toUtf8().constData() )); + } } getDisplayer()->LocalSelection( aListOfIO, modes ); @@ -527,6 +541,20 @@ void GEOMBase_Helper::localSelection( GEOM::GEOM_Object_ptr obj, const int mode localSelection( obj, modes ); } +//================================================================ +// Function : localSelection +// Purpose : Activate selection of sub-shapes in accordance with mode +// mode is from TopAbs_ShapeEnum +//================================================================ +void GEOMBase_Helper::localSelection( const std::string& entry, const std::string& name, const std::list modes) +{ + SALOME_ListIO aListOfIO; + QString aName = name.c_str(); + aListOfIO.Append( new SALOME_InteractiveObject( entry.c_str(), + "GEOM", aName.toUtf8().constData() )); + getDisplayer()->LocalSelection( aListOfIO, modes ); +} + //================================================================ // Function : localSelection // Purpose : Activate selection of sub-shapes in accordance with mode @@ -595,12 +623,10 @@ QString GEOMBase_Helper::addInStudy( GEOM::GEOM_Object_ptr theObj, const char* t if ( !aStudy || theObj->_is_nil() ) return QString(); - SALOMEDS::Study_var aStudyDS = GeometryGUI::ClientStudyToStudy(aStudy); - GEOM::GEOM_Object_ptr aFatherObj = getFather( theObj ); SALOMEDS::SObject_var aSO = - getGeomEngine()->AddInStudy(aStudyDS, theObj, theName, aFatherObj); + getGeomEngine()->AddInStudy(theObj, theName, aFatherObj); QString anEntry; if ( !aSO->_is_nil() ) { @@ -609,7 +635,7 @@ QString GEOMBase_Helper::addInStudy( GEOM::GEOM_Object_ptr theObj, const char* t } // Each dialog is responsible for this method implementation, // default implementation does nothing - restoreSubShapes(aStudyDS, aSO); + restoreSubShapes(aSO); aSO->UnRegister(); return anEntry; @@ -619,15 +645,14 @@ QString GEOMBase_Helper::addInStudy( GEOM::GEOM_Object_ptr theObj, const char* t // Function : restoreSubShapes // Purpose : restore tree of argument's sub-shapes under the resulting shape //================================================================ -void GEOMBase_Helper::restoreSubShapes (SALOMEDS::Study_ptr /*theStudy*/, - SALOMEDS::SObject_ptr /*theSObject*/) +void GEOMBase_Helper::restoreSubShapes (SALOMEDS::SObject_ptr /*theSObject*/) { // do nothing by default // example of implementation in particular dialog: // GEOM::ListOfGO anArgs; // anArgs.length(0); // empty list means that all arguments should be restored - // getGeomEngine()->RestoreSubShapesSO(theStudy, theSObject, anArgs, + // getGeomEngine()->RestoreSubShapesSO(theSObject, anArgs, // /*theFindMethod=*/GEOM::FSM_GetInPlace, // /*theInheritFirstArg=*/false); } @@ -643,7 +668,7 @@ void GEOMBase_Helper::updateObjBrowser() const CAM_Module* module = app->module( "Geometry" ); SalomeApp_Module* appMod = dynamic_cast( module ); if ( appMod ) { - appMod->updateObjBrowser( true ); + appMod->updateObjBrowser(); } } } @@ -657,18 +682,6 @@ void GEOMBase_Helper::updateViewer() getDisplayer()->UpdateViewer(); } -//================================================================ -// Function : getStudyId -// Purpose : Get study Id -//================================================================ -int GEOMBase_Helper::getStudyId() const -{ - int anId = -1; - if ( getStudy() ) - anId = getStudy()->id(); - return anId; -} - //================================================================ // Function : getStudy // Purpose : Returns the active study. It is recommended to use @@ -685,11 +698,11 @@ SalomeApp_Study* GEOMBase_Helper::getStudy() const SUIT_Application* anApp = 0; QListIterator it( anAppList ); while ( it.hasNext() ) - { - anApp = it.next(); - if ( anApp && anApp->desktop() == aDesktop ) - break; - } + { + anApp = it.next(); + if ( anApp && anApp->desktop() == aDesktop ) + break; + } return dynamic_cast(anApp->activeStudy()); } @@ -704,7 +717,7 @@ QString GEOMBase_Helper::getEntry( GEOM::GEOM_Object_ptr object ) const if ( study ) { QString objIOR = GEOMBase::GetIORFromObject( object ); if ( objIOR != "" ) { - _PTR(SObject) SO ( study->studyDS()->FindObjectIOR( objIOR.toLatin1().constData() ) ); + _PTR(SObject) SO ( study->studyDS()->FindObjectIOR( objIOR.toUtf8().constData() ) ); if ( SO ) return QString::fromStdString(SO->GetID()); } @@ -719,7 +732,7 @@ QString GEOMBase_Helper::getEntry( GEOM::GEOM_Object_ptr object ) const GEOM_Displayer* GEOMBase_Helper::getDisplayer() { if ( !myDisplayer ) - myDisplayer = new GEOM_Displayer( getStudy() ); + myDisplayer = new GEOM_Displayer(); return myDisplayer; } @@ -741,8 +754,8 @@ bool GEOMBase_Helper::openCommand() bool res = false; if ( !getStudy() || hasCommand() ) { - MESSAGE("Getting out from openCommand()") - return res; + MESSAGE("Getting out from openCommand()"); + return res; } GEOM::GEOM_IOperations_var anOp = GEOM::GEOM_IOperations::_narrow( getOperation() ); @@ -753,7 +766,7 @@ bool GEOMBase_Helper::openCommand() } else { - MESSAGE("anOp->_is_nil() = true") + MESSAGE("anOp->_is_nil() = true"); } return res; @@ -824,10 +837,10 @@ bool GEOMBase_Helper::checkViewWindow() QList aViewWindowsList = SUIT_Session::session()->activeApplication()->desktop()->windows(); QListIterator it( aViewWindowsList ); while ( it.hasNext() ) - { - if ( myViewWindow == it.next() ) - return true; - } + { + if ( myViewWindow == it.next() ) + return true; + } } myViewWindow = 0; return false; @@ -836,16 +849,16 @@ bool GEOMBase_Helper::checkViewWindow() //================================================================ // Function : onAccept // Purpose : This method should be called from dialog's slots onOk() and onApply() -// It perfroms user input validation, then it +// It performs user input validation, then it // performs a proper operation and manages transactions, etc. //================================================================ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction, bool erasePreviewFlag ) { SalomeApp_Study* appStudy = dynamic_cast( SUIT_Session::session()->activeApplication()->activeStudy() ); - if ( !appStudy ) + if ( !appStudy ) { - MESSAGE("appStudy is empty") - return false; + MESSAGE("appStudy is empty"); + return false; } _PTR(Study) aStudy = appStudy->studyDS(); @@ -864,7 +877,7 @@ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction, b showError( msg ); return false; } - + if(erasePreviewFlag) erasePreview( false ); @@ -892,23 +905,23 @@ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction, b QString aName = getObjectName(obj); if (aName.isEmpty()) { aName = getNewObjectName(currObj); - if ( nbObjs > 1 ) { - if (aName.isEmpty()) - aName = getPrefix(obj); - if (nbObjs <= 30) { - // Try to find a unique name - aName = GEOMBase::GetDefaultName(aName, extractPrefix()); - } else { - // Don't check name uniqueness in case of numerous objects - aName = aName + "_" + QString::number(aNumber++); - } - } else { - // PAL6521: use a prefix, if some dialog box doesn't reimplement getNewObjectName() - if ( aName.isEmpty() ) - aName = GEOMBase::GetDefaultName( getPrefix( obj ) ); - } + if ( nbObjs > 1 ) { + if (aName.isEmpty()) + aName = getPrefix(obj); + if (nbObjs <= 30) { + // Try to find a unique name + aName = GEOMBase::GetDefaultName(aName, extractPrefix()); + } else { + // Don't check name uniqueness in case of numerous objects + aName = aName + "_" + QString::number(aNumber++); + } + } else { + // PAL6521: use a prefix, if some dialog box doesn't reimplement getNewObjectName() + if ( aName.isEmpty() ) + aName = GEOMBase::GetDefaultName( getPrefix( obj ) ); + } } - anEntryList << addInStudy( obj, aName.toLatin1().constData() ); + anEntryList << addInStudy( obj, aName.toUtf8().constData() ); // updateView=false if( isDisplayResult() ) display( obj, false ); @@ -955,19 +968,19 @@ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction, b catch( const SALOME::SALOME_Exception& e ) { SalomeApp_Tools::QtCatchCorbaException( e ); abortCommand(); - MESSAGE("Exception catched") + MESSAGE("Exception caught"); } updateViewer(); - MESSAGE("result ="<( app->activeStudy() ); _PTR(Study) aDStudy = appStudy->studyDS(); QString IOR = GEOMBase::GetIORFromObject( theFather ); - _PTR(SObject) SObj ( aDStudy->FindObjectIOR( IOR.toLatin1().constData() ) ); + _PTR(SObject) SObj ( aDStudy->FindObjectIOR( IOR.toUtf8().constData() ) ); bool inStudy = false; GEOM::GEOM_Object_var aReturnObject; @@ -1162,7 +1175,7 @@ GEOM::GEOM_Object_ptr GEOMBase_Helper::findObjectInFather (GEOM::GEOM_Object_ptr } if (inStudy) return aReturnObject._retn(); - + return GEOM::GEOM_Object::_nil(); } @@ -1175,7 +1188,7 @@ GEOM::GEOM_Object_ptr GEOMBase_Helper::findObjectInFather( GEOM::GEOM_Object_ptr int theIndex ) { GEOM::GEOM_Object_var object; - + SalomeApp_Study* study = dynamic_cast( SUIT_Session::session()->activeApplication()->activeStudy() ); if ( study ) { _PTR(Study) studyDS = study->studyDS(); @@ -1197,7 +1210,7 @@ GEOM::GEOM_Object_ptr GEOMBase_Helper::findObjectInFather( GEOM::GEOM_Object_ptr } } } - + return object._retn(); } @@ -1207,7 +1220,7 @@ GEOM::GEOM_Object_ptr GEOMBase_Helper::findObjectInFather( GEOM::GEOM_Object_ptr //================================================================ void GEOMBase_Helper::addSubshapesToStudy() { - //Impemented in Dialogs, called from Accept method + //Implemented in Dialogs, called from Accept method } //================================================================ @@ -1216,7 +1229,7 @@ void GEOMBase_Helper::addSubshapesToStudy() //================================================================ QList GEOMBase_Helper::getSourceObjects() { - //Impemented in Dialogs, called from Accept method + //Implemented in Dialogs, called from Accept method QList res; return res; } @@ -1228,7 +1241,7 @@ QList GEOMBase_Helper::getSourceObjects() // Returns valid object if only one object of the specified type is selected // (no matter global or local selection is activated). If \a type is TopAbs_SHAPE, // geometrical object of any valid type is expected. -// +// // \param type type of the object to be obtained from selection // \return selected geometrical object or nil object if selection is not satisfactory //================================================================ @@ -1247,7 +1260,7 @@ GEOM::GeomObjPtr GEOMBase_Helper::getSelected( TopAbs_ShapeEnum type ) // (no matter global or local selection is activated). The list of allowed // shape types is passed via \a types. If \a types includes TopAbs_SHAPE, // geometrical object of any valid type is expected. -// +// // \param types list of allowed shape types for the objects to be obtained from selection // \return selected geometrical object or nil object if selection is not satisfactory //================================================================ @@ -1267,7 +1280,7 @@ GEOM::GeomObjPtr GEOMBase_Helper::getSelected( const QList& ty // // The \a type parameter specifies allowed type of the object(s) being selected. // The \a count parameter specifies exact number of the objects to be retrieved from selection. -// The \a strict parameter specifies policy being applied to the selection. +// The \a strict parameter specifies policy being applied to the selection. // If \a count < 0, then any number of the selected objects is valid (including 0). // In this case, if \a strict is \c true (default), all selected objects should satisfy // the specified \a type. @@ -1275,7 +1288,7 @@ GEOM::GeomObjPtr GEOMBase_Helper::getSelected( const QList& ty // In this case, if \a strict is \c true (default), function returns empty list if total number of selected // objects does not correspond to the \a count parameter. Otherwise (if \a strict is \c false), // function returns valid list of objects if at least \a count objects satisfy specified \a type. -// +// // \param type type of the object(s) to be obtained from selection // \param count number of items to be retrieved from selection // \param strict selection policy @@ -1306,7 +1319,7 @@ static bool typeInList( TopAbs_ShapeEnum type, const QList& ty // // The \a types parameter specifies allowed types of the object(s) being selected. // The \a count parameter specifies exact number of the objects to be retrieved from selection. -// The \a strict parameter specifies policy being applied to the selection. +// The \a strict parameter specifies policy being applied to the selection. // If \a count < 0, then any number of the selected objects is valid (including 0). // In this case, if \a strict is \c true (default), all selected objects should satisfy // the specified \a type. @@ -1314,7 +1327,7 @@ static bool typeInList( TopAbs_ShapeEnum type, const QList& ty // In this case, if \a strict is \c true (default), function returns empty list if total number of selected // objects does not correspond to the \a count parameter. Otherwise (if \a strict is \c false), // function returns valid list of objects if at least \a count objects satisfy specified \a type. -// +// // \param types list of allowed shape types for the objects to be obtained from selection // \param count number of items to be retrieved from selection // \param strict selection policy @@ -1365,7 +1378,7 @@ QList GEOMBase_Helper::getSelected( const QListGetIShapesOperations( getStudyId() ); + GEOM::ShapesOpPtr shapesOp = getGeomEngine()->GetIShapesOperations(); subShape.take( shapesOp->GetSubShape( object.get(), idx ) ); // take ownership! } if ( typeInList( (TopAbs_ShapeEnum)(subShape->GetShapeType()), types ) ) {