[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[vidalia-svn] r3872: Changed the API a little bit. Added code for dynamic plugin (in vidalia/branches/extension-api/src: plugins/DashboardPlugin plugins/HomePlugin plugins/MessageLogPlugin plugins/NetworkMapPlugin vidalia)
Author: tyree731
Date: 2009-06-19 03:20:47 -0400 (Fri, 19 Jun 2009)
New Revision: 3872
Modified:
vidalia/branches/extension-api/src/plugins/DashboardPlugin/DashboardPlugin.cpp
vidalia/branches/extension-api/src/plugins/DashboardPlugin/DashboardPlugin.h
vidalia/branches/extension-api/src/plugins/HomePlugin/HomePlugin.cpp
vidalia/branches/extension-api/src/plugins/HomePlugin/HomePlugin.h
vidalia/branches/extension-api/src/plugins/MessageLogPlugin/MessageLogPlugin.cpp
vidalia/branches/extension-api/src/plugins/MessageLogPlugin/MessageLogPlugin.h
vidalia/branches/extension-api/src/plugins/NetworkMapPlugin/NetworkMapPlugin.cpp
vidalia/branches/extension-api/src/plugins/NetworkMapPlugin/NetworkMapPlugin.h
vidalia/branches/extension-api/src/vidalia/MainWindow.cpp
vidalia/branches/extension-api/src/vidalia/MainWindow.h
vidalia/branches/extension-api/src/vidalia/PluginManager.cpp
vidalia/branches/extension-api/src/vidalia/PluginManager.h
vidalia/branches/extension-api/src/vidalia/VidaliaPluginInterface.h
Log:
Changed the API a little bit. Added code for dynamic plugin stuff, though it is quite incomplete.
Modified: vidalia/branches/extension-api/src/plugins/DashboardPlugin/DashboardPlugin.cpp
===================================================================
--- vidalia/branches/extension-api/src/plugins/DashboardPlugin/DashboardPlugin.cpp 2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/plugins/DashboardPlugin/DashboardPlugin.cpp 2009-06-19 07:20:47 UTC (rev 3872)
@@ -24,5 +24,10 @@
{
}
+QString DashboardPlugin::pluginHumanName() const
+{
+ return QString("Dashboard");
+}
+
Q_EXPORT_PLUGIN2(dashboardplugin, DashboardPlugin)
Modified: vidalia/branches/extension-api/src/plugins/DashboardPlugin/DashboardPlugin.h
===================================================================
--- vidalia/branches/extension-api/src/plugins/DashboardPlugin/DashboardPlugin.h 2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/plugins/DashboardPlugin/DashboardPlugin.h 2009-06-19 07:20:47 UTC (rev 3872)
@@ -30,6 +30,7 @@
DashboardPlugin();
~DashboardPlugin();
+ QString pluginHumanName() const;
};
#endif
Modified: vidalia/branches/extension-api/src/plugins/HomePlugin/HomePlugin.cpp
===================================================================
--- vidalia/branches/extension-api/src/plugins/HomePlugin/HomePlugin.cpp 2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/plugins/HomePlugin/HomePlugin.cpp 2009-06-19 07:20:47 UTC (rev 3872)
@@ -24,5 +24,10 @@
{
}
+QString HomePlugin::pluginHumanName() const
+{
+ return QString("Home Panel");
+}
+
Q_EXPORT_PLUGIN2(homeplugin, HomePlugin)
Modified: vidalia/branches/extension-api/src/plugins/HomePlugin/HomePlugin.h
===================================================================
--- vidalia/branches/extension-api/src/plugins/HomePlugin/HomePlugin.h 2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/plugins/HomePlugin/HomePlugin.h 2009-06-19 07:20:47 UTC (rev 3872)
@@ -29,6 +29,8 @@
public:
HomePlugin();
~HomePlugin();
+
+ QString pluginHumanName() const;
};
#endif
Modified: vidalia/branches/extension-api/src/plugins/MessageLogPlugin/MessageLogPlugin.cpp
===================================================================
--- vidalia/branches/extension-api/src/plugins/MessageLogPlugin/MessageLogPlugin.cpp 2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/plugins/MessageLogPlugin/MessageLogPlugin.cpp 2009-06-19 07:20:47 UTC (rev 3872)
@@ -24,5 +24,10 @@
{
}
+QString MessageLogPlugin::pluginHumanName() const
+{
+ return QString("Message Log");
+}
+
Q_EXPORT_PLUGIN2(messagelogplugin, MessageLogPlugin)
Modified: vidalia/branches/extension-api/src/plugins/MessageLogPlugin/MessageLogPlugin.h
===================================================================
--- vidalia/branches/extension-api/src/plugins/MessageLogPlugin/MessageLogPlugin.h 2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/plugins/MessageLogPlugin/MessageLogPlugin.h 2009-06-19 07:20:47 UTC (rev 3872)
@@ -30,6 +30,7 @@
MessageLogPlugin();
~MessageLogPlugin();
+ QString pluginHumanName() const;
};
#endif
Modified: vidalia/branches/extension-api/src/plugins/NetworkMapPlugin/NetworkMapPlugin.cpp
===================================================================
--- vidalia/branches/extension-api/src/plugins/NetworkMapPlugin/NetworkMapPlugin.cpp 2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/plugins/NetworkMapPlugin/NetworkMapPlugin.cpp 2009-06-19 07:20:47 UTC (rev 3872)
@@ -24,5 +24,10 @@
{
}
+QString NetworkMapPlugin::pluginHumanName() const
+{
+ return QString("Network Map");
+}
+
Q_EXPORT_PLUGIN2(networkmapplugin, NetworkMapPlugin)
Modified: vidalia/branches/extension-api/src/plugins/NetworkMapPlugin/NetworkMapPlugin.h
===================================================================
--- vidalia/branches/extension-api/src/plugins/NetworkMapPlugin/NetworkMapPlugin.h 2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/plugins/NetworkMapPlugin/NetworkMapPlugin.h 2009-06-19 07:20:47 UTC (rev 3872)
@@ -30,6 +30,7 @@
NetworkMapPlugin();
~NetworkMapPlugin();
+ QString pluginHumanName() const;
};
#endif
Modified: vidalia/branches/extension-api/src/vidalia/MainWindow.cpp
===================================================================
--- vidalia/branches/extension-api/src/vidalia/MainWindow.cpp 2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/vidalia/MainWindow.cpp 2009-06-19 07:20:47 UTC (rev 3872)
@@ -107,6 +107,10 @@
ui.setupUi(this);
+ /* Creates the plugin manager and load relevant plugins */
+ _pluginManager = new PluginManager();
+ _pluginManager->loadPlugins("","");
+
/* Create all the dialogs of which we only want one instance */
_messageLog = new MessageLog();
_bandwidthGraph = new BandwidthGraph();
@@ -131,8 +135,6 @@
_status = Unset;
_isVidaliaRunningTor = false;
updateTorStatus(Stopped);
- /* Load all included plugins */
- loadPlugins();
/* Make the layout flush with the window */
setContentsMargins(-12, -12, -12, -12);
@@ -227,6 +229,7 @@
delete _messageLog;
delete _dashboard;
delete _homePanel;
+ delete _pluginManager;
delete _bandwidthGraph;
delete _netViewer;
delete _configDialog;
@@ -635,28 +638,6 @@
_browserProcess->start(browserExecutable, commandLine);
}
-/** Searches for and loads both statically linked and dynamically linked
- * plugins */
-void
-MainWindow::loadPlugins()
-{
- foreach (QObject *plugin, QPluginLoader::staticInstances())
- ; // handle the plugin
-/** Don't load dynamic plugins just yet */
-#if 0
- QDir pluginsDir = QDir(qApp->applicationDirPath());
-
- foreach (QString fileName, pluginsDir.entryList(QDir::Files)) {
- QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
- QObject *plugin = loader.instance();
- if (plugin) {
- ; // handle the plugin
- }
- }
-#endif
- // Do stuff
-}
-
/** Starts the web browser and IM client, if appropriately configured */
void
MainWindow::startSubprocesses()
Modified: vidalia/branches/extension-api/src/vidalia/MainWindow.h
===================================================================
--- vidalia/branches/extension-api/src/vidalia/MainWindow.h 2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/vidalia/MainWindow.h 2009-06-19 07:20:47 UTC (rev 3872)
@@ -23,6 +23,7 @@
#include "VidaliaWindow.h"
#include "HelperProcess.h"
#include "TrayIcon.h"
+#include "PluginManager.h"
#include "AboutDialog.h"
#include "MessageLog.h"
#include "BandwidthGraph.h"
@@ -242,6 +243,8 @@
NetViewer* _netViewer;
/** A ConfigDialog object which lets the user configure Tor and Vidalia */
ConfigDialog* _configDialog;
+ /** A Plugin Manager object which loads and manages Vidalia Plugins. */
+ PluginManager* _pluginManager;
/** A TorControl object that handles communication with Tor */
TorControl* _torControl;
/** A HelperProcess object that manages the web browser */
Modified: vidalia/branches/extension-api/src/vidalia/PluginManager.cpp
===================================================================
--- vidalia/branches/extension-api/src/vidalia/PluginManager.cpp 2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/vidalia/PluginManager.cpp 2009-06-19 07:20:47 UTC (rev 3872)
@@ -16,11 +16,65 @@
#include "PluginManager.h"
-PluginManager::PluginManager() {
+#include <QDir>
+#include <QPluginLoader>
+#include <QStringList>
+
+PluginManager::PluginManager()
+{
}
-PluginManager::~PluginManager() {
+PluginManager::~PluginManager()
+{
}
-void PluginManager::loadPlugins() {
+void PluginManager::loadPlugins(QString applicationDirectory,
+ QString dataDirectory)
+{
+ foreach (QObject *plugin, QPluginLoader::staticInstances()) {
+ VidaliaPluginInterface* pluginInstance =
+ qobject_cast<VidaliaPluginInterface*>(plugin);
+ if (pluginInstance) {
+ _pluginList.push_back(pluginInstance);
+ }
+ else {
+ /** Invalid plugin type? */
+ }
+ }
+
+ QDir dataPluginsDir = QDir(dataDirectory);
+ QDir applicationPluginsDir = QDir(applicationDirectory);
+#if defined(Q_OS_WIN)
+#elif defined(Q_OS_OSX)
+ applicationPluginsDir.cdup();
+ applicationPluginsDir.cd("Resources");
+#else
+ // *nix's
+#endif
+ applicationPluginsDir.cd("Plugins");
+
+ /** I'll fix the copy-paste later. */
+ foreach (QString fileName, applicationPluginsDir.entryList(QDir::Files)) {
+ QPluginLoader loader(applicationPluginsDir.absoluteFilePath(fileName));
+ VidaliaPluginInterface* pluginInstance =
+ qobject_cast<VidaliaPluginInterface*>(loader.instance());
+ if (pluginInstance) {
+ _pluginList.push_back(pluginInstance);
+ }
+ else {
+ /** Either not a plugin file or not a vidaliaplugininterface plugin */
+ }
+ }
+
+ foreach (QString fileName, dataPluginsDir.entryList(QDir::Files)) {
+ QPluginLoader loader(dataPluginsDir.absoluteFilePath(fileName));
+ VidaliaPluginInterface* pluginInstance =
+ qobject_cast<VidaliaPluginInterface*>(loader.instance());
+ if (pluginInstance) {
+ _pluginList.push_back(pluginInstance);
+ }
+ else {
+ /** Either not a plugin file or not a vidaliaplugininterface plugin */
+ }
+ }
}
Modified: vidalia/branches/extension-api/src/vidalia/PluginManager.h
===================================================================
--- vidalia/branches/extension-api/src/vidalia/PluginManager.h 2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/vidalia/PluginManager.h 2009-06-19 07:20:47 UTC (rev 3872)
@@ -14,22 +14,17 @@
** \brief Class for loading and managing plugins within Vidalia.
*/
-#include <QMap>
+#include <QList>
+#include <QObject>
#include <QString>
#include "VidaliaPluginInterface.h"
-/** Define platform-dependent location of plugins. */
-#if defined(Q_OS_WIN)
-#endif
-#if defined(Q_OS_MAC)
-#endif
-
/** Class for the loading and managing of dynamic and static plugins from within
* Vidalia. Provides an interface for plugins to interact with the Vidalia
* application as well providing a number of useful functions for interplugin
* communication. */
-class PluginManager
+class PluginManager : public QObject
{
public:
/** PluginManager constructor. */
@@ -37,7 +32,7 @@
/** PluginManager destructor. */
~PluginManager();
/** Loads all included static and dynamic plugins. */
- void loadPlugins();
+ void loadPlugins(QString applicationDirectory, QString dataDirectory);
private:
- QMap<QString,VidaliaPluginInterface*> pluginMap;
+ QList<VidaliaPluginInterface*> _pluginList;
};
Modified: vidalia/branches/extension-api/src/vidalia/VidaliaPluginInterface.h
===================================================================
--- vidalia/branches/extension-api/src/vidalia/VidaliaPluginInterface.h 2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/vidalia/VidaliaPluginInterface.h 2009-06-19 07:20:47 UTC (rev 3872)
@@ -47,8 +47,10 @@
virtual ConfigPage* preferenceMenuEntry() const { return 0; }
/** Virtual function to allow for UI retranslation. */
virtual void retranslateUI() {}
+ /** Virtual function to return a human readable name for a plugin. */
+ virtual QString pluginHumanName() const = 0;
/** Virtual function to return a plugin's description. */
- virtual QString description() { return QString(""); }
+ virtual QString pluginDescription() const { return QString(""); }
};
Q_DECLARE_INTERFACE(VidaliaPluginInterface,