-Code formatted
[qtrapids] / src / gui / MainWindow.cpp
index 4d47618..35ee2da 100644 (file)
@@ -26,6 +26,8 @@
 #include <QAction>
 #include <QFileDialog>
 #include <QMessageBox>
+#include <QApplication>
+
 
 #include "DownloadView.h"
 #include "SeedView.h"
@@ -38,10 +40,9 @@ const QString ABOUT_TEXT
                           "\nQt and Libtorrent."
                           "\n\nURL: http://qtrapids.garage.maemo.org/"
                           "\n\nAuthors:\nLassi Väätämöinen, lassi.vaatamoinen@ixonos.com"
-                          "\nDenis Zalievsky, denis.zalewsky@ixonos.com"
+                          "\nDenis Zalevskiy, denis.zalewsky@ixonos.com"
                           "\n\nIxonos Plc, Finland\n"));
 
-
 // Consturctor
 MainWindow::MainWindow():
         QMainWindow(), // Superclass
@@ -81,6 +82,7 @@ MainWindow::MainWindow():
 
     // TABWIDGET (central widget)
     tabWidget_ = new QTabWidget();
+    tabWidget_->setTabsClosable(true);
 
     /// @todo Exception handling
     dlView_ = new DownloadView(this);
@@ -110,6 +112,8 @@ MainWindow::MainWindow():
 
     connect(&btSession_, SIGNAL(alert(std::auto_ptr<Alert>)),
             this, SLOT(on_alert(std::auto_ptr<Alert>)));
+
+    LoadPlugins();
 }
 
 
@@ -117,6 +121,106 @@ MainWindow::~MainWindow()
 {
 }
 
+// ===================== Implements PluginInterface =========================
+bool MainWindow::setGui(qtrapids::PluginInterface* from, QWidget* widget)
+{
+#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(qtrapids::PluginInterface* from, QWidget* widget)
+{
+#ifdef QTRAPIDS_DEBUG
+    qDebug() << "MainWindow::addPluginWidget():" << dlView_->currentItem();
+#endif
+
+    int index = tabWidget_->addTab(widget, tr("Test"));
+    tabWidget_->setCurrentIndex(index);
+    //layout_->addWidget(widget);
+}
+
+void MainWindow::addToolbar(qtrapids::PluginInterface* from, QWidget* widget)
+{
+}
+
+void MainWindow::addToolItem(qtrapids::PluginInterface* from, QWidget* widget)
+{
+}
+
+void MainWindow::addMenu(qtrapids::PluginInterface* from, QWidget* widget)
+{
+}
+
+void MainWindow::addMenuItem(qtrapids::PluginInterface* from, QWidget* widget)
+{
+}
+
+//=========================== 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;
+        }
+
+//             QObject *plugin = pluginLoader.instance();
+//             if (plugin) {
+//                             populateMenus(plugin);
+//                             pluginFileNames += fileName;
+//             }
+
+    }
+
+    //pluginLoader_.setFileName("../libsearchplugin.so");
+
+
+
+
+}
+
 // =========================== SLOTS =================================
 void MainWindow::on_openAction_clicked()
 {
@@ -234,8 +338,6 @@ void MainWindow::on_torrentFileSelected(const QString& file)
 
 void MainWindow::on_alert(std::auto_ptr<Alert> al)
 {
-
-
     if (al.get() != NULL)
     {
 //             qDebug()
@@ -252,9 +354,6 @@ void MainWindow::on_alert(std::auto_ptr<Alert> al)
         }
 
     }
-
-
-
 }
 
 /*