X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSALOME_PYQT%2FSALOME_PYQT_GUILight%2FSALOME_PYQT_PyModule.cxx;h=2451a727f1e41759bf8c0240f4c09a1b6a515e20;hb=d0b0c10e5649e0338079df4a53cf95044792d989;hp=459839a9b74c549636310023d832868e505a5644;hpb=630432f662544c0b3928874eb6825ba3bffa668b;p=modules%2Fgui.git diff --git a/src/SALOME_PYQT/SALOME_PYQT_GUILight/SALOME_PYQT_PyModule.cxx b/src/SALOME_PYQT/SALOME_PYQT_GUILight/SALOME_PYQT_PyModule.cxx index 459839a9b..2451a727f 100644 --- a/src/SALOME_PYQT/SALOME_PYQT_GUILight/SALOME_PYQT_PyModule.cxx +++ b/src/SALOME_PYQT/SALOME_PYQT_GUILight/SALOME_PYQT_PyModule.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2022 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -66,7 +66,7 @@ const int DEFAULT_GROUP = 40; QMutex myInitMutex; /*! DEBUG mode */ -const bool DEBUG = false; +const bool theDEBUG = false; /*! \var IsCallOldMethods @@ -168,17 +168,18 @@ public: FuncMsg( const QString& funcName ) { myName = funcName; - if ( DEBUG ) + if ( theDEBUG ) MESSAGE( qPrintable( myName ) << " [ begin ]" ); } ~FuncMsg() { - if ( DEBUG ) + if ( theDEBUG ) MESSAGE( qPrintable( myName ) << " [ end ]" ); } void message( const QString& msg ) { - if ( DEBUG ) + (void)msg; // unused in debug mode + if ( theDEBUG ) MESSAGE( qPrintable( myName ) << " : " << qPrintable( msg ) ); } private: @@ -371,7 +372,7 @@ QIcon PyModuleHelper::XmlHandler::loadIcon( const QString& fileName ) SUIT_ResourceMgr* resMgr = module()->getApp()->resourceMgr(); QPixmap pixmap = resMgr->loadPixmap( module()->name(), QApplication::translate( module()->name().toLatin1().data(), - fileName.toLatin1().data() ) ); + fileName.toUtf8().data() ) ); if ( !pixmap.isNull() ) icon = QIcon( pixmap ); } @@ -388,7 +389,7 @@ QIcon PyModuleHelper::XmlHandler::loadIcon( const QString& fileName ) */ void PyModuleHelper::XmlHandler::createMenu( QDomNode& parentNode, const int parentMenuId, - QMenu* parentPopup ) + QMenu* /*parentPopup*/ ) { if ( !module() || parentNode.isNull() ) return; @@ -609,7 +610,6 @@ void PyModuleHelper::XmlHandler::insertPopupItems( QDomNode& parentNode, QMenu* SALOME GUI modules. */ -PyModuleHelper::InterpMap PyModuleHelper::myInterpMap; LightApp_Module* PyModuleHelper::myInitModule = 0; /*! @@ -1716,46 +1716,26 @@ QString PyModuleHelper::engineIOR() const QString& myIOR; }; - static QString anIOR; - - if ( anIOR.isEmpty() ) { - // post request - PyInterp_Dispatcher::Get()->Exec( new EngineIORReq( myInterp, - const_cast( this ), - anIOR ) ); - } - + QString anIOR; + // post request + PyInterp_Dispatcher::Get()->Exec( new EngineIORReq( myInterp, + const_cast( this ), + anIOR ) ); return anIOR; } /*! \brief Initialize python subinterpreter (one per study). \internal - \param studyId study ID */ -void PyModuleHelper::initInterp( int studyId ) +void PyModuleHelper::initInterp() { FuncMsg fmsg( "--- PyModuleHelper::initInterp()" ); - // check study Id - if ( !studyId ) { - // Error! Study Id must not be 0! - myInterp = 0; - return; - } - QMutexLocker ml( &myInitMutex ); - // try to find the subinterpreter - if ( myInterpMap.contains( studyId ) ) { - // found! - myInterp = myInterpMap[ studyId ]; - return; - } - myInterp = new SALOME_PYQT_PyInterp(); myInterp->initialize(); - myInterpMap[ studyId ] = myInterp; #ifndef GUI_DISABLE_CORBA if ( !SUIT_PYTHON::initialized ) { @@ -1772,7 +1752,7 @@ void PyModuleHelper::initInterp( int studyId ) } // ... then call a method int embedded = 1; - PyObjWrapper aRes( PyObject_CallMethod( aMod, (char*)"salome_init", (char*)"ii", studyId, embedded ) ); + PyObjWrapper aRes( PyObject_CallMethod( aMod, (char*)"salome_init", (char*)"si", NULL, embedded ) ); if ( !aRes ) { // Error! PyErr_Print(); @@ -1863,11 +1843,12 @@ void PyModuleHelper::setWorkSpace() if ( d ) aWorkspace = d->workstack(); } -#if SIP_VERSION < 0x040800 - PyObjWrapper pyws( sipBuildResult( 0, "M", aWorkspace, sipClass_QWidget) ); -#else - PyObjWrapper pyws( sipBuildResult( 0, "D", aWorkspace, sipType_QWidget , NULL) ); +#if SIP_VERSION >= 0x041300 + static const sipTypeDef *sipType_QWidget = 0; + if (!sipType_QWidget) + sipType_QWidget = sipFindType("QWidget"); #endif + PyObjWrapper pyws( sipBuildResult( 0, "D", aWorkspace, sipType_QWidget , NULL) ); // ... and finally call Python module's setWorkSpace() method (obsolete) if ( PyObject_HasAttrString( myPyModule, (char*)"setWorkSpace" ) ) { PyObjWrapper res( PyObject_CallMethod( myPyModule, (char*)"setWorkSpace", (char*)"O", pyws.get() ) ); @@ -1905,10 +1886,9 @@ void PyModuleHelper::internalInitialize( CAM_Application* app ) LightApp_Study* aStudy = dynamic_cast( app->activeStudy() ); if ( !aStudy ) return; - int aStudyId = aStudy ? aStudy->id() : 0; // initialize Python subinterpreter (on per study) and put it in variable - initInterp( aStudyId ); + initInterp(); if ( !myInterp ) return; // Error @@ -2006,10 +1986,11 @@ void PyModuleHelper::internalActivate( SUIT_Study* study ) // get study Id LightApp_Study* aStudy = dynamic_cast( study ); - int aStudyId = aStudy ? aStudy->id() : 0; + if ( !aStudy ) + return; // initialize Python subinterpreter (on per study) and put it in variable - initInterp( aStudyId ); + initInterp(); if ( !myInterp ) { myLastActivateStatus = false; return; // Error @@ -2058,10 +2039,11 @@ void PyModuleHelper::internalCustomize( SUIT_Study* study ) // get study Id LightApp_Study* aStudy = dynamic_cast( study ); - int aStudyId = aStudy ? aStudy->id() : 0; + if ( !aStudy ) + return; // initialize Python subinterpreter (on per study) and put it in variable - initInterp( aStudyId ); + initInterp(); if ( !myInterp ) { myLastActivateStatus = false; return; // Error @@ -2101,7 +2083,7 @@ void PyModuleHelper::internalCustomize( SUIT_Study* study ) \param study parent study */ -void PyModuleHelper::internalDeactivate( SUIT_Study* study ) +void PyModuleHelper::internalDeactivate( SUIT_Study* /*study*/ ) { FuncMsg fmsg( "--- PyModuleHelper::internalDeactivate()" ); @@ -2134,7 +2116,8 @@ void PyModuleHelper::internalClosedStudy( SUIT_Study* theStudy ) // Get study Id // get study Id LightApp_Study* aStudy = dynamic_cast( theStudy ); - int aStudyId = aStudy ? aStudy->id() : 0; + if ( !aStudy ) + return; // check that Python subinterpreter is initialized and Python module is imported if ( !myInterp || !myPyModule ) { @@ -2143,7 +2126,7 @@ void PyModuleHelper::internalClosedStudy( SUIT_Study* theStudy ) } // then call Python module's deactivate() method if ( PyObject_HasAttrString( myPyModule , (char*)"closeStudy" ) ) { - PyObjWrapper res( PyObject_CallMethod( myPyModule, (char*)"closeStudy", (char*)"i", aStudyId ) ); + PyObjWrapper res( PyObject_CallMethod( myPyModule, (char*)"closeStudy", (char*)"" ) ); if( !res ) { PyErr_Print(); } @@ -2176,8 +2159,8 @@ void PyModuleHelper::internalPreferencesChanged( const QString& section, const Q PyObjWrapper res( PyObject_CallMethod( myPyModule, (char*)"preferenceChanged", (char*)"ss", - section.toLatin1().constData(), - setting.toLatin1().constData() ) ); + section.toUtf8().constData(), + setting.toUtf8().constData() ) ); if( !res ) { PyErr_Print(); } @@ -2202,12 +2185,11 @@ void PyModuleHelper::internalStudyChanged( SUIT_Study* study ) // get study Id LightApp_Study* aStudy = dynamic_cast( study ); - int id = aStudy ? aStudy->id() : 0; - - fmsg.message( QString( "study id = %1" ).arg( id ) ); + if ( !aStudy ) + return; // initialize Python subinterpreter (on per study) and put it in variable - initInterp( id ); + initInterp(); if ( !myInterp ) return; // Error @@ -2224,7 +2206,7 @@ void PyModuleHelper::internalStudyChanged( SUIT_Study* study ) // call Python module's activeStudyChanged() method if ( PyObject_HasAttrString( myPyModule, (char*)"activeStudyChanged" ) ) { - PyObjWrapper res( PyObject_CallMethod( myPyModule, (char*)"activeStudyChanged", (char*)"i", id ) ); + PyObjWrapper res( PyObject_CallMethod( myPyModule, (char*)"activeStudyChanged", (char*)"" ) ); if( !res ) { PyErr_Print(); } @@ -2278,11 +2260,12 @@ void PyModuleHelper::internalSelectionUpdated(const QStringList& entries) QStringList* theList = new QStringList(entries); -#if SIP_VERSION < 0x040800 - PyObjWrapper sipList(sipBuildResult(0, "M", theList, sipClass_QStringList)); -#else - PyObjWrapper sipList( sipBuildResult( 0, "D", theList, sipType_QStringList, NULL ) ); +#if SIP_VERSION >= 0x041300 + static const sipTypeDef *sipType_QStringList = 0; + if (!sipType_QStringList) + sipType_QStringList = sipFindType("QStringList"); #endif + PyObjWrapper sipList( sipBuildResult( 0, "D", theList, sipType_QStringList, NULL ) ); if (PyObject_HasAttrString(myPyModule, (char*) "onSelectionUpdated")) { MESSAGE("call onSelectionUpdated"); @@ -2329,9 +2312,9 @@ void PyModuleHelper::internalContextMenu( const QString& context, QMenu* menu ) PyObjWrapper res( PyObject_CallMethod( myPyModule, (char*)"definePopup", (char*)"sss", - context.toLatin1().constData(), - aObject.toLatin1().constData(), - aParent.toLatin1().constData() ) ); + context.toUtf8().constData(), + aObject.toUtf8().constData(), + aParent.toUtf8().constData() ) ); if( !res ) { PyErr_Print(); } @@ -2351,11 +2334,12 @@ void PyModuleHelper::internalContextMenu( const QString& context, QMenu* menu ) if ( myXmlHandler ) myXmlHandler->createPopup( menu, aContext, aParent, aObject ); -#if SIP_VERSION < 0x040800 - PyObjWrapper sipPopup( sipBuildResult( 0, "M", menu, sipClass_QMenu ) ); -#else - PyObjWrapper sipPopup( sipBuildResult( 0, "D", menu, sipType_QMenu, NULL ) ); +#if SIP_VERSION >= 0x041300 + static const sipTypeDef *sipType_QMenu = 0; + if (!sipType_QMenu) + sipType_QMenu = sipFindType("QMenu"); #endif + PyObjWrapper sipPopup( sipBuildResult( 0, "D", menu, sipType_QMenu, NULL ) ); // then call Python module's createPopupMenu() method (for new modules) if ( PyObject_HasAttrString( myPyModule, (char*)"createPopupMenu" ) ) { @@ -2363,7 +2347,7 @@ void PyModuleHelper::internalContextMenu( const QString& context, QMenu* menu ) (char*)"createPopupMenu", (char*)"Os", sipPopup.get(), - context.toLatin1().constData() ) ); + context.toUtf8().constData() ) ); if( !res1 ) { PyErr_Print(); } @@ -2376,9 +2360,9 @@ void PyModuleHelper::internalContextMenu( const QString& context, QMenu* menu ) (char*)"customPopup", (char*)"Osss", sipPopup.get(), - aContext.toLatin1().constData(), - aObject.toLatin1().constData(), - aParent.toLatin1().constData() ) ); + aContext.toUtf8().constData(), + aObject.toUtf8().constData(), + aParent.toUtf8().constData() ) ); if( !res2 ) { PyErr_Print(); } @@ -2522,12 +2506,12 @@ void PyModuleHelper::internalSave( QStringList& files, const QString& url ) // try with two parameters (new syntax) PyObjWrapper res( PyObject_CallMethod( myPyModule, (char*)"saveFiles", (char*)"ss", - files.first().toLatin1().constData(), - url.toLatin1().constData() ) ); + files.first().toUtf8().constData(), + url.toUtf8().constData() ) ); if ( !res ) // try with single parameter (old syntax) res = PyObject_CallMethod( myPyModule, (char*)"saveFiles", - (char*)"s", files.first().toLatin1().constData() ); + (char*)"s", files.first().toUtf8().constData() ); if ( !res ) { PyErr_Print(); @@ -2571,17 +2555,18 @@ void PyModuleHelper::internalLoad( const QStringList& files, const QString& url, QStringList* theList = new QStringList( files ); -#if SIP_VERSION < 0x040800 - PyObjWrapper sipList( sipBuildResult( 0, "M", theList, sipClass_QStringList ) ); -#else - PyObjWrapper sipList( sipBuildResult( 0, "D", theList, sipType_QStringList, NULL ) ); +#if SIP_VERSION >= 0x041300 + static const sipTypeDef *sipType_QStringList = 0; + if (!sipType_QStringList) + sipType_QStringList = sipFindType("QStringList"); #endif + PyObjWrapper sipList( sipBuildResult( 0, "D", theList, sipType_QStringList, NULL ) ); if ( PyObject_HasAttrString(myPyModule , (char*)"openFiles") ) { // try with two parameters (new syntax) PyObjWrapper res( PyObject_CallMethod( myPyModule, (char*)"openFiles", (char*)"Os", sipList.get(), - url.toLatin1().constData() ) ); + url.toUtf8().constData() ) ); if ( !res ) // try with single parameter (old syntax) @@ -2615,7 +2600,7 @@ void PyModuleHelper::internalDumpPython( QStringList& files ) if ( PyObject_HasAttrString(myPyModule, (char*)"dumpStudy") ) { PyObjWrapper res( PyObject_CallMethod( myPyModule, (char*)"dumpStudy", - (char*)"s", files.first().toLatin1().constData())); + (char*)"s", files.first().toUtf8().constData())); if ( !res ) { PyErr_Print(); @@ -2661,7 +2646,7 @@ bool PyModuleHelper::internalIsDraggable( LightApp_DataObject* what ) if ( PyObject_HasAttrString(myPyModule , (char*)"isDraggable") ) { PyObjWrapper res( PyObject_CallMethod( myPyModule, (char*)"isDraggable", - (char*)"s", what->entry().toLatin1().constData() ) ); + (char*)"s", what->entry().toUtf8().constData() ) ); if( !res || !PyBool_Check( res )) { PyErr_Print(); draggable = false; @@ -2693,7 +2678,7 @@ bool PyModuleHelper::internalIsDropAccepted( LightApp_DataObject* where ) if ( PyObject_HasAttrString(myPyModule , (char*)"isDropAccepted") ) { PyObjWrapper res( PyObject_CallMethod( myPyModule, (char*)"isDropAccepted", - (char*)"s", where->entry().toLatin1().constData() ) ); + (char*)"s", where->entry().toUtf8().constData() ) ); if( !res || !PyBool_Check( res )) { PyErr_Print(); dropAccepted = false; @@ -2734,15 +2719,16 @@ void PyModuleHelper::internalDropObjects( const DataObjectList& what, SUIT_DataO if ( dataObject ) theList->append( dataObject->entry() ); } -#if SIP_VERSION < 0x040800 - PyObjWrapper sipList( sipBuildResult( 0, "M", theList, sipClass_QStringList) ); -#else - PyObjWrapper sipList( sipBuildResult( 0, "D", theList, sipType_QStringList, NULL) ); +#if SIP_VERSION >= 0x041300 + static const sipTypeDef *sipType_QStringList = 0; + if (!sipType_QStringList) + sipType_QStringList = sipFindType("QStringList"); #endif + PyObjWrapper sipList( sipBuildResult( 0, "D", theList, sipType_QStringList, NULL) ); if ( PyObject_HasAttrString(myPyModule, (char*)"dropObjects") ) { PyObjWrapper res( PyObject_CallMethod( myPyModule, (char*)"dropObjects", (char*)"Osii", sipList.get(), - whereObject->entry().toLatin1().constData(), + whereObject->entry().toUtf8().constData(), row, action ) ); if( !res ) { @@ -2830,7 +2816,7 @@ void PyModuleHelper::internalOBClickedPython( const QString& theObj, int theColu return; // Error if ( PyObject_HasAttrString( myPyModule, (char*)"onObjectBrowserClicked" ) ) { - PyObjWrapper res( PyObject_CallMethod( myPyModule, (char*)"onObjectBrowserClicked", (char*)"si", theObj.toLatin1().constData(), theColumn ) ); + PyObjWrapper res( PyObject_CallMethod( myPyModule, (char*)"onObjectBrowserClicked", (char*)"si", theObj.toUtf8().constData(), theColumn ) ); if( !res ) { PyErr_Print(); } @@ -2868,8 +2854,8 @@ void PyModuleHelper::onObjectBrowserClicked(SUIT_DataObject* theObj, int theColu } private: PyModuleHelper* myHelper; - int myColumn; QString myEntry; + int myColumn; }; // Posting the request only if dispatcher is not busy!