-// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
#include <SALOME_LifeCycleCORBA.hxx>
#include <Container_init_python.hxx>
+#include <QCoreApplication>
+
//
// NB: Python requests.
// General rule for Python requests created by Python-based GUI modules
// and to get C API from sip : sipBuildResult for example
//
-#define INIT_FUNCTION initSalomePyQtGUILight
+#define INIT_FUNCTION PyInit_SalomePyQtGUILight
#if defined(SIP_STATIC_MODULE)
extern "C" void INIT_FUNCTION();
#else
extern "C" {
SALOME_PYQT_EXPORT CAM_Module* createModule()
{
- static bool alreadyInitialized = false;
+ QCoreApplication* app = QCoreApplication::instance();
+ bool alreadyInitialized = app && app->property( "salome_pyqt_gui_light_initialized" ).toBool();
if ( !alreadyInitialized ) {
- // call only once (see comment above) !
- PyEval_RestoreThread( KERNEL_PYTHON::_gtstate);
+ PyLockWrapper lck; // GIL acquisition
INIT_FUNCTION();
- PyEval_ReleaseThread( KERNEL_PYTHON::_gtstate);
- alreadyInitialized = !alreadyInitialized;
+ if ( app ) app->setProperty( "salome_pyqt_gui_light_initialized", true );
}
return new SALOME_PYQT_Module();
This function tries to get engine IOR from the Python module using engineIOR() function.
That function can load module engine using appropriate container if required.
If this function is not available in Python module, the default implementation
- is used which loads engine to the default FactoryServerPy container.
+ is used which loads engine to the default FactoryServer container.
*/
QString SALOME_PYQT_Module::engineIOR() const
{
- // call helper to get IOR from Python module
- static QString ior;
+ // first call helper to get IOR from Python module
+ QString ior = myHelper->engineIOR();
+ // if IOR is still not specified, try default implementation
+ // which loads engine to the default FactoryServer container.
if ( ior.isEmpty() ) {
- // first call helper to get IOR from Python module
- ior = myHelper->engineIOR();
- }
- if ( ior.isEmpty() ) {
- // if IOR is still not specified, try default implementation
- // which loads engine to the default FactoryServerPy container.
Engines::EngineComponent_var comp;
// temporary solution
try {
- comp = getApp()->lcc()->FindOrLoad_Component( "FactoryServerPy", name().toLatin1() );
+ comp = getApp()->lcc()->FindOrLoad_Component( "FactoryServer", name().toLatin1() );
}
catch (CORBA::Exception&) {
}
myHelper->preferencesChanged( section, parameter );
}
+/*!
+ \brief Called when study is closed
+ \param study study being closed
+ \sa PyModuleHelper::studyClosed()
+*/
+void SALOME_PYQT_Module::studyClosed( SUIT_Study* study )
+{
+ // call helper
+ myHelper->modelClosed( study );
+ SalomeApp_Module::studyClosed( study );
+}
+
/*!
\brief Test if object \a what can be dragged by the user.
\param what data object being tested