+// ===================== Implements PluginInterface =========================
+bool MainWindow::setGui(QWidget* widget, PluginWidgetType type)
+{
+#ifdef QTRAPIDS_DEBUG
+ qDebug() << "MainWindow::setGui():" << dlView_->currentItem();
+#endif
+ tabWidget_->addTab(widget, tr("Search"));
+ return true;
+}
+
+/// @todo Add PluginInterface parameter check which plugin gives the widget to handle appropriately
+void MainWindow::addPluginWidget(QWidget* widget, PluginWidgetType type)
+{
+#ifdef QTRAPIDS_DEBUG
+ qDebug() << "MainWindow::addPluginWidget():" << dlView_->currentItem();
+#endif
+
+ if (type == qtrapids::PluginHostInterface::TAB_PAGE) {
+ int index = tabWidget_->addTab(widget, tr("Test"));
+ tabWidget_->setCurrentIndex(index);
+ //layout_->addWidget(widget);
+ }
+}
+void MainWindow::addToolbar(QWidget* widget, PluginWidgetType type)
+{
+}
+
+void MainWindow::addToolItem(QWidget* widget, PluginWidgetType type)
+{
+}
+
+void MainWindow::addMenu(QWidget* widget, PluginWidgetType type)
+{
+}
+
+void MainWindow::addMenuItem(QWidget* widget, PluginWidgetType type)
+{
+}
+
+//=========================== PRIVATE ================================
+
+void MainWindow::LoadPlugins()
+{
+ /// @todo get plugin directory from settings or go through multiple diectories
+ /// Now we only check the application directory
+ pluginsDir_ = QDir(qApp->applicationDirPath());
+ pluginsDir_.cd("plugins");
+ QStringList nameFilters;
+ nameFilters << "*.so";
+
+ foreach (QString fileName, pluginsDir_.entryList(nameFilters, QDir::Files)) {
+ QPluginLoader pluginLoader(pluginsDir_.absoluteFilePath(fileName));
+
+ if (!QLibrary::isLibrary(fileName)) {
+ qDebug() << fileName << " not a library";
+ }
+
+ if (pluginLoader.load()) {
+ qDebug() << "Plugin loaded: " << fileName;
+ } else {
+ qDebug() << "Plugin load failed: " << pluginLoader.errorString();
+ }
+
+ QObject *baseInstance = pluginLoader.instance();
+ if (!baseInstance) {
+ qDebug() << "Base instance = NULL.";
+ }
+
+ qtrapids::PluginInterface *plugin = qobject_cast<qtrapids::PluginInterface*>(baseInstance);
+
+ if (!plugin) {
+ qDebug() << "Cast failed.";
+ } else {
+ plugin->initialize(this);
+ pluginFileNames_ += fileName;
+ }
+ }
+}
+