Browse Source

Merge branch 'add-python-manager-initialize-method'

* add-python-manager-initialize-method:
  Simplify API adding convenience initialize method to python manager
Jean-Christophe Fillion-Robin 13 years ago
parent
commit
0984ce5bfe

+ 8 - 0
Libs/Scripting/Python/Core/Testing/Cpp/ctkAbstractPythonManagerTest.cpp

@@ -26,6 +26,8 @@ private Q_SLOTS:
   void testPythonErrorOccured();
   void testPythonErrorOccured_data();
 
+  void testInitialize();
+
   void testMainContext();
 
   void testAddObjectToPythonMain();
@@ -70,6 +72,12 @@ void ctkAbstractPythonManagerTester::testSetInitializationFlags()
 }
 
 // ----------------------------------------------------------------------------
+void ctkAbstractPythonManagerTester::testInitialize()
+{
+  QVERIFY(this->PythonManager.initialize());
+}
+
+// ----------------------------------------------------------------------------
 void ctkAbstractPythonManagerTester::testMainContext()
 {
   QVERIFY(this->PythonManager.mainContext());

+ 9 - 2
Libs/Scripting/Python/Core/ctkAbstractPythonManager.cpp

@@ -109,14 +109,21 @@ int ctkAbstractPythonManager::initializationFlags()const
 }
 
 //-----------------------------------------------------------------------------
-PythonQtObjectPtr ctkAbstractPythonManager::mainContext()
+bool ctkAbstractPythonManager::initialize()
 {
   Q_D(ctkAbstractPythonManager);
   if (!PythonQt::self())
     {
     this->initPythonQt(d->PythonQtInitializationFlags);
     }
-  if (PythonQt::self())
+  return this->isPythonInitialized();
+}
+
+//-----------------------------------------------------------------------------
+PythonQtObjectPtr ctkAbstractPythonManager::mainContext()
+{
+  bool initalized = this->initialize();
+  if (initalized)
     {
     return PythonQt::self()->getMainModule();
     }

+ 9 - 0
Libs/Scripting/Python/Core/ctkAbstractPythonManager.h

@@ -51,7 +51,16 @@ public:
   /// \sa setInitializationFlags
   int initializationFlags()const;
 
+  /// Initialize python context considering the initializationFlags.
+  /// Return \a True if python has been successfully initialized.
+  /// \sa setInitializationFlags, mainContext, isPythonInitialized
+  /// \sa preInitialization, executeInitializationScripts, pythonPreInitialized, pythonInitialized
+  bool initialize();
+
+  /// Return a reference to the python main context.
+  /// Calling this function implicitly call initialize() if it hasn't been done.
   PythonQtObjectPtr mainContext();
+
   void addObjectToPythonMain(const QString& name, QObject* obj);
   void registerPythonQtDecorator(QObject* decorator);
   void registerClassForPythonQt(const QMetaObject* metaobject);