From cce93731691332406ce7f5141a7fe15efed2fe44 Mon Sep 17 00:00:00 2001 From: Rainer Keller Date: Fri, 20 May 2011 10:42:59 +0200 Subject: Add plugin support Reviewed-by: ckamm Task-number: QTSIM-161 --- src/ui/mainwindow.cpp | 42 ++++++++++++++++++++++++++++++++++++++++++ src/ui/mainwindow.h | 1 + src/ui/viewui.cpp | 2 +- src/ui/viewui.h | 2 +- 4 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index 3e07a7e..6ac29f8 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -64,6 +64,7 @@ #include #include #include +#include #include #include @@ -79,6 +80,7 @@ #include #include #include +#include #if defined(Q_WS_X11) #include @@ -317,6 +319,8 @@ MainWindow::MainWindow(QWidget *parent) config->setWindowFlags(Qt::Tool); + loadPlugins(); + // read settings QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName()); mTouchUi->readSettings(settings); @@ -622,3 +626,41 @@ QString MainWindow::userResourcePath() const return urp; } + +void MainWindow::loadPlugins() +{ + // NOTE: static plugins are not supported + + QDir pluginsDir = QDir(qApp->applicationDirPath()); + +#if defined(Q_OS_WIN) + if (pluginsDir.dirName().toLower() == "debug" || pluginsDir.dirName().toLower() == "release") + pluginsDir.cdUp(); +#elif defined(Q_OS_MAC) + if (pluginsDir.dirName() == "MacOS") { + pluginsDir.cdUp(); + pluginsDir.cdUp(); + pluginsDir.cdUp(); + } +#endif + pluginsDir.cd("plugins"); + pluginsDir.cd("simulator"); + + foreach (QString fileName, pluginsDir.entryList(QDir::Files)) { + QPluginLoader loader(pluginsDir.absoluteFilePath(fileName)); + QObject *plugin = loader.instance(); + if (plugin) { + PluginInterface *pi = qobject_cast(plugin); + if (pi) { + foreach (ToolBoxPage *tbp, pi->pages(this)) { + config->addPage(tbp); + + QString name = tbp->scriptInterfaceName(); + QObject *obj = tbp->scriptInterface(); + if ( obj && !name.isEmpty() ) + scriptAdapter->addScriptInterface(name, obj); + } + } + } + } +} diff --git a/src/ui/mainwindow.h b/src/ui/mainwindow.h index 94dcb77..04d6f8c 100644 --- a/src/ui/mainwindow.h +++ b/src/ui/mainwindow.h @@ -85,6 +85,7 @@ private: void writeSettings(QSettings &) const; void readSettings(QSettings &); void setupScriptDirectories(ScriptUi *ui, FavoriteScriptButton *button); + void loadPlugins(); private: QGraphicsView *view; diff --git a/src/ui/viewui.cpp b/src/ui/viewui.cpp index 8fbf029..ac3fef9 100644 --- a/src/ui/viewui.cpp +++ b/src/ui/viewui.cpp @@ -264,7 +264,7 @@ void ViewUi::changeOrientation(int orientation) emit orientationChangeRequested(static_cast(orientation), ui_inspector->rotateScreen->isChecked()); } -ViewScriptInterface *ViewUi::scriptInterface() const +QObject *ViewUi::scriptInterface() const { return mScriptInterface; } diff --git a/src/ui/viewui.h b/src/ui/viewui.h index d302541..461624a 100644 --- a/src/ui/viewui.h +++ b/src/ui/viewui.h @@ -52,7 +52,7 @@ public: int currentDeviceIndex() const; void initializeSelection(); bool initializeDeviceList(); - ViewScriptInterface * scriptInterface() const; + QObject * scriptInterface() const; void writeSettings(QSettings &) const; void readSettings(QSettings &); -- cgit v1.2.3