diff --git a/include/gepetto/gui/pythonwidget.hh b/include/gepetto/gui/pythonwidget.hh index 1c8e4dd14f09647d0941f776854483e2d841426b..53f5887d703ed89f53eda3d7d05e8e097364fee9 100644 --- a/include/gepetto/gui/pythonwidget.hh +++ b/include/gepetto/gui/pythonwidget.hh @@ -98,8 +98,10 @@ namespace gepetto { /// class PythonQt.QtGui.QDockWidget void loadModulePlugin(QString moduleName); void unloadModulePlugin(QString moduleName); + void loadScriptPlugin(QString moduleName, QString fileName); private: + void loadPlugin(QString moduleName, PythonQtObjectPtr module); void unloadModulePlugin(PythonQtObjectPtr module); void addSignalHandlersToPlugin(PythonQtObjectPtr plugin); diff --git a/src/gui/pythonwidget.cc b/src/gui/pythonwidget.cc index caf1a6ace32f418f64d9c33590f3183314e39e77..cd95e9aede06ed02d0cc0a5e153c23856d57f246 100644 --- a/src/gui/pythonwidget.cc +++ b/src/gui/pythonwidget.cc @@ -95,9 +95,24 @@ namespace gepetto { fd->deleteLater(); } + void PythonWidget::loadScriptPlugin(QString moduleName, QString fileName) + { + PythonQt* pqt = PythonQt::self(); + PythonQtObjectPtr module = pqt->createModuleFromFile (moduleName, fileName); + if (pqt->handleError()) { + return; + } + if (module.isNull()) { + pqt->handleError(); + qDebug() << "Enable to load module" << moduleName << "from script" + << fileName; + return; + } + loadPlugin (moduleName, module); + } + void PythonWidget::loadModulePlugin(QString moduleName) { - MainWindow* main = MainWindow::instance(); PythonQt* pqt = PythonQt::self(); PythonQtObjectPtr module = pqt->importModule (moduleName); if (pqt->handleError()) { @@ -108,6 +123,13 @@ namespace gepetto { qDebug() << "Enable to load module" << moduleName; return; } + loadPlugin (moduleName, module); + } + + void PythonWidget::loadPlugin(QString moduleName, PythonQtObjectPtr module) + { + PythonQt* pqt = PythonQt::self(); + MainWindow* main = MainWindow::instance(); module.addObject("windowsManager", main->osg().get()); QString var = "pluginInstance"; diff --git a/src/gui/settings.cc b/src/gui/settings.cc index 7a80c37bdeae0e59878e6247107a2924ffbe755c..58af9e30677603b8ca484383c12776f925b5056f 100644 --- a/src/gui/settings.cc +++ b/src/gui/settings.cc @@ -176,8 +176,18 @@ namespace gepetto { pluginManager_.initPlugin (name); #if GEPETTO_GUI_HAS_PYTHONQT PythonWidget* pw = mw->pythonWidget(); - foreach (QString name, pyplugins_) - pw->loadModulePlugin (name); + foreach (QString name, pyplugins_) { + if (name.endsWith (".py")) { + QFileInfo fi (name); + QString moduleName = fi.baseName(); + QString script; + if (fi.isAbsolute()) script = name; + else script = QDir::currentPath() + QDir::separator() + name; + qDebug() << "Loading" << script << "into module" << moduleName; + pw->loadScriptPlugin (moduleName, script); + } else + pw->loadModulePlugin (name); + } #endif }