X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMBase%2FGEOMBase_Helper.cxx;h=d7fa50169943083c59382e1e8e36b49811bb445e;hb=efb533a09c6c5f38d840c71cb4e73355d13af530;hp=808c58f50bc6fb2adffe3bc5137beb087b60b43b;hpb=5e7cf6df5a668d1e1608ba946c59ba34234d8942;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 808c58f50..d7fa50169 --- 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 @@ -24,6 +24,8 @@ // File : GEOMBase_Helper.cxx // Author : Sergey ANIKIN, Open CASCADE S.A.S. (sergey.anikin@opencascade.com) +#include + #include "GEOMBase_Helper.h" #include "GEOMBase.h" #include "GEOM_Operation.h" @@ -88,8 +90,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 +147,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 +181,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 +223,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 +245,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 +279,7 @@ void GEOMBase_Helper::displayPreview( const bool display, erasePreview( update ); return; } - + isPreview = true; QString msg; if ( !isValid( msg ) ) @@ -283,20 +295,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 +334,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 +356,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 +387,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 +490,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 +543,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 @@ -670,11 +700,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()); } @@ -689,7 +719,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()); } @@ -726,8 +756,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() ); @@ -738,7 +768,7 @@ bool GEOMBase_Helper::openCommand() } else { - MESSAGE("anOp->_is_nil() = true") + MESSAGE("anOp->_is_nil() = true"); } return res; @@ -809,10 +839,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; @@ -821,16 +851,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(); @@ -849,7 +879,7 @@ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction, b showError( msg ); return false; } - + if(erasePreviewFlag) erasePreview( false ); @@ -877,23 +907,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 ); @@ -915,12 +945,20 @@ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction, b } if ( nbObjs ) { + const QString anOpName( typeid(*this).name() ); + // The operator name may have the following format: 24PrimitiveGUI_CylinderDlg + // clean it up to get the simple operator (here Cylinder) name into the log. + const QRegExp rx("^[^\w]*_(.*)Dlg$"); + const int pos = rx.indexIn(anOpName); + SalomeApp_Application::logStructuredUserEvent( "Geom", + "geometry", + pos == -1 ? anOpName : rx.cap(1), + "applied" ); commitCommand(); updateObjBrowser(); if( SUIT_Application* anApp = SUIT_Session::session()->activeApplication() ) { LightApp_Application* aLightApp = dynamic_cast( anApp ); if(aLightApp) { - QString anOpName( typeid(*this).name() ); aLightApp->emitOperationFinished( "Geometry", anOpName, anEntryList ); if ( !isDisableBrowsing() ) @@ -940,19 +978,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; @@ -1147,7 +1185,7 @@ GEOM::GEOM_Object_ptr GEOMBase_Helper::findObjectInFather (GEOM::GEOM_Object_ptr } if (inStudy) return aReturnObject._retn(); - + return GEOM::GEOM_Object::_nil(); } @@ -1160,7 +1198,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(); @@ -1182,7 +1220,7 @@ GEOM::GEOM_Object_ptr GEOMBase_Helper::findObjectInFather( GEOM::GEOM_Object_ptr } } } - + return object._retn(); } @@ -1192,7 +1230,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 } //================================================================ @@ -1201,7 +1239,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; } @@ -1213,7 +1251,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 //================================================================ @@ -1232,7 +1270,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 //================================================================ @@ -1252,7 +1290,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. @@ -1260,7 +1298,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 @@ -1291,7 +1329,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. @@ -1299,7 +1337,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